2 * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
6 * Thanks to Afatech who kindly provided information.
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.
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.
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.
24 #include <linux/hash.h>
25 #include <linux/slab.h>
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);
45 static DEFINE_MUTEX(af9015_usb_mutex);
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);
51 static struct af9013_config af9015_af9013_config[] = {
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,
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,
67 static int af9015_rw_udev(struct usb_device *udev, struct req_t *req)
70 #define REQ_HDR_LEN 8 /* send header size */
71 #define ACK_HDR_LEN 2 /* rece header size */
75 u8 msg_len = REQ_HDR_LEN;
76 static u8 seq; /* packet sequence number */
78 if (mutex_lock_interruptible(&af9015_usb_mutex) < 0)
83 buf[2] = req->i2c_addr;
84 buf[3] = req->addr >> 8;
85 buf[4] = req->addr & 0xff;
87 buf[6] = req->addr_len;
88 buf[7] = req->data_len;
98 buf[2] |= 0x01; /* set I2C direction */
100 buf[0] = READ_WRITE_I2C;
103 if (((req->addr & 0xff00) == 0xff00) ||
104 ((req->addr & 0xff00) == 0xae00))
105 buf[0] = WRITE_VIRTUAL_MEMORY;
106 case WRITE_VIRTUAL_MEMORY:
108 case DOWNLOAD_FIRMWARE:
112 err("unknown command:%d", req->cmd);
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);
125 /* write requested */
127 memcpy(&buf[REQ_HDR_LEN], req->data, req->data_len);
128 msg_len += req->data_len;
132 debug_dump(buf, msg_len, deb_xfer);
135 ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, 0x02), buf, msg_len,
136 &act_len, AF9015_USB_TIMEOUT);
138 err("bulk message failed:%d (%d/%d)", ret, msg_len, act_len);
140 if (act_len != msg_len)
141 ret = -1; /* all data is not send */
145 /* no ack for those packets */
146 if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB)
149 /* write receives seq + status = 2 bytes
150 read receives seq + status + data = 2 + N bytes */
151 msg_len = ACK_HDR_LEN;
153 msg_len += req->data_len;
155 ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, 0x81), buf, msg_len,
156 &act_len, AF9015_USB_TIMEOUT);
158 err("recv bulk message failed:%d", ret);
164 debug_dump(buf, act_len, deb_xfer);
168 err("command failed:%d", buf[1]);
173 /* read request, copy returned data to return buf */
175 memcpy(req->data, &buf[ACK_HDR_LEN], req->data_len);
179 mutex_unlock(&af9015_usb_mutex);
184 static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req)
186 return af9015_rw_udev(d->udev, req);
189 static int af9015_write_regs(struct dvb_usb_device *d, u16 addr, u8 *val,
192 struct req_t req = {WRITE_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
194 return af9015_ctrl_msg(d, &req);
197 static int af9015_write_reg(struct dvb_usb_device *d, u16 addr, u8 val)
199 return af9015_write_regs(d, addr, &val, 1);
202 static int af9015_read_regs(struct dvb_usb_device *d, u16 addr, u8 *val, u8 len)
204 struct req_t req = {READ_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
206 return af9015_ctrl_msg(d, &req);
209 static int af9015_read_reg(struct dvb_usb_device *d, u16 addr, u8 *val)
211 return af9015_read_regs(d, addr, val, 1);
214 static int af9015_write_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
217 struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val};
219 if (addr == af9015_af9013_config[0].i2c_addr ||
220 addr == af9015_af9013_config[1].i2c_addr)
223 return af9015_ctrl_msg(d, &req);
226 static int af9015_read_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
229 struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val};
231 if (addr == af9015_af9013_config[0].i2c_addr ||
232 addr == af9015_af9013_config[1].i2c_addr)
235 return af9015_ctrl_msg(d, &req);
238 static int af9015_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
241 struct dvb_usb_device *d = i2c_get_adapdata(adap);
244 u8 uninitialized_var(mbox), addr_len;
248 The bus lock is needed because there is two tuners both using same I2C-address.
249 Due to that the only way to select correct tuner is use demodulator I2C-gate.
251 ................................................
252 . AF9015 includes integrated AF9013 demodulator.
253 . ____________ ____________ . ____________
254 .| uC | | demod | . | tuner |
255 .|------------| |------------| . |------------|
256 .| AF9015 | | AF9013/5 | . | MXL5003 |
257 .| |--+----I2C-------|-----/ -----|-.-----I2C-------| |
258 .| | | | addr 0x38 | . | addr 0xc6 |
259 .|____________| | |____________| . |____________|
260 .................|..............................
261 | ____________ ____________
262 | | demod | | tuner |
263 | |------------| |------------|
264 | | AF9013 | | MXL5003 |
265 +----I2C-------|-----/ -----|-------I2C-------| |
266 | addr 0x3a | | addr 0xc6 |
267 |____________| |____________|
269 if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
273 if (msg[i].addr == af9015_af9013_config[0].i2c_addr ||
274 msg[i].addr == af9015_af9013_config[1].i2c_addr) {
275 addr = msg[i].buf[0] << 8;
276 addr += msg[i].buf[1];
277 mbox = msg[i].buf[2];
280 addr = msg[i].buf[0];
282 /* mbox is don't care in that case */
285 if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
286 if (msg[i].len > 3 || msg[i+1].len > 61) {
290 if (msg[i].addr == af9015_af9013_config[0].i2c_addr)
291 req.cmd = READ_MEMORY;
294 req.i2c_addr = msg[i].addr;
297 req.addr_len = addr_len;
298 req.data_len = msg[i+1].len;
299 req.data = &msg[i+1].buf[0];
300 ret = af9015_ctrl_msg(d, &req);
302 } else if (msg[i].flags & I2C_M_RD) {
303 if (msg[i].len > 61) {
308 af9015_af9013_config[0].i2c_addr) {
313 req.i2c_addr = msg[i].addr;
316 req.addr_len = addr_len;
317 req.data_len = msg[i].len;
318 req.data = &msg[i].buf[0];
319 ret = af9015_ctrl_msg(d, &req);
322 if (msg[i].len > 21) {
326 if (msg[i].addr == af9015_af9013_config[0].i2c_addr)
327 req.cmd = WRITE_MEMORY;
330 req.i2c_addr = msg[i].addr;
333 req.addr_len = addr_len;
334 req.data_len = msg[i].len-addr_len;
335 req.data = &msg[i].buf[addr_len];
336 ret = af9015_ctrl_msg(d, &req);
346 mutex_unlock(&d->i2c_mutex);
351 static u32 af9015_i2c_func(struct i2c_adapter *adapter)
356 static struct i2c_algorithm af9015_i2c_algo = {
357 .master_xfer = af9015_i2c_xfer,
358 .functionality = af9015_i2c_func,
361 static int af9015_do_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit, u8 op)
366 ret = af9015_read_reg(d, addr, &val);
380 return af9015_write_reg(d, addr, val);
383 static int af9015_set_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
385 return af9015_do_reg_bit(d, addr, bit, 1);
388 static int af9015_clear_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
390 return af9015_do_reg_bit(d, addr, bit, 0);
393 static int af9015_init_endpoint(struct dvb_usb_device *d)
398 deb_info("%s: USB speed:%d\n", __func__, d->udev->speed);
400 /* Windows driver uses packet count 21 for USB1.1 and 348 for USB2.0.
401 We use smaller - about 1/4 from the original, 5 and 87. */
402 #define TS_PACKET_SIZE 188
404 #define TS_USB20_PACKET_COUNT 87
405 #define TS_USB20_FRAME_SIZE (TS_PACKET_SIZE*TS_USB20_PACKET_COUNT)
407 #define TS_USB11_PACKET_COUNT 5
408 #define TS_USB11_FRAME_SIZE (TS_PACKET_SIZE*TS_USB11_PACKET_COUNT)
410 #define TS_USB20_MAX_PACKET_SIZE 512
411 #define TS_USB11_MAX_PACKET_SIZE 64
413 if (d->udev->speed == USB_SPEED_FULL) {
414 frame_size = TS_USB11_FRAME_SIZE/4;
415 packet_size = TS_USB11_MAX_PACKET_SIZE/4;
417 frame_size = TS_USB20_FRAME_SIZE/4;
418 packet_size = TS_USB20_MAX_PACKET_SIZE/4;
421 ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */
424 ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */
427 ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */
430 ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */
433 ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */
436 if (af9015_config.dual_mode) {
437 ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */
441 ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */
444 if (af9015_config.dual_mode) {
445 ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */
449 /* EP4 xfer length */
450 ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff);
453 ret = af9015_write_reg(d, 0xdd89, frame_size >> 8);
456 /* EP5 xfer length */
457 ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff);
460 ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8);
463 ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */
466 ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */
469 ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */
472 if (af9015_config.dual_mode) {
473 ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */
478 /* enable / disable mp2if2 */
479 if (af9015_config.dual_mode)
480 ret = af9015_set_reg_bit(d, 0xd50b, 0);
482 ret = af9015_clear_reg_bit(d, 0xd50b, 0);
486 err("endpoint init failed:%d", ret);
490 static int af9015_copy_firmware(struct dvb_usb_device *d)
495 struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, sizeof(fw_params),
497 deb_info("%s:\n", __func__);
499 fw_params[0] = af9015_config.firmware_size >> 8;
500 fw_params[1] = af9015_config.firmware_size & 0xff;
501 fw_params[2] = af9015_config.firmware_checksum >> 8;
502 fw_params[3] = af9015_config.firmware_checksum & 0xff;
504 /* wait 2nd demodulator ready */
507 ret = af9015_read_reg_i2c(d,
508 af9015_af9013_config[1].i2c_addr, 0x98be, &val);
512 deb_info("%s: firmware status:%02x\n", __func__, val);
514 if (val == 0x0c) /* fw is running, no need for download */
517 /* set I2C master clock to fast (to speed up firmware copy) */
518 ret = af9015_write_reg(d, 0xd416, 0x04); /* 0x04 * 400ns */
525 ret = af9015_ctrl_msg(d, &req);
527 err("firmware copy cmd failed:%d", ret);
528 deb_info("%s: firmware copy done\n", __func__);
530 /* set I2C master clock back to normal */
531 ret = af9015_write_reg(d, 0xd416, 0x14); /* 0x14 * 400ns */
535 /* request boot firmware */
536 ret = af9015_write_reg_i2c(d, af9015_af9013_config[1].i2c_addr,
538 deb_info("%s: firmware boot cmd status:%d\n", __func__, ret);
542 for (i = 0; i < 15; i++) {
545 /* check firmware status */
546 ret = af9015_read_reg_i2c(d,
547 af9015_af9013_config[1].i2c_addr, 0x98be, &val);
548 deb_info("%s: firmware status cmd status:%d fw status:%02x\n",
553 if (val == 0x0c || val == 0x04) /* success or fail */
558 err("firmware did not run");
560 } else if (val != 0x0c) {
561 err("firmware boot timeout");
570 /* hash (and dump) eeprom */
571 static int af9015_eeprom_hash(struct usb_device *udev)
573 static const unsigned int eeprom_size = 256;
577 struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
579 eeprom = kmalloc(eeprom_size, GFP_KERNEL);
583 for (reg = 0; reg < eeprom_size; reg++) {
585 ret = af9015_rw_udev(udev, &req);
591 if (dvb_usb_af9015_debug & 0x01)
592 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, eeprom,
595 BUG_ON(eeprom_size % 4);
597 af9015_config.eeprom_sum = 0;
598 for (reg = 0; reg < eeprom_size / sizeof(u32); reg++) {
599 af9015_config.eeprom_sum *= GOLDEN_RATIO_PRIME_32;
600 af9015_config.eeprom_sum += le32_to_cpu(((u32 *)eeprom)[reg]);
603 deb_info("%s: eeprom sum=%.8x\n", __func__, af9015_config.eeprom_sum);
611 static int af9015_init(struct dvb_usb_device *d)
614 deb_info("%s:\n", __func__);
617 ret = af9015_write_reg(d, 0x98e9, 0xff);
621 ret = af9015_init_endpoint(d);
629 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
632 deb_info("%s: onoff:%d\n", __func__, onoff);
635 ret = af9015_set_reg_bit(adap->dev, 0xd503, 0);
637 ret = af9015_clear_reg_bit(adap->dev, 0xd503, 0);
642 static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
648 deb_info("%s: set pid filter, index %d, pid %x, onoff %d\n",
649 __func__, index, pid, onoff);
651 ret = af9015_write_reg(adap->dev, 0xd505, (pid & 0xff));
655 ret = af9015_write_reg(adap->dev, 0xd506, (pid >> 8));
659 idx = ((index & 0x1f) | (1 << 5));
660 ret = af9015_write_reg(adap->dev, 0xd504, idx);
666 static int af9015_download_firmware(struct usb_device *udev,
667 const struct firmware *fw)
669 int i, len, remaining, ret;
670 struct req_t req = {DOWNLOAD_FIRMWARE, 0, 0, 0, 0, 0, NULL};
673 deb_info("%s:\n", __func__);
676 for (i = 0; i < fw->size; i++)
677 checksum += fw->data[i];
679 af9015_config.firmware_size = fw->size;
680 af9015_config.firmware_checksum = checksum;
682 #define FW_ADDR 0x5100 /* firmware start address */
683 #define LEN_MAX 55 /* max packet size */
684 for (remaining = fw->size; remaining > 0; remaining -= LEN_MAX) {
690 req.data = (u8 *) &fw->data[fw->size - remaining];
691 req.addr = FW_ADDR + fw->size - remaining;
693 ret = af9015_rw_udev(udev, &req);
695 err("firmware download failed:%d", ret);
700 /* firmware loaded, request boot */
702 ret = af9015_rw_udev(udev, &req);
704 err("firmware boot failed:%d", ret);
712 struct af9015_rc_setup {
717 static char *af9015_rc_setup_match(unsigned int id,
718 const struct af9015_rc_setup *table)
720 for (; table->rc_codes; table++)
722 return table->rc_codes;
726 static const struct af9015_rc_setup af9015_rc_setup_modparam[] = {
727 { AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
728 { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
729 { AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
730 { AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
731 { AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
735 static const struct af9015_rc_setup af9015_rc_setup_hashes[] = {
736 { 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
737 { 0xa3703d00, RC_MAP_ALINK_DTU_M },
738 { 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
739 { 0x5d49e3db, RC_MAP_DIGITTRADE }, /* LC-Power LC-USB-DVBT */
743 static const struct af9015_rc_setup af9015_rc_setup_usbids[] = {
744 { (USB_VID_TERRATEC << 16) | USB_PID_TERRATEC_CINERGY_T_STICK_RC,
745 RC_MAP_TERRATEC_SLIM_2 },
746 { (USB_VID_TERRATEC << 16) | USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
747 RC_MAP_TERRATEC_SLIM },
748 { (USB_VID_VISIONPLUS << 16) | USB_PID_AZUREWAVE_AD_TU700,
749 RC_MAP_AZUREWAVE_AD_TU700 },
750 { (USB_VID_VISIONPLUS << 16) | USB_PID_TINYTWIN,
751 RC_MAP_AZUREWAVE_AD_TU700 },
752 { (USB_VID_MSI_2 << 16) | USB_PID_MSI_DIGI_VOX_MINI_III,
753 RC_MAP_MSI_DIGIVOX_III },
754 { (USB_VID_MSI_2 << 16) | USB_PID_MSI_DIGIVOX_DUO,
755 RC_MAP_MSI_DIGIVOX_III },
756 { (USB_VID_LEADTEK << 16) | USB_PID_WINFAST_DTV_DONGLE_GOLD,
757 RC_MAP_LEADTEK_Y04G0051 },
758 { (USB_VID_LEADTEK << 16) | USB_PID_WINFAST_DTV2000DS,
759 RC_MAP_LEADTEK_Y04G0051 },
760 { (USB_VID_AVERMEDIA << 16) | USB_PID_AVERMEDIA_VOLAR_X,
761 RC_MAP_AVERMEDIA_M135A },
762 { (USB_VID_AFATECH << 16) | USB_PID_TREKSTOR_DVBT,
764 { (USB_VID_KWORLD_2 << 16) | USB_PID_TINYTWIN_2,
765 RC_MAP_DIGITALNOW_TINYTWIN },
766 { (USB_VID_GTEK << 16) | USB_PID_TINYTWIN_3,
767 RC_MAP_DIGITALNOW_TINYTWIN },
768 { (USB_VID_KWORLD_2 << 16) | USB_PID_SVEON_STV22,
769 RC_MAP_MSI_DIGIVOX_III },
773 static void af9015_set_remote_config(struct usb_device *udev,
774 struct dvb_usb_device_properties *props)
776 u16 vid = le16_to_cpu(udev->descriptor.idVendor);
777 u16 pid = le16_to_cpu(udev->descriptor.idProduct);
779 /* try to load remote based module param */
780 props->rc.core.rc_codes = af9015_rc_setup_match(
781 dvb_usb_af9015_remote, af9015_rc_setup_modparam);
783 /* try to load remote based eeprom hash */
784 if (!props->rc.core.rc_codes)
785 props->rc.core.rc_codes = af9015_rc_setup_match(
786 af9015_config.eeprom_sum, af9015_rc_setup_hashes);
788 /* try to load remote based USB ID */
789 if (!props->rc.core.rc_codes)
790 props->rc.core.rc_codes = af9015_rc_setup_match(
791 (vid << 16) | pid, af9015_rc_setup_usbids);
793 /* try to load remote based USB iManufacturer string */
794 if (!props->rc.core.rc_codes && vid == USB_VID_AFATECH) {
795 /* Check USB manufacturer and product strings and try
796 to determine correct remote in case of chip vendor
797 reference IDs are used.
798 DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
799 char manufacturer[10];
800 memset(manufacturer, 0, sizeof(manufacturer));
801 usb_string(udev, udev->descriptor.iManufacturer,
802 manufacturer, sizeof(manufacturer));
803 if (!strcmp("MSI", manufacturer)) {
804 /* iManufacturer 1 MSI
805 iProduct 2 MSI K-VOX */
806 props->rc.core.rc_codes = af9015_rc_setup_match(
807 AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
808 af9015_rc_setup_modparam);
812 /* finally load "empty" just for leaving IR receiver enabled */
813 if (!props->rc.core.rc_codes)
814 props->rc.core.rc_codes = RC_MAP_EMPTY;
819 static int af9015_read_config(struct usb_device *udev)
822 u8 val, i, offset = 0;
823 struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
825 /* IR remote controller */
826 req.addr = AF9015_EEPROM_IR_MODE;
827 /* first message will timeout often due to possible hw bug */
828 for (i = 0; i < 4; i++) {
829 ret = af9015_rw_udev(udev, &req);
836 ret = af9015_eeprom_hash(udev);
840 deb_info("%s: IR mode=%d\n", __func__, val);
841 for (i = 0; i < af9015_properties_count; i++) {
842 if (val == AF9015_IR_MODE_DISABLED)
843 af9015_properties[i].rc.core.rc_codes = NULL;
845 af9015_set_remote_config(udev, &af9015_properties[i]);
848 /* TS mode - one or two receivers */
849 req.addr = AF9015_EEPROM_TS_MODE;
850 ret = af9015_rw_udev(udev, &req);
853 af9015_config.dual_mode = val;
854 deb_info("%s: TS mode=%d\n", __func__, af9015_config.dual_mode);
856 /* Set adapter0 buffer size according to USB port speed, adapter1 buffer
857 size can be static because it is enabled only USB2.0 */
858 for (i = 0; i < af9015_properties_count; i++) {
859 /* USB1.1 set smaller buffersize and disable 2nd adapter */
860 if (udev->speed == USB_SPEED_FULL) {
861 af9015_properties[i].adapter[0].fe[0].stream.u.bulk.buffersize
862 = TS_USB11_FRAME_SIZE;
863 /* disable 2nd adapter because we don't have
865 af9015_config.dual_mode = 0;
867 af9015_properties[i].adapter[0].fe[0].stream.u.bulk.buffersize
868 = TS_USB20_FRAME_SIZE;
872 if (af9015_config.dual_mode) {
873 /* read 2nd demodulator I2C address */
874 req.addr = AF9015_EEPROM_DEMOD2_I2C;
875 ret = af9015_rw_udev(udev, &req);
878 af9015_af9013_config[1].i2c_addr = val;
880 /* enable 2nd adapter */
881 for (i = 0; i < af9015_properties_count; i++)
882 af9015_properties[i].num_adapters = 2;
885 /* disable 2nd adapter */
886 for (i = 0; i < af9015_properties_count; i++)
887 af9015_properties[i].num_adapters = 1;
890 for (i = 0; i < af9015_properties[0].num_adapters; i++) {
892 offset = AF9015_EEPROM_OFFSET;
894 req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset;
895 ret = af9015_rw_udev(udev, &req);
900 af9015_af9013_config[i].clock = 28800000;
903 af9015_af9013_config[i].clock = 20480000;
906 af9015_af9013_config[i].clock = 28000000;
909 af9015_af9013_config[i].clock = 25000000;
912 deb_info("%s: [%d] xtal=%d set clock=%d\n", __func__, i,
913 val, af9015_af9013_config[i].clock);
916 req.addr = AF9015_EEPROM_IF1H + offset;
917 ret = af9015_rw_udev(udev, &req);
921 af9015_af9013_config[i].if_frequency = val << 8;
923 req.addr = AF9015_EEPROM_IF1L + offset;
924 ret = af9015_rw_udev(udev, &req);
928 af9015_af9013_config[i].if_frequency += val;
929 af9015_af9013_config[i].if_frequency *= 1000;
930 deb_info("%s: [%d] IF frequency=%d\n", __func__, i,
931 af9015_af9013_config[0].if_frequency);
934 req.addr = AF9015_EEPROM_MT2060_IF1H + offset;
935 ret = af9015_rw_udev(udev, &req);
938 af9015_config.mt2060_if1[i] = val << 8;
939 req.addr = AF9015_EEPROM_MT2060_IF1L + offset;
940 ret = af9015_rw_udev(udev, &req);
943 af9015_config.mt2060_if1[i] += val;
944 deb_info("%s: [%d] MT2060 IF1=%d\n", __func__, i,
945 af9015_config.mt2060_if1[i]);
948 req.addr = AF9015_EEPROM_TUNER_ID1 + offset;
949 ret = af9015_rw_udev(udev, &req);
953 case AF9013_TUNER_ENV77H11D5:
954 case AF9013_TUNER_MT2060:
955 case AF9013_TUNER_QT1010:
956 case AF9013_TUNER_UNKNOWN:
957 case AF9013_TUNER_MT2060_2:
958 case AF9013_TUNER_TDA18271:
959 case AF9013_TUNER_QT1010A:
960 case AF9013_TUNER_TDA18218:
961 af9015_af9013_config[i].spec_inv = 1;
963 case AF9013_TUNER_MXL5003D:
964 case AF9013_TUNER_MXL5005D:
965 case AF9013_TUNER_MXL5005R:
966 case AF9013_TUNER_MXL5007T:
967 af9015_af9013_config[i].spec_inv = 0;
969 case AF9013_TUNER_MC44S803:
970 af9015_af9013_config[i].gpio[1] = AF9013_GPIO_LO;
971 af9015_af9013_config[i].spec_inv = 1;
974 warn("tuner id=%d not supported, please report!", val);
978 af9015_af9013_config[i].tuner = val;
979 deb_info("%s: [%d] tuner id=%d\n", __func__, i, val);
984 err("eeprom read failed=%d", ret);
986 /* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
987 content :-( Override some wrong values here. Ditto for the
988 AVerTV Red HD+ (A850T) device. */
989 if (le16_to_cpu(udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
990 ((le16_to_cpu(udev->descriptor.idProduct) ==
991 USB_PID_AVERMEDIA_A850) ||
992 (le16_to_cpu(udev->descriptor.idProduct) ==
993 USB_PID_AVERMEDIA_A850T))) {
994 deb_info("%s: AverMedia A850: overriding config\n", __func__);
995 /* disable dual mode */
996 af9015_config.dual_mode = 0;
997 /* disable 2nd adapter */
998 for (i = 0; i < af9015_properties_count; i++)
999 af9015_properties[i].num_adapters = 1;
1001 /* set correct IF */
1002 af9015_af9013_config[0].if_frequency = 4570000;
1008 static int af9015_identify_state(struct usb_device *udev,
1009 struct dvb_usb_device_properties *props,
1010 struct dvb_usb_device_description **desc,
1015 struct req_t req = {GET_CONFIG, 0, 0, 0, 0, 1, &reply};
1017 ret = af9015_rw_udev(udev, &req);
1021 deb_info("%s: reply:%02x\n", __func__, reply);
1030 static int af9015_rc_query(struct dvb_usb_device *d)
1032 struct af9015_state *priv = d->priv;
1036 /* read registers needed to detect remote controller code */
1037 ret = af9015_read_regs(d, 0x98d9, buf, sizeof(buf));
1041 /* If any of these are non-zero, assume invalid data */
1042 if (buf[1] || buf[2] || buf[3])
1045 /* Check for repeat of previous code */
1046 if ((priv->rc_repeat != buf[6] || buf[0]) &&
1047 !memcmp(&buf[12], priv->rc_last, 4)) {
1048 deb_rc("%s: key repeated\n", __func__);
1049 rc_keydown(d->rc_dev, priv->rc_keycode, 0);
1050 priv->rc_repeat = buf[6];
1054 /* Only process key if canary killed */
1055 if (buf[16] != 0xff && buf[0] != 0x01) {
1056 deb_rc("%s: key pressed %02x %02x %02x %02x\n", __func__,
1057 buf[12], buf[13], buf[14], buf[15]);
1059 /* Reset the canary */
1060 ret = af9015_write_reg(d, 0x98e9, 0xff);
1064 /* Remember this key */
1065 memcpy(priv->rc_last, &buf[12], 4);
1066 if (buf[14] == (u8) ~buf[15]) {
1067 if (buf[12] == (u8) ~buf[13]) {
1069 priv->rc_keycode = buf[12] << 8 | buf[14];
1072 priv->rc_keycode = buf[12] << 16 |
1073 buf[13] << 8 | buf[14];
1077 priv->rc_keycode = buf[12] << 24 | buf[13] << 16 |
1078 buf[14] << 8 | buf[15];
1080 rc_keydown(d->rc_dev, priv->rc_keycode, 0);
1082 deb_rc("%s: no key press\n", __func__);
1083 /* Invalidate last keypress */
1084 /* Not really needed, but helps with debug */
1085 priv->rc_last[2] = priv->rc_last[3];
1088 priv->rc_repeat = buf[6];
1092 err("%s: failed:%d", __func__, ret);
1097 /* override demod callbacks for resource locking */
1098 static int af9015_af9013_set_frontend(struct dvb_frontend *fe)
1101 struct dvb_usb_adapter *adap = fe->dvb->priv;
1102 struct af9015_state *priv = adap->dev->priv;
1104 if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1107 ret = priv->set_frontend[adap->id](fe);
1109 mutex_unlock(&adap->dev->usb_mutex);
1114 /* override demod callbacks for resource locking */
1115 static int af9015_af9013_read_status(struct dvb_frontend *fe,
1116 fe_status_t *status)
1119 struct dvb_usb_adapter *adap = fe->dvb->priv;
1120 struct af9015_state *priv = adap->dev->priv;
1122 if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1125 ret = priv->read_status[adap->id](fe, status);
1127 mutex_unlock(&adap->dev->usb_mutex);
1132 /* override demod callbacks for resource locking */
1133 static int af9015_af9013_init(struct dvb_frontend *fe)
1136 struct dvb_usb_adapter *adap = fe->dvb->priv;
1137 struct af9015_state *priv = adap->dev->priv;
1139 if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1142 ret = priv->init[adap->id](fe);
1144 mutex_unlock(&adap->dev->usb_mutex);
1149 /* override demod callbacks for resource locking */
1150 static int af9015_af9013_sleep(struct dvb_frontend *fe)
1153 struct dvb_usb_adapter *adap = fe->dvb->priv;
1154 struct af9015_state *priv = adap->dev->priv;
1156 if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1159 ret = priv->sleep[adap->id](fe);
1161 mutex_unlock(&adap->dev->usb_mutex);
1166 /* override tuner callbacks for resource locking */
1167 static int af9015_tuner_init(struct dvb_frontend *fe)
1170 struct dvb_usb_adapter *adap = fe->dvb->priv;
1171 struct af9015_state *priv = adap->dev->priv;
1173 if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1176 ret = priv->tuner_init[adap->id](fe);
1178 mutex_unlock(&adap->dev->usb_mutex);
1183 /* override tuner callbacks for resource locking */
1184 static int af9015_tuner_sleep(struct dvb_frontend *fe)
1187 struct dvb_usb_adapter *adap = fe->dvb->priv;
1188 struct af9015_state *priv = adap->dev->priv;
1190 if (mutex_lock_interruptible(&adap->dev->usb_mutex))
1193 ret = priv->tuner_sleep[adap->id](fe);
1195 mutex_unlock(&adap->dev->usb_mutex);
1201 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
1204 struct af9015_state *state = adap->dev->priv;
1206 if (adap->id == 1) {
1207 /* copy firmware to 2nd demodulator */
1208 if (af9015_config.dual_mode) {
1209 ret = af9015_copy_firmware(adap->dev);
1211 err("firmware copy to 2nd frontend " \
1212 "failed, will disable it");
1213 af9015_config.dual_mode = 0;
1221 /* attach demodulator */
1222 adap->fe_adap[0].fe = dvb_attach(af9013_attach,
1223 &af9015_af9013_config[adap->id], &adap->dev->i2c_adap);
1226 * AF9015 firmware does not like if it gets interrupted by I2C adapter
1227 * request on some critical phases. During normal operation I2C adapter
1228 * is used only 2nd demodulator and tuner on dual tuner devices.
1229 * Override demodulator callbacks and use mutex for limit access to
1230 * those "critical" paths to keep AF9015 happy.
1231 * Note: we abuse unused usb_mutex here.
1233 if (adap->fe_adap[0].fe) {
1234 state->set_frontend[adap->id] =
1235 adap->fe_adap[0].fe->ops.set_frontend;
1236 adap->fe_adap[0].fe->ops.set_frontend =
1237 af9015_af9013_set_frontend;
1239 state->read_status[adap->id] =
1240 adap->fe_adap[0].fe->ops.read_status;
1241 adap->fe_adap[0].fe->ops.read_status =
1242 af9015_af9013_read_status;
1244 state->init[adap->id] = adap->fe_adap[0].fe->ops.init;
1245 adap->fe_adap[0].fe->ops.init = af9015_af9013_init;
1247 state->sleep[adap->id] = adap->fe_adap[0].fe->ops.sleep;
1248 adap->fe_adap[0].fe->ops.sleep = af9015_af9013_sleep;
1251 return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
1254 static struct mt2060_config af9015_mt2060_config = {
1255 .i2c_address = 0xc0,
1259 static struct qt1010_config af9015_qt1010_config = {
1260 .i2c_address = 0xc4,
1263 static struct tda18271_config af9015_tda18271_config = {
1264 .gate = TDA18271_GATE_DIGITAL,
1265 .small_i2c = TDA18271_16_BYTE_CHUNK_INIT,
1268 static struct mxl5005s_config af9015_mxl5003_config = {
1269 .i2c_address = 0xc6,
1270 .if_freq = IF_FREQ_4570000HZ,
1271 .xtal_freq = CRYSTAL_FREQ_16000000HZ,
1272 .agc_mode = MXL_SINGLE_AGC,
1273 .tracking_filter = MXL_TF_DEFAULT,
1274 .rssi_enable = MXL_RSSI_ENABLE,
1275 .cap_select = MXL_CAP_SEL_ENABLE,
1276 .div_out = MXL_DIV_OUT_4,
1277 .clock_out = MXL_CLOCK_OUT_DISABLE,
1278 .output_load = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
1279 .top = MXL5005S_TOP_25P2,
1280 .mod_mode = MXL_DIGITAL_MODE,
1281 .if_mode = MXL_ZERO_IF,
1282 .AgcMasterByte = 0x00,
1285 static struct mxl5005s_config af9015_mxl5005_config = {
1286 .i2c_address = 0xc6,
1287 .if_freq = IF_FREQ_4570000HZ,
1288 .xtal_freq = CRYSTAL_FREQ_16000000HZ,
1289 .agc_mode = MXL_SINGLE_AGC,
1290 .tracking_filter = MXL_TF_OFF,
1291 .rssi_enable = MXL_RSSI_ENABLE,
1292 .cap_select = MXL_CAP_SEL_ENABLE,
1293 .div_out = MXL_DIV_OUT_4,
1294 .clock_out = MXL_CLOCK_OUT_DISABLE,
1295 .output_load = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
1296 .top = MXL5005S_TOP_25P2,
1297 .mod_mode = MXL_DIGITAL_MODE,
1298 .if_mode = MXL_ZERO_IF,
1299 .AgcMasterByte = 0x00,
1302 static struct mc44s803_config af9015_mc44s803_config = {
1303 .i2c_address = 0xc0,
1307 static struct tda18218_config af9015_tda18218_config = {
1308 .i2c_address = 0xc0,
1309 .i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */
1312 static struct mxl5007t_config af9015_mxl5007t_config = {
1313 .xtal_freq_hz = MxL_XTAL_24_MHZ,
1314 .if_freq_hz = MxL_IF_4_57_MHZ,
1317 static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
1320 struct af9015_state *state = adap->dev->priv;
1321 deb_info("%s:\n", __func__);
1323 switch (af9015_af9013_config[adap->id].tuner) {
1324 case AF9013_TUNER_MT2060:
1325 case AF9013_TUNER_MT2060_2:
1326 ret = dvb_attach(mt2060_attach, adap->fe_adap[0].fe,
1327 &adap->dev->i2c_adap, &af9015_mt2060_config,
1328 af9015_config.mt2060_if1[adap->id])
1329 == NULL ? -ENODEV : 0;
1331 case AF9013_TUNER_QT1010:
1332 case AF9013_TUNER_QT1010A:
1333 ret = dvb_attach(qt1010_attach, adap->fe_adap[0].fe,
1334 &adap->dev->i2c_adap,
1335 &af9015_qt1010_config) == NULL ? -ENODEV : 0;
1337 case AF9013_TUNER_TDA18271:
1338 ret = dvb_attach(tda18271_attach, adap->fe_adap[0].fe, 0xc0,
1339 &adap->dev->i2c_adap,
1340 &af9015_tda18271_config) == NULL ? -ENODEV : 0;
1342 case AF9013_TUNER_TDA18218:
1343 ret = dvb_attach(tda18218_attach, adap->fe_adap[0].fe,
1344 &adap->dev->i2c_adap,
1345 &af9015_tda18218_config) == NULL ? -ENODEV : 0;
1347 case AF9013_TUNER_MXL5003D:
1348 ret = dvb_attach(mxl5005s_attach, adap->fe_adap[0].fe,
1349 &adap->dev->i2c_adap,
1350 &af9015_mxl5003_config) == NULL ? -ENODEV : 0;
1352 case AF9013_TUNER_MXL5005D:
1353 case AF9013_TUNER_MXL5005R:
1354 ret = dvb_attach(mxl5005s_attach, adap->fe_adap[0].fe,
1355 &adap->dev->i2c_adap,
1356 &af9015_mxl5005_config) == NULL ? -ENODEV : 0;
1358 case AF9013_TUNER_ENV77H11D5:
1359 ret = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0xc0,
1360 &adap->dev->i2c_adap,
1361 DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
1363 case AF9013_TUNER_MC44S803:
1364 ret = dvb_attach(mc44s803_attach, adap->fe_adap[0].fe,
1365 &adap->dev->i2c_adap,
1366 &af9015_mc44s803_config) == NULL ? -ENODEV : 0;
1368 case AF9013_TUNER_MXL5007T:
1369 ret = dvb_attach(mxl5007t_attach, adap->fe_adap[0].fe,
1370 &adap->dev->i2c_adap,
1371 0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
1373 case AF9013_TUNER_UNKNOWN:
1376 err("Unknown tuner id:%d",
1377 af9015_af9013_config[adap->id].tuner);
1380 if (adap->fe_adap[0].fe->ops.tuner_ops.init) {
1381 state->tuner_init[adap->id] =
1382 adap->fe_adap[0].fe->ops.tuner_ops.init;
1383 adap->fe_adap[0].fe->ops.tuner_ops.init = af9015_tuner_init;
1386 if (adap->fe_adap[0].fe->ops.tuner_ops.sleep) {
1387 state->tuner_sleep[adap->id] =
1388 adap->fe_adap[0].fe->ops.tuner_ops.sleep;
1389 adap->fe_adap[0].fe->ops.tuner_ops.sleep = af9015_tuner_sleep;
1395 enum af9015_usb_table_entry {
1404 KWORLD_PLUSTV_PC160,
1408 AVERTV_VOLAR_X_REV2,
1409 TELESTAR_STARSTICK_2,
1411 MSI_DIGIVOX_MINI_III,
1418 CONCEPTRONIC_CTVDIGRCU,
1420 GENIUS_TVGO_DVB_T03,
1436 static struct usb_device_id af9015_usb_table[] = {
1438 USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015)},
1440 USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016)},
1441 [WINFAST_DTV_GOLD] = {
1442 USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD)},
1443 [PINNACLE_PCTV_71E] = {
1444 USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E)},
1445 [KWORLD_PLUSTV_399U] = {
1446 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U)},
1448 USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN)},
1449 [AZUREWAVE_TU700] = {
1450 USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700)},
1451 [TERRATEC_AF9015] = {
1452 USB_DEVICE(USB_VID_TERRATEC,
1453 USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2)},
1454 [KWORLD_PLUSTV_PC160] = {
1455 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T)},
1456 [AVERTV_VOLAR_X] = {
1457 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X)},
1458 [XTENSIONS_380U] = {
1459 USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380)},
1460 [MSI_DIGIVOX_DUO] = {
1461 USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO)},
1462 [AVERTV_VOLAR_X_REV2] = {
1463 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2)},
1464 [TELESTAR_STARSTICK_2] = {
1465 USB_DEVICE(USB_VID_TELESTAR, USB_PID_TELESTAR_STARSTICK_2)},
1466 [AVERMEDIA_A309_USB] = {
1467 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309)},
1468 [MSI_DIGIVOX_MINI_III] = {
1469 USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III)},
1471 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U)},
1473 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2)},
1475 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3)},
1477 USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT)},
1479 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850)},
1481 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805)},
1482 [CONCEPTRONIC_CTVDIGRCU] = {
1483 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU)},
1485 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810)},
1486 [GENIUS_TVGO_DVB_T03] = {
1487 USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03)},
1489 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2)},
1490 [KWORLD_PC160_T] = {
1491 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T)},
1493 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20)},
1495 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2)},
1496 [WINFAST_DTV2000DS] = {
1497 USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS)},
1498 [KWORLD_UB383_T] = {
1499 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T)},
1501 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4)},
1502 [AVERMEDIA_A815M] = {
1503 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M)},
1504 [CINERGY_T_STICK_RC] = {
1505 USB_DEVICE(USB_VID_TERRATEC,
1506 USB_PID_TERRATEC_CINERGY_T_STICK_RC)},
1507 [CINERGY_T_DUAL_RC] = {
1508 USB_DEVICE(USB_VID_TERRATEC,
1509 USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC)},
1511 USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T)},
1513 USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3)},
1515 USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22)},
1518 MODULE_DEVICE_TABLE(usb, af9015_usb_table);
1520 #define AF9015_RC_INTERVAL 500
1521 static struct dvb_usb_device_properties af9015_properties[] = {
1523 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1525 .usb_ctrl = DEVICE_SPECIFIC,
1526 .download_firmware = af9015_download_firmware,
1527 .firmware = "dvb-usb-af9015.fw",
1530 .size_of_priv = sizeof(struct af9015_state),
1538 .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1539 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1541 .pid_filter_count = 32,
1542 .pid_filter = af9015_pid_filter,
1543 .pid_filter_ctrl = af9015_pid_filter_ctrl,
1545 .frontend_attach = af9015_af9013_frontend_attach,
1546 .tuner_attach = af9015_tuner_attach,
1559 .frontend_attach = af9015_af9013_frontend_attach,
1560 .tuner_attach = af9015_tuner_attach,
1567 .buffersize = TS_USB20_FRAME_SIZE,
1576 .identify_state = af9015_identify_state,
1579 .protocol = RC_TYPE_NEC,
1580 .module_name = "af9015",
1581 .rc_query = af9015_rc_query,
1582 .rc_interval = AF9015_RC_INTERVAL,
1583 .allowed_protos = RC_TYPE_NEC,
1586 .i2c_algo = &af9015_i2c_algo,
1588 .num_device_descs = 12, /* check max from dvb-usb.h */
1591 .name = "Afatech AF9015 DVB-T USB2.0 stick",
1593 &af9015_usb_table[AFATECH_9015],
1594 &af9015_usb_table[AFATECH_9016],
1597 .name = "Leadtek WinFast DTV Dongle Gold",
1599 &af9015_usb_table[WINFAST_DTV_GOLD],
1602 .name = "Pinnacle PCTV 71e",
1604 &af9015_usb_table[PINNACLE_PCTV_71E],
1607 .name = "KWorld PlusTV Dual DVB-T Stick " \
1610 &af9015_usb_table[KWORLD_PLUSTV_399U],
1611 &af9015_usb_table[KWORLD_399U_2],
1614 .name = "DigitalNow TinyTwin DVB-T Receiver",
1616 &af9015_usb_table[TINYTWIN],
1617 &af9015_usb_table[TINYTWIN_2],
1618 &af9015_usb_table[TINYTWIN_3],
1621 .name = "TwinHan AzureWave AD-TU700(704J)",
1623 &af9015_usb_table[AZUREWAVE_TU700],
1626 .name = "TerraTec Cinergy T USB XE",
1628 &af9015_usb_table[TERRATEC_AF9015],
1631 .name = "KWorld PlusTV Dual DVB-T PCI " \
1634 &af9015_usb_table[KWORLD_PLUSTV_PC160],
1637 .name = "AVerMedia AVerTV DVB-T Volar X",
1639 &af9015_usb_table[AVERTV_VOLAR_X],
1642 .name = "TerraTec Cinergy T Stick RC",
1644 &af9015_usb_table[CINERGY_T_STICK_RC],
1647 .name = "TerraTec Cinergy T Stick Dual RC",
1649 &af9015_usb_table[CINERGY_T_DUAL_RC],
1652 .name = "AverMedia AVerTV Red HD+ (A850T)",
1654 &af9015_usb_table[AVERTV_A850T],
1659 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1661 .usb_ctrl = DEVICE_SPECIFIC,
1662 .download_firmware = af9015_download_firmware,
1663 .firmware = "dvb-usb-af9015.fw",
1666 .size_of_priv = sizeof(struct af9015_state),
1674 .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1675 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1677 .pid_filter_count = 32,
1678 .pid_filter = af9015_pid_filter,
1679 .pid_filter_ctrl = af9015_pid_filter_ctrl,
1681 .frontend_attach = af9015_af9013_frontend_attach,
1682 .tuner_attach = af9015_tuner_attach,
1695 .frontend_attach = af9015_af9013_frontend_attach,
1696 .tuner_attach = af9015_tuner_attach,
1703 .buffersize = TS_USB20_FRAME_SIZE,
1712 .identify_state = af9015_identify_state,
1715 .protocol = RC_TYPE_NEC,
1716 .module_name = "af9015",
1717 .rc_query = af9015_rc_query,
1718 .rc_interval = AF9015_RC_INTERVAL,
1719 .allowed_protos = RC_TYPE_NEC,
1722 .i2c_algo = &af9015_i2c_algo,
1724 .num_device_descs = 10, /* check max from dvb-usb.h */
1727 .name = "Xtensions XD-380",
1729 &af9015_usb_table[XTENSIONS_380U],
1732 .name = "MSI DIGIVOX Duo",
1734 &af9015_usb_table[MSI_DIGIVOX_DUO],
1737 .name = "Fujitsu-Siemens Slim Mobile USB DVB-T",
1739 &af9015_usb_table[AVERTV_VOLAR_X_REV2],
1742 .name = "Telestar Starstick 2",
1744 &af9015_usb_table[TELESTAR_STARSTICK_2],
1747 .name = "AVerMedia A309",
1749 &af9015_usb_table[AVERMEDIA_A309_USB],
1752 .name = "MSI Digi VOX mini III",
1754 &af9015_usb_table[MSI_DIGIVOX_MINI_III],
1757 .name = "KWorld USB DVB-T TV Stick II " \
1760 &af9015_usb_table[KWORLD_E396],
1761 &af9015_usb_table[KWORLD_E39B],
1762 &af9015_usb_table[KWORLD_E395],
1763 &af9015_usb_table[KWORLD_E39A],
1766 .name = "TrekStor DVB-T USB Stick",
1768 &af9015_usb_table[TREKSTOR_DVBT],
1771 .name = "AverMedia AVerTV Volar Black HD " \
1774 &af9015_usb_table[AVERTV_A850],
1777 .name = "Sveon STV22 Dual USB DVB-T Tuner HDTV",
1779 &af9015_usb_table[SVEON_STV22],
1784 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1786 .usb_ctrl = DEVICE_SPECIFIC,
1787 .download_firmware = af9015_download_firmware,
1788 .firmware = "dvb-usb-af9015.fw",
1791 .size_of_priv = sizeof(struct af9015_state),
1799 .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1800 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1802 .pid_filter_count = 32,
1803 .pid_filter = af9015_pid_filter,
1804 .pid_filter_ctrl = af9015_pid_filter_ctrl,
1806 .frontend_attach = af9015_af9013_frontend_attach,
1807 .tuner_attach = af9015_tuner_attach,
1820 .frontend_attach = af9015_af9013_frontend_attach,
1821 .tuner_attach = af9015_tuner_attach,
1828 .buffersize = TS_USB20_FRAME_SIZE,
1837 .identify_state = af9015_identify_state,
1840 .protocol = RC_TYPE_NEC,
1841 .module_name = "af9015",
1842 .rc_query = af9015_rc_query,
1843 .rc_interval = AF9015_RC_INTERVAL,
1844 .allowed_protos = RC_TYPE_NEC,
1847 .i2c_algo = &af9015_i2c_algo,
1849 .num_device_descs = 9, /* check max from dvb-usb.h */
1852 .name = "AverMedia AVerTV Volar GPS 805 (A805)",
1854 &af9015_usb_table[AVERTV_A805],
1857 .name = "Conceptronic USB2.0 DVB-T CTVDIGRCU " \
1860 &af9015_usb_table[CONCEPTRONIC_CTVDIGRCU],
1863 .name = "KWorld Digial MC-810",
1865 &af9015_usb_table[KWORLD_MC810],
1868 .name = "Genius TVGo DVB-T03",
1870 &af9015_usb_table[GENIUS_TVGO_DVB_T03],
1873 .name = "KWorld PlusTV DVB-T PCI Pro Card " \
1876 &af9015_usb_table[KWORLD_PC160_T],
1879 .name = "Sveon STV20 Tuner USB DVB-T HDTV",
1881 &af9015_usb_table[SVEON_STV20],
1884 .name = "Leadtek WinFast DTV2000DS",
1886 &af9015_usb_table[WINFAST_DTV2000DS],
1889 .name = "KWorld USB DVB-T Stick Mobile " \
1892 &af9015_usb_table[KWORLD_UB383_T],
1895 .name = "AverMedia AVerTV Volar M (A815Mac)",
1897 &af9015_usb_table[AVERMEDIA_A815M],
1904 static int af9015_usb_probe(struct usb_interface *intf,
1905 const struct usb_device_id *id)
1908 struct dvb_usb_device *d = NULL;
1909 struct usb_device *udev = interface_to_usbdev(intf);
1912 deb_info("%s: interface:%d\n", __func__,
1913 intf->cur_altsetting->desc.bInterfaceNumber);
1915 /* interface 0 is used by DVB-T receiver and
1916 interface 1 is for remote controller (HID) */
1917 if (intf->cur_altsetting->desc.bInterfaceNumber == 0) {
1918 ret = af9015_read_config(udev);
1922 for (i = 0; i < af9015_properties_count; i++) {
1923 ret = dvb_usb_device_init(intf, &af9015_properties[i],
1924 THIS_MODULE, &d, adapter_nr);
1934 ret = af9015_init(d);
1940 /* usb specific object needed to register this driver with the usb subsystem */
1941 static struct usb_driver af9015_usb_driver = {
1942 .name = "dvb_usb_af9015",
1943 .probe = af9015_usb_probe,
1944 .disconnect = dvb_usb_device_exit,
1945 .id_table = af9015_usb_table,
1948 module_usb_driver(af9015_usb_driver);
1950 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1951 MODULE_DESCRIPTION("Afatech AF9015 driver");
1952 MODULE_LICENSE("GPL");