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