2 * DVB USB compliant linux driver for ITE IT9135 and IT9137
4 * Copyright (C) 2011 Malcolm Priestley (tvboxspy@gmail.com)
5 * IT9135 (C) ITE Tech Inc.
6 * IT9137 (C) ITE Tech Inc.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License Version 2, as
10 * published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 * see Documentation/dvb/README.dvb-usb for more information
23 * see Documentation/dvb/it9137.txt for firmware information
26 #define DVB_USB_LOG_PREFIX "it913x"
28 #include <linux/usb.h>
29 #include <linux/usb/input.h>
30 #include <media/rc-core.h>
33 #include "it913x-fe.h"
36 static int dvb_usb_it913x_debug
;
37 #define it_debug(var, level, args...) \
38 do { if ((var & level)) pr_debug(DVB_USB_LOG_PREFIX": " args); \
40 #define deb_info(level, args...) it_debug(dvb_usb_it913x_debug, level, args)
41 #define info(args...) pr_info(DVB_USB_LOG_PREFIX": " args)
43 module_param_named(debug
, dvb_usb_it913x_debug
, int, 0644);
44 MODULE_PARM_DESC(debug
, "set debugging level (1=info (or-able)).");
46 static int dvb_usb_it913x_firmware
;
47 module_param_named(firmware
, dvb_usb_it913x_firmware
, int, 0644);
48 MODULE_PARM_DESC(firmware
, "set firmware 0=auto "\
49 "1=IT9137 2=IT9135 V1 3=IT9135 V2");
50 #define FW_IT9137 "dvb-usb-it9137-01.fw"
51 #define FW_IT9135_V1 "dvb-usb-it9135-01.fw"
52 #define FW_IT9135_V2 "dvb-usb-it9135-02.fw"
54 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr
);
57 struct ite_config it913x_config
;
63 static u16
check_sum(u8
*p
, u8 len
)
68 sum
+= (i
++ & 1) ? (*p
++) << 8 : *p
++;
72 static int it913x_io(struct dvb_usb_device
*d
, u8 mode
, u8 pro
,
73 u8 cmd
, u32 reg
, u8 addr
, u8
*data
, u8 len
)
75 struct it913x_state
*st
= d
->priv
;
76 int ret
= 0, i
, buf_size
= 1;
81 buff
= kzalloc(256, GFP_KERNEL
);
83 info("USB Buffer Failed");
87 buff
[buf_size
++] = pro
;
88 buff
[buf_size
++] = cmd
;
89 buff
[buf_size
++] = st
->cmd_counter
;
94 buff
[buf_size
++] = len
;
96 buff
[buf_size
++] = (reg
>> 24);
97 buff
[buf_size
++] = (reg
>> 16) & 0xff;
98 buff
[buf_size
++] = (reg
>> 8) & 0xff;
99 buff
[buf_size
++] = reg
& 0xff;
102 buff
[buf_size
++] = addr
;
105 buff
[buf_size
++] = len
;
106 buff
[buf_size
++] = addr
;
107 buff
[buf_size
++] = (reg
>> 8) & 0xff;
108 buff
[buf_size
++] = reg
& 0xff;
122 for (i
= 0; i
< len
; i
++)
123 buff
[buf_size
++] = data
[i
];
125 chk_sum
= check_sum(&buff
[1], buf_size
);
127 buff
[buf_size
++] = chk_sum
>> 8;
129 buff
[buf_size
++] = (chk_sum
& 0xff);
131 ret
= dvb_usbv2_generic_rw(d
, buff
, buf_size
, buff
, (mode
& 1) ?
136 rlen
= (mode
& 0x1) ? 0x1 : len
;
141 memcpy(data
, &buff
[3], rlen
);
150 static int it913x_wr_reg(struct dvb_usb_device
*d
, u8 pro
, u32 reg
, u8 data
)
155 ret
= it913x_io(d
, WRITE_LONG
, pro
,
156 CMD_DEMOD_WRITE
, reg
, 0, b
, sizeof(b
));
161 static int it913x_read_reg(struct dvb_usb_device
*d
, u32 reg
)
166 ret
= it913x_io(d
, READ_LONG
, DEV_0
,
167 CMD_DEMOD_READ
, reg
, 0, &data
[0], sizeof(data
));
169 return (ret
< 0) ? ret
: data
[0];
172 static int it913x_query(struct dvb_usb_device
*d
, u8 pro
)
174 struct it913x_state
*st
= d
->priv
;
179 for (i
= 0; i
< 5; i
++) {
180 ret
= it913x_io(d
, READ_LONG
, pro
, CMD_DEMOD_READ
,
181 0x1222, 0, &data
[0], 3);
183 if (ver
> 0 && ver
< 3)
188 if (ver
< 1 || ver
> 2) {
189 info("Failed to identify chip version applying 1");
190 st
->it913x_config
.chip_ver
= 0x1;
191 st
->it913x_config
.chip_type
= 0x9135;
195 st
->it913x_config
.chip_ver
= ver
;
196 st
->it913x_config
.chip_type
= (u16
)(data
[2] << 8) + data
[1];
198 info("Chip Version=%02x Chip Type=%04x", st
->it913x_config
.chip_ver
,
199 st
->it913x_config
.chip_type
);
201 ret
= it913x_io(d
, READ_SHORT
, pro
,
202 CMD_QUERYINFO
, 0, 0x1, &data
[0], 4);
204 st
->it913x_config
.firmware
= (data
[0] << 24) | (data
[1] << 16) |
205 (data
[2] << 8) | data
[3];
210 static int it913x_pid_filter_ctrl(struct dvb_usb_adapter
*adap
, int onoff
)
212 struct dvb_usb_device
*d
= adap_to_d(adap
);
213 struct it913x_state
*st
= adap_to_priv(adap
);
215 u8 pro
= (adap
->id
== 0) ? DEV_0_DMOD
: DEV_1_DMOD
;
217 mutex_lock(&d
->i2c_mutex
);
219 deb_info(1, "PID_C (%02x)", onoff
);
221 st
->pid_filter_onoff
= adap
->pid_filtering
;
222 ret
= it913x_wr_reg(d
, pro
, PID_EN
, st
->pid_filter_onoff
);
224 mutex_unlock(&d
->i2c_mutex
);
228 static int it913x_pid_filter(struct dvb_usb_adapter
*adap
,
229 int index
, u16 pid
, int onoff
)
231 struct dvb_usb_device
*d
= adap_to_d(adap
);
232 struct it913x_state
*st
= adap_to_priv(adap
);
234 u8 pro
= (adap
->id
== 0) ? DEV_0_DMOD
: DEV_1_DMOD
;
236 mutex_lock(&d
->i2c_mutex
);
238 deb_info(1, "PID_F (%02x)", onoff
);
240 ret
= it913x_wr_reg(d
, pro
, PID_LSB
, (u8
)(pid
& 0xff));
242 ret
|= it913x_wr_reg(d
, pro
, PID_MSB
, (u8
)(pid
>> 8));
244 ret
|= it913x_wr_reg(d
, pro
, PID_INX_EN
, (u8
)onoff
);
246 ret
|= it913x_wr_reg(d
, pro
, PID_INX
, (u8
)(index
& 0x1f));
248 if (d
->udev
->speed
== USB_SPEED_HIGH
&& pid
== 0x2000) {
249 ret
|= it913x_wr_reg(d
, pro
, PID_EN
, !onoff
);
250 st
->pid_filter_onoff
= !onoff
;
252 st
->pid_filter_onoff
=
255 mutex_unlock(&d
->i2c_mutex
);
260 static int it913x_return_status(struct dvb_usb_device
*d
)
262 struct it913x_state
*st
= d
->priv
;
263 int ret
= it913x_query(d
, DEV_0
);
264 if (st
->it913x_config
.firmware
> 0)
265 info("Firmware Version %d", st
->it913x_config
.firmware
);
270 static int it913x_i2c_xfer(struct i2c_adapter
*adap
, struct i2c_msg msg
[],
273 struct dvb_usb_device
*d
= i2c_get_adapdata(adap
);
279 mutex_lock(&d
->i2c_mutex
);
281 deb_info(2, "num of messages %d address %02x", num
, msg
[0].addr
);
283 pro
= (msg
[0].addr
& 0x2) ? DEV_0_DMOD
: 0x0;
284 pro
|= (msg
[0].addr
& 0x20) ? DEV_1
: DEV_0
;
285 memcpy(data
, msg
[0].buf
, msg
[0].len
);
286 reg
= (data
[0] << 24) + (data
[1] << 16) +
287 (data
[2] << 8) + data
[3];
289 ret
= it913x_io(d
, READ_LONG
, pro
,
290 CMD_DEMOD_READ
, reg
, 0, data
, msg
[1].len
);
291 memcpy(msg
[1].buf
, data
, msg
[1].len
);
293 ret
= it913x_io(d
, WRITE_LONG
, pro
, CMD_DEMOD_WRITE
,
294 reg
, 0, &data
[4], msg
[0].len
- 4);
296 mutex_unlock(&d
->i2c_mutex
);
301 static u32
it913x_i2c_func(struct i2c_adapter
*adapter
)
306 static struct i2c_algorithm it913x_i2c_algo
= {
307 .master_xfer
= it913x_i2c_xfer
,
308 .functionality
= it913x_i2c_func
,
311 /* Callbacks for DVB USB */
312 #if IS_ENABLED(CONFIG_RC_CORE)
313 static int it913x_rc_query(struct dvb_usb_device
*d
)
318 /* Avoid conflict with frontends*/
319 mutex_lock(&d
->i2c_mutex
);
321 ret
= it913x_io(d
, READ_LONG
, PRO_LINK
, CMD_IR_GET
,
322 0, 0, &ibuf
[0], sizeof(ibuf
));
324 if ((ibuf
[2] + ibuf
[3]) == 0xff) {
326 key
+= ibuf
[0] << 16;
328 deb_info(1, "NEC Extended Key =%08x", key
);
329 if (d
->rc_dev
!= NULL
)
330 rc_keydown(d
->rc_dev
, key
, 0);
333 mutex_unlock(&d
->i2c_mutex
);
338 static int it913x_get_rc_config(struct dvb_usb_device
*d
, struct dvb_usb_rc
*rc
)
340 struct it913x_state
*st
= d
->priv
;
342 if (st
->proprietary_ir
== false) {
347 rc
->allowed_protos
= RC_BIT_NEC
;
348 rc
->query
= it913x_rc_query
;
354 #define it913x_get_rc_config NULL
357 /* Firmware sets raw */
358 static const char fw_it9135_v1
[] = FW_IT9135_V1
;
359 static const char fw_it9135_v2
[] = FW_IT9135_V2
;
360 static const char fw_it9137
[] = FW_IT9137
;
362 static void ite_get_firmware_name(struct dvb_usb_device
*d
,
365 struct it913x_state
*st
= d
->priv
;
368 if (le16_to_cpu(d
->udev
->descriptor
.idVendor
) == USB_VID_KWORLD_2
)
370 else if (st
->it913x_config
.chip_ver
== 1)
376 if (dvb_usb_it913x_firmware
!= IT9135_AUTO
)
377 sw
= dvb_usb_it913x_firmware
;
381 st
->it913x_config
.firmware_ver
= 1;
382 st
->it913x_config
.adc_x2
= 1;
383 st
->it913x_config
.read_slevel
= false;
384 *name
= fw_it9135_v1
;
387 st
->it913x_config
.firmware_ver
= 1;
388 st
->it913x_config
.adc_x2
= 1;
389 st
->it913x_config
.read_slevel
= false;
390 *name
= fw_it9135_v2
;
391 switch (st
->it913x_config
.tuner_id_0
) {
396 info("Unknown tuner ID applying default 0x60");
398 st
->it913x_config
.tuner_id_0
= IT9135_60
;
403 st
->it913x_config
.firmware_ver
= 0;
404 st
->it913x_config
.adc_x2
= 0;
405 st
->it913x_config
.read_slevel
= true;
412 #define TS_MPEG_PKT_SIZE 188
414 #define TS_BUFFER_SIZE_PID (EP_LOW*TS_MPEG_PKT_SIZE)
416 #define TS_BUFFER_SIZE_MAX (EP_HIGH*TS_MPEG_PKT_SIZE)
418 static int it913x_get_stream_config(struct dvb_frontend
*fe
, u8
*ts_type
,
419 struct usb_data_stream_properties
*stream
)
421 struct dvb_usb_adapter
*adap
= fe_to_adap(fe
);
422 if (adap
->pid_filtering
)
423 stream
->u
.bulk
.buffersize
= TS_BUFFER_SIZE_PID
;
425 stream
->u
.bulk
.buffersize
= TS_BUFFER_SIZE_MAX
;
430 static int it913x_select_config(struct dvb_usb_device
*d
)
432 struct it913x_state
*st
= d
->priv
;
435 ret
= it913x_return_status(d
);
439 if (st
->it913x_config
.chip_ver
== 0x02
440 && st
->it913x_config
.chip_type
== 0x9135)
441 reg
= it913x_read_reg(d
, 0x461d);
443 reg
= it913x_read_reg(d
, 0x461b);
449 st
->it913x_config
.dual_mode
= 0;
450 st
->it913x_config
.tuner_id_0
= IT9135_38
;
451 st
->proprietary_ir
= true;
454 reg
= it913x_read_reg(d
, 0x49c5);
457 st
->it913x_config
.dual_mode
= reg
;
460 reg
= it913x_read_reg(d
, 0x49ac);
464 info("Remote propriety (raw) mode");
465 st
->proprietary_ir
= true;
466 } else if (reg
== 1) {
467 info("Remote HID mode NOT SUPPORTED");
468 st
->proprietary_ir
= false;
472 reg
= it913x_read_reg(d
, 0x49d0);
475 st
->it913x_config
.tuner_id_0
= reg
;
478 info("Dual mode=%x Tuner Type=%x", st
->it913x_config
.dual_mode
,
479 st
->it913x_config
.tuner_id_0
);
484 static int it913x_streaming_ctrl(struct dvb_frontend
*fe
, int onoff
)
486 struct dvb_usb_adapter
*adap
= fe_to_adap(fe
);
487 struct dvb_usb_device
*d
= adap_to_d(adap
);
488 struct it913x_state
*st
= fe_to_priv(fe
);
490 u8 pro
= (adap
->id
== 0) ? DEV_0_DMOD
: DEV_1_DMOD
;
492 deb_info(1, "STM (%02x)", onoff
);
495 mutex_lock(&d
->i2c_mutex
);
497 ret
= it913x_wr_reg(d
, pro
, PID_RST
, 0x1);
499 mutex_unlock(&d
->i2c_mutex
);
500 st
->pid_filter_onoff
=
508 static int it913x_identify_state(struct dvb_usb_device
*d
, const char **name
)
510 struct it913x_state
*st
= d
->priv
;
514 /* Read and select config */
515 ret
= it913x_select_config(d
);
519 ite_get_firmware_name(d
, name
);
521 if (st
->it913x_config
.firmware
> 0)
524 if (st
->it913x_config
.dual_mode
) {
525 st
->it913x_config
.tuner_id_1
= it913x_read_reg(d
, 0x49e0);
526 ret
= it913x_wr_reg(d
, DEV_0
, GPIOH1_EN
, 0x1);
527 ret
|= it913x_wr_reg(d
, DEV_0
, GPIOH1_ON
, 0x1);
528 ret
|= it913x_wr_reg(d
, DEV_0
, GPIOH1_O
, 0x1);
530 ret
|= it913x_wr_reg(d
, DEV_0
, GPIOH1_O
, 0x0);
532 reg
= it913x_read_reg(d
, GPIOH1_O
);
534 ret
|= it913x_wr_reg(d
, DEV_0
, GPIOH1_O
, 0x1);
535 ret
|= it913x_return_status(d
);
537 ret
= it913x_wr_reg(d
, DEV_0
,
542 reg
= it913x_read_reg(d
, IO_MUX_POWER_CLK
);
544 if (st
->it913x_config
.dual_mode
) {
545 ret
|= it913x_wr_reg(d
, DEV_0
, 0x4bfb, CHIP2_I2C_ADDR
);
546 if (st
->it913x_config
.firmware_ver
== 1)
547 ret
|= it913x_wr_reg(d
, DEV_0
, 0xcfff, 0x1);
549 ret
|= it913x_wr_reg(d
, DEV_0
, CLK_O_EN
, 0x1);
551 ret
|= it913x_wr_reg(d
, DEV_0
, 0x4bfb, 0x0);
552 if (st
->it913x_config
.firmware_ver
== 1)
553 ret
|= it913x_wr_reg(d
, DEV_0
, 0xcfff, 0x0);
555 ret
|= it913x_wr_reg(d
, DEV_0
, CLK_O_EN
, 0x0);
558 ret
|= it913x_wr_reg(d
, DEV_0
, I2C_CLK
, I2C_CLK_100
);
560 return (ret
< 0) ? ret
: COLD
;
563 static int it913x_download_firmware(struct dvb_usb_device
*d
,
564 const struct firmware
*fw
)
566 struct it913x_state
*st
= d
->priv
;
567 int ret
= 0, i
= 0, pos
= 0;
568 u8 packet_size
, min_pkt
;
571 ret
= it913x_wr_reg(d
, DEV_0
, I2C_CLK
, I2C_CLK_100
);
573 info("FRM Starting Firmware Download");
575 /* Multi firmware loader */
576 /* This uses scatter write firmware headers */
577 /* The firmware must start with 03 XX 00 */
578 /* and be the extact firmware length */
580 if (st
->it913x_config
.chip_ver
== 2)
585 while (i
<= fw
->size
) {
586 if (((fw
->data
[i
] == 0x3) && (fw
->data
[i
+ 2] == 0x0))
587 || (i
== fw
->size
)) {
588 packet_size
= i
- pos
;
589 if ((packet_size
> min_pkt
) || (i
== fw
->size
)) {
590 fw_data
= (u8
*)(fw
->data
+ pos
);
592 if (packet_size
> 0) {
593 ret
= it913x_io(d
, WRITE_DATA
,
594 DEV_0
, CMD_SCATTER_WRITE
, 0,
595 0, fw_data
, packet_size
);
606 info("FRM Firmware Download Failed (%d)" , ret
);
608 info("FRM Firmware Download Completed - Resetting Device");
612 ret
= it913x_io(d
, WRITE_CMD
, DEV_0
, CMD_BOOT
, 0, 0, NULL
, 0);
614 info("FRM Device not responding to reboot");
616 ret
= it913x_return_status(d
);
617 if (st
->it913x_config
.firmware
== 0) {
618 info("FRM Failed to reboot device");
624 ret
= it913x_wr_reg(d
, DEV_0
, I2C_CLK
, I2C_CLK_400
);
629 if (st
->it913x_config
.dual_mode
)
630 ret
|= it913x_wr_reg(d
, DEV_0_DMOD
, 0xec4c, 0xa0);
632 ret
|= it913x_wr_reg(d
, DEV_0_DMOD
, 0xec4c, 0x68);
634 if ((st
->it913x_config
.chip_ver
== 1) &&
635 (st
->it913x_config
.chip_type
== 0x9135)) {
636 ret
|= it913x_wr_reg(d
, DEV_0
, PADODPU
, 0x0);
637 ret
|= it913x_wr_reg(d
, DEV_0
, AGC_O_D
, 0x0);
638 if (st
->it913x_config
.dual_mode
) {
639 ret
|= it913x_wr_reg(d
, DEV_1
, PADODPU
, 0x0);
640 ret
|= it913x_wr_reg(d
, DEV_1
, AGC_O_D
, 0x0);
644 return (ret
< 0) ? -ENODEV
: 0;
647 static int it913x_name(struct dvb_usb_adapter
*adap
)
649 struct dvb_usb_device
*d
= adap_to_d(adap
);
650 const char *desc
= d
->name
;
651 char *fe_name
[] = {"_1", "_2", "_3", "_4"};
652 char *name
= adap
->fe
[0]->ops
.info
.name
;
654 strlcpy(name
, desc
, 128);
655 strlcat(name
, fe_name
[adap
->id
], 128);
660 static int it913x_frontend_attach(struct dvb_usb_adapter
*adap
)
662 struct dvb_usb_device
*d
= adap_to_d(adap
);
663 struct it913x_state
*st
= d
->priv
;
665 u8 adap_addr
= I2C_BASE_ADDR
+ (adap
->id
<< 5);
666 u16 ep_size
= (adap
->pid_filtering
) ? TS_BUFFER_SIZE_PID
/ 4 :
667 TS_BUFFER_SIZE_MAX
/ 4;
670 if (d
->udev
->speed
!= USB_SPEED_HIGH
)
673 st
->it913x_config
.adf
= it913x_read_reg(d
, IO_MUX_POWER_CLK
);
675 adap
->fe
[0] = dvb_attach(it913x_fe_attach
,
676 &d
->i2c_adap
, adap_addr
, &st
->it913x_config
);
678 if (adap
->id
== 0 && adap
->fe
[0]) {
679 it913x_wr_reg(d
, DEV_0_DMOD
, MP2_SW_RST
, 0x1);
680 it913x_wr_reg(d
, DEV_0_DMOD
, MP2IF2_SW_RST
, 0x1);
681 it913x_wr_reg(d
, DEV_0
, EP0_TX_EN
, 0x0f);
682 it913x_wr_reg(d
, DEV_0
, EP0_TX_NAK
, 0x1b);
683 if (st
->proprietary_ir
== false) /* Enable endpoint 3 */
684 it913x_wr_reg(d
, DEV_0
, EP0_TX_EN
, 0x3f);
686 it913x_wr_reg(d
, DEV_0
, EP0_TX_EN
, 0x2f);
687 it913x_wr_reg(d
, DEV_0
, EP4_TX_LEN_LSB
,
689 it913x_wr_reg(d
, DEV_0
, EP4_TX_LEN_MSB
, ep_size
>> 8);
690 ret
= it913x_wr_reg(d
, DEV_0
, EP4_MAX_PKT
, pkt_size
);
691 } else if (adap
->id
== 1 && adap
->fe
[0]) {
692 if (st
->proprietary_ir
== false)
693 it913x_wr_reg(d
, DEV_0
, EP0_TX_EN
, 0x7f);
695 it913x_wr_reg(d
, DEV_0
, EP0_TX_EN
, 0x6f);
696 it913x_wr_reg(d
, DEV_0
, EP5_TX_LEN_LSB
,
698 it913x_wr_reg(d
, DEV_0
, EP5_TX_LEN_MSB
, ep_size
>> 8);
699 it913x_wr_reg(d
, DEV_0
, EP5_MAX_PKT
, pkt_size
);
700 it913x_wr_reg(d
, DEV_0_DMOD
, MP2IF2_EN
, 0x1);
701 it913x_wr_reg(d
, DEV_1_DMOD
, MP2IF_SERIAL
, 0x1);
702 it913x_wr_reg(d
, DEV_1
, TOP_HOSTB_SER_MODE
, 0x1);
703 it913x_wr_reg(d
, DEV_0_DMOD
, TSIS_ENABLE
, 0x1);
704 it913x_wr_reg(d
, DEV_0_DMOD
, MP2_SW_RST
, 0x0);
705 it913x_wr_reg(d
, DEV_0_DMOD
, MP2IF2_SW_RST
, 0x0);
706 it913x_wr_reg(d
, DEV_0_DMOD
, MP2IF2_HALF_PSB
, 0x0);
707 it913x_wr_reg(d
, DEV_0_DMOD
, MP2IF_STOP_EN
, 0x1);
708 it913x_wr_reg(d
, DEV_1_DMOD
, MPEG_FULL_SPEED
, 0x0);
709 ret
= it913x_wr_reg(d
, DEV_1_DMOD
, MP2IF_STOP_EN
, 0x0);
713 ret
|= it913x_name(adap
);
719 static int it913x_get_adapter_count(struct dvb_usb_device
*d
)
721 struct it913x_state
*st
= d
->priv
;
722 if (st
->it913x_config
.dual_mode
)
727 static struct dvb_usb_device_properties it913x_properties
= {
728 .driver_name
= KBUILD_MODNAME
,
729 .owner
= THIS_MODULE
,
730 .bInterfaceNumber
= 0,
731 .generic_bulk_ctrl_endpoint
= 0x02,
732 .generic_bulk_ctrl_endpoint_response
= 0x81,
734 .adapter_nr
= adapter_nr
,
735 .size_of_priv
= sizeof(struct it913x_state
),
737 .identify_state
= it913x_identify_state
,
738 .i2c_algo
= &it913x_i2c_algo
,
740 .download_firmware
= it913x_download_firmware
,
742 .frontend_attach
= it913x_frontend_attach
,
743 .get_rc_config
= it913x_get_rc_config
,
744 .get_stream_config
= it913x_get_stream_config
,
745 .get_adapter_count
= it913x_get_adapter_count
,
746 .streaming_ctrl
= it913x_streaming_ctrl
,
751 .caps
= DVB_USB_ADAP_HAS_PID_FILTER
|
752 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF
,
753 .pid_filter_count
= 32,
754 .pid_filter
= it913x_pid_filter
,
755 .pid_filter_ctrl
= it913x_pid_filter_ctrl
,
757 DVB_USB_STREAM_BULK(0x84, 10, TS_BUFFER_SIZE_MAX
),
760 .caps
= DVB_USB_ADAP_HAS_PID_FILTER
|
761 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF
,
762 .pid_filter_count
= 32,
763 .pid_filter
= it913x_pid_filter
,
764 .pid_filter_ctrl
= it913x_pid_filter_ctrl
,
766 DVB_USB_STREAM_BULK(0x85, 10, TS_BUFFER_SIZE_MAX
),
771 static const struct usb_device_id it913x_id_table
[] = {
772 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_KWORLD_UB499_2T_T09
,
773 &it913x_properties
, "Kworld UB499-2T T09(IT9137)",
775 { DVB_USB_DEVICE(USB_VID_ITETECH
, USB_PID_ITETECH_IT9135
,
776 &it913x_properties
, "ITE 9135 Generic",
778 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_SVEON_STV22_IT9137
,
779 &it913x_properties
, "Sveon STV22 Dual DVB-T HDTV(IT9137)",
781 { DVB_USB_DEVICE(USB_VID_ITETECH
, USB_PID_ITETECH_IT9135_9005
,
782 &it913x_properties
, "ITE 9135(9005) Generic",
784 { DVB_USB_DEVICE(USB_VID_ITETECH
, USB_PID_ITETECH_IT9135_9006
,
785 &it913x_properties
, "ITE 9135(9006) Generic",
787 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A835B_1835
,
788 &it913x_properties
, "Avermedia A835B(1835)",
790 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A835B_2835
,
791 &it913x_properties
, "Avermedia A835B(2835)",
793 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A835B_3835
,
794 &it913x_properties
, "Avermedia A835B(3835)",
796 { DVB_USB_DEVICE(USB_VID_AVERMEDIA
, USB_PID_AVERMEDIA_A835B_4835
,
797 &it913x_properties
, "Avermedia A835B(4835)",
799 { DVB_USB_DEVICE(USB_VID_KWORLD_2
, USB_PID_CTVDIGDUAL_V2
,
800 &it913x_properties
, "Digital Dual TV Receiver CTVDIGDUAL_V2",
802 {} /* Terminating entry */
805 MODULE_DEVICE_TABLE(usb
, it913x_id_table
);
807 static struct usb_driver it913x_driver
= {
808 .name
= KBUILD_MODNAME
,
809 .probe
= dvb_usbv2_probe
,
810 .disconnect
= dvb_usbv2_disconnect
,
811 .suspend
= dvb_usbv2_suspend
,
812 .resume
= dvb_usbv2_resume
,
813 .id_table
= it913x_id_table
,
816 module_usb_driver(it913x_driver
);
818 MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
819 MODULE_DESCRIPTION("it913x USB 2 Driver");
820 MODULE_VERSION("1.33");
821 MODULE_LICENSE("GPL");
822 MODULE_FIRMWARE(FW_IT9135_V1
);
823 MODULE_FIRMWARE(FW_IT9135_V2
);
824 MODULE_FIRMWARE(FW_IT9137
);