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 <linux/hash.h>
25 #include <linux/slab.h>
26 
27 #include "af9015.h"
28 #include "af9013.h"
29 #include "mt2060.h"
30 #include "qt1010.h"
31 #include "tda18271.h"
32 #include "mxl5005s.h"
33 #include "mc44s803.h"
34 #include "tda18218.h"
35 #include "mxl5007t.h"
36 
37 static int dvb_usb_af9015_debug;
38 module_param_named(debug, dvb_usb_af9015_debug, int, 0644);
39 MODULE_PARM_DESC(debug, "set debugging level" DVB_USB_DEBUG_STATUS);
40 static int dvb_usb_af9015_remote;
41 module_param_named(remote, dvb_usb_af9015_remote, int, 0644);
42 MODULE_PARM_DESC(remote, "select remote");
43 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
44 
45 static DEFINE_MUTEX(af9015_usb_mutex);
46 
47 static struct af9015_config af9015_config;
48 static struct dvb_usb_device_properties af9015_properties[3];
49 static int af9015_properties_count = ARRAY_SIZE(af9015_properties);
50 
51 static struct af9013_config af9015_af9013_config[] = {
52 	{
53 		.i2c_addr = AF9015_I2C_DEMOD,
54 		.ts_mode = AF9013_TS_USB,
55 		.api_version = { 0, 1, 9, 0 },
56 		.gpio[0] = AF9013_GPIO_HI,
57 		.gpio[3] = AF9013_GPIO_TUNER_ON,
58 
59 	}, {
60 		.ts_mode = AF9013_TS_SERIAL,
61 		.api_version = { 0, 1, 9, 0 },
62 		.gpio[0] = AF9013_GPIO_TUNER_ON,
63 		.gpio[1] = AF9013_GPIO_LO,
64 	}
65 };
66 
af9015_rw_udev(struct usb_device * udev,struct req_t * req)67 static int af9015_rw_udev(struct usb_device *udev, struct req_t *req)
68 {
69 #define BUF_LEN 63
70 #define REQ_HDR_LEN 8 /* send header size */
71 #define ACK_HDR_LEN 2 /* rece header size */
72 	int act_len, ret;
73 	u8 buf[BUF_LEN];
74 	u8 write = 1;
75 	u8 msg_len = REQ_HDR_LEN;
76 	static u8 seq; /* packet sequence number */
77 
78 	if (mutex_lock_interruptible(&af9015_usb_mutex) < 0)
79 		return -EAGAIN;
80 
81 	buf[0] = req->cmd;
82 	buf[1] = seq++;
83 	buf[2] = req->i2c_addr;
84 	buf[3] = req->addr >> 8;
85 	buf[4] = req->addr & 0xff;
86 	buf[5] = req->mbox;
87 	buf[6] = req->addr_len;
88 	buf[7] = req->data_len;
89 
90 	switch (req->cmd) {
91 	case GET_CONFIG:
92 	case READ_MEMORY:
93 	case RECONNECT_USB:
94 		write = 0;
95 		break;
96 	case READ_I2C:
97 		write = 0;
98 		buf[2] |= 0x01; /* set I2C direction */
99 	case WRITE_I2C:
100 		buf[0] = READ_WRITE_I2C;
101 		break;
102 	case WRITE_MEMORY:
103 		if (((req->addr & 0xff00) == 0xff00) ||
104 		    ((req->addr & 0xff00) == 0xae00))
105 			buf[0] = WRITE_VIRTUAL_MEMORY;
106 	case WRITE_VIRTUAL_MEMORY:
107 	case COPY_FIRMWARE:
108 	case DOWNLOAD_FIRMWARE:
109 	case BOOT:
110 		break;
111 	default:
112 		err("unknown command:%d", req->cmd);
113 		ret = -1;
114 		goto error_unlock;
115 	}
116 
117 	/* buffer overflow check */
118 	if ((write && (req->data_len > BUF_LEN - REQ_HDR_LEN)) ||
119 		(!write && (req->data_len > BUF_LEN - ACK_HDR_LEN))) {
120 		err("too much data; cmd:%d len:%d", req->cmd, req->data_len);
121 		ret = -EINVAL;
122 		goto error_unlock;
123 	}
124 
125 	/* write requested */
126 	if (write) {
127 		memcpy(&buf[REQ_HDR_LEN], req->data, req->data_len);
128 		msg_len += req->data_len;
129 	}
130 
131 	deb_xfer(">>> ");
132 	debug_dump(buf, msg_len, deb_xfer);
133 
134 	/* send req */
135 	ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, 0x02), buf, msg_len,
136 		&act_len, AF9015_USB_TIMEOUT);
137 	if (ret)
138 		err("bulk message failed:%d (%d/%d)", ret, msg_len, act_len);
139 	else
140 		if (act_len != msg_len)
141 			ret = -1; /* all data is not send */
142 	if (ret)
143 		goto error_unlock;
144 
145 	/* no ack for those packets */
146 	if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB)
147 		goto exit_unlock;
148 
149 	/* write receives seq + status = 2 bytes
150 	   read receives seq + status + data = 2 + N bytes */
151 	msg_len = ACK_HDR_LEN;
152 	if (!write)
153 		msg_len += req->data_len;
154 
155 	ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, 0x81), buf, msg_len,
156 		&act_len, AF9015_USB_TIMEOUT);
157 	if (ret) {
158 		err("recv bulk message failed:%d", ret);
159 		ret = -1;
160 		goto error_unlock;
161 	}
162 
163 	deb_xfer("<<< ");
164 	debug_dump(buf, act_len, deb_xfer);
165 
166 	/* check status */
167 	if (buf[1]) {
168 		err("command failed:%d", buf[1]);
169 		ret = -1;
170 		goto error_unlock;
171 	}
172 
173 	/* read request, copy returned data to return buf */
174 	if (!write)
175 		memcpy(req->data, &buf[ACK_HDR_LEN], req->data_len);
176 
177 error_unlock:
178 exit_unlock:
179 	mutex_unlock(&af9015_usb_mutex);
180 
181 	return ret;
182 }
183 
af9015_ctrl_msg(struct dvb_usb_device * d,struct req_t * req)184 static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req)
185 {
186 	return af9015_rw_udev(d->udev, req);
187 }
188 
af9015_write_regs(struct dvb_usb_device * d,u16 addr,u8 * val,u8 len)189 static int af9015_write_regs(struct dvb_usb_device *d, u16 addr, u8 *val,
190 	u8 len)
191 {
192 	struct req_t req = {WRITE_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
193 		val};
194 	return af9015_ctrl_msg(d, &req);
195 }
196 
af9015_write_reg(struct dvb_usb_device * d,u16 addr,u8 val)197 static int af9015_write_reg(struct dvb_usb_device *d, u16 addr, u8 val)
198 {
199 	return af9015_write_regs(d, addr, &val, 1);
200 }
201 
af9015_read_regs(struct dvb_usb_device * d,u16 addr,u8 * val,u8 len)202 static int af9015_read_regs(struct dvb_usb_device *d, u16 addr, u8 *val, u8 len)
203 {
204 	struct req_t req = {READ_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
205 		val};
206 	return af9015_ctrl_msg(d, &req);
207 }
208 
af9015_read_reg(struct dvb_usb_device * d,u16 addr,u8 * val)209 static int af9015_read_reg(struct dvb_usb_device *d, u16 addr, u8 *val)
210 {
211 	return af9015_read_regs(d, addr, val, 1);
212 }
213 
af9015_write_reg_i2c(struct dvb_usb_device * d,u8 addr,u16 reg,u8 val)214 static int af9015_write_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
215 	u8 val)
216 {
217 	struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val};
218 
219 	if (addr == af9015_af9013_config[0].i2c_addr ||
220 	    addr == af9015_af9013_config[1].i2c_addr)
221 		req.addr_len = 3;
222 
223 	return af9015_ctrl_msg(d, &req);
224 }
225 
af9015_read_reg_i2c(struct dvb_usb_device * d,u8 addr,u16 reg,u8 * val)226 static int af9015_read_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
227 	u8 *val)
228 {
229 	struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val};
230 
231 	if (addr == af9015_af9013_config[0].i2c_addr ||
232 	    addr == af9015_af9013_config[1].i2c_addr)
233 		req.addr_len = 3;
234 
235 	return af9015_ctrl_msg(d, &req);
236 }
237 
af9015_i2c_xfer(struct i2c_adapter * adap,struct i2c_msg msg[],int num)238 static int af9015_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
239 	int num)
240 {
241 	struct dvb_usb_device *d = i2c_get_adapdata(adap);
242 	int ret = 0, i = 0;
243 	u16 addr;
244 	u8 uninitialized_var(mbox), addr_len;
245 	struct req_t req;
246 
247 /* TODO: implement bus lock
248 
249 The bus lock is needed because there is two tuners both using same I2C-address.
250 Due to that the only way to select correct tuner is use demodulator I2C-gate.
251 
252 ................................................
253 . AF9015 includes integrated AF9013 demodulator.
254 . ____________                   ____________  .                ____________
255 .|     uC     |                 |   demod    | .               |    tuner   |
256 .|------------|                 |------------| .               |------------|
257 .|   AF9015   |                 |  AF9013/5  | .               |   MXL5003  |
258 .|            |--+----I2C-------|-----/ -----|-.-----I2C-------|            |
259 .|            |  |              | addr 0x38  | .               |  addr 0xc6 |
260 .|____________|  |              |____________| .               |____________|
261 .................|..............................
262 		 |               ____________                   ____________
263 		 |              |   demod    |                 |    tuner   |
264 		 |              |------------|                 |------------|
265 		 |              |   AF9013   |                 |   MXL5003  |
266 		 +----I2C-------|-----/ -----|-------I2C-------|            |
267 				| addr 0x3a  |                 |  addr 0xc6 |
268 				|____________|                 |____________|
269 */
270 	if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
271 		return -EAGAIN;
272 
273 	while (i < num) {
274 		if (msg[i].addr == af9015_af9013_config[0].i2c_addr ||
275 		    msg[i].addr == af9015_af9013_config[1].i2c_addr) {
276 			addr = msg[i].buf[0] << 8;
277 			addr += msg[i].buf[1];
278 			mbox = msg[i].buf[2];
279 			addr_len = 3;
280 		} else {
281 			addr = msg[i].buf[0];
282 			addr_len = 1;
283 			/* mbox is don't care in that case */
284 		}
285 
286 		if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
287 			if (msg[i].len > 3 || msg[i+1].len > 61) {
288 				ret = -EOPNOTSUPP;
289 				goto error;
290 			}
291 			if (msg[i].addr == af9015_af9013_config[0].i2c_addr)
292 				req.cmd = READ_MEMORY;
293 			else
294 				req.cmd = READ_I2C;
295 			req.i2c_addr = msg[i].addr;
296 			req.addr = addr;
297 			req.mbox = mbox;
298 			req.addr_len = addr_len;
299 			req.data_len = msg[i+1].len;
300 			req.data = &msg[i+1].buf[0];
301 			ret = af9015_ctrl_msg(d, &req);
302 			i += 2;
303 		} else if (msg[i].flags & I2C_M_RD) {
304 			if (msg[i].len > 61) {
305 				ret = -EOPNOTSUPP;
306 				goto error;
307 			}
308 			if (msg[i].addr ==
309 				af9015_af9013_config[0].i2c_addr) {
310 				ret = -EINVAL;
311 				goto error;
312 			}
313 			req.cmd = READ_I2C;
314 			req.i2c_addr = msg[i].addr;
315 			req.addr = addr;
316 			req.mbox = mbox;
317 			req.addr_len = addr_len;
318 			req.data_len = msg[i].len;
319 			req.data = &msg[i].buf[0];
320 			ret = af9015_ctrl_msg(d, &req);
321 			i += 1;
322 		} else {
323 			if (msg[i].len > 21) {
324 				ret = -EOPNOTSUPP;
325 				goto error;
326 			}
327 			if (msg[i].addr == af9015_af9013_config[0].i2c_addr)
328 				req.cmd = WRITE_MEMORY;
329 			else
330 				req.cmd = WRITE_I2C;
331 			req.i2c_addr = msg[i].addr;
332 			req.addr = addr;
333 			req.mbox = mbox;
334 			req.addr_len = addr_len;
335 			req.data_len = msg[i].len-addr_len;
336 			req.data = &msg[i].buf[addr_len];
337 			ret = af9015_ctrl_msg(d, &req);
338 			i += 1;
339 		}
340 		if (ret)
341 			goto error;
342 
343 	}
344 	ret = i;
345 
346 error:
347 	mutex_unlock(&d->i2c_mutex);
348 
349 	return ret;
350 }
351 
af9015_i2c_func(struct i2c_adapter * adapter)352 static u32 af9015_i2c_func(struct i2c_adapter *adapter)
353 {
354 	return I2C_FUNC_I2C;
355 }
356 
357 static struct i2c_algorithm af9015_i2c_algo = {
358 	.master_xfer = af9015_i2c_xfer,
359 	.functionality = af9015_i2c_func,
360 };
361 
af9015_do_reg_bit(struct dvb_usb_device * d,u16 addr,u8 bit,u8 op)362 static int af9015_do_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit, u8 op)
363 {
364 	int ret;
365 	u8 val, mask = 0x01;
366 
367 	ret = af9015_read_reg(d, addr, &val);
368 	if (ret)
369 		return ret;
370 
371 	mask <<= bit;
372 	if (op) {
373 		/* set bit */
374 		val |= mask;
375 	} else {
376 		/* clear bit */
377 		mask ^= 0xff;
378 		val &= mask;
379 	}
380 
381 	return af9015_write_reg(d, addr, val);
382 }
383 
af9015_set_reg_bit(struct dvb_usb_device * d,u16 addr,u8 bit)384 static int af9015_set_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
385 {
386 	return af9015_do_reg_bit(d, addr, bit, 1);
387 }
388 
af9015_clear_reg_bit(struct dvb_usb_device * d,u16 addr,u8 bit)389 static int af9015_clear_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
390 {
391 	return af9015_do_reg_bit(d, addr, bit, 0);
392 }
393 
af9015_init_endpoint(struct dvb_usb_device * d)394 static int af9015_init_endpoint(struct dvb_usb_device *d)
395 {
396 	int ret;
397 	u16 frame_size;
398 	u8  packet_size;
399 	deb_info("%s: USB speed:%d\n", __func__, d->udev->speed);
400 
401 	/* Windows driver uses packet count 21 for USB1.1 and 348 for USB2.0.
402 	   We use smaller - about 1/4 from the original, 5 and 87. */
403 #define TS_PACKET_SIZE            188
404 
405 #define TS_USB20_PACKET_COUNT      87
406 #define TS_USB20_FRAME_SIZE       (TS_PACKET_SIZE*TS_USB20_PACKET_COUNT)
407 
408 #define TS_USB11_PACKET_COUNT       5
409 #define TS_USB11_FRAME_SIZE       (TS_PACKET_SIZE*TS_USB11_PACKET_COUNT)
410 
411 #define TS_USB20_MAX_PACKET_SIZE  512
412 #define TS_USB11_MAX_PACKET_SIZE   64
413 
414 	if (d->udev->speed == USB_SPEED_FULL) {
415 		frame_size = TS_USB11_FRAME_SIZE/4;
416 		packet_size = TS_USB11_MAX_PACKET_SIZE/4;
417 	} else {
418 		frame_size = TS_USB20_FRAME_SIZE/4;
419 		packet_size = TS_USB20_MAX_PACKET_SIZE/4;
420 	}
421 
422 	ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */
423 	if (ret)
424 		goto error;
425 	ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */
426 	if (ret)
427 		goto error;
428 	ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */
429 	if (ret)
430 		goto error;
431 	ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */
432 	if (ret)
433 		goto error;
434 	ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */
435 	if (ret)
436 		goto error;
437 	if (af9015_config.dual_mode) {
438 		ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */
439 		if (ret)
440 			goto error;
441 	}
442 	ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */
443 	if (ret)
444 		goto error;
445 	if (af9015_config.dual_mode) {
446 		ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */
447 		if (ret)
448 			goto error;
449 	}
450 	/* EP4 xfer length */
451 	ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff);
452 	if (ret)
453 		goto error;
454 	ret = af9015_write_reg(d, 0xdd89, frame_size >> 8);
455 	if (ret)
456 		goto error;
457 	/* EP5 xfer length */
458 	ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff);
459 	if (ret)
460 		goto error;
461 	ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8);
462 	if (ret)
463 		goto error;
464 	ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */
465 	if (ret)
466 		goto error;
467 	ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */
468 	if (ret)
469 		goto error;
470 	ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */
471 	if (ret)
472 		goto error;
473 	if (af9015_config.dual_mode) {
474 		ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */
475 		if (ret)
476 			goto error;
477 	}
478 
479 	/* enable / disable mp2if2 */
480 	if (af9015_config.dual_mode)
481 		ret = af9015_set_reg_bit(d, 0xd50b, 0);
482 	else
483 		ret = af9015_clear_reg_bit(d, 0xd50b, 0);
484 
485 error:
486 	if (ret)
487 		err("endpoint init failed:%d", ret);
488 	return ret;
489 }
490 
af9015_copy_firmware(struct dvb_usb_device * d)491 static int af9015_copy_firmware(struct dvb_usb_device *d)
492 {
493 	int ret;
494 	u8 fw_params[4];
495 	u8 val, i;
496 	struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, sizeof(fw_params),
497 		fw_params };
498 	deb_info("%s:\n", __func__);
499 
500 	fw_params[0] = af9015_config.firmware_size >> 8;
501 	fw_params[1] = af9015_config.firmware_size & 0xff;
502 	fw_params[2] = af9015_config.firmware_checksum >> 8;
503 	fw_params[3] = af9015_config.firmware_checksum & 0xff;
504 
505 	/* wait 2nd demodulator ready */
506 	msleep(100);
507 
508 	ret = af9015_read_reg_i2c(d,
509 		af9015_af9013_config[1].i2c_addr, 0x98be, &val);
510 	if (ret)
511 		goto error;
512 	else
513 		deb_info("%s: firmware status:%02x\n", __func__, val);
514 
515 	if (val == 0x0c) /* fw is running, no need for download */
516 		goto exit;
517 
518 	/* set I2C master clock to fast (to speed up firmware copy) */
519 	ret = af9015_write_reg(d, 0xd416, 0x04); /* 0x04 * 400ns */
520 	if (ret)
521 		goto error;
522 
523 	msleep(50);
524 
525 	/* copy firmware */
526 	ret = af9015_ctrl_msg(d, &req);
527 	if (ret)
528 		err("firmware copy cmd failed:%d", ret);
529 	deb_info("%s: firmware copy done\n", __func__);
530 
531 	/* set I2C master clock back to normal */
532 	ret = af9015_write_reg(d, 0xd416, 0x14); /* 0x14 * 400ns */
533 	if (ret)
534 		goto error;
535 
536 	/* request boot firmware */
537 	ret = af9015_write_reg_i2c(d, af9015_af9013_config[1].i2c_addr,
538 		0xe205, 1);
539 	deb_info("%s: firmware boot cmd status:%d\n", __func__, ret);
540 	if (ret)
541 		goto error;
542 
543 	for (i = 0; i < 15; i++) {
544 		msleep(100);
545 
546 		/* check firmware status */
547 		ret = af9015_read_reg_i2c(d,
548 			af9015_af9013_config[1].i2c_addr, 0x98be, &val);
549 		deb_info("%s: firmware status cmd status:%d fw status:%02x\n",
550 			__func__, ret, val);
551 		if (ret)
552 			goto error;
553 
554 		if (val == 0x0c || val == 0x04) /* success or fail */
555 			break;
556 	}
557 
558 	if (val == 0x04) {
559 		err("firmware did not run");
560 		ret = -1;
561 	} else if (val != 0x0c) {
562 		err("firmware boot timeout");
563 		ret = -1;
564 	}
565 
566 error:
567 exit:
568 	return ret;
569 }
570 
571 /* hash (and dump) eeprom */
af9015_eeprom_hash(struct usb_device * udev)572 static int af9015_eeprom_hash(struct usb_device *udev)
573 {
574 	static const unsigned int eeprom_size = 256;
575 	unsigned int reg;
576 	int ret;
577 	u8 val, *eeprom;
578 	struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
579 
580 	eeprom = kmalloc(eeprom_size, GFP_KERNEL);
581 	if (eeprom == NULL)
582 		return -ENOMEM;
583 
584 	for (reg = 0; reg < eeprom_size; reg++) {
585 		req.addr = reg;
586 		ret = af9015_rw_udev(udev, &req);
587 		if (ret)
588 			goto free;
589 		eeprom[reg] = val;
590 	}
591 
592 	if (dvb_usb_af9015_debug & 0x01)
593 		print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, eeprom,
594 				eeprom_size);
595 
596 	BUG_ON(eeprom_size % 4);
597 
598 	af9015_config.eeprom_sum = 0;
599 	for (reg = 0; reg < eeprom_size / sizeof(u32); reg++) {
600 		af9015_config.eeprom_sum *= GOLDEN_RATIO_PRIME_32;
601 		af9015_config.eeprom_sum += le32_to_cpu(((u32 *)eeprom)[reg]);
602 	}
603 
604 	deb_info("%s: eeprom sum=%.8x\n", __func__, af9015_config.eeprom_sum);
605 
606 	ret = 0;
607 free:
608 	kfree(eeprom);
609 	return ret;
610 }
611 
af9015_init(struct dvb_usb_device * d)612 static int af9015_init(struct dvb_usb_device *d)
613 {
614 	int ret;
615 	deb_info("%s:\n", __func__);
616 
617 	/* init RC canary */
618 	ret = af9015_write_reg(d, 0x98e9, 0xff);
619 	if (ret)
620 		goto error;
621 
622 	ret = af9015_init_endpoint(d);
623 	if (ret)
624 		goto error;
625 
626 error:
627 	return ret;
628 }
629 
af9015_pid_filter_ctrl(struct dvb_usb_adapter * adap,int onoff)630 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
631 {
632 	int ret;
633 	deb_info("%s: onoff:%d\n", __func__, onoff);
634 
635 	if (onoff)
636 		ret = af9015_set_reg_bit(adap->dev, 0xd503, 0);
637 	else
638 		ret = af9015_clear_reg_bit(adap->dev, 0xd503, 0);
639 
640 	return ret;
641 }
642 
af9015_pid_filter(struct dvb_usb_adapter * adap,int index,u16 pid,int onoff)643 static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
644 	int onoff)
645 {
646 	int ret;
647 	u8 idx;
648 
649 	deb_info("%s: set pid filter, index %d, pid %x, onoff %d\n",
650 		__func__, index, pid, onoff);
651 
652 	ret = af9015_write_reg(adap->dev, 0xd505, (pid & 0xff));
653 	if (ret)
654 		goto error;
655 
656 	ret = af9015_write_reg(adap->dev, 0xd506, (pid >> 8));
657 	if (ret)
658 		goto error;
659 
660 	idx = ((index & 0x1f) | (1 << 5));
661 	ret = af9015_write_reg(adap->dev, 0xd504, idx);
662 
663 error:
664 	return ret;
665 }
666 
af9015_download_firmware(struct usb_device * udev,const struct firmware * fw)667 static int af9015_download_firmware(struct usb_device *udev,
668 	const struct firmware *fw)
669 {
670 	int i, len, remaining, ret;
671 	struct req_t req = {DOWNLOAD_FIRMWARE, 0, 0, 0, 0, 0, NULL};
672 	u16 checksum = 0;
673 
674 	deb_info("%s:\n", __func__);
675 
676 	/* calc checksum */
677 	for (i = 0; i < fw->size; i++)
678 		checksum += fw->data[i];
679 
680 	af9015_config.firmware_size = fw->size;
681 	af9015_config.firmware_checksum = checksum;
682 
683 	#define FW_ADDR 0x5100 /* firmware start address */
684 	#define LEN_MAX 55 /* max packet size */
685 	for (remaining = fw->size; remaining > 0; remaining -= LEN_MAX) {
686 		len = remaining;
687 		if (len > LEN_MAX)
688 			len = LEN_MAX;
689 
690 		req.data_len = len;
691 		req.data = (u8 *) &fw->data[fw->size - remaining];
692 		req.addr = FW_ADDR + fw->size - remaining;
693 
694 		ret = af9015_rw_udev(udev, &req);
695 		if (ret) {
696 			err("firmware download failed:%d", ret);
697 			goto error;
698 		}
699 	}
700 
701 	/* firmware loaded, request boot */
702 	req.cmd = BOOT;
703 	ret = af9015_rw_udev(udev, &req);
704 	if (ret) {
705 		err("firmware boot failed:%d", ret);
706 		goto error;
707 	}
708 
709 error:
710 	return ret;
711 }
712 
713 struct af9015_rc_setup {
714 	unsigned int id;
715 	char *rc_codes;
716 };
717 
af9015_rc_setup_match(unsigned int id,const struct af9015_rc_setup * table)718 static char *af9015_rc_setup_match(unsigned int id,
719 	const struct af9015_rc_setup *table)
720 {
721 	for (; table->rc_codes; table++)
722 		if (table->id == id)
723 			return table->rc_codes;
724 	return NULL;
725 }
726 
727 static const struct af9015_rc_setup af9015_rc_setup_modparam[] = {
728 	{ AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
729 	{ AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
730 	{ AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
731 	{ AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
732 	{ AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
733 	{ }
734 };
735 
736 static const struct af9015_rc_setup af9015_rc_setup_hashes[] = {
737 	{ 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
738 	{ 0xa3703d00, RC_MAP_ALINK_DTU_M },
739 	{ 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
740 	{ 0x5d49e3db, RC_MAP_DIGITTRADE }, /* LC-Power LC-USB-DVBT */
741 	{ }
742 };
743 
744 static const struct af9015_rc_setup af9015_rc_setup_usbids[] = {
745 	{ (USB_VID_TERRATEC << 16) | USB_PID_TERRATEC_CINERGY_T_STICK_RC,
746 		RC_MAP_TERRATEC_SLIM_2 },
747 	{ (USB_VID_TERRATEC << 16) | USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
748 		RC_MAP_TERRATEC_SLIM },
749 	{ (USB_VID_VISIONPLUS << 16) | USB_PID_AZUREWAVE_AD_TU700,
750 		RC_MAP_AZUREWAVE_AD_TU700 },
751 	{ (USB_VID_VISIONPLUS << 16) | USB_PID_TINYTWIN,
752 		RC_MAP_AZUREWAVE_AD_TU700 },
753 	{ (USB_VID_MSI_2 << 16) | USB_PID_MSI_DIGI_VOX_MINI_III,
754 		RC_MAP_MSI_DIGIVOX_III },
755 	{ (USB_VID_MSI_2 << 16) | USB_PID_MSI_DIGIVOX_DUO,
756 		RC_MAP_MSI_DIGIVOX_III },
757 	{ (USB_VID_LEADTEK << 16) | USB_PID_WINFAST_DTV_DONGLE_GOLD,
758 		RC_MAP_LEADTEK_Y04G0051 },
759 	{ (USB_VID_LEADTEK << 16) | USB_PID_WINFAST_DTV2000DS,
760 		RC_MAP_LEADTEK_Y04G0051 },
761 	{ (USB_VID_AVERMEDIA << 16) | USB_PID_AVERMEDIA_VOLAR_X,
762 		RC_MAP_AVERMEDIA_M135A },
763 	{ (USB_VID_AFATECH << 16) | USB_PID_TREKSTOR_DVBT,
764 		RC_MAP_TREKSTOR },
765 	{ (USB_VID_KWORLD_2 << 16) | USB_PID_TINYTWIN_2,
766 		RC_MAP_DIGITALNOW_TINYTWIN },
767 	{ (USB_VID_GTEK << 16) | USB_PID_TINYTWIN_3,
768 		RC_MAP_DIGITALNOW_TINYTWIN },
769 	{ (USB_VID_KWORLD_2 << 16) | USB_PID_SVEON_STV22,
770 		RC_MAP_MSI_DIGIVOX_III },
771 	{ }
772 };
773 
af9015_set_remote_config(struct usb_device * udev,struct dvb_usb_device_properties * props)774 static void af9015_set_remote_config(struct usb_device *udev,
775 		struct dvb_usb_device_properties *props)
776 {
777 	u16 vid = le16_to_cpu(udev->descriptor.idVendor);
778 	u16 pid = le16_to_cpu(udev->descriptor.idProduct);
779 
780 	/* try to load remote based module param */
781 	props->rc.core.rc_codes = af9015_rc_setup_match(
782 		dvb_usb_af9015_remote, af9015_rc_setup_modparam);
783 
784 	/* try to load remote based eeprom hash */
785 	if (!props->rc.core.rc_codes)
786 		props->rc.core.rc_codes = af9015_rc_setup_match(
787 			af9015_config.eeprom_sum, af9015_rc_setup_hashes);
788 
789 	/* try to load remote based USB ID */
790 	if (!props->rc.core.rc_codes)
791 		props->rc.core.rc_codes = af9015_rc_setup_match(
792 			(vid << 16) + pid, af9015_rc_setup_usbids);
793 
794 	/* try to load remote based USB iManufacturer string */
795 	if (!props->rc.core.rc_codes && vid == USB_VID_AFATECH) {
796 		/* Check USB manufacturer and product strings and try
797 		   to determine correct remote in case of chip vendor
798 		   reference IDs are used.
799 		   DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
800 		char manufacturer[10];
801 		memset(manufacturer, 0, sizeof(manufacturer));
802 		usb_string(udev, udev->descriptor.iManufacturer,
803 			manufacturer, sizeof(manufacturer));
804 		if (!strcmp("MSI", manufacturer)) {
805 			/* iManufacturer 1 MSI
806 			   iProduct      2 MSI K-VOX */
807 			props->rc.core.rc_codes = af9015_rc_setup_match(
808 				AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
809 				af9015_rc_setup_modparam);
810 		}
811 	}
812 
813 	/* finally load "empty" just for leaving IR receiver enabled */
814 	if (!props->rc.core.rc_codes)
815 		props->rc.core.rc_codes = RC_MAP_EMPTY;
816 
817 	return;
818 }
819 
af9015_read_config(struct usb_device * udev)820 static int af9015_read_config(struct usb_device *udev)
821 {
822 	int ret;
823 	u8 val, i, offset = 0;
824 	struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
825 
826 	/* IR remote controller */
827 	req.addr = AF9015_EEPROM_IR_MODE;
828 	/* first message will timeout often due to possible hw bug */
829 	for (i = 0; i < 4; i++) {
830 		ret = af9015_rw_udev(udev, &req);
831 		if (!ret)
832 			break;
833 	}
834 	if (ret)
835 		goto error;
836 
837 	ret = af9015_eeprom_hash(udev);
838 	if (ret)
839 		goto error;
840 
841 	deb_info("%s: IR mode=%d\n", __func__, val);
842 	for (i = 0; i < af9015_properties_count; i++) {
843 		if (val == AF9015_IR_MODE_DISABLED)
844 			af9015_properties[i].rc.core.rc_codes = NULL;
845 		else
846 			af9015_set_remote_config(udev, &af9015_properties[i]);
847 	}
848 
849 	/* TS mode - one or two receivers */
850 	req.addr = AF9015_EEPROM_TS_MODE;
851 	ret = af9015_rw_udev(udev, &req);
852 	if (ret)
853 		goto error;
854 	af9015_config.dual_mode = val;
855 	deb_info("%s: TS mode=%d\n", __func__, af9015_config.dual_mode);
856 
857 	/* Set adapter0 buffer size according to USB port speed, adapter1 buffer
858 	   size can be static because it is enabled only USB2.0 */
859 	for (i = 0; i < af9015_properties_count; i++) {
860 		/* USB1.1 set smaller buffersize and disable 2nd adapter */
861 		if (udev->speed == USB_SPEED_FULL) {
862 			af9015_properties[i].adapter[0].fe[0].stream.u.bulk.buffersize
863 				= TS_USB11_FRAME_SIZE;
864 			/* disable 2nd adapter because we don't have
865 			   PID-filters */
866 			af9015_config.dual_mode = 0;
867 		} else {
868 			af9015_properties[i].adapter[0].fe[0].stream.u.bulk.buffersize
869 				= TS_USB20_FRAME_SIZE;
870 		}
871 	}
872 
873 	if (af9015_config.dual_mode) {
874 		/* read 2nd demodulator I2C address */
875 		req.addr = AF9015_EEPROM_DEMOD2_I2C;
876 		ret = af9015_rw_udev(udev, &req);
877 		if (ret)
878 			goto error;
879 		af9015_af9013_config[1].i2c_addr = val;
880 
881 		/* enable 2nd adapter */
882 		for (i = 0; i < af9015_properties_count; i++)
883 			af9015_properties[i].num_adapters = 2;
884 
885 	} else {
886 		 /* disable 2nd adapter */
887 		for (i = 0; i < af9015_properties_count; i++)
888 			af9015_properties[i].num_adapters = 1;
889 	}
890 
891 	for (i = 0; i < af9015_properties[0].num_adapters; i++) {
892 		if (i == 1)
893 			offset = AF9015_EEPROM_OFFSET;
894 		/* xtal */
895 		req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset;
896 		ret = af9015_rw_udev(udev, &req);
897 		if (ret)
898 			goto error;
899 		switch (val) {
900 		case 0:
901 			af9015_af9013_config[i].clock = 28800000;
902 			break;
903 		case 1:
904 			af9015_af9013_config[i].clock = 20480000;
905 			break;
906 		case 2:
907 			af9015_af9013_config[i].clock = 28000000;
908 			break;
909 		case 3:
910 			af9015_af9013_config[i].clock = 25000000;
911 			break;
912 		};
913 		deb_info("%s: [%d] xtal=%d set clock=%d\n", __func__, i,
914 			val, af9015_af9013_config[i].clock);
915 
916 		/* IF frequency */
917 		req.addr = AF9015_EEPROM_IF1H + offset;
918 		ret = af9015_rw_udev(udev, &req);
919 		if (ret)
920 			goto error;
921 
922 		af9015_af9013_config[i].if_frequency = val << 8;
923 
924 		req.addr = AF9015_EEPROM_IF1L + offset;
925 		ret = af9015_rw_udev(udev, &req);
926 		if (ret)
927 			goto error;
928 
929 		af9015_af9013_config[i].if_frequency += val;
930 		af9015_af9013_config[i].if_frequency *= 1000;
931 		deb_info("%s: [%d] IF frequency=%d\n", __func__, i,
932 			af9015_af9013_config[0].if_frequency);
933 
934 		/* MT2060 IF1 */
935 		req.addr = AF9015_EEPROM_MT2060_IF1H  + offset;
936 		ret = af9015_rw_udev(udev, &req);
937 		if (ret)
938 			goto error;
939 		af9015_config.mt2060_if1[i] = val << 8;
940 		req.addr = AF9015_EEPROM_MT2060_IF1L + offset;
941 		ret = af9015_rw_udev(udev, &req);
942 		if (ret)
943 			goto error;
944 		af9015_config.mt2060_if1[i] += val;
945 		deb_info("%s: [%d] MT2060 IF1=%d\n", __func__, i,
946 			af9015_config.mt2060_if1[i]);
947 
948 		/* tuner */
949 		req.addr =  AF9015_EEPROM_TUNER_ID1 + offset;
950 		ret = af9015_rw_udev(udev, &req);
951 		if (ret)
952 			goto error;
953 		switch (val) {
954 		case AF9013_TUNER_ENV77H11D5:
955 		case AF9013_TUNER_MT2060:
956 		case AF9013_TUNER_QT1010:
957 		case AF9013_TUNER_UNKNOWN:
958 		case AF9013_TUNER_MT2060_2:
959 		case AF9013_TUNER_TDA18271:
960 		case AF9013_TUNER_QT1010A:
961 		case AF9013_TUNER_TDA18218:
962 			af9015_af9013_config[i].spec_inv = 1;
963 			break;
964 		case AF9013_TUNER_MXL5003D:
965 		case AF9013_TUNER_MXL5005D:
966 		case AF9013_TUNER_MXL5005R:
967 		case AF9013_TUNER_MXL5007T:
968 			af9015_af9013_config[i].spec_inv = 0;
969 			break;
970 		case AF9013_TUNER_MC44S803:
971 			af9015_af9013_config[i].gpio[1] = AF9013_GPIO_LO;
972 			af9015_af9013_config[i].spec_inv = 1;
973 			break;
974 		default:
975 			warn("tuner id=%d not supported, please report!", val);
976 			return -ENODEV;
977 		};
978 
979 		af9015_af9013_config[i].tuner = val;
980 		deb_info("%s: [%d] tuner id=%d\n", __func__, i, val);
981 	}
982 
983 error:
984 	if (ret)
985 		err("eeprom read failed=%d", ret);
986 
987 	/* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
988 	   content :-( Override some wrong values here. Ditto for the
989 	   AVerTV Red HD+ (A850T) device. */
990 	if (le16_to_cpu(udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
991 		((le16_to_cpu(udev->descriptor.idProduct) ==
992 			USB_PID_AVERMEDIA_A850) ||
993 		(le16_to_cpu(udev->descriptor.idProduct) ==
994 			USB_PID_AVERMEDIA_A850T))) {
995 		deb_info("%s: AverMedia A850: overriding config\n", __func__);
996 		/* disable dual mode */
997 		af9015_config.dual_mode = 0;
998 		 /* disable 2nd adapter */
999 		for (i = 0; i < af9015_properties_count; i++)
1000 			af9015_properties[i].num_adapters = 1;
1001 
1002 		/* set correct IF */
1003 		af9015_af9013_config[0].if_frequency = 4570000;
1004 	}
1005 
1006 	return ret;
1007 }
1008 
af9015_identify_state(struct usb_device * udev,struct dvb_usb_device_properties * props,struct dvb_usb_device_description ** desc,int * cold)1009 static int af9015_identify_state(struct usb_device *udev,
1010 				 struct dvb_usb_device_properties *props,
1011 				 struct dvb_usb_device_description **desc,
1012 				 int *cold)
1013 {
1014 	int ret;
1015 	u8 reply;
1016 	struct req_t req = {GET_CONFIG, 0, 0, 0, 0, 1, &reply};
1017 
1018 	ret = af9015_rw_udev(udev, &req);
1019 	if (ret)
1020 		return ret;
1021 
1022 	deb_info("%s: reply:%02x\n", __func__, reply);
1023 	if (reply == 0x02)
1024 		*cold = 0;
1025 	else
1026 		*cold = 1;
1027 
1028 	return ret;
1029 }
1030 
af9015_rc_query(struct dvb_usb_device * d)1031 static int af9015_rc_query(struct dvb_usb_device *d)
1032 {
1033 	struct af9015_state *priv = d->priv;
1034 	int ret;
1035 	u8 buf[17];
1036 
1037 	/* read registers needed to detect remote controller code */
1038 	ret = af9015_read_regs(d, 0x98d9, buf, sizeof(buf));
1039 	if (ret)
1040 		goto error;
1041 
1042 	/* If any of these are non-zero, assume invalid data */
1043 	if (buf[1] || buf[2] || buf[3])
1044 		return ret;
1045 
1046 	/* Check for repeat of previous code */
1047 	if ((priv->rc_repeat != buf[6] || buf[0]) &&
1048 					!memcmp(&buf[12], priv->rc_last, 4)) {
1049 		deb_rc("%s: key repeated\n", __func__);
1050 		rc_keydown(d->rc_dev, priv->rc_keycode, 0);
1051 		priv->rc_repeat = buf[6];
1052 		return ret;
1053 	}
1054 
1055 	/* Only process key if canary killed */
1056 	if (buf[16] != 0xff && buf[0] != 0x01) {
1057 		deb_rc("%s: key pressed %02x %02x %02x %02x\n", __func__,
1058 			buf[12], buf[13], buf[14], buf[15]);
1059 
1060 		/* Reset the canary */
1061 		ret = af9015_write_reg(d, 0x98e9, 0xff);
1062 		if (ret)
1063 			goto error;
1064 
1065 		/* Remember this key */
1066 		memcpy(priv->rc_last, &buf[12], 4);
1067 		if (buf[14] == (u8) ~buf[15]) {
1068 			if (buf[12] == (u8) ~buf[13]) {
1069 				/* NEC */
1070 				priv->rc_keycode = buf[12] << 8 | buf[14];
1071 			} else {
1072 				/* NEC extended*/
1073 				priv->rc_keycode = buf[12] << 16 |
1074 					buf[13] << 8 | buf[14];
1075 			}
1076 		} else {
1077 			/* 32 bit NEC */
1078 			priv->rc_keycode = buf[12] << 24 | buf[13] << 16 |
1079 					buf[14] << 8 | buf[15];
1080 		}
1081 		rc_keydown(d->rc_dev, priv->rc_keycode, 0);
1082 	} else {
1083 		deb_rc("%s: no key press\n", __func__);
1084 		/* Invalidate last keypress */
1085 		/* Not really needed, but helps with debug */
1086 		priv->rc_last[2] = priv->rc_last[3];
1087 	}
1088 
1089 	priv->rc_repeat = buf[6];
1090 
1091 error:
1092 	if (ret)
1093 		err("%s: failed:%d", __func__, ret);
1094 
1095 	return ret;
1096 }
1097 
1098 /* override demod callbacks for resource locking */
af9015_af9013_set_frontend(struct dvb_frontend * fe)1099 static int af9015_af9013_set_frontend(struct dvb_frontend *fe)
1100 {
1101 	int ret;
1102 	struct dvb_usb_adapter *adap = fe->dvb->priv;
1103 	struct af9015_state *priv = adap->dev->priv;
1104 
1105 	if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1106 		return -EAGAIN;
1107 
1108 	ret = priv->set_frontend[adap->id](fe);
1109 
1110 	mutex_unlock(&adap->dev->usb_mutex);
1111 
1112 	return ret;
1113 }
1114 
1115 /* override demod callbacks for resource locking */
af9015_af9013_read_status(struct dvb_frontend * fe,fe_status_t * status)1116 static int af9015_af9013_read_status(struct dvb_frontend *fe,
1117 	fe_status_t *status)
1118 {
1119 	int ret;
1120 	struct dvb_usb_adapter *adap = fe->dvb->priv;
1121 	struct af9015_state *priv = adap->dev->priv;
1122 
1123 	if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1124 		return -EAGAIN;
1125 
1126 	ret = priv->read_status[adap->id](fe, status);
1127 
1128 	mutex_unlock(&adap->dev->usb_mutex);
1129 
1130 	return ret;
1131 }
1132 
1133 /* override demod callbacks for resource locking */
af9015_af9013_init(struct dvb_frontend * fe)1134 static int af9015_af9013_init(struct dvb_frontend *fe)
1135 {
1136 	int ret;
1137 	struct dvb_usb_adapter *adap = fe->dvb->priv;
1138 	struct af9015_state *priv = adap->dev->priv;
1139 
1140 	if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1141 		return -EAGAIN;
1142 
1143 	ret = priv->init[adap->id](fe);
1144 
1145 	mutex_unlock(&adap->dev->usb_mutex);
1146 
1147 	return ret;
1148 }
1149 
1150 /* override demod callbacks for resource locking */
af9015_af9013_sleep(struct dvb_frontend * fe)1151 static int af9015_af9013_sleep(struct dvb_frontend *fe)
1152 {
1153 	int ret;
1154 	struct dvb_usb_adapter *adap = fe->dvb->priv;
1155 	struct af9015_state *priv = adap->dev->priv;
1156 
1157 	if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1158 		return -EAGAIN;
1159 
1160 	ret = priv->sleep[adap->id](fe);
1161 
1162 	mutex_unlock(&adap->dev->usb_mutex);
1163 
1164 	return ret;
1165 }
1166 
af9015_af9013_frontend_attach(struct dvb_usb_adapter * adap)1167 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
1168 {
1169 	int ret;
1170 	struct af9015_state *state = adap->dev->priv;
1171 
1172 	if (adap->id == 1) {
1173 		/* copy firmware to 2nd demodulator */
1174 		if (af9015_config.dual_mode) {
1175 			ret = af9015_copy_firmware(adap->dev);
1176 			if (ret) {
1177 				err("firmware copy to 2nd frontend " \
1178 					"failed, will disable it");
1179 				af9015_config.dual_mode = 0;
1180 				return -ENODEV;
1181 			}
1182 		} else {
1183 			return -ENODEV;
1184 		}
1185 	}
1186 
1187 	/* attach demodulator */
1188 	adap->fe_adap[0].fe = dvb_attach(af9013_attach, &af9015_af9013_config[adap->id],
1189 		&adap->dev->i2c_adap);
1190 
1191 	/*
1192 	 * AF9015 firmware does not like if it gets interrupted by I2C adapter
1193 	 * request on some critical phases. During normal operation I2C adapter
1194 	 * is used only 2nd demodulator and tuner on dual tuner devices.
1195 	 * Override demodulator callbacks and use mutex for limit access to
1196 	 * those "critical" paths to keep AF9015 happy.
1197 	 * Note: we abuse unused usb_mutex here.
1198 	 */
1199 	if (adap->fe_adap[0].fe) {
1200 		state->set_frontend[adap->id] =
1201 			adap->fe_adap[0].fe->ops.set_frontend;
1202 		adap->fe_adap[0].fe->ops.set_frontend =
1203 			af9015_af9013_set_frontend;
1204 
1205 		state->read_status[adap->id] =
1206 			adap->fe_adap[0].fe->ops.read_status;
1207 		adap->fe_adap[0].fe->ops.read_status =
1208 			af9015_af9013_read_status;
1209 
1210 		state->init[adap->id] = adap->fe_adap[0].fe->ops.init;
1211 		adap->fe_adap[0].fe->ops.init = af9015_af9013_init;
1212 
1213 		state->sleep[adap->id] = adap->fe_adap[0].fe->ops.sleep;
1214 		adap->fe_adap[0].fe->ops.sleep = af9015_af9013_sleep;
1215 	}
1216 
1217 	return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
1218 }
1219 
1220 static struct mt2060_config af9015_mt2060_config = {
1221 	.i2c_address = 0xc0,
1222 	.clock_out = 0,
1223 };
1224 
1225 static struct qt1010_config af9015_qt1010_config = {
1226 	.i2c_address = 0xc4,
1227 };
1228 
1229 static struct tda18271_config af9015_tda18271_config = {
1230 	.gate = TDA18271_GATE_DIGITAL,
1231 	.small_i2c = TDA18271_16_BYTE_CHUNK_INIT,
1232 };
1233 
1234 static struct mxl5005s_config af9015_mxl5003_config = {
1235 	.i2c_address     = 0xc6,
1236 	.if_freq         = IF_FREQ_4570000HZ,
1237 	.xtal_freq       = CRYSTAL_FREQ_16000000HZ,
1238 	.agc_mode        = MXL_SINGLE_AGC,
1239 	.tracking_filter = MXL_TF_DEFAULT,
1240 	.rssi_enable     = MXL_RSSI_ENABLE,
1241 	.cap_select      = MXL_CAP_SEL_ENABLE,
1242 	.div_out         = MXL_DIV_OUT_4,
1243 	.clock_out       = MXL_CLOCK_OUT_DISABLE,
1244 	.output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
1245 	.top		 = MXL5005S_TOP_25P2,
1246 	.mod_mode        = MXL_DIGITAL_MODE,
1247 	.if_mode         = MXL_ZERO_IF,
1248 	.AgcMasterByte   = 0x00,
1249 };
1250 
1251 static struct mxl5005s_config af9015_mxl5005_config = {
1252 	.i2c_address     = 0xc6,
1253 	.if_freq         = IF_FREQ_4570000HZ,
1254 	.xtal_freq       = CRYSTAL_FREQ_16000000HZ,
1255 	.agc_mode        = MXL_SINGLE_AGC,
1256 	.tracking_filter = MXL_TF_OFF,
1257 	.rssi_enable     = MXL_RSSI_ENABLE,
1258 	.cap_select      = MXL_CAP_SEL_ENABLE,
1259 	.div_out         = MXL_DIV_OUT_4,
1260 	.clock_out       = MXL_CLOCK_OUT_DISABLE,
1261 	.output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
1262 	.top		 = MXL5005S_TOP_25P2,
1263 	.mod_mode        = MXL_DIGITAL_MODE,
1264 	.if_mode         = MXL_ZERO_IF,
1265 	.AgcMasterByte   = 0x00,
1266 };
1267 
1268 static struct mc44s803_config af9015_mc44s803_config = {
1269 	.i2c_address = 0xc0,
1270 	.dig_out = 1,
1271 };
1272 
1273 static struct tda18218_config af9015_tda18218_config = {
1274 	.i2c_address = 0xc0,
1275 	.i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */
1276 };
1277 
1278 static struct mxl5007t_config af9015_mxl5007t_config = {
1279 	.xtal_freq_hz = MxL_XTAL_24_MHZ,
1280 	.if_freq_hz = MxL_IF_4_57_MHZ,
1281 };
1282 
af9015_tuner_attach(struct dvb_usb_adapter * adap)1283 static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
1284 {
1285 	int ret;
1286 	deb_info("%s:\n", __func__);
1287 
1288 	switch (af9015_af9013_config[adap->id].tuner) {
1289 	case AF9013_TUNER_MT2060:
1290 	case AF9013_TUNER_MT2060_2:
1291 		ret = dvb_attach(mt2060_attach, adap->fe_adap[0].fe, &adap->dev->i2c_adap,
1292 			&af9015_mt2060_config,
1293 			af9015_config.mt2060_if1[adap->id])
1294 			== NULL ? -ENODEV : 0;
1295 		break;
1296 	case AF9013_TUNER_QT1010:
1297 	case AF9013_TUNER_QT1010A:
1298 		ret = dvb_attach(qt1010_attach, adap->fe_adap[0].fe, &adap->dev->i2c_adap,
1299 			&af9015_qt1010_config) == NULL ? -ENODEV : 0;
1300 		break;
1301 	case AF9013_TUNER_TDA18271:
1302 		ret = dvb_attach(tda18271_attach, adap->fe_adap[0].fe, 0xc0,
1303 			&adap->dev->i2c_adap,
1304 			&af9015_tda18271_config) == NULL ? -ENODEV : 0;
1305 		break;
1306 	case AF9013_TUNER_TDA18218:
1307 		ret = dvb_attach(tda18218_attach, adap->fe_adap[0].fe,
1308 			&adap->dev->i2c_adap,
1309 			&af9015_tda18218_config) == NULL ? -ENODEV : 0;
1310 		break;
1311 	case AF9013_TUNER_MXL5003D:
1312 		ret = dvb_attach(mxl5005s_attach, adap->fe_adap[0].fe,
1313 			&adap->dev->i2c_adap,
1314 			&af9015_mxl5003_config) == NULL ? -ENODEV : 0;
1315 		break;
1316 	case AF9013_TUNER_MXL5005D:
1317 	case AF9013_TUNER_MXL5005R:
1318 		ret = dvb_attach(mxl5005s_attach, adap->fe_adap[0].fe,
1319 			&adap->dev->i2c_adap,
1320 			&af9015_mxl5005_config) == NULL ? -ENODEV : 0;
1321 		break;
1322 	case AF9013_TUNER_ENV77H11D5:
1323 		ret = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0xc0,
1324 			&adap->dev->i2c_adap,
1325 			DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
1326 		break;
1327 	case AF9013_TUNER_MC44S803:
1328 		ret = dvb_attach(mc44s803_attach, adap->fe_adap[0].fe,
1329 			&adap->dev->i2c_adap,
1330 			&af9015_mc44s803_config) == NULL ? -ENODEV : 0;
1331 		break;
1332 	case AF9013_TUNER_MXL5007T:
1333 		ret = dvb_attach(mxl5007t_attach, adap->fe_adap[0].fe,
1334 			&adap->dev->i2c_adap,
1335 			0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
1336 		break;
1337 	case AF9013_TUNER_UNKNOWN:
1338 	default:
1339 		ret = -ENODEV;
1340 		err("Unknown tuner id:%d",
1341 			af9015_af9013_config[adap->id].tuner);
1342 	}
1343 	return ret;
1344 }
1345 
1346 enum af9015_usb_table_entry {
1347 	AFATECH_9015,
1348 	AFATECH_9016,
1349 	WINFAST_DTV_GOLD,
1350 	PINNACLE_PCTV_71E,
1351 	KWORLD_PLUSTV_399U,
1352 	TINYTWIN,
1353 	AZUREWAVE_TU700,
1354 	TERRATEC_AF9015,
1355 	KWORLD_PLUSTV_PC160,
1356 	AVERTV_VOLAR_X,
1357 	XTENSIONS_380U,
1358 	MSI_DIGIVOX_DUO,
1359 	AVERTV_VOLAR_X_REV2,
1360 	TELESTAR_STARSTICK_2,
1361 	AVERMEDIA_A309_USB,
1362 	MSI_DIGIVOX_MINI_III,
1363 	KWORLD_E396,
1364 	KWORLD_E39B,
1365 	KWORLD_E395,
1366 	TREKSTOR_DVBT,
1367 	AVERTV_A850,
1368 	AVERTV_A805,
1369 	CONCEPTRONIC_CTVDIGRCU,
1370 	KWORLD_MC810,
1371 	GENIUS_TVGO_DVB_T03,
1372 	KWORLD_399U_2,
1373 	KWORLD_PC160_T,
1374 	SVEON_STV20,
1375 	TINYTWIN_2,
1376 	WINFAST_DTV2000DS,
1377 	KWORLD_UB383_T,
1378 	KWORLD_E39A,
1379 	AVERMEDIA_A815M,
1380 	CINERGY_T_STICK_RC,
1381 	CINERGY_T_DUAL_RC,
1382 	AVERTV_A850T,
1383 	TINYTWIN_3,
1384 	SVEON_STV22,
1385 };
1386 
1387 static struct usb_device_id af9015_usb_table[] = {
1388 	[AFATECH_9015] =
1389 		{USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015)},
1390 	[AFATECH_9016] =
1391 		{USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016)},
1392 	[WINFAST_DTV_GOLD] =
1393 		{USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD)},
1394 	[PINNACLE_PCTV_71E] =
1395 		{USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E)},
1396 	[KWORLD_PLUSTV_399U] =
1397 		{USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U)},
1398 	[TINYTWIN] = {USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN)},
1399 	[AZUREWAVE_TU700] =
1400 		{USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700)},
1401 	[TERRATEC_AF9015] = {USB_DEVICE(USB_VID_TERRATEC,
1402 				USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2)},
1403 	[KWORLD_PLUSTV_PC160] =
1404 		{USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T)},
1405 	[AVERTV_VOLAR_X] =
1406 		{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X)},
1407 	[XTENSIONS_380U] =
1408 		{USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380)},
1409 	[MSI_DIGIVOX_DUO] =
1410 		{USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO)},
1411 	[AVERTV_VOLAR_X_REV2] =
1412 		{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2)},
1413 	[TELESTAR_STARSTICK_2] =
1414 		{USB_DEVICE(USB_VID_TELESTAR,  USB_PID_TELESTAR_STARSTICK_2)},
1415 	[AVERMEDIA_A309_USB] =
1416 		{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309)},
1417 	[MSI_DIGIVOX_MINI_III] =
1418 		{USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III)},
1419 	[KWORLD_E396] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U)},
1420 	[KWORLD_E39B] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2)},
1421 	[KWORLD_E395] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3)},
1422 	[TREKSTOR_DVBT] = {USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT)},
1423 	[AVERTV_A850] = {USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850)},
1424 	[AVERTV_A805] = {USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805)},
1425 	[CONCEPTRONIC_CTVDIGRCU] =
1426 		{USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU)},
1427 	[KWORLD_MC810] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810)},
1428 	[GENIUS_TVGO_DVB_T03] =
1429 		{USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03)},
1430 	[KWORLD_399U_2] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2)},
1431 	[KWORLD_PC160_T] =
1432 		{USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T)},
1433 	[SVEON_STV20] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20)},
1434 	[TINYTWIN_2] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2)},
1435 	[WINFAST_DTV2000DS] =
1436 		{USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS)},
1437 	[KWORLD_UB383_T] =
1438 		{USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T)},
1439 	[KWORLD_E39A] =
1440 		{USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4)},
1441 	[AVERMEDIA_A815M] =
1442 		{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M)},
1443 	[CINERGY_T_STICK_RC] = {USB_DEVICE(USB_VID_TERRATEC,
1444 				USB_PID_TERRATEC_CINERGY_T_STICK_RC)},
1445 	[CINERGY_T_DUAL_RC] = {USB_DEVICE(USB_VID_TERRATEC,
1446 				USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC)},
1447 	[AVERTV_A850T] =
1448 		{USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T)},
1449 	[TINYTWIN_3] = {USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3)},
1450 	[SVEON_STV22] = {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22)},
1451 	{ }
1452 };
1453 MODULE_DEVICE_TABLE(usb, af9015_usb_table);
1454 
1455 #define AF9015_RC_INTERVAL 500
1456 static struct dvb_usb_device_properties af9015_properties[] = {
1457 	{
1458 		.caps = DVB_USB_IS_AN_I2C_ADAPTER,
1459 
1460 		.usb_ctrl = DEVICE_SPECIFIC,
1461 		.download_firmware = af9015_download_firmware,
1462 		.firmware = "dvb-usb-af9015.fw",
1463 		.no_reconnect = 1,
1464 
1465 		.size_of_priv = sizeof(struct af9015_state),
1466 
1467 		.num_adapters = 2,
1468 		.adapter = {
1469 			{
1470 			.num_frontends = 1,
1471 			.fe = {{
1472 				.caps = DVB_USB_ADAP_HAS_PID_FILTER |
1473 				DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1474 
1475 				.pid_filter_count = 32,
1476 				.pid_filter       = af9015_pid_filter,
1477 				.pid_filter_ctrl  = af9015_pid_filter_ctrl,
1478 
1479 				.frontend_attach =
1480 					af9015_af9013_frontend_attach,
1481 				.tuner_attach    = af9015_tuner_attach,
1482 				.stream = {
1483 					.type = USB_BULK,
1484 					.count = 6,
1485 					.endpoint = 0x84,
1486 				},
1487 			}},
1488 			},
1489 			{
1490 			.num_frontends = 1,
1491 			.fe = {{
1492 				.frontend_attach =
1493 					af9015_af9013_frontend_attach,
1494 				.tuner_attach    = af9015_tuner_attach,
1495 				.stream = {
1496 					.type = USB_BULK,
1497 					.count = 6,
1498 					.endpoint = 0x85,
1499 					.u = {
1500 						.bulk = {
1501 							.buffersize =
1502 						TS_USB20_FRAME_SIZE,
1503 						}
1504 					}
1505 				},
1506 			}},
1507 			}
1508 		},
1509 
1510 		.identify_state = af9015_identify_state,
1511 
1512 		.rc.core = {
1513 			.protocol         = RC_TYPE_NEC,
1514 			.module_name      = "af9015",
1515 			.rc_query         = af9015_rc_query,
1516 			.rc_interval      = AF9015_RC_INTERVAL,
1517 			.allowed_protos   = RC_TYPE_NEC,
1518 		},
1519 
1520 		.i2c_algo = &af9015_i2c_algo,
1521 
1522 		.num_device_descs = 12, /* check max from dvb-usb.h */
1523 		.devices = {
1524 			{
1525 				.name = "Afatech AF9015 DVB-T USB2.0 stick",
1526 				.cold_ids = {
1527 					&af9015_usb_table[AFATECH_9015],
1528 					&af9015_usb_table[AFATECH_9016],
1529 					NULL
1530 				},
1531 				.warm_ids = {NULL},
1532 			},
1533 			{
1534 				.name = "Leadtek WinFast DTV Dongle Gold",
1535 				.cold_ids = {
1536 					&af9015_usb_table[WINFAST_DTV_GOLD],
1537 					NULL
1538 				},
1539 				.warm_ids = {NULL},
1540 			},
1541 			{
1542 				.name = "Pinnacle PCTV 71e",
1543 				.cold_ids = {
1544 					&af9015_usb_table[PINNACLE_PCTV_71E],
1545 					NULL
1546 				},
1547 				.warm_ids = {NULL},
1548 			},
1549 			{
1550 				.name = "KWorld PlusTV Dual DVB-T Stick " \
1551 					"(DVB-T 399U)",
1552 				.cold_ids = {
1553 					&af9015_usb_table[KWORLD_PLUSTV_399U],
1554 					&af9015_usb_table[KWORLD_399U_2],
1555 					NULL
1556 				},
1557 				.warm_ids = {NULL},
1558 			},
1559 			{
1560 				.name = "DigitalNow TinyTwin DVB-T Receiver",
1561 				.cold_ids = {
1562 					&af9015_usb_table[TINYTWIN],
1563 					&af9015_usb_table[TINYTWIN_2],
1564 					&af9015_usb_table[TINYTWIN_3],
1565 					NULL
1566 				},
1567 				.warm_ids = {NULL},
1568 			},
1569 			{
1570 				.name = "TwinHan AzureWave AD-TU700(704J)",
1571 				.cold_ids = {
1572 					&af9015_usb_table[AZUREWAVE_TU700],
1573 					NULL
1574 				},
1575 				.warm_ids = {NULL},
1576 			},
1577 			{
1578 				.name = "TerraTec Cinergy T USB XE",
1579 				.cold_ids = {
1580 					&af9015_usb_table[TERRATEC_AF9015],
1581 					NULL
1582 				},
1583 				.warm_ids = {NULL},
1584 			},
1585 			{
1586 				.name = "KWorld PlusTV Dual DVB-T PCI " \
1587 					"(DVB-T PC160-2T)",
1588 				.cold_ids = {
1589 					&af9015_usb_table[KWORLD_PLUSTV_PC160],
1590 					NULL
1591 				},
1592 				.warm_ids = {NULL},
1593 			},
1594 			{
1595 				.name = "AVerMedia AVerTV DVB-T Volar X",
1596 				.cold_ids = {
1597 					&af9015_usb_table[AVERTV_VOLAR_X],
1598 					NULL
1599 				},
1600 				.warm_ids = {NULL},
1601 			},
1602 			{
1603 				.name = "TerraTec Cinergy T Stick RC",
1604 				.cold_ids = {
1605 					&af9015_usb_table[CINERGY_T_STICK_RC],
1606 					NULL
1607 				},
1608 				.warm_ids = {NULL},
1609 			},
1610 			{
1611 				.name = "TerraTec Cinergy T Stick Dual RC",
1612 				.cold_ids = {
1613 					&af9015_usb_table[CINERGY_T_DUAL_RC],
1614 					NULL
1615 				},
1616 				.warm_ids = {NULL},
1617 			},
1618 			{
1619 				.name = "AverMedia AVerTV Red HD+ (A850T)",
1620 				.cold_ids = {
1621 					&af9015_usb_table[AVERTV_A850T],
1622 					NULL
1623 				},
1624 				.warm_ids = {NULL},
1625 			},
1626 		}
1627 	}, {
1628 		.caps = DVB_USB_IS_AN_I2C_ADAPTER,
1629 
1630 		.usb_ctrl = DEVICE_SPECIFIC,
1631 		.download_firmware = af9015_download_firmware,
1632 		.firmware = "dvb-usb-af9015.fw",
1633 		.no_reconnect = 1,
1634 
1635 		.size_of_priv = sizeof(struct af9015_state),
1636 
1637 		.num_adapters = 2,
1638 		.adapter = {
1639 			{
1640 			.num_frontends = 1,
1641 			.fe = {{
1642 				.caps = DVB_USB_ADAP_HAS_PID_FILTER |
1643 				DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1644 
1645 				.pid_filter_count = 32,
1646 				.pid_filter       = af9015_pid_filter,
1647 				.pid_filter_ctrl  = af9015_pid_filter_ctrl,
1648 
1649 				.frontend_attach =
1650 					af9015_af9013_frontend_attach,
1651 				.tuner_attach    = af9015_tuner_attach,
1652 				.stream = {
1653 					.type = USB_BULK,
1654 					.count = 6,
1655 					.endpoint = 0x84,
1656 				},
1657 			}},
1658 			},
1659 			{
1660 			.num_frontends = 1,
1661 			.fe = {{
1662 				.frontend_attach =
1663 					af9015_af9013_frontend_attach,
1664 				.tuner_attach    = af9015_tuner_attach,
1665 				.stream = {
1666 					.type = USB_BULK,
1667 					.count = 6,
1668 					.endpoint = 0x85,
1669 					.u = {
1670 						.bulk = {
1671 							.buffersize =
1672 						TS_USB20_FRAME_SIZE,
1673 						}
1674 					}
1675 				},
1676 			}},
1677 			}
1678 		},
1679 
1680 		.identify_state = af9015_identify_state,
1681 
1682 		.rc.core = {
1683 			.protocol         = RC_TYPE_NEC,
1684 			.module_name      = "af9015",
1685 			.rc_query         = af9015_rc_query,
1686 			.rc_interval      = AF9015_RC_INTERVAL,
1687 			.allowed_protos   = RC_TYPE_NEC,
1688 		},
1689 
1690 		.i2c_algo = &af9015_i2c_algo,
1691 
1692 		.num_device_descs = 10, /* check max from dvb-usb.h */
1693 		.devices = {
1694 			{
1695 				.name = "Xtensions XD-380",
1696 				.cold_ids = {
1697 					&af9015_usb_table[XTENSIONS_380U],
1698 					NULL
1699 				},
1700 				.warm_ids = {NULL},
1701 			},
1702 			{
1703 				.name = "MSI DIGIVOX Duo",
1704 				.cold_ids = {
1705 					&af9015_usb_table[MSI_DIGIVOX_DUO],
1706 					NULL
1707 				},
1708 				.warm_ids = {NULL},
1709 			},
1710 			{
1711 				.name = "Fujitsu-Siemens Slim Mobile USB DVB-T",
1712 				.cold_ids = {
1713 					&af9015_usb_table[AVERTV_VOLAR_X_REV2],
1714 					NULL
1715 				},
1716 				.warm_ids = {NULL},
1717 			},
1718 			{
1719 				.name = "Telestar Starstick 2",
1720 				.cold_ids = {
1721 					&af9015_usb_table[TELESTAR_STARSTICK_2],
1722 					NULL
1723 				},
1724 				.warm_ids = {NULL},
1725 			},
1726 			{
1727 				.name = "AVerMedia A309",
1728 				.cold_ids = {
1729 					&af9015_usb_table[AVERMEDIA_A309_USB],
1730 					NULL
1731 				},
1732 				.warm_ids = {NULL},
1733 			},
1734 			{
1735 				.name = "MSI Digi VOX mini III",
1736 				.cold_ids = {
1737 					&af9015_usb_table[MSI_DIGIVOX_MINI_III],
1738 					NULL
1739 				},
1740 				.warm_ids = {NULL},
1741 			},
1742 			{
1743 				.name = "KWorld USB DVB-T TV Stick II " \
1744 					"(VS-DVB-T 395U)",
1745 				.cold_ids = {
1746 					&af9015_usb_table[KWORLD_E396],
1747 					&af9015_usb_table[KWORLD_E39B],
1748 					&af9015_usb_table[KWORLD_E395],
1749 					&af9015_usb_table[KWORLD_E39A],
1750 					NULL
1751 				},
1752 				.warm_ids = {NULL},
1753 			},
1754 			{
1755 				.name = "TrekStor DVB-T USB Stick",
1756 				.cold_ids = {
1757 					&af9015_usb_table[TREKSTOR_DVBT],
1758 					NULL
1759 				},
1760 				.warm_ids = {NULL},
1761 			},
1762 			{
1763 				.name = "AverMedia AVerTV Volar Black HD " \
1764 					"(A850)",
1765 				.cold_ids = {
1766 					&af9015_usb_table[AVERTV_A850],
1767 					NULL
1768 				},
1769 				.warm_ids = {NULL},
1770 			},
1771 			{
1772 				.name = "Sveon STV22 Dual USB DVB-T Tuner HDTV",
1773 				.cold_ids = {
1774 					&af9015_usb_table[SVEON_STV22],
1775 					NULL
1776 				},
1777 				.warm_ids = {NULL},
1778 			},
1779 		}
1780 	}, {
1781 		.caps = DVB_USB_IS_AN_I2C_ADAPTER,
1782 
1783 		.usb_ctrl = DEVICE_SPECIFIC,
1784 		.download_firmware = af9015_download_firmware,
1785 		.firmware = "dvb-usb-af9015.fw",
1786 		.no_reconnect = 1,
1787 
1788 		.size_of_priv = sizeof(struct af9015_state),
1789 
1790 		.num_adapters = 2,
1791 		.adapter = {
1792 			{
1793 			.num_frontends = 1,
1794 			.fe = {{
1795 				.caps = DVB_USB_ADAP_HAS_PID_FILTER |
1796 				DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1797 
1798 				.pid_filter_count = 32,
1799 				.pid_filter       = af9015_pid_filter,
1800 				.pid_filter_ctrl  = af9015_pid_filter_ctrl,
1801 
1802 				.frontend_attach =
1803 					af9015_af9013_frontend_attach,
1804 				.tuner_attach    = af9015_tuner_attach,
1805 				.stream = {
1806 					.type = USB_BULK,
1807 					.count = 6,
1808 					.endpoint = 0x84,
1809 				},
1810 			}},
1811 			},
1812 			{
1813 			.num_frontends = 1,
1814 			.fe = {{
1815 				.frontend_attach =
1816 					af9015_af9013_frontend_attach,
1817 				.tuner_attach    = af9015_tuner_attach,
1818 				.stream = {
1819 					.type = USB_BULK,
1820 					.count = 6,
1821 					.endpoint = 0x85,
1822 					.u = {
1823 						.bulk = {
1824 							.buffersize =
1825 						TS_USB20_FRAME_SIZE,
1826 						}
1827 					}
1828 				},
1829 			}},
1830 			}
1831 		},
1832 
1833 		.identify_state = af9015_identify_state,
1834 
1835 		.rc.core = {
1836 			.protocol         = RC_TYPE_NEC,
1837 			.module_name      = "af9015",
1838 			.rc_query         = af9015_rc_query,
1839 			.rc_interval      = AF9015_RC_INTERVAL,
1840 			.allowed_protos   = RC_TYPE_NEC,
1841 		},
1842 
1843 		.i2c_algo = &af9015_i2c_algo,
1844 
1845 		.num_device_descs = 9, /* check max from dvb-usb.h */
1846 		.devices = {
1847 			{
1848 				.name = "AverMedia AVerTV Volar GPS 805 (A805)",
1849 				.cold_ids = {
1850 					&af9015_usb_table[AVERTV_A805],
1851 					NULL
1852 				},
1853 				.warm_ids = {NULL},
1854 			},
1855 			{
1856 				.name = "Conceptronic USB2.0 DVB-T CTVDIGRCU " \
1857 					"V3.0",
1858 				.cold_ids = {
1859 					&af9015_usb_table[CONCEPTRONIC_CTVDIGRCU],
1860 					NULL
1861 				},
1862 				.warm_ids = {NULL},
1863 			},
1864 			{
1865 				.name = "KWorld Digial MC-810",
1866 				.cold_ids = {
1867 					&af9015_usb_table[KWORLD_MC810],
1868 					NULL
1869 				},
1870 				.warm_ids = {NULL},
1871 			},
1872 			{
1873 				.name = "Genius TVGo DVB-T03",
1874 				.cold_ids = {
1875 					&af9015_usb_table[GENIUS_TVGO_DVB_T03],
1876 					NULL
1877 				},
1878 				.warm_ids = {NULL},
1879 			},
1880 			{
1881 				.name = "KWorld PlusTV DVB-T PCI Pro Card " \
1882 					"(DVB-T PC160-T)",
1883 				.cold_ids = {
1884 					&af9015_usb_table[KWORLD_PC160_T],
1885 					NULL
1886 				},
1887 				.warm_ids = {NULL},
1888 			},
1889 			{
1890 				.name = "Sveon STV20 Tuner USB DVB-T HDTV",
1891 				.cold_ids = {
1892 					&af9015_usb_table[SVEON_STV20],
1893 					NULL
1894 				},
1895 				.warm_ids = {NULL},
1896 			},
1897 			{
1898 				.name = "Leadtek WinFast DTV2000DS",
1899 				.cold_ids = {
1900 					&af9015_usb_table[WINFAST_DTV2000DS],
1901 					NULL
1902 				},
1903 				.warm_ids = {NULL},
1904 			},
1905 			{
1906 				.name = "KWorld USB DVB-T Stick Mobile " \
1907 					"(UB383-T)",
1908 				.cold_ids = {
1909 					&af9015_usb_table[KWORLD_UB383_T],
1910 					NULL
1911 				},
1912 				.warm_ids = {NULL},
1913 			},
1914 			{
1915 				.name = "AverMedia AVerTV Volar M (A815Mac)",
1916 				.cold_ids = {
1917 					&af9015_usb_table[AVERMEDIA_A815M],
1918 					NULL
1919 				},
1920 				.warm_ids = {NULL},
1921 			},
1922 		}
1923 	},
1924 };
1925 
af9015_usb_probe(struct usb_interface * intf,const struct usb_device_id * id)1926 static int af9015_usb_probe(struct usb_interface *intf,
1927 			    const struct usb_device_id *id)
1928 {
1929 	int ret = 0;
1930 	struct dvb_usb_device *d = NULL;
1931 	struct usb_device *udev = interface_to_usbdev(intf);
1932 	u8 i;
1933 
1934 	deb_info("%s: interface:%d\n", __func__,
1935 		intf->cur_altsetting->desc.bInterfaceNumber);
1936 
1937 	/* interface 0 is used by DVB-T receiver and
1938 	   interface 1 is for remote controller (HID) */
1939 	if (intf->cur_altsetting->desc.bInterfaceNumber == 0) {
1940 		ret = af9015_read_config(udev);
1941 		if (ret)
1942 			return ret;
1943 
1944 		for (i = 0; i < af9015_properties_count; i++) {
1945 			ret = dvb_usb_device_init(intf, &af9015_properties[i],
1946 				THIS_MODULE, &d, adapter_nr);
1947 			if (!ret)
1948 				break;
1949 			if (ret != -ENODEV)
1950 				return ret;
1951 		}
1952 		if (ret)
1953 			return ret;
1954 
1955 		if (d)
1956 			ret = af9015_init(d);
1957 	}
1958 
1959 	return ret;
1960 }
1961 
1962 /* usb specific object needed to register this driver with the usb subsystem */
1963 static struct usb_driver af9015_usb_driver = {
1964 	.name = "dvb_usb_af9015",
1965 	.probe = af9015_usb_probe,
1966 	.disconnect = dvb_usb_device_exit,
1967 	.id_table = af9015_usb_table,
1968 };
1969 
1970 module_usb_driver(af9015_usb_driver);
1971 
1972 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1973 MODULE_DESCRIPTION("Driver for Afatech AF9015 DVB-T");
1974 MODULE_LICENSE("GPL");
1975