1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * NXP TDA10071 + Conexant CX24118A DVB-S/S2 demodulator + tuner driver
4 *
5 * Copyright (C) 2011 Antti Palosaari <crope@iki.fi>
6 */
7
8#include "tda10071_priv.h"
9
10static const struct dvb_frontend_ops tda10071_ops;
11
12/*
13 * XXX: regmap_update_bits() does not fit our needs as it does not support
14 * partially volatile registers. Also it performs register read even mask is as
15 * wide as register value.
16 */
17/* write single register with mask */
18static int tda10071_wr_reg_mask(struct tda10071_dev *dev,
19				u8 reg, u8 val, u8 mask)
20{
21	int ret;
22	u8 tmp;
23
24	/* no need for read if whole reg is written */
25	if (mask != 0xff) {
26		ret = regmap_bulk_read(dev->regmap, reg, &tmp, 1);
27		if (ret)
28			return ret;
29
30		val &= mask;
31		tmp &= ~mask;
32		val |= tmp;
33	}
34
35	return regmap_bulk_write(dev->regmap, reg, &val, 1);
36}
37
38/* execute firmware command */
39static int tda10071_cmd_execute(struct tda10071_dev *dev,
40	struct tda10071_cmd *cmd)
41{
42	struct i2c_client *client = dev->client;
43	int ret, i;
44	unsigned int uitmp;
45
46	if (!dev->warm) {
47		ret = -EFAULT;
48		goto error;
49	}
50
51	mutex_lock(&dev->cmd_execute_mutex);
52
53	/* write cmd and args for firmware */
54	ret = regmap_bulk_write(dev->regmap, 0x00, cmd->args, cmd->len);
55	if (ret)
56		goto error_mutex_unlock;
57
58	/* start cmd execution */
59	ret = regmap_write(dev->regmap, 0x1f, 1);
60	if (ret)
61		goto error_mutex_unlock;
62
63	/* wait cmd execution terminate */
64	for (i = 1000, uitmp = 1; i && uitmp; i--) {
65		ret = regmap_read(dev->regmap, 0x1f, &uitmp);
66		if (ret)
67			goto error_mutex_unlock;
68
69		usleep_range(200, 5000);
70	}
71
72	mutex_unlock(&dev->cmd_execute_mutex);
73	dev_dbg(&client->dev, "loop=%d\n", i);
74
75	if (i == 0) {
76		ret = -ETIMEDOUT;
77		goto error;
78	}
79
80	return ret;
81error_mutex_unlock:
82	mutex_unlock(&dev->cmd_execute_mutex);
83error:
84	dev_dbg(&client->dev, "failed=%d\n", ret);
85	return ret;
86}
87
88static int tda10071_set_tone(struct dvb_frontend *fe,
89	enum fe_sec_tone_mode fe_sec_tone_mode)
90{
91	struct tda10071_dev *dev = fe->demodulator_priv;
92	struct i2c_client *client = dev->client;
93	struct tda10071_cmd cmd;
94	int ret;
95	u8 tone;
96
97	if (!dev->warm) {
98		ret = -EFAULT;
99		goto error;
100	}
101
102	dev_dbg(&client->dev, "tone_mode=%d\n", fe_sec_tone_mode);
103
104	switch (fe_sec_tone_mode) {
105	case SEC_TONE_ON:
106		tone = 1;
107		break;
108	case SEC_TONE_OFF:
109		tone = 0;
110		break;
111	default:
112		dev_dbg(&client->dev, "invalid fe_sec_tone_mode\n");
113		ret = -EINVAL;
114		goto error;
115	}
116
117	cmd.args[0] = CMD_LNB_PCB_CONFIG;
118	cmd.args[1] = 0;
119	cmd.args[2] = 0x00;
120	cmd.args[3] = 0x00;
121	cmd.args[4] = tone;
122	cmd.len = 5;
123	ret = tda10071_cmd_execute(dev, &cmd);
124	if (ret)
125		goto error;
126
127	return ret;
128error:
129	dev_dbg(&client->dev, "failed=%d\n", ret);
130	return ret;
131}
132
133static int tda10071_set_voltage(struct dvb_frontend *fe,
134	enum fe_sec_voltage fe_sec_voltage)
135{
136	struct tda10071_dev *dev = fe->demodulator_priv;
137	struct i2c_client *client = dev->client;
138	struct tda10071_cmd cmd;
139	int ret;
140	u8 voltage;
141
142	if (!dev->warm) {
143		ret = -EFAULT;
144		goto error;
145	}
146
147	dev_dbg(&client->dev, "voltage=%d\n", fe_sec_voltage);
148
149	switch (fe_sec_voltage) {
150	case SEC_VOLTAGE_13:
151		voltage = 0;
152		break;
153	case SEC_VOLTAGE_18:
154		voltage = 1;
155		break;
156	case SEC_VOLTAGE_OFF:
157		voltage = 0;
158		break;
159	default:
160		dev_dbg(&client->dev, "invalid fe_sec_voltage\n");
161		ret = -EINVAL;
162		goto error;
163	}
164
165	cmd.args[0] = CMD_LNB_SET_DC_LEVEL;
166	cmd.args[1] = 0;
167	cmd.args[2] = voltage;
168	cmd.len = 3;
169	ret = tda10071_cmd_execute(dev, &cmd);
170	if (ret)
171		goto error;
172
173	return ret;
174error:
175	dev_dbg(&client->dev, "failed=%d\n", ret);
176	return ret;
177}
178
179static int tda10071_diseqc_send_master_cmd(struct dvb_frontend *fe,
180	struct dvb_diseqc_master_cmd *diseqc_cmd)
181{
182	struct tda10071_dev *dev = fe->demodulator_priv;
183	struct i2c_client *client = dev->client;
184	struct tda10071_cmd cmd;
185	int ret, i;
186	unsigned int uitmp;
187
188	if (!dev->warm) {
189		ret = -EFAULT;
190		goto error;
191	}
192
193	dev_dbg(&client->dev, "msg_len=%d\n", diseqc_cmd->msg_len);
194
195	if (diseqc_cmd->msg_len < 3 || diseqc_cmd->msg_len > 6) {
196		ret = -EINVAL;
197		goto error;
198	}
199
200	/* wait LNB TX */
201	for (i = 500, uitmp = 0; i && !uitmp; i--) {
202		ret = regmap_read(dev->regmap, 0x47, &uitmp);
203		if (ret)
204			goto error;
205		uitmp = (uitmp >> 0) & 1;
206		usleep_range(10000, 20000);
207	}
208
209	dev_dbg(&client->dev, "loop=%d\n", i);
210
211	if (i == 0) {
212		ret = -ETIMEDOUT;
213		goto error;
214	}
215
216	ret = regmap_update_bits(dev->regmap, 0x47, 0x01, 0x00);
217	if (ret)
218		goto error;
219
220	cmd.args[0] = CMD_LNB_SEND_DISEQC;
221	cmd.args[1] = 0;
222	cmd.args[2] = 0;
223	cmd.args[3] = 0;
224	cmd.args[4] = 2;
225	cmd.args[5] = 0;
226	cmd.args[6] = diseqc_cmd->msg_len;
227	memcpy(&cmd.args[7], diseqc_cmd->msg, diseqc_cmd->msg_len);
228	cmd.len = 7 + diseqc_cmd->msg_len;
229	ret = tda10071_cmd_execute(dev, &cmd);
230	if (ret)
231		goto error;
232
233	return ret;
234error:
235	dev_dbg(&client->dev, "failed=%d\n", ret);
236	return ret;
237}
238
239static int tda10071_diseqc_recv_slave_reply(struct dvb_frontend *fe,
240	struct dvb_diseqc_slave_reply *reply)
241{
242	struct tda10071_dev *dev = fe->demodulator_priv;
243	struct i2c_client *client = dev->client;
244	struct tda10071_cmd cmd;
245	int ret, i;
246	unsigned int uitmp;
247
248	if (!dev->warm) {
249		ret = -EFAULT;
250		goto error;
251	}
252
253	dev_dbg(&client->dev, "\n");
254
255	/* wait LNB RX */
256	for (i = 500, uitmp = 0; i && !uitmp; i--) {
257		ret = regmap_read(dev->regmap, 0x47, &uitmp);
258		if (ret)
259			goto error;
260		uitmp = (uitmp >> 1) & 1;
261		usleep_range(10000, 20000);
262	}
263
264	dev_dbg(&client->dev, "loop=%d\n", i);
265
266	if (i == 0) {
267		ret = -ETIMEDOUT;
268		goto error;
269	}
270
271	/* reply len */
272	ret = regmap_read(dev->regmap, 0x46, &uitmp);
273	if (ret)
274		goto error;
275
276	reply->msg_len = uitmp & 0x1f; /* [4:0] */
277	if (reply->msg_len > sizeof(reply->msg))
278		reply->msg_len = sizeof(reply->msg); /* truncate API max */
279
280	/* read reply */
281	cmd.args[0] = CMD_LNB_UPDATE_REPLY;
282	cmd.args[1] = 0;
283	cmd.len = 2;
284	ret = tda10071_cmd_execute(dev, &cmd);
285	if (ret)
286		goto error;
287
288	ret = regmap_bulk_read(dev->regmap, cmd.len, reply->msg,
289			       reply->msg_len);
290	if (ret)
291		goto error;
292
293	return ret;
294error:
295	dev_dbg(&client->dev, "failed=%d\n", ret);
296	return ret;
297}
298
299static int tda10071_diseqc_send_burst(struct dvb_frontend *fe,
300	enum fe_sec_mini_cmd fe_sec_mini_cmd)
301{
302	struct tda10071_dev *dev = fe->demodulator_priv;
303	struct i2c_client *client = dev->client;
304	struct tda10071_cmd cmd;
305	int ret, i;
306	unsigned int uitmp;
307	u8 burst;
308
309	if (!dev->warm) {
310		ret = -EFAULT;
311		goto error;
312	}
313
314	dev_dbg(&client->dev, "fe_sec_mini_cmd=%d\n", fe_sec_mini_cmd);
315
316	switch (fe_sec_mini_cmd) {
317	case SEC_MINI_A:
318		burst = 0;
319		break;
320	case SEC_MINI_B:
321		burst = 1;
322		break;
323	default:
324		dev_dbg(&client->dev, "invalid fe_sec_mini_cmd\n");
325		ret = -EINVAL;
326		goto error;
327	}
328
329	/* wait LNB TX */
330	for (i = 500, uitmp = 0; i && !uitmp; i--) {
331		ret = regmap_read(dev->regmap, 0x47, &uitmp);
332		if (ret)
333			goto error;
334		uitmp = (uitmp >> 0) & 1;
335		usleep_range(10000, 20000);
336	}
337
338	dev_dbg(&client->dev, "loop=%d\n", i);
339
340	if (i == 0) {
341		ret = -ETIMEDOUT;
342		goto error;
343	}
344
345	ret = regmap_update_bits(dev->regmap, 0x47, 0x01, 0x00);
346	if (ret)
347		goto error;
348
349	cmd.args[0] = CMD_LNB_SEND_TONEBURST;
350	cmd.args[1] = 0;
351	cmd.args[2] = burst;
352	cmd.len = 3;
353	ret = tda10071_cmd_execute(dev, &cmd);
354	if (ret)
355		goto error;
356
357	return ret;
358error:
359	dev_dbg(&client->dev, "failed=%d\n", ret);
360	return ret;
361}
362
363static int tda10071_read_status(struct dvb_frontend *fe, enum fe_status *status)
364{
365	struct tda10071_dev *dev = fe->demodulator_priv;
366	struct i2c_client *client = dev->client;
367	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
368	struct tda10071_cmd cmd;
369	int ret;
370	unsigned int uitmp;
371	u8 buf[8];
372
373	*status = 0;
374
375	if (!dev->warm) {
376		ret = 0;
377		goto error;
378	}
379
380	ret = regmap_read(dev->regmap, 0x39, &uitmp);
381	if (ret)
382		goto error;
383
384	/* 0x39[0] tuner PLL */
385	if (uitmp & 0x02) /* demod PLL */
386		*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER;
387	if (uitmp & 0x04) /* viterbi or LDPC*/
388		*status |= FE_HAS_VITERBI;
389	if (uitmp & 0x08) /* RS or BCH */
390		*status |= FE_HAS_SYNC | FE_HAS_LOCK;
391
392	dev->fe_status = *status;
393
394	/* signal strength */
395	if (dev->fe_status & FE_HAS_SIGNAL) {
396		cmd.args[0] = CMD_GET_AGCACC;
397		cmd.args[1] = 0;
398		cmd.len = 2;
399		ret = tda10071_cmd_execute(dev, &cmd);
400		if (ret)
401			goto error;
402
403		/* input power estimate dBm */
404		ret = regmap_read(dev->regmap, 0x50, &uitmp);
405		if (ret)
406			goto error;
407
408		c->strength.stat[0].scale = FE_SCALE_DECIBEL;
409		c->strength.stat[0].svalue = (int) (uitmp - 256) * 1000;
410	} else {
411		c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
412	}
413
414	/* CNR */
415	if (dev->fe_status & FE_HAS_VITERBI) {
416		/* Es/No */
417		ret = regmap_bulk_read(dev->regmap, 0x3a, buf, 2);
418		if (ret)
419			goto error;
420
421		c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
422		c->cnr.stat[0].svalue = (buf[0] << 8 | buf[1] << 0) * 100;
423	} else {
424		c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
425	}
426
427	/* UCB/PER/BER */
428	if (dev->fe_status & FE_HAS_LOCK) {
429		/* TODO: report total bits/packets */
430		u8 delivery_system, reg, len;
431
432		switch (dev->delivery_system) {
433		case SYS_DVBS:
434			reg = 0x4c;
435			len = 8;
436			delivery_system = 1;
437			break;
438		case SYS_DVBS2:
439			reg = 0x4d;
440			len = 4;
441			delivery_system = 0;
442			break;
443		default:
444			ret = -EINVAL;
445			goto error;
446		}
447
448		ret = regmap_read(dev->regmap, reg, &uitmp);
449		if (ret)
450			goto error;
451
452		if (dev->meas_count == uitmp) {
453			dev_dbg(&client->dev, "meas not ready=%02x\n", uitmp);
454			ret = 0;
455			goto error;
456		} else {
457			dev->meas_count = uitmp;
458		}
459
460		cmd.args[0] = CMD_BER_UPDATE_COUNTERS;
461		cmd.args[1] = 0;
462		cmd.args[2] = delivery_system;
463		cmd.len = 3;
464		ret = tda10071_cmd_execute(dev, &cmd);
465		if (ret)
466			goto error;
467
468		ret = regmap_bulk_read(dev->regmap, cmd.len, buf, len);
469		if (ret)
470			goto error;
471
472		if (dev->delivery_system == SYS_DVBS) {
473			u32 bit_error = buf[0] << 24 | buf[1] << 16 |
474					buf[2] << 8 | buf[3] << 0;
475
476			dev->dvbv3_ber = bit_error;
477			dev->post_bit_error += bit_error;
478			c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
479			c->post_bit_error.stat[0].uvalue = dev->post_bit_error;
480			dev->block_error += buf[4] << 8 | buf[5] << 0;
481			c->block_error.stat[0].scale = FE_SCALE_COUNTER;
482			c->block_error.stat[0].uvalue = dev->block_error;
483		} else {
484			dev->dvbv3_ber = buf[0] << 8 | buf[1] << 0;
485			dev->post_bit_error += buf[0] << 8 | buf[1] << 0;
486			c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
487			c->post_bit_error.stat[0].uvalue = dev->post_bit_error;
488			c->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
489		}
490	} else {
491		c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
492		c->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
493	}
494
495	return ret;
496error:
497	dev_dbg(&client->dev, "failed=%d\n", ret);
498	return ret;
499}
500
501static int tda10071_read_snr(struct dvb_frontend *fe, u16 *snr)
502{
503	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
504
505	if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL)
506		*snr = div_s64(c->cnr.stat[0].svalue, 100);
507	else
508		*snr = 0;
509	return 0;
510}
511
512static int tda10071_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
513{
514	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
515	unsigned int uitmp;
516
517	if (c->strength.stat[0].scale == FE_SCALE_DECIBEL) {
518		uitmp = div_s64(c->strength.stat[0].svalue, 1000) + 256;
519		uitmp = clamp(uitmp, 181U, 236U); /* -75dBm - -20dBm */
520		/* scale value to 0x0000-0xffff */
521		*strength = (uitmp-181) * 0xffff / (236-181);
522	} else {
523		*strength = 0;
524	}
525	return 0;
526}
527
528static int tda10071_read_ber(struct dvb_frontend *fe, u32 *ber)
529{
530	struct tda10071_dev *dev = fe->demodulator_priv;
531
532	*ber = dev->dvbv3_ber;
533	return 0;
534}
535
536static int tda10071_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
537{
538	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
539
540	if (c->block_error.stat[0].scale == FE_SCALE_COUNTER)
541		*ucblocks = c->block_error.stat[0].uvalue;
542	else
543		*ucblocks = 0;
544	return 0;
545}
546
547static int tda10071_set_frontend(struct dvb_frontend *fe)
548{
549	struct tda10071_dev *dev = fe->demodulator_priv;
550	struct i2c_client *client = dev->client;
551	struct tda10071_cmd cmd;
552	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
553	int ret, i;
554	u8 mode, rolloff, pilot, inversion, div;
555	enum fe_modulation modulation;
556
557	dev_dbg(&client->dev,
558		"delivery_system=%d modulation=%d frequency=%u symbol_rate=%d inversion=%d pilot=%d rolloff=%d\n",
559		c->delivery_system, c->modulation, c->frequency, c->symbol_rate,
560		c->inversion, c->pilot, c->rolloff);
561
562	dev->delivery_system = SYS_UNDEFINED;
563
564	if (!dev->warm) {
565		ret = -EFAULT;
566		goto error;
567	}
568
569	switch (c->inversion) {
570	case INVERSION_OFF:
571		inversion = 1;
572		break;
573	case INVERSION_ON:
574		inversion = 0;
575		break;
576	case INVERSION_AUTO:
577		/* 2 = auto; try first on then off
578		 * 3 = auto; try first off then on */
579		inversion = 3;
580		break;
581	default:
582		dev_dbg(&client->dev, "invalid inversion\n");
583		ret = -EINVAL;
584		goto error;
585	}
586
587	switch (c->delivery_system) {
588	case SYS_DVBS:
589		modulation = QPSK;
590		rolloff = 0;
591		pilot = 2;
592		break;
593	case SYS_DVBS2:
594		modulation = c->modulation;
595
596		switch (c->rolloff) {
597		case ROLLOFF_20:
598			rolloff = 2;
599			break;
600		case ROLLOFF_25:
601			rolloff = 1;
602			break;
603		case ROLLOFF_35:
604			rolloff = 0;
605			break;
606		case ROLLOFF_AUTO:
607		default:
608			dev_dbg(&client->dev, "invalid rolloff\n");
609			ret = -EINVAL;
610			goto error;
611		}
612
613		switch (c->pilot) {
614		case PILOT_OFF:
615			pilot = 0;
616			break;
617		case PILOT_ON:
618			pilot = 1;
619			break;
620		case PILOT_AUTO:
621			pilot = 2;
622			break;
623		default:
624			dev_dbg(&client->dev, "invalid pilot\n");
625			ret = -EINVAL;
626			goto error;
627		}
628		break;
629	default:
630		dev_dbg(&client->dev, "invalid delivery_system\n");
631		ret = -EINVAL;
632		goto error;
633	}
634
635	for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
636		if (c->delivery_system == TDA10071_MODCOD[i].delivery_system &&
637			modulation == TDA10071_MODCOD[i].modulation &&
638			c->fec_inner == TDA10071_MODCOD[i].fec) {
639			mode = TDA10071_MODCOD[i].val;
640			dev_dbg(&client->dev, "mode found=%02x\n", mode);
641			break;
642		}
643	}
644
645	if (mode == 0xff) {
646		dev_dbg(&client->dev, "invalid parameter combination\n");
647		ret = -EINVAL;
648		goto error;
649	}
650
651	if (c->symbol_rate <= 5000000)
652		div = 14;
653	else
654		div = 4;
655
656	ret = regmap_write(dev->regmap, 0x81, div);
657	if (ret)
658		goto error;
659
660	ret = regmap_write(dev->regmap, 0xe3, div);
661	if (ret)
662		goto error;
663
664	cmd.args[0] = CMD_CHANGE_CHANNEL;
665	cmd.args[1] = 0;
666	cmd.args[2] = mode;
667	cmd.args[3] = (c->frequency >> 16) & 0xff;
668	cmd.args[4] = (c->frequency >>  8) & 0xff;
669	cmd.args[5] = (c->frequency >>  0) & 0xff;
670	cmd.args[6] = ((c->symbol_rate / 1000) >> 8) & 0xff;
671	cmd.args[7] = ((c->symbol_rate / 1000) >> 0) & 0xff;
672	cmd.args[8] = ((tda10071_ops.info.frequency_tolerance_hz / 1000) >> 8) & 0xff;
673	cmd.args[9] = ((tda10071_ops.info.frequency_tolerance_hz / 1000) >> 0) & 0xff;
674	cmd.args[10] = rolloff;
675	cmd.args[11] = inversion;
676	cmd.args[12] = pilot;
677	cmd.args[13] = 0x00;
678	cmd.args[14] = 0x00;
679	cmd.len = 15;
680	ret = tda10071_cmd_execute(dev, &cmd);
681	if (ret)
682		goto error;
683
684	dev->delivery_system = c->delivery_system;
685
686	return ret;
687error:
688	dev_dbg(&client->dev, "failed=%d\n", ret);
689	return ret;
690}
691
692static int tda10071_get_frontend(struct dvb_frontend *fe,
693				 struct dtv_frontend_properties *c)
694{
695	struct tda10071_dev *dev = fe->demodulator_priv;
696	struct i2c_client *client = dev->client;
697	int ret, i;
698	u8 buf[5], tmp;
699
700	if (!dev->warm || !(dev->fe_status & FE_HAS_LOCK)) {
701		ret = 0;
702		goto error;
703	}
704
705	ret = regmap_bulk_read(dev->regmap, 0x30, buf, 5);
706	if (ret)
707		goto error;
708
709	tmp = buf[0] & 0x3f;
710	for (i = 0; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
711		if (tmp == TDA10071_MODCOD[i].val) {
712			c->modulation = TDA10071_MODCOD[i].modulation;
713			c->fec_inner = TDA10071_MODCOD[i].fec;
714			c->delivery_system = TDA10071_MODCOD[i].delivery_system;
715		}
716	}
717
718	switch ((buf[1] >> 0) & 0x01) {
719	case 0:
720		c->inversion = INVERSION_ON;
721		break;
722	case 1:
723		c->inversion = INVERSION_OFF;
724		break;
725	}
726
727	switch ((buf[1] >> 7) & 0x01) {
728	case 0:
729		c->pilot = PILOT_OFF;
730		break;
731	case 1:
732		c->pilot = PILOT_ON;
733		break;
734	}
735
736	c->frequency = (buf[2] << 16) | (buf[3] << 8) | (buf[4] << 0);
737
738	ret = regmap_bulk_read(dev->regmap, 0x52, buf, 3);
739	if (ret)
740		goto error;
741
742	c->symbol_rate = ((buf[0] << 16) | (buf[1] << 8) | (buf[2] << 0)) * 1000;
743
744	return ret;
745error:
746	dev_dbg(&client->dev, "failed=%d\n", ret);
747	return ret;
748}
749
750static int tda10071_init(struct dvb_frontend *fe)
751{
752	struct tda10071_dev *dev = fe->demodulator_priv;
753	struct i2c_client *client = dev->client;
754	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
755	struct tda10071_cmd cmd;
756	int ret, i, len, remaining, fw_size;
757	unsigned int uitmp;
758	const struct firmware *fw;
759	u8 *fw_file = TDA10071_FIRMWARE;
760	u8 tmp, buf[4];
761	struct tda10071_reg_val_mask tab[] = {
762		{ 0xcd, 0x00, 0x07 },
763		{ 0x80, 0x00, 0x02 },
764		{ 0xcd, 0x00, 0xc0 },
765		{ 0xce, 0x00, 0x1b },
766		{ 0x9d, 0x00, 0x01 },
767		{ 0x9d, 0x00, 0x02 },
768		{ 0x9e, 0x00, 0x01 },
769		{ 0x87, 0x00, 0x80 },
770		{ 0xce, 0x00, 0x08 },
771		{ 0xce, 0x00, 0x10 },
772	};
773	struct tda10071_reg_val_mask tab2[] = {
774		{ 0xf1, 0x70, 0xff },
775		{ 0x88, dev->pll_multiplier, 0x3f },
776		{ 0x89, 0x00, 0x10 },
777		{ 0x89, 0x10, 0x10 },
778		{ 0xc0, 0x01, 0x01 },
779		{ 0xc0, 0x00, 0x01 },
780		{ 0xe0, 0xff, 0xff },
781		{ 0xe0, 0x00, 0xff },
782		{ 0x96, 0x1e, 0x7e },
783		{ 0x8b, 0x08, 0x08 },
784		{ 0x8b, 0x00, 0x08 },
785		{ 0x8f, 0x1a, 0x7e },
786		{ 0x8c, 0x68, 0xff },
787		{ 0x8d, 0x08, 0xff },
788		{ 0x8e, 0x4c, 0xff },
789		{ 0x8f, 0x01, 0x01 },
790		{ 0x8b, 0x04, 0x04 },
791		{ 0x8b, 0x00, 0x04 },
792		{ 0x87, 0x05, 0x07 },
793		{ 0x80, 0x00, 0x20 },
794		{ 0xc8, 0x01, 0xff },
795		{ 0xb4, 0x47, 0xff },
796		{ 0xb5, 0x9c, 0xff },
797		{ 0xb6, 0x7d, 0xff },
798		{ 0xba, 0x00, 0x03 },
799		{ 0xb7, 0x47, 0xff },
800		{ 0xb8, 0x9c, 0xff },
801		{ 0xb9, 0x7d, 0xff },
802		{ 0xba, 0x00, 0x0c },
803		{ 0xc8, 0x00, 0xff },
804		{ 0xcd, 0x00, 0x04 },
805		{ 0xcd, 0x00, 0x20 },
806		{ 0xe8, 0x02, 0xff },
807		{ 0xcf, 0x20, 0xff },
808		{ 0x9b, 0xd7, 0xff },
809		{ 0x9a, 0x01, 0x03 },
810		{ 0xa8, 0x05, 0x0f },
811		{ 0xa8, 0x65, 0xf0 },
812		{ 0xa6, 0xa0, 0xf0 },
813		{ 0x9d, 0x50, 0xfc },
814		{ 0x9e, 0x20, 0xe0 },
815		{ 0xa3, 0x1c, 0x7c },
816		{ 0xd5, 0x03, 0x03 },
817	};
818
819	if (dev->warm) {
820		/* warm state - wake up device from sleep */
821
822		for (i = 0; i < ARRAY_SIZE(tab); i++) {
823			ret = tda10071_wr_reg_mask(dev, tab[i].reg,
824				tab[i].val, tab[i].mask);
825			if (ret)
826				goto error;
827		}
828
829		cmd.args[0] = CMD_SET_SLEEP_MODE;
830		cmd.args[1] = 0;
831		cmd.args[2] = 0;
832		cmd.len = 3;
833		ret = tda10071_cmd_execute(dev, &cmd);
834		if (ret)
835			goto error;
836	} else {
837		/* cold state - try to download firmware */
838
839		/* request the firmware, this will block and timeout */
840		ret = request_firmware(&fw, fw_file, &client->dev);
841		if (ret) {
842			dev_err(&client->dev,
843				"did not find the firmware file '%s' (status %d). You can use <kernel_dir>/scripts/get_dvb_firmware to get the firmware\n",
844				fw_file, ret);
845			goto error;
846		}
847
848		/* init */
849		for (i = 0; i < ARRAY_SIZE(tab2); i++) {
850			ret = tda10071_wr_reg_mask(dev, tab2[i].reg,
851				tab2[i].val, tab2[i].mask);
852			if (ret)
853				goto error_release_firmware;
854		}
855
856		/*  download firmware */
857		ret = regmap_write(dev->regmap, 0xe0, 0x7f);
858		if (ret)
859			goto error_release_firmware;
860
861		ret = regmap_write(dev->regmap, 0xf7, 0x81);
862		if (ret)
863			goto error_release_firmware;
864
865		ret = regmap_write(dev->regmap, 0xf8, 0x00);
866		if (ret)
867			goto error_release_firmware;
868
869		ret = regmap_write(dev->regmap, 0xf9, 0x00);
870		if (ret)
871			goto error_release_firmware;
872
873		dev_info(&client->dev,
874			 "found a '%s' in cold state, will try to load a firmware\n",
875			 tda10071_ops.info.name);
876		dev_info(&client->dev, "downloading firmware from file '%s'\n",
877			 fw_file);
878
879		/* do not download last byte */
880		fw_size = fw->size - 1;
881
882		for (remaining = fw_size; remaining > 0;
883			remaining -= (dev->i2c_wr_max - 1)) {
884			len = remaining;
885			if (len > (dev->i2c_wr_max - 1))
886				len = (dev->i2c_wr_max - 1);
887
888			ret = regmap_bulk_write(dev->regmap, 0xfa,
889				(u8 *) &fw->data[fw_size - remaining], len);
890			if (ret) {
891				dev_err(&client->dev,
892					"firmware download failed=%d\n", ret);
893				goto error_release_firmware;
894			}
895		}
896		release_firmware(fw);
897
898		ret = regmap_write(dev->regmap, 0xf7, 0x0c);
899		if (ret)
900			goto error;
901
902		ret = regmap_write(dev->regmap, 0xe0, 0x00);
903		if (ret)
904			goto error;
905
906		/* wait firmware start */
907		msleep(250);
908
909		/* firmware status */
910		ret = regmap_read(dev->regmap, 0x51, &uitmp);
911		if (ret)
912			goto error;
913
914		if (uitmp) {
915			dev_info(&client->dev, "firmware did not run\n");
916			ret = -EFAULT;
917			goto error;
918		} else {
919			dev->warm = true;
920		}
921
922		cmd.args[0] = CMD_GET_FW_VERSION;
923		cmd.len = 1;
924		ret = tda10071_cmd_execute(dev, &cmd);
925		if (ret)
926			goto error;
927
928		ret = regmap_bulk_read(dev->regmap, cmd.len, buf, 4);
929		if (ret)
930			goto error;
931
932		dev_info(&client->dev, "firmware version %d.%d.%d.%d\n",
933			 buf[0], buf[1], buf[2], buf[3]);
934		dev_info(&client->dev, "found a '%s' in warm state\n",
935			 tda10071_ops.info.name);
936
937		ret = regmap_bulk_read(dev->regmap, 0x81, buf, 2);
938		if (ret)
939			goto error;
940
941		cmd.args[0] = CMD_DEMOD_INIT;
942		cmd.args[1] = ((dev->clk / 1000) >> 8) & 0xff;
943		cmd.args[2] = ((dev->clk / 1000) >> 0) & 0xff;
944		cmd.args[3] = buf[0];
945		cmd.args[4] = buf[1];
946		cmd.args[5] = dev->pll_multiplier;
947		cmd.args[6] = dev->spec_inv;
948		cmd.args[7] = 0x00;
949		cmd.len = 8;
950		ret = tda10071_cmd_execute(dev, &cmd);
951		if (ret)
952			goto error;
953
954		if (dev->tuner_i2c_addr)
955			tmp = dev->tuner_i2c_addr;
956		else
957			tmp = 0x14;
958
959		cmd.args[0] = CMD_TUNER_INIT;
960		cmd.args[1] = 0x00;
961		cmd.args[2] = 0x00;
962		cmd.args[3] = 0x00;
963		cmd.args[4] = 0x00;
964		cmd.args[5] = tmp;
965		cmd.args[6] = 0x00;
966		cmd.args[7] = 0x03;
967		cmd.args[8] = 0x02;
968		cmd.args[9] = 0x02;
969		cmd.args[10] = 0x00;
970		cmd.args[11] = 0x00;
971		cmd.args[12] = 0x00;
972		cmd.args[13] = 0x00;
973		cmd.args[14] = 0x00;
974		cmd.len = 15;
975		ret = tda10071_cmd_execute(dev, &cmd);
976		if (ret)
977			goto error;
978
979		cmd.args[0] = CMD_MPEG_CONFIG;
980		cmd.args[1] = 0;
981		cmd.args[2] = dev->ts_mode;
982		cmd.args[3] = 0x00;
983		cmd.args[4] = 0x04;
984		cmd.args[5] = 0x00;
985		cmd.len = 6;
986		ret = tda10071_cmd_execute(dev, &cmd);
987		if (ret)
988			goto error;
989
990		ret = regmap_update_bits(dev->regmap, 0xf0, 0x01, 0x01);
991		if (ret)
992			goto error;
993
994		cmd.args[0] = CMD_LNB_CONFIG;
995		cmd.args[1] = 0;
996		cmd.args[2] = 150;
997		cmd.args[3] = 3;
998		cmd.args[4] = 22;
999		cmd.args[5] = 1;
1000		cmd.args[6] = 1;
1001		cmd.args[7] = 30;
1002		cmd.args[8] = 30;
1003		cmd.args[9] = 30;
1004		cmd.args[10] = 30;
1005		cmd.len = 11;
1006		ret = tda10071_cmd_execute(dev, &cmd);
1007		if (ret)
1008			goto error;
1009
1010		cmd.args[0] = CMD_BER_CONTROL;
1011		cmd.args[1] = 0;
1012		cmd.args[2] = 14;
1013		cmd.args[3] = 14;
1014		cmd.len = 4;
1015		ret = tda10071_cmd_execute(dev, &cmd);
1016		if (ret)
1017			goto error;
1018	}
1019
1020	/* init stats here in order signal app which stats are supported */
1021	c->strength.len = 1;
1022	c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1023	c->cnr.len = 1;
1024	c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1025	c->post_bit_error.len = 1;
1026	c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1027	c->block_error.len = 1;
1028	c->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1029
1030	return ret;
1031error_release_firmware:
1032	release_firmware(fw);
1033error:
1034	dev_dbg(&client->dev, "failed=%d\n", ret);
1035	return ret;
1036}
1037
1038static int tda10071_sleep(struct dvb_frontend *fe)
1039{
1040	struct tda10071_dev *dev = fe->demodulator_priv;
1041	struct i2c_client *client = dev->client;
1042	struct tda10071_cmd cmd;
1043	int ret, i;
1044	struct tda10071_reg_val_mask tab[] = {
1045		{ 0xcd, 0x07, 0x07 },
1046		{ 0x80, 0x02, 0x02 },
1047		{ 0xcd, 0xc0, 0xc0 },
1048		{ 0xce, 0x1b, 0x1b },
1049		{ 0x9d, 0x01, 0x01 },
1050		{ 0x9d, 0x02, 0x02 },
1051		{ 0x9e, 0x01, 0x01 },
1052		{ 0x87, 0x80, 0x80 },
1053		{ 0xce, 0x08, 0x08 },
1054		{ 0xce, 0x10, 0x10 },
1055	};
1056
1057	if (!dev->warm) {
1058		ret = -EFAULT;
1059		goto error;
1060	}
1061
1062	cmd.args[0] = CMD_SET_SLEEP_MODE;
1063	cmd.args[1] = 0;
1064	cmd.args[2] = 1;
1065	cmd.len = 3;
1066	ret = tda10071_cmd_execute(dev, &cmd);
1067	if (ret)
1068		goto error;
1069
1070	for (i = 0; i < ARRAY_SIZE(tab); i++) {
1071		ret = tda10071_wr_reg_mask(dev, tab[i].reg, tab[i].val,
1072			tab[i].mask);
1073		if (ret)
1074			goto error;
1075	}
1076
1077	return ret;
1078error:
1079	dev_dbg(&client->dev, "failed=%d\n", ret);
1080	return ret;
1081}
1082
1083static int tda10071_get_tune_settings(struct dvb_frontend *fe,
1084	struct dvb_frontend_tune_settings *s)
1085{
1086	s->min_delay_ms = 8000;
1087	s->step_size = 0;
1088	s->max_drift = 0;
1089
1090	return 0;
1091}
1092
1093static const struct dvb_frontend_ops tda10071_ops = {
1094	.delsys = { SYS_DVBS, SYS_DVBS2 },
1095	.info = {
1096		.name = "NXP TDA10071",
1097		.frequency_min_hz    =  950 * MHz,
1098		.frequency_max_hz    = 2150 * MHz,
1099		.frequency_tolerance_hz = 5 * MHz,
1100		.symbol_rate_min = 1000000,
1101		.symbol_rate_max = 45000000,
1102		.caps = FE_CAN_INVERSION_AUTO |
1103			FE_CAN_FEC_1_2 |
1104			FE_CAN_FEC_2_3 |
1105			FE_CAN_FEC_3_4 |
1106			FE_CAN_FEC_4_5 |
1107			FE_CAN_FEC_5_6 |
1108			FE_CAN_FEC_6_7 |
1109			FE_CAN_FEC_7_8 |
1110			FE_CAN_FEC_8_9 |
1111			FE_CAN_FEC_AUTO |
1112			FE_CAN_QPSK |
1113			FE_CAN_RECOVER |
1114			FE_CAN_2G_MODULATION
1115	},
1116
1117	.get_tune_settings = tda10071_get_tune_settings,
1118
1119	.init = tda10071_init,
1120	.sleep = tda10071_sleep,
1121
1122	.set_frontend = tda10071_set_frontend,
1123	.get_frontend = tda10071_get_frontend,
1124
1125	.read_status = tda10071_read_status,
1126	.read_snr = tda10071_read_snr,
1127	.read_signal_strength = tda10071_read_signal_strength,
1128	.read_ber = tda10071_read_ber,
1129	.read_ucblocks = tda10071_read_ucblocks,
1130
1131	.diseqc_send_master_cmd = tda10071_diseqc_send_master_cmd,
1132	.diseqc_recv_slave_reply = tda10071_diseqc_recv_slave_reply,
1133	.diseqc_send_burst = tda10071_diseqc_send_burst,
1134
1135	.set_tone = tda10071_set_tone,
1136	.set_voltage = tda10071_set_voltage,
1137};
1138
1139static struct dvb_frontend *tda10071_get_dvb_frontend(struct i2c_client *client)
1140{
1141	struct tda10071_dev *dev = i2c_get_clientdata(client);
1142
1143	dev_dbg(&client->dev, "\n");
1144
1145	return &dev->fe;
1146}
1147
1148static int tda10071_probe(struct i2c_client *client)
1149{
1150	struct tda10071_dev *dev;
1151	struct tda10071_platform_data *pdata = client->dev.platform_data;
1152	int ret;
1153	unsigned int uitmp;
1154	static const struct regmap_config regmap_config = {
1155		.reg_bits = 8,
1156		.val_bits = 8,
1157	};
1158
1159	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1160	if (!dev) {
1161		ret = -ENOMEM;
1162		goto err;
1163	}
1164
1165	dev->client = client;
1166	mutex_init(&dev->cmd_execute_mutex);
1167	dev->clk = pdata->clk;
1168	dev->i2c_wr_max = pdata->i2c_wr_max;
1169	dev->ts_mode = pdata->ts_mode;
1170	dev->spec_inv = pdata->spec_inv;
1171	dev->pll_multiplier = pdata->pll_multiplier;
1172	dev->tuner_i2c_addr = pdata->tuner_i2c_addr;
1173	dev->regmap = devm_regmap_init_i2c(client, &regmap_config);
1174	if (IS_ERR(dev->regmap)) {
1175		ret = PTR_ERR(dev->regmap);
1176		goto err_kfree;
1177	}
1178
1179	/* chip ID */
1180	ret = regmap_read(dev->regmap, 0xff, &uitmp);
1181	if (ret)
1182		goto err_kfree;
1183	if (uitmp != 0x0f) {
1184		ret = -ENODEV;
1185		goto err_kfree;
1186	}
1187
1188	/* chip type */
1189	ret = regmap_read(dev->regmap, 0xdd, &uitmp);
1190	if (ret)
1191		goto err_kfree;
1192	if (uitmp != 0x00) {
1193		ret = -ENODEV;
1194		goto err_kfree;
1195	}
1196
1197	/* chip version */
1198	ret = regmap_read(dev->regmap, 0xfe, &uitmp);
1199	if (ret)
1200		goto err_kfree;
1201	if (uitmp != 0x01) {
1202		ret = -ENODEV;
1203		goto err_kfree;
1204	}
1205
1206	/* create dvb_frontend */
1207	memcpy(&dev->fe.ops, &tda10071_ops, sizeof(struct dvb_frontend_ops));
1208	dev->fe.demodulator_priv = dev;
1209	i2c_set_clientdata(client, dev);
1210
1211	/* setup callbacks */
1212	pdata->get_dvb_frontend = tda10071_get_dvb_frontend;
1213
1214	dev_info(&client->dev, "NXP TDA10071 successfully identified\n");
1215	return 0;
1216err_kfree:
1217	kfree(dev);
1218err:
1219	dev_dbg(&client->dev, "failed=%d\n", ret);
1220	return ret;
1221}
1222
1223static void tda10071_remove(struct i2c_client *client)
1224{
1225	struct tda10071_dev *dev = i2c_get_clientdata(client);
1226
1227	dev_dbg(&client->dev, "\n");
1228
1229	kfree(dev);
1230}
1231
1232static const struct i2c_device_id tda10071_id_table[] = {
1233	{"tda10071_cx24118", 0},
1234	{}
1235};
1236MODULE_DEVICE_TABLE(i2c, tda10071_id_table);
1237
1238static struct i2c_driver tda10071_driver = {
1239	.driver = {
1240		.name	= "tda10071",
1241		.suppress_bind_attrs = true,
1242	},
1243	.probe		= tda10071_probe,
1244	.remove		= tda10071_remove,
1245	.id_table	= tda10071_id_table,
1246};
1247
1248module_i2c_driver(tda10071_driver);
1249
1250MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1251MODULE_DESCRIPTION("NXP TDA10071 DVB-S/S2 demodulator driver");
1252MODULE_LICENSE("GPL");
1253MODULE_FIRMWARE(TDA10071_FIRMWARE);
1254