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