1/*
2 * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
3 *
4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
5 *
6 * Thanks to Afatech who kindly provided information.
7 *
8 *    This program is free software; you can redistribute it and/or modify
9 *    it under the terms of the GNU General Public License as published by
10 *    the Free Software Foundation; either version 2 of the License, or
11 *    (at your option) any later version.
12 *
13 *    This program is distributed in the hope that it will be useful,
14 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *    GNU General Public License for more details.
17 *
18 *    You should have received a copy of the GNU General Public License
19 *    along with this program; if not, write to the Free Software
20 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *
22 */
23
24#include "af9015.h"
25
26static int dvb_usb_af9015_remote;
27module_param_named(remote, dvb_usb_af9015_remote, int, 0644);
28MODULE_PARM_DESC(remote, "select remote");
29DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
30
31static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req)
32{
33#define REQ_HDR_LEN 8 /* send header size */
34#define ACK_HDR_LEN 2 /* rece header size */
35	struct af9015_state *state = d_to_priv(d);
36	int ret, wlen, rlen;
37	u8 write = 1;
38
39	mutex_lock(&d->usb_mutex);
40
41	state->buf[0] = req->cmd;
42	state->buf[1] = state->seq++;
43	state->buf[2] = req->i2c_addr;
44	state->buf[3] = req->addr >> 8;
45	state->buf[4] = req->addr & 0xff;
46	state->buf[5] = req->mbox;
47	state->buf[6] = req->addr_len;
48	state->buf[7] = req->data_len;
49
50	switch (req->cmd) {
51	case GET_CONFIG:
52	case READ_MEMORY:
53	case RECONNECT_USB:
54		write = 0;
55		break;
56	case READ_I2C:
57		write = 0;
58		state->buf[2] |= 0x01; /* set I2C direction */
59	case WRITE_I2C:
60		state->buf[0] = READ_WRITE_I2C;
61		break;
62	case WRITE_MEMORY:
63		if (((req->addr & 0xff00) == 0xff00) ||
64		    ((req->addr & 0xff00) == 0xae00))
65			state->buf[0] = WRITE_VIRTUAL_MEMORY;
66	case WRITE_VIRTUAL_MEMORY:
67	case COPY_FIRMWARE:
68	case DOWNLOAD_FIRMWARE:
69	case BOOT:
70		break;
71	default:
72		dev_err(&d->udev->dev, "%s: unknown command=%d\n",
73				KBUILD_MODNAME, req->cmd);
74		ret = -EIO;
75		goto error;
76	}
77
78	/* buffer overflow check */
79	if ((write && (req->data_len > BUF_LEN - REQ_HDR_LEN)) ||
80			(!write && (req->data_len > BUF_LEN - ACK_HDR_LEN))) {
81		dev_err(&d->udev->dev, "%s: too much data; cmd=%d len=%d\n",
82				KBUILD_MODNAME, req->cmd, req->data_len);
83		ret = -EINVAL;
84		goto error;
85	}
86
87	/* write receives seq + status = 2 bytes
88	   read receives seq + status + data = 2 + N bytes */
89	wlen = REQ_HDR_LEN;
90	rlen = ACK_HDR_LEN;
91	if (write) {
92		wlen += req->data_len;
93		memcpy(&state->buf[REQ_HDR_LEN], req->data, req->data_len);
94	} else {
95		rlen += req->data_len;
96	}
97
98	/* no ack for these packets */
99	if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB)
100		rlen = 0;
101
102	ret = dvb_usbv2_generic_rw_locked(d,
103			state->buf, wlen, state->buf, rlen);
104	if (ret)
105		goto error;
106
107	/* check status */
108	if (rlen && state->buf[1]) {
109		dev_err(&d->udev->dev, "%s: command failed=%d\n",
110				KBUILD_MODNAME, state->buf[1]);
111		ret = -EIO;
112		goto error;
113	}
114
115	/* read request, copy returned data to return buf */
116	if (!write)
117		memcpy(req->data, &state->buf[ACK_HDR_LEN], req->data_len);
118error:
119	mutex_unlock(&d->usb_mutex);
120
121	return ret;
122}
123
124static int af9015_write_regs(struct dvb_usb_device *d, u16 addr, u8 *val,
125	u8 len)
126{
127	struct req_t req = {WRITE_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
128		val};
129	return af9015_ctrl_msg(d, &req);
130}
131
132static int af9015_read_regs(struct dvb_usb_device *d, u16 addr, u8 *val, u8 len)
133{
134	struct req_t req = {READ_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
135		val};
136	return af9015_ctrl_msg(d, &req);
137}
138
139static int af9015_write_reg(struct dvb_usb_device *d, u16 addr, u8 val)
140{
141	return af9015_write_regs(d, addr, &val, 1);
142}
143
144static int af9015_read_reg(struct dvb_usb_device *d, u16 addr, u8 *val)
145{
146	return af9015_read_regs(d, addr, val, 1);
147}
148
149static int af9015_write_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
150	u8 val)
151{
152	struct af9015_state *state = d_to_priv(d);
153	struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val};
154
155	if (addr == state->af9013_config[0].i2c_addr ||
156	    addr == state->af9013_config[1].i2c_addr)
157		req.addr_len = 3;
158
159	return af9015_ctrl_msg(d, &req);
160}
161
162static int af9015_read_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
163	u8 *val)
164{
165	struct af9015_state *state = d_to_priv(d);
166	struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val};
167
168	if (addr == state->af9013_config[0].i2c_addr ||
169	    addr == state->af9013_config[1].i2c_addr)
170		req.addr_len = 3;
171
172	return af9015_ctrl_msg(d, &req);
173}
174
175static int af9015_do_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit, u8 op)
176{
177	int ret;
178	u8 val, mask = 0x01;
179
180	ret = af9015_read_reg(d, addr, &val);
181	if (ret)
182		return ret;
183
184	mask <<= bit;
185	if (op) {
186		/* set bit */
187		val |= mask;
188	} else {
189		/* clear bit */
190		mask ^= 0xff;
191		val &= mask;
192	}
193
194	return af9015_write_reg(d, addr, val);
195}
196
197static int af9015_set_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
198{
199	return af9015_do_reg_bit(d, addr, bit, 1);
200}
201
202static int af9015_clear_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
203{
204	return af9015_do_reg_bit(d, addr, bit, 0);
205}
206
207static int af9015_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
208	int num)
209{
210	struct dvb_usb_device *d = i2c_get_adapdata(adap);
211	struct af9015_state *state = d_to_priv(d);
212	int ret = 0, i = 0;
213	u16 addr;
214	u8 uninitialized_var(mbox), addr_len;
215	struct req_t req;
216
217/*
218The bus lock is needed because there is two tuners both using same I2C-address.
219Due to that the only way to select correct tuner is use demodulator I2C-gate.
220
221................................................
222. AF9015 includes integrated AF9013 demodulator.
223. ____________                   ____________  .                ____________
224.|     uC     |                 |   demod    | .               |    tuner   |
225.|------------|                 |------------| .               |------------|
226.|   AF9015   |                 |  AF9013/5  | .               |   MXL5003  |
227.|            |--+----I2C-------|-----/ -----|-.-----I2C-------|            |
228.|            |  |              | addr 0x38  | .               |  addr 0xc6 |
229.|____________|  |              |____________| .               |____________|
230.................|..............................
231		 |               ____________                   ____________
232		 |              |   demod    |                 |    tuner   |
233		 |              |------------|                 |------------|
234		 |              |   AF9013   |                 |   MXL5003  |
235		 +----I2C-------|-----/ -----|-------I2C-------|            |
236				| addr 0x3a  |                 |  addr 0xc6 |
237				|____________|                 |____________|
238*/
239	if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
240		return -EAGAIN;
241
242	while (i < num) {
243		if (msg[i].addr == state->af9013_config[0].i2c_addr ||
244		    msg[i].addr == state->af9013_config[1].i2c_addr) {
245			addr = msg[i].buf[0] << 8;
246			addr += msg[i].buf[1];
247			mbox = msg[i].buf[2];
248			addr_len = 3;
249		} else {
250			addr = msg[i].buf[0];
251			addr_len = 1;
252			/* mbox is don't care in that case */
253		}
254
255		if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
256			if (msg[i].len > 3 || msg[i+1].len > 61) {
257				ret = -EOPNOTSUPP;
258				goto error;
259			}
260			if (msg[i].addr == state->af9013_config[0].i2c_addr)
261				req.cmd = READ_MEMORY;
262			else
263				req.cmd = READ_I2C;
264			req.i2c_addr = msg[i].addr;
265			req.addr = addr;
266			req.mbox = mbox;
267			req.addr_len = addr_len;
268			req.data_len = msg[i+1].len;
269			req.data = &msg[i+1].buf[0];
270			ret = af9015_ctrl_msg(d, &req);
271			i += 2;
272		} else if (msg[i].flags & I2C_M_RD) {
273			if (msg[i].len > 61) {
274				ret = -EOPNOTSUPP;
275				goto error;
276			}
277			if (msg[i].addr == state->af9013_config[0].i2c_addr) {
278				ret = -EINVAL;
279				goto error;
280			}
281			req.cmd = READ_I2C;
282			req.i2c_addr = msg[i].addr;
283			req.addr = addr;
284			req.mbox = mbox;
285			req.addr_len = addr_len;
286			req.data_len = msg[i].len;
287			req.data = &msg[i].buf[0];
288			ret = af9015_ctrl_msg(d, &req);
289			i += 1;
290		} else {
291			if (msg[i].len > 21) {
292				ret = -EOPNOTSUPP;
293				goto error;
294			}
295			if (msg[i].addr == state->af9013_config[0].i2c_addr)
296				req.cmd = WRITE_MEMORY;
297			else
298				req.cmd = WRITE_I2C;
299			req.i2c_addr = msg[i].addr;
300			req.addr = addr;
301			req.mbox = mbox;
302			req.addr_len = addr_len;
303			req.data_len = msg[i].len-addr_len;
304			req.data = &msg[i].buf[addr_len];
305			ret = af9015_ctrl_msg(d, &req);
306			i += 1;
307		}
308		if (ret)
309			goto error;
310
311	}
312	ret = i;
313
314error:
315	mutex_unlock(&d->i2c_mutex);
316
317	return ret;
318}
319
320static u32 af9015_i2c_func(struct i2c_adapter *adapter)
321{
322	return I2C_FUNC_I2C;
323}
324
325static struct i2c_algorithm af9015_i2c_algo = {
326	.master_xfer = af9015_i2c_xfer,
327	.functionality = af9015_i2c_func,
328};
329
330static int af9015_identify_state(struct dvb_usb_device *d, const char **name)
331{
332	int ret;
333	u8 reply;
334	struct req_t req = {GET_CONFIG, 0, 0, 0, 0, 1, &reply};
335
336	ret = af9015_ctrl_msg(d, &req);
337	if (ret)
338		return ret;
339
340	dev_dbg(&d->udev->dev, "%s: reply=%02x\n", __func__, reply);
341
342	if (reply == 0x02)
343		ret = WARM;
344	else
345		ret = COLD;
346
347	return ret;
348}
349
350static int af9015_download_firmware(struct dvb_usb_device *d,
351	const struct firmware *fw)
352{
353	struct af9015_state *state = d_to_priv(d);
354	int i, len, remaining, ret;
355	struct req_t req = {DOWNLOAD_FIRMWARE, 0, 0, 0, 0, 0, NULL};
356	u16 checksum = 0;
357	dev_dbg(&d->udev->dev, "%s:\n", __func__);
358
359	/* calc checksum */
360	for (i = 0; i < fw->size; i++)
361		checksum += fw->data[i];
362
363	state->firmware_size = fw->size;
364	state->firmware_checksum = checksum;
365
366	#define FW_ADDR 0x5100 /* firmware start address */
367	#define LEN_MAX 55 /* max packet size */
368	for (remaining = fw->size; remaining > 0; remaining -= LEN_MAX) {
369		len = remaining;
370		if (len > LEN_MAX)
371			len = LEN_MAX;
372
373		req.data_len = len;
374		req.data = (u8 *) &fw->data[fw->size - remaining];
375		req.addr = FW_ADDR + fw->size - remaining;
376
377		ret = af9015_ctrl_msg(d, &req);
378		if (ret) {
379			dev_err(&d->udev->dev,
380					"%s: firmware download failed=%d\n",
381					KBUILD_MODNAME, ret);
382			goto error;
383		}
384	}
385
386	/* firmware loaded, request boot */
387	req.cmd = BOOT;
388	req.data_len = 0;
389	ret = af9015_ctrl_msg(d, &req);
390	if (ret) {
391		dev_err(&d->udev->dev, "%s: firmware boot failed=%d\n",
392				KBUILD_MODNAME, ret);
393		goto error;
394	}
395
396error:
397	return ret;
398}
399
400#define AF9015_EEPROM_SIZE 256
401
402/* hash (and dump) eeprom */
403static int af9015_eeprom_hash(struct dvb_usb_device *d)
404{
405	struct af9015_state *state = d_to_priv(d);
406	int ret, i;
407	u8 buf[AF9015_EEPROM_SIZE];
408	struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, NULL};
409
410	/* read eeprom */
411	for (i = 0; i < AF9015_EEPROM_SIZE; i++) {
412		req.addr = i;
413		req.data = &buf[i];
414		ret = af9015_ctrl_msg(d, &req);
415		if (ret < 0)
416			goto err;
417	}
418
419	/* calculate checksum */
420	for (i = 0; i < AF9015_EEPROM_SIZE / sizeof(u32); i++) {
421		state->eeprom_sum *= GOLDEN_RATIO_PRIME_32;
422		state->eeprom_sum += le32_to_cpu(((__le32 *)buf)[i]);
423	}
424
425	for (i = 0; i < AF9015_EEPROM_SIZE; i += 16)
426		dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 16, buf + i);
427
428	dev_dbg(&d->udev->dev, "%s: eeprom sum=%.8x\n",
429			__func__, state->eeprom_sum);
430	return 0;
431err:
432	dev_err(&d->udev->dev, "%s: eeprom failed=%d\n", KBUILD_MODNAME, ret);
433	return ret;
434}
435
436static int af9015_read_config(struct dvb_usb_device *d)
437{
438	struct af9015_state *state = d_to_priv(d);
439	int ret;
440	u8 val, i, offset = 0;
441	struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
442
443	dev_dbg(&d->udev->dev, "%s:\n", __func__);
444
445	/* IR remote controller */
446	req.addr = AF9015_EEPROM_IR_MODE;
447	/* first message will timeout often due to possible hw bug */
448	for (i = 0; i < 4; i++) {
449		ret = af9015_ctrl_msg(d, &req);
450		if (!ret)
451			break;
452	}
453	if (ret)
454		goto error;
455
456	ret = af9015_eeprom_hash(d);
457	if (ret)
458		goto error;
459
460	state->ir_mode = val;
461	dev_dbg(&d->udev->dev, "%s: IR mode=%d\n", __func__, val);
462
463	/* TS mode - one or two receivers */
464	req.addr = AF9015_EEPROM_TS_MODE;
465	ret = af9015_ctrl_msg(d, &req);
466	if (ret)
467		goto error;
468
469	state->dual_mode = val;
470	dev_dbg(&d->udev->dev, "%s: TS mode=%d\n", __func__, state->dual_mode);
471
472	/* disable 2nd adapter because we don't have PID-filters */
473	if (d->udev->speed == USB_SPEED_FULL)
474		state->dual_mode = 0;
475
476	if (state->dual_mode) {
477		/* read 2nd demodulator I2C address */
478		req.addr = AF9015_EEPROM_DEMOD2_I2C;
479		ret = af9015_ctrl_msg(d, &req);
480		if (ret)
481			goto error;
482
483		state->af9013_config[1].i2c_addr = val;
484	}
485
486	for (i = 0; i < state->dual_mode + 1; i++) {
487		if (i == 1)
488			offset = AF9015_EEPROM_OFFSET;
489		/* xtal */
490		req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset;
491		ret = af9015_ctrl_msg(d, &req);
492		if (ret)
493			goto error;
494		switch (val) {
495		case 0:
496			state->af9013_config[i].clock = 28800000;
497			break;
498		case 1:
499			state->af9013_config[i].clock = 20480000;
500			break;
501		case 2:
502			state->af9013_config[i].clock = 28000000;
503			break;
504		case 3:
505			state->af9013_config[i].clock = 25000000;
506			break;
507		}
508		dev_dbg(&d->udev->dev, "%s: [%d] xtal=%d set clock=%d\n",
509				__func__, i, val,
510				state->af9013_config[i].clock);
511
512		/* IF frequency */
513		req.addr = AF9015_EEPROM_IF1H + offset;
514		ret = af9015_ctrl_msg(d, &req);
515		if (ret)
516			goto error;
517
518		state->af9013_config[i].if_frequency = val << 8;
519
520		req.addr = AF9015_EEPROM_IF1L + offset;
521		ret = af9015_ctrl_msg(d, &req);
522		if (ret)
523			goto error;
524
525		state->af9013_config[i].if_frequency += val;
526		state->af9013_config[i].if_frequency *= 1000;
527		dev_dbg(&d->udev->dev, "%s: [%d] IF frequency=%d\n", __func__,
528				i, state->af9013_config[i].if_frequency);
529
530		/* MT2060 IF1 */
531		req.addr = AF9015_EEPROM_MT2060_IF1H  + offset;
532		ret = af9015_ctrl_msg(d, &req);
533		if (ret)
534			goto error;
535		state->mt2060_if1[i] = val << 8;
536		req.addr = AF9015_EEPROM_MT2060_IF1L + offset;
537		ret = af9015_ctrl_msg(d, &req);
538		if (ret)
539			goto error;
540		state->mt2060_if1[i] += val;
541		dev_dbg(&d->udev->dev, "%s: [%d] MT2060 IF1=%d\n", __func__, i,
542				state->mt2060_if1[i]);
543
544		/* tuner */
545		req.addr =  AF9015_EEPROM_TUNER_ID1 + offset;
546		ret = af9015_ctrl_msg(d, &req);
547		if (ret)
548			goto error;
549		switch (val) {
550		case AF9013_TUNER_ENV77H11D5:
551		case AF9013_TUNER_MT2060:
552		case AF9013_TUNER_QT1010:
553		case AF9013_TUNER_UNKNOWN:
554		case AF9013_TUNER_MT2060_2:
555		case AF9013_TUNER_TDA18271:
556		case AF9013_TUNER_QT1010A:
557		case AF9013_TUNER_TDA18218:
558			state->af9013_config[i].spec_inv = 1;
559			break;
560		case AF9013_TUNER_MXL5003D:
561		case AF9013_TUNER_MXL5005D:
562		case AF9013_TUNER_MXL5005R:
563		case AF9013_TUNER_MXL5007T:
564			state->af9013_config[i].spec_inv = 0;
565			break;
566		case AF9013_TUNER_MC44S803:
567			state->af9013_config[i].gpio[1] = AF9013_GPIO_LO;
568			state->af9013_config[i].spec_inv = 1;
569			break;
570		default:
571			dev_err(&d->udev->dev, "%s: tuner id=%d not " \
572					"supported, please report!\n",
573					KBUILD_MODNAME, val);
574			return -ENODEV;
575		}
576
577		state->af9013_config[i].tuner = val;
578		dev_dbg(&d->udev->dev, "%s: [%d] tuner id=%d\n",
579				__func__, i, val);
580	}
581
582error:
583	if (ret)
584		dev_err(&d->udev->dev, "%s: eeprom read failed=%d\n",
585				KBUILD_MODNAME, ret);
586
587	/* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
588	   content :-( Override some wrong values here. Ditto for the
589	   AVerTV Red HD+ (A850T) device. */
590	if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
591		((le16_to_cpu(d->udev->descriptor.idProduct) ==
592			USB_PID_AVERMEDIA_A850) ||
593		(le16_to_cpu(d->udev->descriptor.idProduct) ==
594			USB_PID_AVERMEDIA_A850T))) {
595		dev_dbg(&d->udev->dev,
596				"%s: AverMedia A850: overriding config\n",
597				__func__);
598		/* disable dual mode */
599		state->dual_mode = 0;
600
601		/* set correct IF */
602		state->af9013_config[0].if_frequency = 4570000;
603	}
604
605	return ret;
606}
607
608static int af9015_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
609		struct usb_data_stream_properties *stream)
610{
611	struct dvb_usb_device *d = fe_to_d(fe);
612	dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, fe_to_adap(fe)->id);
613
614	if (d->udev->speed == USB_SPEED_FULL)
615		stream->u.bulk.buffersize = TS_USB11_FRAME_SIZE;
616
617	return 0;
618}
619
620static int af9015_get_adapter_count(struct dvb_usb_device *d)
621{
622	struct af9015_state *state = d_to_priv(d);
623	return state->dual_mode + 1;
624}
625
626/* override demod callbacks for resource locking */
627static int af9015_af9013_set_frontend(struct dvb_frontend *fe)
628{
629	int ret;
630	struct af9015_state *state = fe_to_priv(fe);
631
632	if (mutex_lock_interruptible(&state->fe_mutex))
633		return -EAGAIN;
634
635	ret = state->set_frontend[fe_to_adap(fe)->id](fe);
636
637	mutex_unlock(&state->fe_mutex);
638
639	return ret;
640}
641
642/* override demod callbacks for resource locking */
643static int af9015_af9013_read_status(struct dvb_frontend *fe,
644	fe_status_t *status)
645{
646	int ret;
647	struct af9015_state *state = fe_to_priv(fe);
648
649	if (mutex_lock_interruptible(&state->fe_mutex))
650		return -EAGAIN;
651
652	ret = state->read_status[fe_to_adap(fe)->id](fe, status);
653
654	mutex_unlock(&state->fe_mutex);
655
656	return ret;
657}
658
659/* override demod callbacks for resource locking */
660static int af9015_af9013_init(struct dvb_frontend *fe)
661{
662	int ret;
663	struct af9015_state *state = fe_to_priv(fe);
664
665	if (mutex_lock_interruptible(&state->fe_mutex))
666		return -EAGAIN;
667
668	ret = state->init[fe_to_adap(fe)->id](fe);
669
670	mutex_unlock(&state->fe_mutex);
671
672	return ret;
673}
674
675/* override demod callbacks for resource locking */
676static int af9015_af9013_sleep(struct dvb_frontend *fe)
677{
678	int ret;
679	struct af9015_state *state = fe_to_priv(fe);
680
681	if (mutex_lock_interruptible(&state->fe_mutex))
682		return -EAGAIN;
683
684	ret = state->sleep[fe_to_adap(fe)->id](fe);
685
686	mutex_unlock(&state->fe_mutex);
687
688	return ret;
689}
690
691/* override tuner callbacks for resource locking */
692static int af9015_tuner_init(struct dvb_frontend *fe)
693{
694	int ret;
695	struct af9015_state *state = fe_to_priv(fe);
696
697	if (mutex_lock_interruptible(&state->fe_mutex))
698		return -EAGAIN;
699
700	ret = state->tuner_init[fe_to_adap(fe)->id](fe);
701
702	mutex_unlock(&state->fe_mutex);
703
704	return ret;
705}
706
707/* override tuner callbacks for resource locking */
708static int af9015_tuner_sleep(struct dvb_frontend *fe)
709{
710	int ret;
711	struct af9015_state *state = fe_to_priv(fe);
712
713	if (mutex_lock_interruptible(&state->fe_mutex))
714		return -EAGAIN;
715
716	ret = state->tuner_sleep[fe_to_adap(fe)->id](fe);
717
718	mutex_unlock(&state->fe_mutex);
719
720	return ret;
721}
722
723static int af9015_copy_firmware(struct dvb_usb_device *d)
724{
725	struct af9015_state *state = d_to_priv(d);
726	int ret;
727	u8 fw_params[4];
728	u8 val, i;
729	struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, sizeof(fw_params),
730		fw_params };
731	dev_dbg(&d->udev->dev, "%s:\n", __func__);
732
733	fw_params[0] = state->firmware_size >> 8;
734	fw_params[1] = state->firmware_size & 0xff;
735	fw_params[2] = state->firmware_checksum >> 8;
736	fw_params[3] = state->firmware_checksum & 0xff;
737
738	/* wait 2nd demodulator ready */
739	msleep(100);
740
741	ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr,
742			0x98be, &val);
743	if (ret)
744		goto error;
745	else
746		dev_dbg(&d->udev->dev, "%s: firmware status=%02x\n",
747				__func__, val);
748
749	if (val == 0x0c) /* fw is running, no need for download */
750		goto exit;
751
752	/* set I2C master clock to fast (to speed up firmware copy) */
753	ret = af9015_write_reg(d, 0xd416, 0x04); /* 0x04 * 400ns */
754	if (ret)
755		goto error;
756
757	msleep(50);
758
759	/* copy firmware */
760	ret = af9015_ctrl_msg(d, &req);
761	if (ret)
762		dev_err(&d->udev->dev, "%s: firmware copy cmd failed=%d\n",
763				KBUILD_MODNAME, ret);
764
765	dev_dbg(&d->udev->dev, "%s: firmware copy done\n", __func__);
766
767	/* set I2C master clock back to normal */
768	ret = af9015_write_reg(d, 0xd416, 0x14); /* 0x14 * 400ns */
769	if (ret)
770		goto error;
771
772	/* request boot firmware */
773	ret = af9015_write_reg_i2c(d, state->af9013_config[1].i2c_addr,
774			0xe205, 1);
775	dev_dbg(&d->udev->dev, "%s: firmware boot cmd status=%d\n",
776			__func__, ret);
777	if (ret)
778		goto error;
779
780	for (i = 0; i < 15; i++) {
781		msleep(100);
782
783		/* check firmware status */
784		ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr,
785				0x98be, &val);
786		dev_dbg(&d->udev->dev, "%s: firmware status cmd status=%d " \
787				"firmware status=%02x\n", __func__, ret, val);
788		if (ret)
789			goto error;
790
791		if (val == 0x0c || val == 0x04) /* success or fail */
792			break;
793	}
794
795	if (val == 0x04) {
796		dev_err(&d->udev->dev, "%s: firmware did not run\n",
797				KBUILD_MODNAME);
798		ret = -ETIMEDOUT;
799	} else if (val != 0x0c) {
800		dev_err(&d->udev->dev, "%s: firmware boot timeout\n",
801				KBUILD_MODNAME);
802		ret = -ETIMEDOUT;
803	}
804
805error:
806exit:
807	return ret;
808}
809
810static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
811{
812	int ret;
813	struct af9015_state *state = adap_to_priv(adap);
814
815	if (adap->id == 0) {
816		state->af9013_config[0].ts_mode = AF9013_TS_USB;
817		memcpy(state->af9013_config[0].api_version, "\x0\x1\x9\x0", 4);
818		state->af9013_config[0].gpio[0] = AF9013_GPIO_HI;
819		state->af9013_config[0].gpio[3] = AF9013_GPIO_TUNER_ON;
820	} else if (adap->id == 1) {
821		state->af9013_config[1].ts_mode = AF9013_TS_SERIAL;
822		memcpy(state->af9013_config[1].api_version, "\x0\x1\x9\x0", 4);
823		state->af9013_config[1].gpio[0] = AF9013_GPIO_TUNER_ON;
824		state->af9013_config[1].gpio[1] = AF9013_GPIO_LO;
825
826		/* copy firmware to 2nd demodulator */
827		if (state->dual_mode) {
828			ret = af9015_copy_firmware(adap_to_d(adap));
829			if (ret) {
830				dev_err(&adap_to_d(adap)->udev->dev,
831						"%s: firmware copy to 2nd " \
832						"frontend failed, will " \
833						"disable it\n", KBUILD_MODNAME);
834				state->dual_mode = 0;
835				return -ENODEV;
836			}
837		} else {
838			return -ENODEV;
839		}
840	}
841
842	/* attach demodulator */
843	adap->fe[0] = dvb_attach(af9013_attach,
844		&state->af9013_config[adap->id], &adap_to_d(adap)->i2c_adap);
845
846	/*
847	 * AF9015 firmware does not like if it gets interrupted by I2C adapter
848	 * request on some critical phases. During normal operation I2C adapter
849	 * is used only 2nd demodulator and tuner on dual tuner devices.
850	 * Override demodulator callbacks and use mutex for limit access to
851	 * those "critical" paths to keep AF9015 happy.
852	 */
853	if (adap->fe[0]) {
854		state->set_frontend[adap->id] =
855			adap->fe[0]->ops.set_frontend;
856		adap->fe[0]->ops.set_frontend =
857			af9015_af9013_set_frontend;
858
859		state->read_status[adap->id] =
860			adap->fe[0]->ops.read_status;
861		adap->fe[0]->ops.read_status =
862			af9015_af9013_read_status;
863
864		state->init[adap->id] = adap->fe[0]->ops.init;
865		adap->fe[0]->ops.init = af9015_af9013_init;
866
867		state->sleep[adap->id] = adap->fe[0]->ops.sleep;
868		adap->fe[0]->ops.sleep = af9015_af9013_sleep;
869	}
870
871	return adap->fe[0] == NULL ? -ENODEV : 0;
872}
873
874static struct mt2060_config af9015_mt2060_config = {
875	.i2c_address = 0xc0,
876	.clock_out = 0,
877};
878
879static struct qt1010_config af9015_qt1010_config = {
880	.i2c_address = 0xc4,
881};
882
883static struct tda18271_config af9015_tda18271_config = {
884	.gate = TDA18271_GATE_DIGITAL,
885	.small_i2c = TDA18271_16_BYTE_CHUNK_INIT,
886};
887
888static struct mxl5005s_config af9015_mxl5003_config = {
889	.i2c_address     = 0xc6,
890	.if_freq         = IF_FREQ_4570000HZ,
891	.xtal_freq       = CRYSTAL_FREQ_16000000HZ,
892	.agc_mode        = MXL_SINGLE_AGC,
893	.tracking_filter = MXL_TF_DEFAULT,
894	.rssi_enable     = MXL_RSSI_ENABLE,
895	.cap_select      = MXL_CAP_SEL_ENABLE,
896	.div_out         = MXL_DIV_OUT_4,
897	.clock_out       = MXL_CLOCK_OUT_DISABLE,
898	.output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
899	.top		 = MXL5005S_TOP_25P2,
900	.mod_mode        = MXL_DIGITAL_MODE,
901	.if_mode         = MXL_ZERO_IF,
902	.AgcMasterByte   = 0x00,
903};
904
905static struct mxl5005s_config af9015_mxl5005_config = {
906	.i2c_address     = 0xc6,
907	.if_freq         = IF_FREQ_4570000HZ,
908	.xtal_freq       = CRYSTAL_FREQ_16000000HZ,
909	.agc_mode        = MXL_SINGLE_AGC,
910	.tracking_filter = MXL_TF_OFF,
911	.rssi_enable     = MXL_RSSI_ENABLE,
912	.cap_select      = MXL_CAP_SEL_ENABLE,
913	.div_out         = MXL_DIV_OUT_4,
914	.clock_out       = MXL_CLOCK_OUT_DISABLE,
915	.output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
916	.top		 = MXL5005S_TOP_25P2,
917	.mod_mode        = MXL_DIGITAL_MODE,
918	.if_mode         = MXL_ZERO_IF,
919	.AgcMasterByte   = 0x00,
920};
921
922static struct mc44s803_config af9015_mc44s803_config = {
923	.i2c_address = 0xc0,
924	.dig_out = 1,
925};
926
927static struct tda18218_config af9015_tda18218_config = {
928	.i2c_address = 0xc0,
929	.i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */
930};
931
932static struct mxl5007t_config af9015_mxl5007t_config = {
933	.xtal_freq_hz = MxL_XTAL_24_MHZ,
934	.if_freq_hz = MxL_IF_4_57_MHZ,
935};
936
937static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
938{
939	struct dvb_usb_device *d = adap_to_d(adap);
940	struct af9015_state *state = d_to_priv(d);
941	int ret;
942	dev_dbg(&d->udev->dev, "%s:\n", __func__);
943
944	switch (state->af9013_config[adap->id].tuner) {
945	case AF9013_TUNER_MT2060:
946	case AF9013_TUNER_MT2060_2:
947		ret = dvb_attach(mt2060_attach, adap->fe[0],
948			&adap_to_d(adap)->i2c_adap, &af9015_mt2060_config,
949			state->mt2060_if1[adap->id])
950			== NULL ? -ENODEV : 0;
951		break;
952	case AF9013_TUNER_QT1010:
953	case AF9013_TUNER_QT1010A:
954		ret = dvb_attach(qt1010_attach, adap->fe[0],
955			&adap_to_d(adap)->i2c_adap,
956			&af9015_qt1010_config) == NULL ? -ENODEV : 0;
957		break;
958	case AF9013_TUNER_TDA18271:
959		ret = dvb_attach(tda18271_attach, adap->fe[0], 0xc0,
960			&adap_to_d(adap)->i2c_adap,
961			&af9015_tda18271_config) == NULL ? -ENODEV : 0;
962		break;
963	case AF9013_TUNER_TDA18218:
964		ret = dvb_attach(tda18218_attach, adap->fe[0],
965			&adap_to_d(adap)->i2c_adap,
966			&af9015_tda18218_config) == NULL ? -ENODEV : 0;
967		break;
968	case AF9013_TUNER_MXL5003D:
969		ret = dvb_attach(mxl5005s_attach, adap->fe[0],
970			&adap_to_d(adap)->i2c_adap,
971			&af9015_mxl5003_config) == NULL ? -ENODEV : 0;
972		break;
973	case AF9013_TUNER_MXL5005D:
974	case AF9013_TUNER_MXL5005R:
975		ret = dvb_attach(mxl5005s_attach, adap->fe[0],
976			&adap_to_d(adap)->i2c_adap,
977			&af9015_mxl5005_config) == NULL ? -ENODEV : 0;
978		break;
979	case AF9013_TUNER_ENV77H11D5:
980		ret = dvb_attach(dvb_pll_attach, adap->fe[0], 0xc0,
981			&adap_to_d(adap)->i2c_adap,
982			DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
983		break;
984	case AF9013_TUNER_MC44S803:
985		ret = dvb_attach(mc44s803_attach, adap->fe[0],
986			&adap_to_d(adap)->i2c_adap,
987			&af9015_mc44s803_config) == NULL ? -ENODEV : 0;
988		break;
989	case AF9013_TUNER_MXL5007T:
990		ret = dvb_attach(mxl5007t_attach, adap->fe[0],
991			&adap_to_d(adap)->i2c_adap,
992			0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
993		break;
994	case AF9013_TUNER_UNKNOWN:
995	default:
996		dev_err(&d->udev->dev, "%s: unknown tuner id=%d\n",
997				KBUILD_MODNAME,
998				state->af9013_config[adap->id].tuner);
999		ret = -ENODEV;
1000	}
1001
1002	if (adap->fe[0]->ops.tuner_ops.init) {
1003		state->tuner_init[adap->id] =
1004			adap->fe[0]->ops.tuner_ops.init;
1005		adap->fe[0]->ops.tuner_ops.init = af9015_tuner_init;
1006	}
1007
1008	if (adap->fe[0]->ops.tuner_ops.sleep) {
1009		state->tuner_sleep[adap->id] =
1010			adap->fe[0]->ops.tuner_ops.sleep;
1011		adap->fe[0]->ops.tuner_ops.sleep = af9015_tuner_sleep;
1012	}
1013
1014	return ret;
1015}
1016
1017static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
1018{
1019	struct dvb_usb_device *d = adap_to_d(adap);
1020	int ret;
1021	dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
1022
1023	if (onoff)
1024		ret = af9015_set_reg_bit(d, 0xd503, 0);
1025	else
1026		ret = af9015_clear_reg_bit(d, 0xd503, 0);
1027
1028	return ret;
1029}
1030
1031static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
1032	int onoff)
1033{
1034	struct dvb_usb_device *d = adap_to_d(adap);
1035	int ret;
1036	u8 idx;
1037	dev_dbg(&d->udev->dev, "%s: index=%d pid=%04x onoff=%d\n",
1038			__func__, index, pid, onoff);
1039
1040	ret = af9015_write_reg(d, 0xd505, (pid & 0xff));
1041	if (ret)
1042		goto error;
1043
1044	ret = af9015_write_reg(d, 0xd506, (pid >> 8));
1045	if (ret)
1046		goto error;
1047
1048	idx = ((index & 0x1f) | (1 << 5));
1049	ret = af9015_write_reg(d, 0xd504, idx);
1050
1051error:
1052	return ret;
1053}
1054
1055static int af9015_init_endpoint(struct dvb_usb_device *d)
1056{
1057	struct af9015_state *state = d_to_priv(d);
1058	int ret;
1059	u16 frame_size;
1060	u8  packet_size;
1061	dev_dbg(&d->udev->dev, "%s: USB speed=%d\n", __func__, d->udev->speed);
1062
1063	if (d->udev->speed == USB_SPEED_FULL) {
1064		frame_size = TS_USB11_FRAME_SIZE/4;
1065		packet_size = TS_USB11_MAX_PACKET_SIZE/4;
1066	} else {
1067		frame_size = TS_USB20_FRAME_SIZE/4;
1068		packet_size = TS_USB20_MAX_PACKET_SIZE/4;
1069	}
1070
1071	ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */
1072	if (ret)
1073		goto error;
1074	ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */
1075	if (ret)
1076		goto error;
1077	ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */
1078	if (ret)
1079		goto error;
1080	ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */
1081	if (ret)
1082		goto error;
1083	ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */
1084	if (ret)
1085		goto error;
1086	if (state->dual_mode) {
1087		ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */
1088		if (ret)
1089			goto error;
1090	}
1091	ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */
1092	if (ret)
1093		goto error;
1094	if (state->dual_mode) {
1095		ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */
1096		if (ret)
1097			goto error;
1098	}
1099	/* EP4 xfer length */
1100	ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff);
1101	if (ret)
1102		goto error;
1103	ret = af9015_write_reg(d, 0xdd89, frame_size >> 8);
1104	if (ret)
1105		goto error;
1106	/* EP5 xfer length */
1107	ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff);
1108	if (ret)
1109		goto error;
1110	ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8);
1111	if (ret)
1112		goto error;
1113	ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */
1114	if (ret)
1115		goto error;
1116	ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */
1117	if (ret)
1118		goto error;
1119	ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */
1120	if (ret)
1121		goto error;
1122	if (state->dual_mode) {
1123		ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */
1124		if (ret)
1125			goto error;
1126	}
1127
1128	/* enable / disable mp2if2 */
1129	if (state->dual_mode)
1130		ret = af9015_set_reg_bit(d, 0xd50b, 0);
1131	else
1132		ret = af9015_clear_reg_bit(d, 0xd50b, 0);
1133
1134error:
1135	if (ret)
1136		dev_err(&d->udev->dev, "%s: endpoint init failed=%d\n",
1137				KBUILD_MODNAME, ret);
1138
1139	return ret;
1140}
1141
1142static int af9015_init(struct dvb_usb_device *d)
1143{
1144	struct af9015_state *state = d_to_priv(d);
1145	int ret;
1146	dev_dbg(&d->udev->dev, "%s:\n", __func__);
1147
1148	mutex_init(&state->fe_mutex);
1149
1150	/* init RC canary */
1151	ret = af9015_write_reg(d, 0x98e9, 0xff);
1152	if (ret)
1153		goto error;
1154
1155	ret = af9015_init_endpoint(d);
1156	if (ret)
1157		goto error;
1158
1159error:
1160	return ret;
1161}
1162
1163#if IS_ENABLED(CONFIG_RC_CORE)
1164struct af9015_rc_setup {
1165	unsigned int id;
1166	char *rc_codes;
1167};
1168
1169static char *af9015_rc_setup_match(unsigned int id,
1170	const struct af9015_rc_setup *table)
1171{
1172	for (; table->rc_codes; table++)
1173		if (table->id == id)
1174			return table->rc_codes;
1175	return NULL;
1176}
1177
1178static const struct af9015_rc_setup af9015_rc_setup_modparam[] = {
1179	{ AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
1180	{ AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
1181	{ AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
1182	{ AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
1183	{ AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
1184	{ }
1185};
1186
1187static const struct af9015_rc_setup af9015_rc_setup_hashes[] = {
1188	{ 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
1189	{ 0xa3703d00, RC_MAP_ALINK_DTU_M },
1190	{ 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
1191	{ 0x5d49e3db, RC_MAP_DIGITTRADE }, /* LC-Power LC-USB-DVBT */
1192	{ }
1193};
1194
1195static int af9015_rc_query(struct dvb_usb_device *d)
1196{
1197	struct af9015_state *state = d_to_priv(d);
1198	int ret;
1199	u8 buf[17];
1200
1201	/* read registers needed to detect remote controller code */
1202	ret = af9015_read_regs(d, 0x98d9, buf, sizeof(buf));
1203	if (ret)
1204		goto error;
1205
1206	/* If any of these are non-zero, assume invalid data */
1207	if (buf[1] || buf[2] || buf[3]) {
1208		dev_dbg(&d->udev->dev, "%s: invalid data\n", __func__);
1209		return ret;
1210	}
1211
1212	/* Check for repeat of previous code */
1213	if ((state->rc_repeat != buf[6] || buf[0]) &&
1214			!memcmp(&buf[12], state->rc_last, 4)) {
1215		dev_dbg(&d->udev->dev, "%s: key repeated\n", __func__);
1216		rc_repeat(d->rc_dev);
1217		state->rc_repeat = buf[6];
1218		return ret;
1219	}
1220
1221	/* Only process key if canary killed */
1222	if (buf[16] != 0xff && buf[0] != 0x01) {
1223		dev_dbg(&d->udev->dev, "%s: key pressed %*ph\n",
1224				__func__, 4, buf + 12);
1225
1226		/* Reset the canary */
1227		ret = af9015_write_reg(d, 0x98e9, 0xff);
1228		if (ret)
1229			goto error;
1230
1231		/* Remember this key */
1232		memcpy(state->rc_last, &buf[12], 4);
1233		if (buf[14] == (u8) ~buf[15]) {
1234			if (buf[12] == (u8) ~buf[13]) {
1235				/* NEC */
1236				state->rc_keycode = RC_SCANCODE_NEC(buf[12],
1237								    buf[14]);
1238			} else {
1239				/* NEC extended*/
1240				state->rc_keycode = RC_SCANCODE_NECX(buf[12] << 8 |
1241								     buf[13],
1242								     buf[14]);
1243			}
1244		} else {
1245			/* 32 bit NEC */
1246			state->rc_keycode = RC_SCANCODE_NEC32(buf[12] << 24 |
1247							      buf[13] << 16 |
1248							      buf[14] << 8  |
1249							      buf[15]);
1250		}
1251		rc_keydown(d->rc_dev, RC_TYPE_NEC, state->rc_keycode, 0);
1252	} else {
1253		dev_dbg(&d->udev->dev, "%s: no key press\n", __func__);
1254		/* Invalidate last keypress */
1255		/* Not really needed, but helps with debug */
1256		state->rc_last[2] = state->rc_last[3];
1257	}
1258
1259	state->rc_repeat = buf[6];
1260	state->rc_failed = false;
1261
1262error:
1263	if (ret) {
1264		dev_warn(&d->udev->dev, "%s: rc query failed=%d\n",
1265				KBUILD_MODNAME, ret);
1266
1267		/* allow random errors as dvb-usb will stop polling on error */
1268		if (!state->rc_failed)
1269			ret = 0;
1270
1271		state->rc_failed = true;
1272	}
1273
1274	return ret;
1275}
1276
1277static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1278{
1279	struct af9015_state *state = d_to_priv(d);
1280	u16 vid = le16_to_cpu(d->udev->descriptor.idVendor);
1281
1282	if (state->ir_mode == AF9015_IR_MODE_DISABLED)
1283		return 0;
1284
1285	/* try to load remote based module param */
1286	if (!rc->map_name)
1287		rc->map_name = af9015_rc_setup_match(dvb_usb_af9015_remote,
1288				af9015_rc_setup_modparam);
1289
1290	/* try to load remote based eeprom hash */
1291	if (!rc->map_name)
1292		rc->map_name = af9015_rc_setup_match(state->eeprom_sum,
1293				af9015_rc_setup_hashes);
1294
1295	/* try to load remote based USB iManufacturer string */
1296	if (!rc->map_name && vid == USB_VID_AFATECH) {
1297		/* Check USB manufacturer and product strings and try
1298		   to determine correct remote in case of chip vendor
1299		   reference IDs are used.
1300		   DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
1301		char manufacturer[10];
1302		memset(manufacturer, 0, sizeof(manufacturer));
1303		usb_string(d->udev, d->udev->descriptor.iManufacturer,
1304			manufacturer, sizeof(manufacturer));
1305		if (!strcmp("MSI", manufacturer)) {
1306			/* iManufacturer 1 MSI
1307			   iProduct      2 MSI K-VOX */
1308			rc->map_name = af9015_rc_setup_match(
1309					AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
1310					af9015_rc_setup_modparam);
1311		}
1312	}
1313
1314	/* load empty to enable rc */
1315	if (!rc->map_name)
1316		rc->map_name = RC_MAP_EMPTY;
1317
1318	rc->allowed_protos = RC_BIT_NEC;
1319	rc->query = af9015_rc_query;
1320	rc->interval = 500;
1321
1322	return 0;
1323}
1324#else
1325	#define af9015_get_rc_config NULL
1326#endif
1327
1328static int af9015_probe(struct usb_interface *intf,
1329		const struct usb_device_id *id)
1330{
1331	struct usb_device *udev = interface_to_usbdev(intf);
1332	char manufacturer[sizeof("ITE Technologies, Inc.")];
1333
1334	memset(manufacturer, 0, sizeof(manufacturer));
1335	usb_string(udev, udev->descriptor.iManufacturer,
1336			manufacturer, sizeof(manufacturer));
1337	/*
1338	 * There is two devices having same ID but different chipset. One uses
1339	 * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1340	 * is iManufacturer string.
1341	 *
1342	 * idVendor           0x0ccd TerraTec Electronic GmbH
1343	 * idProduct          0x0099
1344	 * bcdDevice            2.00
1345	 * iManufacturer           1 Afatech
1346	 * iProduct                2 DVB-T 2
1347	 *
1348	 * idVendor           0x0ccd TerraTec Electronic GmbH
1349	 * idProduct          0x0099
1350	 * bcdDevice            2.00
1351	 * iManufacturer           1 ITE Technologies, Inc.
1352	 * iProduct                2 DVB-T TV Stick
1353	 */
1354	if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1355			(le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1356		if (!strcmp("ITE Technologies, Inc.", manufacturer)) {
1357			dev_dbg(&udev->dev, "%s: rejecting device\n", __func__);
1358			return -ENODEV;
1359		}
1360	}
1361
1362	return dvb_usbv2_probe(intf, id);
1363}
1364
1365/* interface 0 is used by DVB-T receiver and
1366   interface 1 is for remote controller (HID) */
1367static struct dvb_usb_device_properties af9015_props = {
1368	.driver_name = KBUILD_MODNAME,
1369	.owner = THIS_MODULE,
1370	.adapter_nr = adapter_nr,
1371	.size_of_priv = sizeof(struct af9015_state),
1372
1373	.generic_bulk_ctrl_endpoint = 0x02,
1374	.generic_bulk_ctrl_endpoint_response = 0x81,
1375
1376	.identify_state = af9015_identify_state,
1377	.firmware = AF9015_FIRMWARE,
1378	.download_firmware = af9015_download_firmware,
1379
1380	.i2c_algo = &af9015_i2c_algo,
1381	.read_config = af9015_read_config,
1382	.frontend_attach = af9015_af9013_frontend_attach,
1383	.tuner_attach = af9015_tuner_attach,
1384	.init = af9015_init,
1385	.get_rc_config = af9015_get_rc_config,
1386	.get_stream_config = af9015_get_stream_config,
1387
1388	.get_adapter_count = af9015_get_adapter_count,
1389	.adapter = {
1390		{
1391			.caps = DVB_USB_ADAP_HAS_PID_FILTER |
1392				DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1393			.pid_filter_count = 32,
1394			.pid_filter = af9015_pid_filter,
1395			.pid_filter_ctrl = af9015_pid_filter_ctrl,
1396
1397			.stream = DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE),
1398		}, {
1399			.stream = DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE),
1400		},
1401	},
1402};
1403
1404static const struct usb_device_id af9015_id_table[] = {
1405	{ DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015,
1406		&af9015_props, "Afatech AF9015 reference design", NULL) },
1407	{ DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016,
1408		&af9015_props, "Afatech AF9015 reference design", NULL) },
1409	{ DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD,
1410		&af9015_props, "Leadtek WinFast DTV Dongle Gold", RC_MAP_LEADTEK_Y04G0051) },
1411	{ DVB_USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E,
1412		&af9015_props, "Pinnacle PCTV 71e", NULL) },
1413	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U,
1414		&af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1415	{ DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN,
1416		&af9015_props, "DigitalNow TinyTwin", RC_MAP_AZUREWAVE_AD_TU700) },
1417	{ DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700,
1418		&af9015_props, "TwinHan AzureWave AD-TU700(704J)", RC_MAP_AZUREWAVE_AD_TU700) },
1419	{ DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2,
1420		&af9015_props, "TerraTec Cinergy T USB XE", NULL) },
1421	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T,
1422		&af9015_props, "KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)", NULL) },
1423	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X,
1424		&af9015_props, "AVerMedia AVerTV DVB-T Volar X", RC_MAP_AVERMEDIA_M135A) },
1425	{ DVB_USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380,
1426		&af9015_props, "Xtensions XD-380", NULL) },
1427	{ DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO,
1428		&af9015_props, "MSI DIGIVOX Duo", RC_MAP_MSI_DIGIVOX_III) },
1429	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2,
1430		&af9015_props, "Fujitsu-Siemens Slim Mobile USB DVB-T", NULL) },
1431	{ DVB_USB_DEVICE(USB_VID_TELESTAR,  USB_PID_TELESTAR_STARSTICK_2,
1432		&af9015_props, "Telestar Starstick 2", NULL) },
1433	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309,
1434		&af9015_props, "AVerMedia A309", NULL) },
1435	{ DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III,
1436		&af9015_props, "MSI Digi VOX mini III", RC_MAP_MSI_DIGIVOX_III) },
1437	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U,
1438		&af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1439	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2,
1440		&af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1441	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3,
1442		&af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1443	{ DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT,
1444		&af9015_props, "TrekStor DVB-T USB Stick", RC_MAP_TREKSTOR) },
1445	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850,
1446		&af9015_props, "AverMedia AVerTV Volar Black HD (A850)", NULL) },
1447	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805,
1448		&af9015_props, "AverMedia AVerTV Volar GPS 805 (A805)", NULL) },
1449	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU,
1450		&af9015_props, "Conceptronic USB2.0 DVB-T CTVDIGRCU V3.0", NULL) },
1451	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810,
1452		&af9015_props, "KWorld Digial MC-810", NULL) },
1453	{ DVB_USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03,
1454		&af9015_props, "Genius TVGo DVB-T03", NULL) },
1455	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2,
1456		&af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1457	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T,
1458		&af9015_props, "KWorld PlusTV DVB-T PCI Pro Card (DVB-T PC160-T)", NULL) },
1459	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20,
1460		&af9015_props, "Sveon STV20 Tuner USB DVB-T HDTV", NULL) },
1461	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2,
1462		&af9015_props, "DigitalNow TinyTwin v2", RC_MAP_DIGITALNOW_TINYTWIN) },
1463	{ DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS,
1464		&af9015_props, "Leadtek WinFast DTV2000DS", RC_MAP_LEADTEK_Y04G0051) },
1465	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T,
1466		&af9015_props, "KWorld USB DVB-T Stick Mobile (UB383-T)", NULL) },
1467	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4,
1468		&af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1469	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M,
1470		&af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) },
1471	{ DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC,
1472		&af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) },
1473	/* XXX: that same ID [0ccd:0099] is used by af9035 driver too */
1474	{ DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
1475		&af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) },
1476	{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T,
1477		&af9015_props, "AverMedia AVerTV Red HD+ (A850T)", NULL) },
1478	{ DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3,
1479		&af9015_props, "DigitalNow TinyTwin v3", RC_MAP_DIGITALNOW_TINYTWIN) },
1480	{ DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22,
1481		&af9015_props, "Sveon STV22 Dual USB DVB-T Tuner HDTV", RC_MAP_MSI_DIGIVOX_III) },
1482	{ }
1483};
1484MODULE_DEVICE_TABLE(usb, af9015_id_table);
1485
1486/* usb specific object needed to register this driver with the usb subsystem */
1487static struct usb_driver af9015_usb_driver = {
1488	.name = KBUILD_MODNAME,
1489	.id_table = af9015_id_table,
1490	.probe = af9015_probe,
1491	.disconnect = dvb_usbv2_disconnect,
1492	.suspend = dvb_usbv2_suspend,
1493	.resume = dvb_usbv2_resume,
1494	.reset_resume = dvb_usbv2_reset_resume,
1495	.no_dynamic_id = 1,
1496	.soft_unbind = 1,
1497};
1498
1499module_usb_driver(af9015_usb_driver);
1500
1501MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1502MODULE_DESCRIPTION("Afatech AF9015 driver");
1503MODULE_LICENSE("GPL");
1504MODULE_FIRMWARE(AF9015_FIRMWARE);
1505