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