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