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.
26 static int dvb_usb_af9015_remote
;
27 module_param_named(remote
, dvb_usb_af9015_remote
, int, 0644);
28 MODULE_PARM_DESC(remote
, "select remote");
29 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr
);
31 static int af9015_ctrl_msg(struct dvb_usb_device
*d
, struct req_t
*req
)
33 #define REQ_HDR_LEN 8 /* send header size */
34 #define ACK_HDR_LEN 2 /* rece header size */
35 struct af9015_state
*state
= d_to_priv(d
);
39 mutex_lock(&d
->usb_mutex
);
41 state
->buf
[0] = req
->cmd
;
42 state
->buf
[1] = state
->seq
++;
43 state
->buf
[2] = req
->i2c_addr
;
44 state
->buf
[3] = req
->addr
>> 8;
45 state
->buf
[4] = req
->addr
& 0xff;
46 state
->buf
[5] = req
->mbox
;
47 state
->buf
[6] = req
->addr_len
;
48 state
->buf
[7] = req
->data_len
;
58 state
->buf
[2] |= 0x01; /* set I2C direction */
60 state
->buf
[0] = READ_WRITE_I2C
;
63 if (((req
->addr
& 0xff00) == 0xff00) ||
64 ((req
->addr
& 0xff00) == 0xae00))
65 state
->buf
[0] = WRITE_VIRTUAL_MEMORY
;
66 case WRITE_VIRTUAL_MEMORY
:
68 case DOWNLOAD_FIRMWARE
:
72 dev_err(&d
->udev
->dev
, "%s: unknown command=%d\n",
73 KBUILD_MODNAME
, req
->cmd
);
78 /* buffer overflow check */
79 if ((write
&& (req
->data_len
> BUF_LEN
- REQ_HDR_LEN
)) ||
80 (!write
&& (req
->data_len
> BUF_LEN
- ACK_HDR_LEN
))) {
81 dev_err(&d
->udev
->dev
, "%s: too much data; cmd=%d len=%d\n",
82 KBUILD_MODNAME
, req
->cmd
, req
->data_len
);
87 /* write receives seq + status = 2 bytes
88 read receives seq + status + data = 2 + N bytes */
92 wlen
+= req
->data_len
;
93 memcpy(&state
->buf
[REQ_HDR_LEN
], req
->data
, req
->data_len
);
95 rlen
+= req
->data_len
;
98 /* no ack for these packets */
99 if (req
->cmd
== DOWNLOAD_FIRMWARE
|| req
->cmd
== RECONNECT_USB
)
102 ret
= dvb_usbv2_generic_rw_locked(d
,
103 state
->buf
, wlen
, state
->buf
, rlen
);
108 if (rlen
&& state
->buf
[1]) {
109 dev_err(&d
->udev
->dev
, "%s: command failed=%d\n",
110 KBUILD_MODNAME
, state
->buf
[1]);
115 /* read request, copy returned data to return buf */
117 memcpy(req
->data
, &state
->buf
[ACK_HDR_LEN
], req
->data_len
);
119 mutex_unlock(&d
->usb_mutex
);
124 static int af9015_write_regs(struct dvb_usb_device
*d
, u16 addr
, u8
*val
,
127 struct req_t req
= {WRITE_MEMORY
, AF9015_I2C_DEMOD
, addr
, 0, 0, len
,
129 return af9015_ctrl_msg(d
, &req
);
132 static int af9015_read_regs(struct dvb_usb_device
*d
, u16 addr
, u8
*val
, u8 len
)
134 struct req_t req
= {READ_MEMORY
, AF9015_I2C_DEMOD
, addr
, 0, 0, len
,
136 return af9015_ctrl_msg(d
, &req
);
139 static int af9015_write_reg(struct dvb_usb_device
*d
, u16 addr
, u8 val
)
141 return af9015_write_regs(d
, addr
, &val
, 1);
144 static int af9015_read_reg(struct dvb_usb_device
*d
, u16 addr
, u8
*val
)
146 return af9015_read_regs(d
, addr
, val
, 1);
149 static int af9015_write_reg_i2c(struct dvb_usb_device
*d
, u8 addr
, u16 reg
,
152 struct af9015_state
*state
= d_to_priv(d
);
153 struct req_t req
= {WRITE_I2C
, addr
, reg
, 1, 1, 1, &val
};
155 if (addr
== state
->af9013_config
[0].i2c_addr
||
156 addr
== state
->af9013_config
[1].i2c_addr
)
159 return af9015_ctrl_msg(d
, &req
);
162 static int af9015_read_reg_i2c(struct dvb_usb_device
*d
, u8 addr
, u16 reg
,
165 struct af9015_state
*state
= d_to_priv(d
);
166 struct req_t req
= {READ_I2C
, addr
, reg
, 0, 1, 1, val
};
168 if (addr
== state
->af9013_config
[0].i2c_addr
||
169 addr
== state
->af9013_config
[1].i2c_addr
)
172 return af9015_ctrl_msg(d
, &req
);
175 static int af9015_do_reg_bit(struct dvb_usb_device
*d
, u16 addr
, u8 bit
, u8 op
)
180 ret
= af9015_read_reg(d
, addr
, &val
);
194 return af9015_write_reg(d
, addr
, val
);
197 static int af9015_set_reg_bit(struct dvb_usb_device
*d
, u16 addr
, u8 bit
)
199 return af9015_do_reg_bit(d
, addr
, bit
, 1);
202 static int af9015_clear_reg_bit(struct dvb_usb_device
*d
, u16 addr
, u8 bit
)
204 return af9015_do_reg_bit(d
, addr
, bit
, 0);
207 static int af9015_i2c_xfer(struct i2c_adapter
*adap
, struct i2c_msg msg
[],
210 struct dvb_usb_device
*d
= i2c_get_adapdata(adap
);
211 struct af9015_state
*state
= d_to_priv(d
);
214 u8
uninitialized_var(mbox
), addr_len
;
218 The bus lock is needed because there is two tuners both using same I2C-address.
219 Due to that the only way to select correct tuner is use demodulator I2C-gate.
221 ................................................
222 . AF9015 includes integrated AF9013 demodulator.
223 . ____________ ____________ . ____________
224 .| uC | | demod | . | tuner |
225 .|------------| |------------| . |------------|
226 .| AF9015 | | AF9013/5 | . | MXL5003 |
227 .| |--+----I2C-------|-----/ -----|-.-----I2C-------| |
228 .| | | | addr 0x38 | . | addr 0xc6 |
229 .|____________| | |____________| . |____________|
230 .................|..............................
231 | ____________ ____________
232 | | demod | | tuner |
233 | |------------| |------------|
234 | | AF9013 | | MXL5003 |
235 +----I2C-------|-----/ -----|-------I2C-------| |
236 | addr 0x3a | | addr 0xc6 |
237 |____________| |____________|
239 if (mutex_lock_interruptible(&d
->i2c_mutex
) < 0)
243 if (msg
[i
].addr
== state
->af9013_config
[0].i2c_addr
||
244 msg
[i
].addr
== state
->af9013_config
[1].i2c_addr
) {
245 addr
= msg
[i
].buf
[0] << 8;
246 addr
+= msg
[i
].buf
[1];
247 mbox
= msg
[i
].buf
[2];
250 addr
= msg
[i
].buf
[0];
252 /* mbox is don't care in that case */
255 if (num
> i
+ 1 && (msg
[i
+1].flags
& I2C_M_RD
)) {
256 if (msg
[i
].len
> 3 || msg
[i
+1].len
> 61) {
260 if (msg
[i
].addr
== state
->af9013_config
[0].i2c_addr
)
261 req
.cmd
= READ_MEMORY
;
264 req
.i2c_addr
= msg
[i
].addr
;
267 req
.addr_len
= addr_len
;
268 req
.data_len
= msg
[i
+1].len
;
269 req
.data
= &msg
[i
+1].buf
[0];
270 ret
= af9015_ctrl_msg(d
, &req
);
272 } else if (msg
[i
].flags
& I2C_M_RD
) {
273 if (msg
[i
].len
> 61) {
277 if (msg
[i
].addr
== state
->af9013_config
[0].i2c_addr
) {
282 req
.i2c_addr
= msg
[i
].addr
;
285 req
.addr_len
= addr_len
;
286 req
.data_len
= msg
[i
].len
;
287 req
.data
= &msg
[i
].buf
[0];
288 ret
= af9015_ctrl_msg(d
, &req
);
291 if (msg
[i
].len
> 21) {
295 if (msg
[i
].addr
== state
->af9013_config
[0].i2c_addr
)
296 req
.cmd
= WRITE_MEMORY
;
299 req
.i2c_addr
= msg
[i
].addr
;
302 req
.addr_len
= addr_len
;
303 req
.data_len
= msg
[i
].len
-addr_len
;
304 req
.data
= &msg
[i
].buf
[addr_len
];
305 ret
= af9015_ctrl_msg(d
, &req
);
315 mutex_unlock(&d
->i2c_mutex
);
320 static u32
af9015_i2c_func(struct i2c_adapter
*adapter
)
325 static struct i2c_algorithm af9015_i2c_algo
= {
326 .master_xfer
= af9015_i2c_xfer
,
327 .functionality
= af9015_i2c_func
,
330 static int af9015_identify_state(struct dvb_usb_device
*d
, const char **name
)
334 struct req_t req
= {GET_CONFIG
, 0, 0, 0, 0, 1, &reply
};
336 ret
= af9015_ctrl_msg(d
, &req
);
340 dev_dbg(&d
->udev
->dev
, "%s: reply=%02x\n", __func__
, reply
);
350 static int af9015_download_firmware(struct dvb_usb_device
*d
,
351 const struct firmware
*fw
)
353 struct af9015_state
*state
= d_to_priv(d
);
354 int i
, len
, remaining
, ret
;
355 struct req_t req
= {DOWNLOAD_FIRMWARE
, 0, 0, 0, 0, 0, NULL
};
357 dev_dbg(&d
->udev
->dev
, "%s:\n", __func__
);
360 for (i
= 0; i
< fw
->size
; i
++)
361 checksum
+= fw
->data
[i
];
363 state
->firmware_size
= fw
->size
;
364 state
->firmware_checksum
= checksum
;
366 #define FW_ADDR 0x5100 /* firmware start address */
367 #define LEN_MAX 55 /* max packet size */
368 for (remaining
= fw
->size
; remaining
> 0; remaining
-= LEN_MAX
) {
374 req
.data
= (u8
*) &fw
->data
[fw
->size
- remaining
];
375 req
.addr
= FW_ADDR
+ fw
->size
- remaining
;
377 ret
= af9015_ctrl_msg(d
, &req
);
379 dev_err(&d
->udev
->dev
,
380 "%s: firmware download failed=%d\n",
381 KBUILD_MODNAME
, ret
);
386 /* firmware loaded, request boot */
389 ret
= af9015_ctrl_msg(d
, &req
);
391 dev_err(&d
->udev
->dev
, "%s: firmware boot failed=%d\n",
392 KBUILD_MODNAME
, ret
);
400 #define AF9015_EEPROM_SIZE 256
401 /* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */
402 #define GOLDEN_RATIO_PRIME_32 0x9e370001UL
404 /* hash (and dump) eeprom */
405 static int af9015_eeprom_hash(struct dvb_usb_device
*d
)
407 struct af9015_state
*state
= d_to_priv(d
);
409 u8 buf
[AF9015_EEPROM_SIZE
];
410 struct req_t req
= {READ_I2C
, AF9015_I2C_EEPROM
, 0, 0, 1, 1, NULL
};
413 for (i
= 0; i
< AF9015_EEPROM_SIZE
; i
++) {
416 ret
= af9015_ctrl_msg(d
, &req
);
421 /* calculate checksum */
422 for (i
= 0; i
< AF9015_EEPROM_SIZE
/ sizeof(u32
); i
++) {
423 state
->eeprom_sum
*= GOLDEN_RATIO_PRIME_32
;
424 state
->eeprom_sum
+= le32_to_cpu(((__le32
*)buf
)[i
]);
427 for (i
= 0; i
< AF9015_EEPROM_SIZE
; i
+= 16)
428 dev_dbg(&d
->udev
->dev
, "%s: %*ph\n", __func__
, 16, buf
+ i
);
430 dev_dbg(&d
->udev
->dev
, "%s: eeprom sum=%.8x\n",
431 __func__
, state
->eeprom_sum
);
434 dev_err(&d
->udev
->dev
, "%s: eeprom failed=%d\n", KBUILD_MODNAME
, ret
);
438 static int af9015_read_config(struct dvb_usb_device
*d
)
440 struct af9015_state
*state
= d_to_priv(d
);
442 u8 val
, i
, offset
= 0;
443 struct req_t req
= {READ_I2C
, AF9015_I2C_EEPROM
, 0, 0, 1, 1, &val
};
445 dev_dbg(&d
->udev
->dev
, "%s:\n", __func__
);
447 /* IR remote controller */
448 req
.addr
= AF9015_EEPROM_IR_MODE
;
449 /* first message will timeout often due to possible hw bug */
450 for (i
= 0; i
< 4; i
++) {
451 ret
= af9015_ctrl_msg(d
, &req
);
458 ret
= af9015_eeprom_hash(d
);
462 state
->ir_mode
= val
;
463 dev_dbg(&d
->udev
->dev
, "%s: IR mode=%d\n", __func__
, val
);
465 /* TS mode - one or two receivers */
466 req
.addr
= AF9015_EEPROM_TS_MODE
;
467 ret
= af9015_ctrl_msg(d
, &req
);
471 state
->dual_mode
= val
;
472 dev_dbg(&d
->udev
->dev
, "%s: TS mode=%d\n", __func__
, state
->dual_mode
);
474 /* disable 2nd adapter because we don't have PID-filters */
475 if (d
->udev
->speed
== USB_SPEED_FULL
)
476 state
->dual_mode
= 0;
478 if (state
->dual_mode
) {
479 /* read 2nd demodulator I2C address */
480 req
.addr
= AF9015_EEPROM_DEMOD2_I2C
;
481 ret
= af9015_ctrl_msg(d
, &req
);
485 state
->af9013_config
[1].i2c_addr
= val
;
488 for (i
= 0; i
< state
->dual_mode
+ 1; i
++) {
490 offset
= AF9015_EEPROM_OFFSET
;
492 req
.addr
= AF9015_EEPROM_XTAL_TYPE1
+ offset
;
493 ret
= af9015_ctrl_msg(d
, &req
);
498 state
->af9013_config
[i
].clock
= 28800000;
501 state
->af9013_config
[i
].clock
= 20480000;
504 state
->af9013_config
[i
].clock
= 28000000;
507 state
->af9013_config
[i
].clock
= 25000000;
510 dev_dbg(&d
->udev
->dev
, "%s: [%d] xtal=%d set clock=%d\n",
512 state
->af9013_config
[i
].clock
);
515 req
.addr
= AF9015_EEPROM_IF1H
+ offset
;
516 ret
= af9015_ctrl_msg(d
, &req
);
520 state
->af9013_config
[i
].if_frequency
= val
<< 8;
522 req
.addr
= AF9015_EEPROM_IF1L
+ offset
;
523 ret
= af9015_ctrl_msg(d
, &req
);
527 state
->af9013_config
[i
].if_frequency
+= val
;
528 state
->af9013_config
[i
].if_frequency
*= 1000;
529 dev_dbg(&d
->udev
->dev
, "%s: [%d] IF frequency=%d\n", __func__
,
530 i
, state
->af9013_config
[i
].if_frequency
);
533 req
.addr
= AF9015_EEPROM_MT2060_IF1H
+ offset
;
534 ret
= af9015_ctrl_msg(d
, &req
);
537 state
->mt2060_if1
[i
] = val
<< 8;
538 req
.addr
= AF9015_EEPROM_MT2060_IF1L
+ offset
;
539 ret
= af9015_ctrl_msg(d
, &req
);
542 state
->mt2060_if1
[i
] += val
;
543 dev_dbg(&d
->udev
->dev
, "%s: [%d] MT2060 IF1=%d\n", __func__
, i
,
544 state
->mt2060_if1
[i
]);
547 req
.addr
= AF9015_EEPROM_TUNER_ID1
+ offset
;
548 ret
= af9015_ctrl_msg(d
, &req
);
552 case AF9013_TUNER_ENV77H11D5
:
553 case AF9013_TUNER_MT2060
:
554 case AF9013_TUNER_QT1010
:
555 case AF9013_TUNER_UNKNOWN
:
556 case AF9013_TUNER_MT2060_2
:
557 case AF9013_TUNER_TDA18271
:
558 case AF9013_TUNER_QT1010A
:
559 case AF9013_TUNER_TDA18218
:
560 state
->af9013_config
[i
].spec_inv
= 1;
562 case AF9013_TUNER_MXL5003D
:
563 case AF9013_TUNER_MXL5005D
:
564 case AF9013_TUNER_MXL5005R
:
565 case AF9013_TUNER_MXL5007T
:
566 state
->af9013_config
[i
].spec_inv
= 0;
568 case AF9013_TUNER_MC44S803
:
569 state
->af9013_config
[i
].gpio
[1] = AF9013_GPIO_LO
;
570 state
->af9013_config
[i
].spec_inv
= 1;
573 dev_err(&d
->udev
->dev
, "%s: tuner id=%d not " \
574 "supported, please report!\n",
575 KBUILD_MODNAME
, val
);
579 state
->af9013_config
[i
].tuner
= val
;
580 dev_dbg(&d
->udev
->dev
, "%s: [%d] tuner id=%d\n",
586 dev_err(&d
->udev
->dev
, "%s: eeprom read failed=%d\n",
587 KBUILD_MODNAME
, ret
);
589 /* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
590 content :-( Override some wrong values here. Ditto for the
591 AVerTV Red HD+ (A850T) device. */
592 if (le16_to_cpu(d
->udev
->descriptor
.idVendor
) == USB_VID_AVERMEDIA
&&
593 ((le16_to_cpu(d
->udev
->descriptor
.idProduct
) ==
594 USB_PID_AVERMEDIA_A850
) ||
595 (le16_to_cpu(d
->udev
->descriptor
.idProduct
) ==
596 USB_PID_AVERMEDIA_A850T
))) {
597 dev_dbg(&d
->udev
->dev
,
598 "%s: AverMedia A850: overriding config\n",
600 /* disable dual mode */
601 state
->dual_mode
= 0;
604 state
->af9013_config
[0].if_frequency
= 4570000;
610 static int af9015_get_stream_config(struct dvb_frontend
*fe
, u8
*ts_type
,
611 struct usb_data_stream_properties
*stream
)
613 struct dvb_usb_device
*d
= fe_to_d(fe
);
614 dev_dbg(&d
->udev
->dev
, "%s: adap=%d\n", __func__
, fe_to_adap(fe
)->id
);
616 if (d
->udev
->speed
== USB_SPEED_FULL
)
617 stream
->u
.bulk
.buffersize
= TS_USB11_FRAME_SIZE
;
622 static int af9015_get_adapter_count(struct dvb_usb_device
*d
)
624 struct af9015_state
*state
= d_to_priv(d
);
625 return state
->dual_mode
+ 1;
628 /* override demod callbacks for resource locking */
629 static int af9015_af9013_set_frontend(struct dvb_frontend
*fe
)
632 struct af9015_state
*state
= fe_to_priv(fe
);
634 if (mutex_lock_interruptible(&state
->fe_mutex
))
637 ret
= state
->set_frontend
[fe_to_adap(fe
)->id
](fe
);
639 mutex_unlock(&state
->fe_mutex
);
644 /* override demod callbacks for resource locking */
645 static int af9015_af9013_read_status(struct dvb_frontend
*fe
,
646 enum fe_status
*status
)
649 struct af9015_state
*state
= fe_to_priv(fe
);
651 if (mutex_lock_interruptible(&state
->fe_mutex
))
654 ret
= state
->read_status
[fe_to_adap(fe
)->id
](fe
, status
);
656 mutex_unlock(&state
->fe_mutex
);
661 /* override demod callbacks for resource locking */
662 static int af9015_af9013_init(struct dvb_frontend
*fe
)
665 struct af9015_state
*state
= fe_to_priv(fe
);
667 if (mutex_lock_interruptible(&state
->fe_mutex
))
670 ret
= state
->init
[fe_to_adap(fe
)->id
](fe
);
672 mutex_unlock(&state
->fe_mutex
);
677 /* override demod callbacks for resource locking */
678 static int af9015_af9013_sleep(struct dvb_frontend
*fe
)
681 struct af9015_state
*state
= fe_to_priv(fe
);
683 if (mutex_lock_interruptible(&state
->fe_mutex
))
686 ret
= state
->sleep
[fe_to_adap(fe
)->id
](fe
);
688 mutex_unlock(&state
->fe_mutex
);
693 /* override tuner callbacks for resource locking */
694 static int af9015_tuner_init(struct dvb_frontend
*fe
)
697 struct af9015_state
*state
= fe_to_priv(fe
);
699 if (mutex_lock_interruptible(&state
->fe_mutex
))
702 ret
= state
->tuner_init
[fe_to_adap(fe
)->id
](fe
);
704 mutex_unlock(&state
->fe_mutex
);
709 /* override tuner callbacks for resource locking */
710 static int af9015_tuner_sleep(struct dvb_frontend
*fe
)
713 struct af9015_state
*state
= fe_to_priv(fe
);
715 if (mutex_lock_interruptible(&state
->fe_mutex
))
718 ret
= state
->tuner_sleep
[fe_to_adap(fe
)->id
](fe
);
720 mutex_unlock(&state
->fe_mutex
);
725 static int af9015_copy_firmware(struct dvb_usb_device
*d
)
727 struct af9015_state
*state
= d_to_priv(d
);
731 struct req_t req
= {COPY_FIRMWARE
, 0, 0x5100, 0, 0, sizeof(fw_params
),
733 dev_dbg(&d
->udev
->dev
, "%s:\n", __func__
);
735 fw_params
[0] = state
->firmware_size
>> 8;
736 fw_params
[1] = state
->firmware_size
& 0xff;
737 fw_params
[2] = state
->firmware_checksum
>> 8;
738 fw_params
[3] = state
->firmware_checksum
& 0xff;
740 /* wait 2nd demodulator ready */
743 ret
= af9015_read_reg_i2c(d
, state
->af9013_config
[1].i2c_addr
,
748 dev_dbg(&d
->udev
->dev
, "%s: firmware status=%02x\n",
751 if (val
== 0x0c) /* fw is running, no need for download */
754 /* set I2C master clock to fast (to speed up firmware copy) */
755 ret
= af9015_write_reg(d
, 0xd416, 0x04); /* 0x04 * 400ns */
762 ret
= af9015_ctrl_msg(d
, &req
);
764 dev_err(&d
->udev
->dev
, "%s: firmware copy cmd failed=%d\n",
765 KBUILD_MODNAME
, ret
);
767 dev_dbg(&d
->udev
->dev
, "%s: firmware copy done\n", __func__
);
769 /* set I2C master clock back to normal */
770 ret
= af9015_write_reg(d
, 0xd416, 0x14); /* 0x14 * 400ns */
774 /* request boot firmware */
775 ret
= af9015_write_reg_i2c(d
, state
->af9013_config
[1].i2c_addr
,
777 dev_dbg(&d
->udev
->dev
, "%s: firmware boot cmd status=%d\n",
782 for (i
= 0; i
< 15; i
++) {
785 /* check firmware status */
786 ret
= af9015_read_reg_i2c(d
, state
->af9013_config
[1].i2c_addr
,
788 dev_dbg(&d
->udev
->dev
, "%s: firmware status cmd status=%d " \
789 "firmware status=%02x\n", __func__
, ret
, val
);
793 if (val
== 0x0c || val
== 0x04) /* success or fail */
798 dev_err(&d
->udev
->dev
, "%s: firmware did not run\n",
801 } else if (val
!= 0x0c) {
802 dev_err(&d
->udev
->dev
, "%s: firmware boot timeout\n",
812 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter
*adap
)
815 struct af9015_state
*state
= adap_to_priv(adap
);
818 state
->af9013_config
[0].ts_mode
= AF9013_TS_USB
;
819 memcpy(state
->af9013_config
[0].api_version
, "\x0\x1\x9\x0", 4);
820 state
->af9013_config
[0].gpio
[0] = AF9013_GPIO_HI
;
821 state
->af9013_config
[0].gpio
[3] = AF9013_GPIO_TUNER_ON
;
822 } else if (adap
->id
== 1) {
823 state
->af9013_config
[1].ts_mode
= AF9013_TS_SERIAL
;
824 memcpy(state
->af9013_config
[1].api_version
, "\x0\x1\x9\x0", 4);
825 state
->af9013_config
[1].gpio
[0] = AF9013_GPIO_TUNER_ON
;
826 state
->af9013_config
[1].gpio
[1] = AF9013_GPIO_LO
;
828 /* copy firmware to 2nd demodulator */
829 if (state
->dual_mode
) {
830 ret
= af9015_copy_firmware(adap_to_d(adap
));
832 dev_err(&adap_to_d(adap
)->udev
->dev
,
833 "%s: firmware copy to 2nd " \
834 "frontend failed, will " \
835 "disable it\n", KBUILD_MODNAME
);
836 state
->dual_mode
= 0;
844 /* attach demodulator */
845 adap
->fe
[0] = dvb_attach(af9013_attach
,
846 &state
->af9013_config
[adap
->id
], &adap_to_d(adap
)->i2c_adap
);
849 * AF9015 firmware does not like if it gets interrupted by I2C adapter
850 * request on some critical phases. During normal operation I2C adapter
851 * is used only 2nd demodulator and tuner on dual tuner devices.
852 * Override demodulator callbacks and use mutex for limit access to
853 * those "critical" paths to keep AF9015 happy.
856 state
->set_frontend
[adap
->id
] =
857 adap
->fe
[0]->ops
.set_frontend
;
858 adap
->fe
[0]->ops
.set_frontend
=
859 af9015_af9013_set_frontend
;
861 state
->read_status
[adap
->id
] =
862 adap
->fe
[0]->ops
.read_status
;
863 adap
->fe
[0]->ops
.read_status
=
864 af9015_af9013_read_status
;
866 state
->init
[adap
->id
] = adap
->fe
[0]->ops
.init
;
867 adap
->fe
[0]->ops
.init
= af9015_af9013_init
;
869 state
->sleep
[adap
->id
] = adap
->fe
[0]->ops
.sleep
;
870 adap
->fe
[0]->ops
.sleep
= af9015_af9013_sleep
;
873 return adap
->fe
[0] == NULL
? -ENODEV
: 0;
876 static struct mt2060_config af9015_mt2060_config
= {
881 static struct qt1010_config af9015_qt1010_config
= {
885 static struct tda18271_config af9015_tda18271_config
= {
886 .gate
= TDA18271_GATE_DIGITAL
,
887 .small_i2c
= TDA18271_16_BYTE_CHUNK_INIT
,
890 static struct mxl5005s_config af9015_mxl5003_config
= {
892 .if_freq
= IF_FREQ_4570000HZ
,
893 .xtal_freq
= CRYSTAL_FREQ_16000000HZ
,
894 .agc_mode
= MXL_SINGLE_AGC
,
895 .tracking_filter
= MXL_TF_DEFAULT
,
896 .rssi_enable
= MXL_RSSI_ENABLE
,
897 .cap_select
= MXL_CAP_SEL_ENABLE
,
898 .div_out
= MXL_DIV_OUT_4
,
899 .clock_out
= MXL_CLOCK_OUT_DISABLE
,
900 .output_load
= MXL5005S_IF_OUTPUT_LOAD_200_OHM
,
901 .top
= MXL5005S_TOP_25P2
,
902 .mod_mode
= MXL_DIGITAL_MODE
,
903 .if_mode
= MXL_ZERO_IF
,
904 .AgcMasterByte
= 0x00,
907 static struct mxl5005s_config af9015_mxl5005_config
= {
909 .if_freq
= IF_FREQ_4570000HZ
,
910 .xtal_freq
= CRYSTAL_FREQ_16000000HZ
,
911 .agc_mode
= MXL_SINGLE_AGC
,
912 .tracking_filter
= MXL_TF_OFF
,
913 .rssi_enable
= MXL_RSSI_ENABLE
,
914 .cap_select
= MXL_CAP_SEL_ENABLE
,
915 .div_out
= MXL_DIV_OUT_4
,
916 .clock_out
= MXL_CLOCK_OUT_DISABLE
,
917 .output_load
= MXL5005S_IF_OUTPUT_LOAD_200_OHM
,
918 .top
= MXL5005S_TOP_25P2
,
919 .mod_mode
= MXL_DIGITAL_MODE
,
920 .if_mode
= MXL_ZERO_IF
,
921 .AgcMasterByte
= 0x00,
924 static struct mc44s803_config af9015_mc44s803_config
= {
929 static struct tda18218_config af9015_tda18218_config
= {
931 .i2c_wr_max
= 21, /* max wr bytes AF9015 I2C adap can handle at once */
934 static struct mxl5007t_config af9015_mxl5007t_config
= {
935 .xtal_freq_hz
= MxL_XTAL_24_MHZ
,
936 .if_freq_hz
= MxL_IF_4_57_MHZ
,
939 static int af9015_tuner_attach(struct dvb_usb_adapter
*adap
)
941 struct dvb_usb_device
*d
= adap_to_d(adap
);
942 struct af9015_state
*state
= d_to_priv(d
);
944 dev_dbg(&d
->udev
->dev
, "%s:\n", __func__
);
946 switch (state
->af9013_config
[adap
->id
].tuner
) {
947 case AF9013_TUNER_MT2060
:
948 case AF9013_TUNER_MT2060_2
:
949 ret
= dvb_attach(mt2060_attach
, adap
->fe
[0],
950 &adap_to_d(adap
)->i2c_adap
, &af9015_mt2060_config
,
951 state
->mt2060_if1
[adap
->id
])
952 == NULL
? -ENODEV
: 0;
954 case AF9013_TUNER_QT1010
:
955 case AF9013_TUNER_QT1010A
:
956 ret
= dvb_attach(qt1010_attach
, adap
->fe
[0],
957 &adap_to_d(adap
)->i2c_adap
,
958 &af9015_qt1010_config
) == NULL
? -ENODEV
: 0;
960 case AF9013_TUNER_TDA18271
:
961 ret
= dvb_attach(tda18271_attach
, adap
->fe
[0], 0xc0,
962 &adap_to_d(adap
)->i2c_adap
,
963 &af9015_tda18271_config
) == NULL
? -ENODEV
: 0;
965 case AF9013_TUNER_TDA18218
:
966 ret
= dvb_attach(tda18218_attach
, adap
->fe
[0],
967 &adap_to_d(adap
)->i2c_adap
,
968 &af9015_tda18218_config
) == NULL
? -ENODEV
: 0;
970 case AF9013_TUNER_MXL5003D
:
971 ret
= dvb_attach(mxl5005s_attach
, adap
->fe
[0],
972 &adap_to_d(adap
)->i2c_adap
,
973 &af9015_mxl5003_config
) == NULL
? -ENODEV
: 0;
975 case AF9013_TUNER_MXL5005D
:
976 case AF9013_TUNER_MXL5005R
:
977 ret
= dvb_attach(mxl5005s_attach
, adap
->fe
[0],
978 &adap_to_d(adap
)->i2c_adap
,
979 &af9015_mxl5005_config
) == NULL
? -ENODEV
: 0;
981 case AF9013_TUNER_ENV77H11D5
:
982 ret
= dvb_attach(dvb_pll_attach
, adap
->fe
[0], 0xc0,
983 &adap_to_d(adap
)->i2c_adap
,
984 DVB_PLL_TDA665X
) == NULL
? -ENODEV
: 0;
986 case AF9013_TUNER_MC44S803
:
987 ret
= dvb_attach(mc44s803_attach
, adap
->fe
[0],
988 &adap_to_d(adap
)->i2c_adap
,
989 &af9015_mc44s803_config
) == NULL
? -ENODEV
: 0;
991 case AF9013_TUNER_MXL5007T
:
992 ret
= dvb_attach(mxl5007t_attach
, adap
->fe
[0],
993 &adap_to_d(adap
)->i2c_adap
,
994 0xc0, &af9015_mxl5007t_config
) == NULL
? -ENODEV
: 0;
996 case AF9013_TUNER_UNKNOWN
:
998 dev_err(&d
->udev
->dev
, "%s: unknown tuner id=%d\n",
1000 state
->af9013_config
[adap
->id
].tuner
);
1004 if (adap
->fe
[0]->ops
.tuner_ops
.init
) {
1005 state
->tuner_init
[adap
->id
] =
1006 adap
->fe
[0]->ops
.tuner_ops
.init
;
1007 adap
->fe
[0]->ops
.tuner_ops
.init
= af9015_tuner_init
;
1010 if (adap
->fe
[0]->ops
.tuner_ops
.sleep
) {
1011 state
->tuner_sleep
[adap
->id
] =
1012 adap
->fe
[0]->ops
.tuner_ops
.sleep
;
1013 adap
->fe
[0]->ops
.tuner_ops
.sleep
= af9015_tuner_sleep
;
1019 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter
*adap
, int onoff
)
1021 struct dvb_usb_device
*d
= adap_to_d(adap
);
1023 dev_dbg(&d
->udev
->dev
, "%s: onoff=%d\n", __func__
, onoff
);
1026 ret
= af9015_set_reg_bit(d
, 0xd503, 0);
1028 ret
= af9015_clear_reg_bit(d
, 0xd503, 0);
1033 static int af9015_pid_filter(struct dvb_usb_adapter
*adap
, int index
, u16 pid
,
1036 struct dvb_usb_device
*d
= adap_to_d(adap
);
1039 dev_dbg(&d
->udev
->dev
, "%s: index=%d pid=%04x onoff=%d\n",
1040 __func__
, index
, pid
, onoff
);
1042 ret
= af9015_write_reg(d
, 0xd505, (pid
& 0xff));
1046 ret
= af9015_write_reg(d
, 0xd506, (pid
>> 8));
1050 idx
= ((index
& 0x1f) | (1 << 5));
1051 ret
= af9015_write_reg(d
, 0xd504, idx
);
1057 static int af9015_init_endpoint(struct dvb_usb_device
*d
)
1059 struct af9015_state
*state
= d_to_priv(d
);
1063 dev_dbg(&d
->udev
->dev
, "%s: USB speed=%d\n", __func__
, d
->udev
->speed
);
1065 if (d
->udev
->speed
== USB_SPEED_FULL
) {
1066 frame_size
= TS_USB11_FRAME_SIZE
/4;
1067 packet_size
= TS_USB11_MAX_PACKET_SIZE
/4;
1069 frame_size
= TS_USB20_FRAME_SIZE
/4;
1070 packet_size
= TS_USB20_MAX_PACKET_SIZE
/4;
1073 ret
= af9015_set_reg_bit(d
, 0xd507, 2); /* assert EP4 reset */
1076 ret
= af9015_set_reg_bit(d
, 0xd50b, 1); /* assert EP5 reset */
1079 ret
= af9015_clear_reg_bit(d
, 0xdd11, 5); /* disable EP4 */
1082 ret
= af9015_clear_reg_bit(d
, 0xdd11, 6); /* disable EP5 */
1085 ret
= af9015_set_reg_bit(d
, 0xdd11, 5); /* enable EP4 */
1088 if (state
->dual_mode
) {
1089 ret
= af9015_set_reg_bit(d
, 0xdd11, 6); /* enable EP5 */
1093 ret
= af9015_clear_reg_bit(d
, 0xdd13, 5); /* disable EP4 NAK */
1096 if (state
->dual_mode
) {
1097 ret
= af9015_clear_reg_bit(d
, 0xdd13, 6); /* disable EP5 NAK */
1101 /* EP4 xfer length */
1102 ret
= af9015_write_reg(d
, 0xdd88, frame_size
& 0xff);
1105 ret
= af9015_write_reg(d
, 0xdd89, frame_size
>> 8);
1108 /* EP5 xfer length */
1109 ret
= af9015_write_reg(d
, 0xdd8a, frame_size
& 0xff);
1112 ret
= af9015_write_reg(d
, 0xdd8b, frame_size
>> 8);
1115 ret
= af9015_write_reg(d
, 0xdd0c, packet_size
); /* EP4 packet size */
1118 ret
= af9015_write_reg(d
, 0xdd0d, packet_size
); /* EP5 packet size */
1121 ret
= af9015_clear_reg_bit(d
, 0xd507, 2); /* negate EP4 reset */
1124 if (state
->dual_mode
) {
1125 ret
= af9015_clear_reg_bit(d
, 0xd50b, 1); /* negate EP5 reset */
1130 /* enable / disable mp2if2 */
1131 if (state
->dual_mode
)
1132 ret
= af9015_set_reg_bit(d
, 0xd50b, 0);
1134 ret
= af9015_clear_reg_bit(d
, 0xd50b, 0);
1138 dev_err(&d
->udev
->dev
, "%s: endpoint init failed=%d\n",
1139 KBUILD_MODNAME
, ret
);
1144 static int af9015_init(struct dvb_usb_device
*d
)
1146 struct af9015_state
*state
= d_to_priv(d
);
1148 dev_dbg(&d
->udev
->dev
, "%s:\n", __func__
);
1150 mutex_init(&state
->fe_mutex
);
1152 /* init RC canary */
1153 ret
= af9015_write_reg(d
, 0x98e9, 0xff);
1157 ret
= af9015_init_endpoint(d
);
1165 #if IS_ENABLED(CONFIG_RC_CORE)
1166 struct af9015_rc_setup
{
1171 static char *af9015_rc_setup_match(unsigned int id
,
1172 const struct af9015_rc_setup
*table
)
1174 for (; table
->rc_codes
; table
++)
1175 if (table
->id
== id
)
1176 return table
->rc_codes
;
1180 static const struct af9015_rc_setup af9015_rc_setup_modparam
[] = {
1181 { AF9015_REMOTE_A_LINK_DTU_M
, RC_MAP_ALINK_DTU_M
},
1182 { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3
, RC_MAP_MSI_DIGIVOX_II
},
1183 { AF9015_REMOTE_MYGICTV_U718
, RC_MAP_TOTAL_MEDIA_IN_HAND
},
1184 { AF9015_REMOTE_DIGITTRADE_DVB_T
, RC_MAP_DIGITTRADE
},
1185 { AF9015_REMOTE_AVERMEDIA_KS
, RC_MAP_AVERMEDIA_RM_KS
},
1189 static const struct af9015_rc_setup af9015_rc_setup_hashes
[] = {
1190 { 0xb8feb708, RC_MAP_MSI_DIGIVOX_II
},
1191 { 0xa3703d00, RC_MAP_ALINK_DTU_M
},
1192 { 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND
}, /* MYGICTV U718 */
1193 { 0x5d49e3db, RC_MAP_DIGITTRADE
}, /* LC-Power LC-USB-DVBT */
1197 static int af9015_rc_query(struct dvb_usb_device
*d
)
1199 struct af9015_state
*state
= d_to_priv(d
);
1203 /* read registers needed to detect remote controller code */
1204 ret
= af9015_read_regs(d
, 0x98d9, buf
, sizeof(buf
));
1208 /* If any of these are non-zero, assume invalid data */
1209 if (buf
[1] || buf
[2] || buf
[3]) {
1210 dev_dbg(&d
->udev
->dev
, "%s: invalid data\n", __func__
);
1214 /* Check for repeat of previous code */
1215 if ((state
->rc_repeat
!= buf
[6] || buf
[0]) &&
1216 !memcmp(&buf
[12], state
->rc_last
, 4)) {
1217 dev_dbg(&d
->udev
->dev
, "%s: key repeated\n", __func__
);
1218 rc_repeat(d
->rc_dev
);
1219 state
->rc_repeat
= buf
[6];
1223 /* Only process key if canary killed */
1224 if (buf
[16] != 0xff && buf
[0] != 0x01) {
1226 dev_dbg(&d
->udev
->dev
, "%s: key pressed %*ph\n",
1227 __func__
, 4, buf
+ 12);
1229 /* Reset the canary */
1230 ret
= af9015_write_reg(d
, 0x98e9, 0xff);
1234 /* Remember this key */
1235 memcpy(state
->rc_last
, &buf
[12], 4);
1236 if (buf
[14] == (u8
) ~buf
[15]) {
1237 if (buf
[12] == (u8
) ~buf
[13]) {
1239 state
->rc_keycode
= RC_SCANCODE_NEC(buf
[12],
1241 proto
= RC_TYPE_NEC
;
1244 state
->rc_keycode
= RC_SCANCODE_NECX(buf
[12] << 8 |
1247 proto
= RC_TYPE_NECX
;
1251 state
->rc_keycode
= RC_SCANCODE_NEC32(buf
[12] << 24 |
1255 proto
= RC_TYPE_NEC32
;
1257 rc_keydown(d
->rc_dev
, proto
, state
->rc_keycode
, 0);
1259 dev_dbg(&d
->udev
->dev
, "%s: no key press\n", __func__
);
1260 /* Invalidate last keypress */
1261 /* Not really needed, but helps with debug */
1262 state
->rc_last
[2] = state
->rc_last
[3];
1265 state
->rc_repeat
= buf
[6];
1266 state
->rc_failed
= false;
1270 dev_warn(&d
->udev
->dev
, "%s: rc query failed=%d\n",
1271 KBUILD_MODNAME
, ret
);
1273 /* allow random errors as dvb-usb will stop polling on error */
1274 if (!state
->rc_failed
)
1277 state
->rc_failed
= true;
1283 static int af9015_get_rc_config(struct dvb_usb_device
*d
, struct dvb_usb_rc
*rc
)
1285 struct af9015_state
*state
= d_to_priv(d
);
1286 u16 vid
= le16_to_cpu(d
->udev
->descriptor
.idVendor
);
1288 if (state
->ir_mode
== AF9015_IR_MODE_DISABLED
)
1291 /* try to load remote based module param */
1293 rc
->map_name
= af9015_rc_setup_match(dvb_usb_af9015_remote
,
1294 af9015_rc_setup_modparam
);
1296 /* try to load remote based eeprom hash */
1298 rc
->map_name
= af9015_rc_setup_match(state
->eeprom_sum
,
1299 af9015_rc_setup_hashes
);
1301 /* try to load remote based USB iManufacturer string */
1302 if (!rc
->map_name
&& vid
== USB_VID_AFATECH
) {
1303 /* Check USB manufacturer and product strings and try
1304 to determine correct remote in case of chip vendor
1305 reference IDs are used.
1306 DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
1307 char manufacturer
[10];
1308 memset(manufacturer
, 0, sizeof(manufacturer
));
1309 usb_string(d
->udev
, d
->udev
->descriptor
.iManufacturer
,
1310 manufacturer
, sizeof(manufacturer
));
1311 if (!strcmp("MSI", manufacturer
)) {
1312 /* iManufacturer 1 MSI
1313 iProduct 2 MSI K-VOX */
1314 rc
->map_name
= af9015_rc_setup_match(
1315 AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3
,
1316 af9015_rc_setup_modparam
);
1320 /* load empty to enable rc */
1322 rc
->map_name
= RC_MAP_EMPTY
;
1324 rc
->allowed_protos
= RC_BIT_NEC
| RC_BIT_NECX
| RC_BIT_NEC32
;
1325 rc
->query
= af9015_rc_query
;
1331 #define af9015_get_rc_config NULL
1334 static int af9015_probe(struct usb_interface
*intf
,
1335 const struct usb_device_id
*id
)
1337 struct usb_device
*udev
= interface_to_usbdev(intf
);
1338 char manufacturer
[sizeof("ITE Technologies, Inc.")];
1340 memset(manufacturer
, 0, sizeof(manufacturer
));
1341 usb_string(udev
, udev
->descriptor
.iManufacturer
,
1342 manufacturer
, sizeof(manufacturer
));
1344 * There is two devices having same ID but different chipset. One uses
1345 * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1346 * is iManufacturer string.
1348 * idVendor 0x0ccd TerraTec Electronic GmbH
1351 * iManufacturer 1 Afatech
1352 * iProduct 2 DVB-T 2
1354 * idVendor 0x0ccd TerraTec Electronic GmbH
1357 * iManufacturer 1 ITE Technologies, Inc.
1358 * iProduct 2 DVB-T TV Stick
1360 if ((le16_to_cpu(udev
->descriptor
.idVendor
) == USB_VID_TERRATEC
) &&
1361 (le16_to_cpu(udev
->descriptor
.idProduct
) == 0x0099)) {
1362 if (!strcmp("ITE Technologies, Inc.", manufacturer
)) {
1363 dev_dbg(&udev
->dev
, "%s: rejecting device\n", __func__
);
1368 return dvb_usbv2_probe(intf
, id
);
1371 /* interface 0 is used by DVB-T receiver and
1372 interface 1 is for remote controller (HID) */
1373 static struct dvb_usb_device_properties af9015_props
= {
1374 .driver_name
= KBUILD_MODNAME
,
1375 .owner
= THIS_MODULE
,
1376 .adapter_nr
= adapter_nr
,
1377 .size_of_priv
= sizeof(struct af9015_state
),
1379 .generic_bulk_ctrl_endpoint
= 0x02,
1380 .generic_bulk_ctrl_endpoint_response
= 0x81,
1382 .identify_state
= af9015_identify_state
,
1383 .firmware
= AF9015_FIRMWARE
,
1384 .download_firmware
= af9015_download_firmware
,
1386 .i2c_algo
= &af9015_i2c_algo
,
1387 .read_config
= af9015_read_config
,
1388 .frontend_attach
= af9015_af9013_frontend_attach
,
1389 .tuner_attach
= af9015_tuner_attach
,
1390 .init
= af9015_init
,
1391 .get_rc_config
= af9015_get_rc_config
,
1392 .get_stream_config
= af9015_get_stream_config
,
1394 .get_adapter_count
= af9015_get_adapter_count
,
1397 .caps
= DVB_USB_ADAP_HAS_PID_FILTER
|
1398 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF
,
1399 .pid_filter_count
= 32,
1400 .pid_filter
= af9015_pid_filter
,
1401 .pid_filter_ctrl
= af9015_pid_filter_ctrl
,
1403 .stream
= DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE
),
1405 .stream
= DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE
),
1410 static const struct usb_device_id af9015_id_table
[] = {
1411 { DVB_USB_DEVICE(USB_VID_AFATECH
, USB_PID_AFATECH_AF9015_9015
,
1412 &af9015_props
, "Afatech AF9015 reference design", NULL
) },
1413 { DVB_USB_DEVICE(USB_VID_AFATECH
, USB_PID_AFATECH_AF9015_9016
,
1414 &af9015_props
, "Afatech AF9015 reference design", NULL
) },
1415 { DVB_USB_DEVICE(USB_VID_LEADTEK
, USB_PID_WINFAST_DTV_DONGLE_GOLD
,
1416 &af9015_props
, "Leadtek WinFast DTV Dongle Gold", RC_MAP_LEADTEK_Y04G0051
) },
1417 { DVB_USB_DEVICE(USB_VID_PINNACLE
, USB_PID_PINNACLE_PCTV71E
,
1418 &af9015_props
, "Pinnacle PCTV 71e", NULL
) },
1419 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_399U
,
1420 &af9015_props
, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL
) },
1421 { DVB_USB_DEVICE(USB_VID_VISIONPLUS
, USB_PID_TINYTWIN
,
1422 &af9015_props
, "DigitalNow TinyTwin", RC_MAP_AZUREWAVE_AD_TU700
) },
1423 { DVB_USB_DEVICE(USB_VID_VISIONPLUS
, USB_PID_AZUREWAVE_AD_TU700
,
1424 &af9015_props
, "TwinHan AzureWave AD-TU700(704J)", RC_MAP_AZUREWAVE_AD_TU700
) },
1425 { DVB_USB_DEVICE(USB_VID_TERRATEC
, USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2
,
1426 &af9015_props
, "TerraTec Cinergy T USB XE", NULL
) },
1427 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_PC160_2T
,
1428 &af9015_props
, "KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)", NULL
) },
1429 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_VOLAR_X
,
1430 &af9015_props
, "AVerMedia AVerTV DVB-T Volar X", RC_MAP_AVERMEDIA_M135A
) },
1431 { DVB_USB_DEVICE(USB_VID_XTENSIONS
, USB_PID_XTENSIONS_XD_380
,
1432 &af9015_props
, "Xtensions XD-380", NULL
) },
1433 { DVB_USB_DEVICE(USB_VID_MSI_2
, USB_PID_MSI_DIGIVOX_DUO
,
1434 &af9015_props
, "MSI DIGIVOX Duo", RC_MAP_MSI_DIGIVOX_III
) },
1435 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_VOLAR_X_2
,
1436 &af9015_props
, "Fujitsu-Siemens Slim Mobile USB DVB-T", NULL
) },
1437 { DVB_USB_DEVICE(USB_VID_TELESTAR
, USB_PID_TELESTAR_STARSTICK_2
,
1438 &af9015_props
, "Telestar Starstick 2", NULL
) },
1439 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A309
,
1440 &af9015_props
, "AVerMedia A309", NULL
) },
1441 { DVB_USB_DEVICE(USB_VID_MSI_2
, USB_PID_MSI_DIGI_VOX_MINI_III
,
1442 &af9015_props
, "MSI Digi VOX mini III", RC_MAP_MSI_DIGIVOX_III
) },
1443 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_395U
,
1444 &af9015_props
, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL
) },
1445 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_395U_2
,
1446 &af9015_props
, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL
) },
1447 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_395U_3
,
1448 &af9015_props
, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL
) },
1449 { DVB_USB_DEVICE(USB_VID_AFATECH
, USB_PID_TREKSTOR_DVBT
,
1450 &af9015_props
, "TrekStor DVB-T USB Stick", RC_MAP_TREKSTOR
) },
1451 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A850
,
1452 &af9015_props
, "AverMedia AVerTV Volar Black HD (A850)", NULL
) },
1453 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A805
,
1454 &af9015_props
, "AverMedia AVerTV Volar GPS 805 (A805)", NULL
) },
1455 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_CONCEPTRONIC_CTVDIGRCU
,
1456 &af9015_props
, "Conceptronic USB2.0 DVB-T CTVDIGRCU V3.0", NULL
) },
1457 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_MC810
,
1458 &af9015_props
, "KWorld Digital MC-810", NULL
) },
1459 { DVB_USB_DEVICE(USB_VID_KYE
, USB_PID_GENIUS_TVGO_DVB_T03
,
1460 &af9015_props
, "Genius TVGo DVB-T03", NULL
) },
1461 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_399U_2
,
1462 &af9015_props
, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL
) },
1463 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_PC160_T
,
1464 &af9015_props
, "KWorld PlusTV DVB-T PCI Pro Card (DVB-T PC160-T)", NULL
) },
1465 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_SVEON_STV20
,
1466 &af9015_props
, "Sveon STV20 Tuner USB DVB-T HDTV", NULL
) },
1467 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_TINYTWIN_2
,
1468 &af9015_props
, "DigitalNow TinyTwin v2", RC_MAP_DIGITALNOW_TINYTWIN
) },
1469 { DVB_USB_DEVICE(USB_VID_LEADTEK
, USB_PID_WINFAST_DTV2000DS
,
1470 &af9015_props
, "Leadtek WinFast DTV2000DS", RC_MAP_LEADTEK_Y04G0051
) },
1471 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_UB383_T
,
1472 &af9015_props
, "KWorld USB DVB-T Stick Mobile (UB383-T)", NULL
) },
1473 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_395U_4
,
1474 &af9015_props
, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL
) },
1475 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A815M
,
1476 &af9015_props
, "AverMedia AVerTV Volar M (A815Mac)", NULL
) },
1477 { DVB_USB_DEVICE(USB_VID_TERRATEC
, USB_PID_TERRATEC_CINERGY_T_STICK_RC
,
1478 &af9015_props
, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2
) },
1479 /* XXX: that same ID [0ccd:0099] is used by af9035 driver too */
1480 { DVB_USB_DEVICE(USB_VID_TERRATEC
, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC
,
1481 &af9015_props
, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM
) },
1482 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A850T
,
1483 &af9015_props
, "AverMedia AVerTV Red HD+ (A850T)", NULL
) },
1484 { DVB_USB_DEVICE(USB_VID_GTEK
, USB_PID_TINYTWIN_3
,
1485 &af9015_props
, "DigitalNow TinyTwin v3", RC_MAP_DIGITALNOW_TINYTWIN
) },
1486 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_SVEON_STV22
,
1487 &af9015_props
, "Sveon STV22 Dual USB DVB-T Tuner HDTV", RC_MAP_MSI_DIGIVOX_III
) },
1490 MODULE_DEVICE_TABLE(usb
, af9015_id_table
);
1492 /* usb specific object needed to register this driver with the usb subsystem */
1493 static struct usb_driver af9015_usb_driver
= {
1494 .name
= KBUILD_MODNAME
,
1495 .id_table
= af9015_id_table
,
1496 .probe
= af9015_probe
,
1497 .disconnect
= dvb_usbv2_disconnect
,
1498 .suspend
= dvb_usbv2_suspend
,
1499 .resume
= dvb_usbv2_resume
,
1500 .reset_resume
= dvb_usbv2_reset_resume
,
1505 module_usb_driver(af9015_usb_driver
);
1507 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1508 MODULE_DESCRIPTION("Afatech AF9015 driver");
1509 MODULE_LICENSE("GPL");
1510 MODULE_FIRMWARE(AF9015_FIRMWARE
);