2 * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver
4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 * - add smart card reader support for Conditional Access (CA)
23 * Card reader in Anysee is nothing more than ISO 7816 card reader.
24 * There is no hardware CAM in any Anysee device sold.
25 * In my understanding it should be implemented by making own module
26 * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This
27 * module registers serial interface that can be used to communicate
28 * with any ISO 7816 smart card.
30 * Any help according to implement serial smart card reader support
37 #include "mt352_priv.h"
46 static int dvb_usb_anysee_debug;
47 module_param_named(debug, dvb_usb_anysee_debug, int, 0644);
48 MODULE_PARM_DESC(debug, "set debugging level" DVB_USB_DEBUG_STATUS);
49 static int dvb_usb_anysee_delsys;
50 module_param_named(delsys, dvb_usb_anysee_delsys, int, 0644);
51 MODULE_PARM_DESC(delsys, "select delivery mode (0=DVB-C, 1=DVB-T)");
52 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
54 static DEFINE_MUTEX(anysee_usb_mutex);
56 static int anysee_ctrl_msg(struct dvb_usb_device *d, u8 *sbuf, u8 slen,
59 struct anysee_state *state = d->priv;
63 memcpy(&buf[0], sbuf, slen);
64 buf[60] = state->seq++;
66 if (mutex_lock_interruptible(&anysee_usb_mutex) < 0)
69 /* We need receive one message more after dvb_usb_generic_rw due
70 to weird transaction flow, which is 1 x send + 2 x receive. */
71 ret = dvb_usb_generic_rw(d, buf, sizeof(buf), buf, sizeof(buf), 0);
74 /* receive 2nd answer */
75 ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev,
76 d->props.generic_bulk_ctrl_endpoint), buf, sizeof(buf),
79 err("%s: recv bulk message failed: %d", __func__, ret);
82 debug_dump(buf, act_len, deb_xfer);
86 /* read request, copy returned data to return buf */
87 if (!ret && rbuf && rlen)
88 memcpy(rbuf, buf, rlen);
90 mutex_unlock(&anysee_usb_mutex);
95 static int anysee_read_reg(struct dvb_usb_device *d, u16 reg, u8 *val)
97 u8 buf[] = {CMD_REG_READ, reg >> 8, reg & 0xff, 0x01};
99 ret = anysee_ctrl_msg(d, buf, sizeof(buf), val, 1);
100 deb_info("%s: reg:%04x val:%02x\n", __func__, reg, *val);
104 static int anysee_write_reg(struct dvb_usb_device *d, u16 reg, u8 val)
106 u8 buf[] = {CMD_REG_WRITE, reg >> 8, reg & 0xff, 0x01, val};
107 deb_info("%s: reg:%04x val:%02x\n", __func__, reg, val);
108 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
111 /* write single register with mask */
112 static int anysee_wr_reg_mask(struct dvb_usb_device *d, u16 reg, u8 val,
118 /* no need for read if whole reg is written */
120 ret = anysee_read_reg(d, reg, &tmp);
129 return anysee_write_reg(d, reg, val);
132 static int anysee_get_hw_info(struct dvb_usb_device *d, u8 *id)
134 u8 buf[] = {CMD_GET_HW_INFO};
135 return anysee_ctrl_msg(d, buf, sizeof(buf), id, 3);
138 static int anysee_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
140 u8 buf[] = {CMD_STREAMING_CTRL, (u8)onoff, 0x00};
141 deb_info("%s: onoff:%02x\n", __func__, onoff);
142 return anysee_ctrl_msg(adap->dev, buf, sizeof(buf), NULL, 0);
145 static int anysee_led_ctrl(struct dvb_usb_device *d, u8 mode, u8 interval)
147 u8 buf[] = {CMD_LED_AND_IR_CTRL, 0x01, mode, interval};
148 deb_info("%s: state:%02x interval:%02x\n", __func__, mode, interval);
149 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
152 static int anysee_ir_ctrl(struct dvb_usb_device *d, u8 onoff)
154 u8 buf[] = {CMD_LED_AND_IR_CTRL, 0x02, onoff};
155 deb_info("%s: onoff:%02x\n", __func__, onoff);
156 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
159 static int anysee_init(struct dvb_usb_device *d)
163 ret = anysee_led_ctrl(d, 0x01, 0x03);
168 ret = anysee_ir_ctrl(d, 1);
176 static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,
179 struct dvb_usb_device *d = i2c_get_adapdata(adap);
180 int ret = 0, inc, i = 0;
181 u8 buf[52]; /* 4 + 48 (I2C WR USB command header + I2C WR max) */
183 if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
187 if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
188 if (msg[i].len > 2 || msg[i+1].len > 60) {
192 buf[0] = CMD_I2C_READ;
193 buf[1] = (msg[i].addr << 1) | 0x01;
194 buf[2] = msg[i].buf[0];
195 buf[3] = msg[i].buf[1];
196 buf[4] = msg[i].len-1;
197 buf[5] = msg[i+1].len;
198 ret = anysee_ctrl_msg(d, buf, 6, msg[i+1].buf,
202 if (msg[i].len > 48) {
206 buf[0] = CMD_I2C_WRITE;
207 buf[1] = (msg[i].addr << 1);
210 memcpy(&buf[4], msg[i].buf, msg[i].len);
211 ret = anysee_ctrl_msg(d, buf, 4 + msg[i].len, NULL, 0);
220 mutex_unlock(&d->i2c_mutex);
222 return ret ? ret : i;
225 static u32 anysee_i2c_func(struct i2c_adapter *adapter)
230 static struct i2c_algorithm anysee_i2c_algo = {
231 .master_xfer = anysee_master_xfer,
232 .functionality = anysee_i2c_func,
235 static int anysee_mt352_demod_init(struct dvb_frontend *fe)
237 static u8 clock_config[] = { CLOCK_CTL, 0x38, 0x28 };
238 static u8 reset[] = { RESET, 0x80 };
239 static u8 adc_ctl_1_cfg[] = { ADC_CTL_1, 0x40 };
240 static u8 agc_cfg[] = { AGC_TARGET, 0x28, 0x20 };
241 static u8 gpp_ctl_cfg[] = { GPP_CTL, 0x33 };
242 static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 };
244 mt352_write(fe, clock_config, sizeof(clock_config));
246 mt352_write(fe, reset, sizeof(reset));
247 mt352_write(fe, adc_ctl_1_cfg, sizeof(adc_ctl_1_cfg));
249 mt352_write(fe, agc_cfg, sizeof(agc_cfg));
250 mt352_write(fe, gpp_ctl_cfg, sizeof(gpp_ctl_cfg));
251 mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));
256 /* Callbacks for DVB USB */
257 static struct tda10023_config anysee_tda10023_config = {
258 .demod_address = (0x1a >> 1),
264 .output_mode = TDA10023_OUTPUT_MODE_PARALLEL_C,
268 static struct mt352_config anysee_mt352_config = {
269 .demod_address = (0x1e >> 1),
270 .demod_init = anysee_mt352_demod_init,
273 static struct zl10353_config anysee_zl10353_config = {
274 .demod_address = (0x1e >> 1),
278 static struct zl10353_config anysee_zl10353_tda18212_config2 = {
279 .demod_address = (0x1e >> 1),
281 .disable_i2c_gate_ctrl = 1,
286 static struct zl10353_config anysee_zl10353_tda18212_config = {
287 .demod_address = (0x18 >> 1),
289 .disable_i2c_gate_ctrl = 1,
294 static struct tda10023_config anysee_tda10023_tda18212_config = {
295 .demod_address = (0x1a >> 1),
300 .output_mode = TDA10023_OUTPUT_MODE_PARALLEL_C,
304 static struct tda18212_config anysee_tda18212_config = {
305 .i2c_address = (0xc0 >> 1),
312 static struct cx24116_config anysee_cx24116_config = {
313 .demod_address = (0xaa >> 1),
314 .mpg_clk_pos_pol = 0x00,
318 static struct stv0900_config anysee_stv0900_config = {
319 .demod_address = (0xd0 >> 1),
325 .tun1_adc = 1, /* 1 Vpp */
329 static struct stv6110_config anysee_stv6110_config = {
330 .i2c_address = (0xc0 >> 1),
335 static struct isl6423_config anysee_isl6423_config = {
336 .current_max = SEC_CURRENT_800m,
337 .curlim = SEC_CURRENT_LIM_OFF,
343 * New USB device strings: Mfr=1, Product=2, SerialNumber=0
344 * Manufacturer: AMT.CO.KR
346 * E30 VID=04b4 PID=861f HW=2 FW=2.1 Product=????????
348 * parts: DNOS404ZH102A(MT352, DTT7579(?))
350 * E30 VID=04b4 PID=861f HW=2 FW=2.1 Product=????????
352 * parts: DNOS404ZH103A(ZL10353, DTT7579(?))
354 * E30 Plus VID=04b4 PID=861f HW=6 FW=1.0 "anysee"
355 * PCB: 507CD (rev1.1)
356 * parts: DNOS404ZH103A(ZL10353, DTT7579(?)), CST56I01
357 * OEA=80 OEB=00 OEC=00 OED=ff OEF=fe
358 * IOA=4f IOB=ff IOC=00 IOD=06 IOF=01
359 * IOD[0] ZL10353 1=enabled
360 * IOA[7] TS 0=enabled
361 * tuner is not behind ZL10353 I2C-gate (no care if gate disabled or not)
363 * E30 C Plus VID=04b4 PID=861f HW=10 FW=1.0 "anysee-DC(LP)"
364 * PCB: 507DC (rev0.2)
365 * parts: TDA10023, DTOS403IH102B TM, CST56I01
366 * OEA=80 OEB=00 OEC=00 OED=ff OEF=fe
367 * IOA=4f IOB=ff IOC=00 IOD=26 IOF=01
368 * IOD[0] TDA10023 1=enabled
370 * E30 S2 Plus VID=04b4 PID=861f HW=11 FW=0.1 "anysee-S2(LP)"
371 * PCB: 507SI (rev2.1)
372 * parts: BS2N10WCC01(CX24116, CX24118), ISL6423, TDA8024
373 * OEA=80 OEB=00 OEC=ff OED=ff OEF=fe
374 * IOA=4d IOB=ff IOC=00 IOD=26 IOF=01
375 * IOD[0] CX24116 1=enabled
377 * E30 C Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)"
378 * PCB: 507FA (rev0.4)
379 * parts: TDA10023, DTOS403IH102B TM, TDA8024
380 * OEA=80 OEB=00 OEC=ff OED=ff OEF=ff
381 * IOA=4d IOB=ff IOC=00 IOD=00 IOF=c0
382 * IOD[5] TDA10023 1=enabled
383 * IOE[0] tuner 1=enabled
385 * E30 Combo Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)"
386 * PCB: 507FA (rev1.1)
387 * parts: ZL10353, TDA10023, DTOS403IH102B TM, TDA8024
388 * OEA=80 OEB=00 OEC=ff OED=ff OEF=ff
389 * IOA=4d IOB=ff IOC=00 IOD=00 IOF=c0
391 * IOD[5] TDA10023 1=enabled
392 * IOE[0] tuner 1=enabled
394 * IOD[0] ZL10353 1=enabled
395 * IOE[0] tuner 0=enabled
396 * tuner is behind ZL10353 I2C-gate
398 * E7 TC VID=1c73 PID=861f HW=18 FW=0.7 AMTCI=0.5 "anysee-E7TC(LP)"
399 * PCB: 508TC (rev0.6)
400 * parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212)
401 * OEA=80 OEB=00 OEC=03 OED=f7 OEF=ff
402 * IOA=4d IOB=00 IOC=cc IOD=48 IOF=e4
403 * IOA[7] TS 1=enabled
404 * IOE[4] TDA18212 1=enabled
406 * IOD[6] ZL10353 0=disabled
407 * IOD[5] TDA10023 1=enabled
408 * IOE[0] IF 1=enabled
410 * IOD[5] TDA10023 0=disabled
411 * IOD[6] ZL10353 1=enabled
412 * IOE[0] IF 0=enabled
414 * E7 S2 VID=1c73 PID=861f HW=19 FW=0.4 AMTCI=0.5 "anysee-E7S2(LP)"
415 * PCB: 508S2 (rev0.7)
416 * parts: DNBU10512IST(STV0903, STV6110), ISL6423
417 * OEA=80 OEB=00 OEC=03 OED=f7 OEF=ff
418 * IOA=4d IOB=00 IOC=c4 IOD=08 IOF=e4
419 * IOA[7] TS 1=enabled
420 * IOE[5] STV0903 1=enabled
424 static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
427 struct anysee_state *state = adap->dev->priv;
430 struct i2c_msg msg[2] = {
432 .addr = anysee_tda18212_config.i2c_address,
437 .addr = anysee_tda18212_config.i2c_address,
444 /* Check which hardware we have.
445 * We must do this call two times to get reliable values (hw bug).
447 ret = anysee_get_hw_info(adap->dev, hw_info);
451 ret = anysee_get_hw_info(adap->dev, hw_info);
455 /* Meaning of these info bytes are guessed. */
456 info("firmware version:%d.%d hardware id:%d",
457 hw_info[1], hw_info[2], hw_info[0]);
459 state->hw = hw_info[0];
462 case ANYSEE_HW_02: /* 2 */
466 adap->fe = dvb_attach(mt352_attach, &anysee_mt352_config,
467 &adap->dev->i2c_adap);
472 adap->fe = dvb_attach(zl10353_attach, &anysee_zl10353_config,
473 &adap->dev->i2c_adap);
476 case ANYSEE_HW_507CD: /* 6 */
479 /* enable DVB-T demod on IOD[0] */
480 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 0), 0x01);
484 /* enable transport stream on IOA[7] */
485 ret = anysee_wr_reg_mask(adap->dev, REG_IOA, (0 << 7), 0x80);
490 adap->fe = dvb_attach(zl10353_attach, &anysee_zl10353_config,
491 &adap->dev->i2c_adap);
494 case ANYSEE_HW_507DC: /* 10 */
497 /* enable DVB-C demod on IOD[0] */
498 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 0), 0x01);
503 adap->fe = dvb_attach(tda10023_attach, &anysee_tda10023_config,
504 &adap->dev->i2c_adap, 0x48);
507 case ANYSEE_HW_507SI: /* 11 */
510 /* enable DVB-S/S2 demod on IOD[0] */
511 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 0), 0x01);
516 adap->fe = dvb_attach(cx24116_attach, &anysee_cx24116_config,
517 &adap->dev->i2c_adap);
520 case ANYSEE_HW_507FA: /* 15 */
524 /* enable tuner on IOE[4] */
525 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 4), 0x10);
531 ret = i2c_transfer(&adap->dev->i2c_adap, msg, 2);
532 if (ret == 2 && tmp == 0xc7)
533 deb_info("%s: TDA18212 found\n", __func__);
537 /* disable tuner on IOE[4] */
538 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (0 << 4), 0x10);
542 if (dvb_usb_anysee_delsys) {
543 /* disable DVB-C demod on IOD[5] */
544 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (0 << 5),
549 /* enable DVB-T demod on IOD[0] */
550 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 0),
557 /* TDA18212 config */
558 adap->fe = dvb_attach(zl10353_attach,
559 &anysee_zl10353_tda18212_config2,
560 &adap->dev->i2c_adap);
563 adap->fe = dvb_attach(zl10353_attach,
564 &anysee_zl10353_config,
565 &adap->dev->i2c_adap);
568 /* disable DVB-T demod on IOD[0] */
569 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (0 << 0),
574 /* enable DVB-C demod on IOD[5] */
575 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 5),
582 /* TDA18212 config */
583 adap->fe = dvb_attach(tda10023_attach,
584 &anysee_tda10023_tda18212_config,
585 &adap->dev->i2c_adap, 0x48);
588 adap->fe = dvb_attach(tda10023_attach,
589 &anysee_tda10023_config,
590 &adap->dev->i2c_adap, 0x48);
595 case ANYSEE_HW_508TC: /* 18 */
598 /* enable transport stream on IOA[7] */
599 ret = anysee_wr_reg_mask(adap->dev, REG_IOA, (1 << 7), 0x80);
603 if (dvb_usb_anysee_delsys) {
604 /* disable DVB-C demod on IOD[5] */
605 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (0 << 5),
610 /* enable DVB-T demod on IOD[6] */
611 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 6),
616 /* enable IF route on IOE[0] */
617 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (0 << 0),
623 adap->fe = dvb_attach(zl10353_attach,
624 &anysee_zl10353_tda18212_config,
625 &adap->dev->i2c_adap);
627 /* disable DVB-T demod on IOD[6] */
628 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (0 << 6),
633 /* enable DVB-C demod on IOD[5] */
634 ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (1 << 5),
639 /* enable IF route on IOE[0] */
640 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 0),
646 adap->fe = dvb_attach(tda10023_attach,
647 &anysee_tda10023_tda18212_config,
648 &adap->dev->i2c_adap, 0x48);
652 case ANYSEE_HW_508S2: /* 19 */
655 /* enable transport stream on IOA[7] */
656 ret = anysee_wr_reg_mask(adap->dev, REG_IOA, (1 << 7), 0x80);
660 /* enable DVB-S/S2 demod on IOE[5] */
661 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 5), 0x20);
666 adap->fe = dvb_attach(stv0900_attach, &anysee_stv0900_config,
667 &adap->dev->i2c_adap, 0);
673 /* we have no frontend :-( */
675 err("Unsupported Anysee version. " \
676 "Please report the <linux-media@vger.kernel.org>.");
682 static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
684 struct anysee_state *state = adap->dev->priv;
685 struct dvb_frontend *fe;
687 deb_info("%s:\n", __func__);
690 case ANYSEE_HW_02: /* 2 */
694 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc2 >> 1),
695 NULL, DVB_PLL_THOMSON_DTT7579);
698 case ANYSEE_HW_507CD: /* 6 */
702 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc2 >> 1),
703 &adap->dev->i2c_adap, DVB_PLL_THOMSON_DTT7579);
706 case ANYSEE_HW_507DC: /* 10 */
710 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc0 >> 1),
711 &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
714 case ANYSEE_HW_507SI: /* 11 */
717 /* attach LNB controller */
718 fe = dvb_attach(isl6423_attach, adap->fe, &adap->dev->i2c_adap,
719 &anysee_isl6423_config);
722 case ANYSEE_HW_507FA: /* 15 */
726 if (dvb_usb_anysee_delsys) {
727 /* enable DVB-T tuner on IOE[0] */
728 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (0 << 0),
733 /* enable DVB-C tuner on IOE[0] */
734 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 0),
740 /* Try first attach TDA18212 silicon tuner on IOE[4], if that
741 * fails attach old simple PLL. */
743 /* enable tuner on IOE[4] */
744 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 4), 0x10);
749 fe = dvb_attach(tda18212_attach, adap->fe, &adap->dev->i2c_adap,
750 &anysee_tda18212_config);
754 /* disable tuner on IOE[4] */
755 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (0 << 4), 0x10);
760 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc0 >> 1),
761 &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
764 case ANYSEE_HW_508TC: /* 18 */
767 /* enable tuner on IOE[4] */
768 ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 4), 0x10);
773 fe = dvb_attach(tda18212_attach, adap->fe, &adap->dev->i2c_adap,
774 &anysee_tda18212_config);
777 case ANYSEE_HW_508S2: /* 19 */
781 fe = dvb_attach(stv6110_attach, adap->fe,
782 &anysee_stv6110_config, &adap->dev->i2c_adap);
785 /* attach LNB controller */
786 fe = dvb_attach(isl6423_attach, adap->fe,
787 &adap->dev->i2c_adap, &anysee_isl6423_config);
804 static int anysee_rc_query(struct dvb_usb_device *d)
806 u8 buf[] = {CMD_GET_IR_CODE};
810 /* Remote controller is basic NEC using address byte 0x08.
811 Anysee device RC query returns only two bytes, status and code,
812 address byte is dropped. Also it does not return any value for
813 NEC RCs having address byte other than 0x08. Due to that, we
814 cannot use that device as standard NEC receiver.
815 It could be possible make hack which reads whole code directly
816 from device memory... */
818 ret = anysee_ctrl_msg(d, buf, sizeof(buf), ircode, sizeof(ircode));
823 deb_rc("%s: key pressed %02x\n", __func__, ircode[1]);
824 rc_keydown(d->rc_dev, 0x08 << 8 | ircode[1], 0);
830 /* DVB USB Driver stuff */
831 static struct dvb_usb_device_properties anysee_properties;
833 static int anysee_probe(struct usb_interface *intf,
834 const struct usb_device_id *id)
836 struct dvb_usb_device *d;
837 struct usb_host_interface *alt;
840 /* There is one interface with two alternate settings.
841 Alternate setting 0 is for bulk transfer.
842 Alternate setting 1 is for isochronous transfer.
843 We use bulk transfer (alternate setting 0). */
844 if (intf->num_altsetting < 1)
848 * Anysee is always warm (its USB-bridge, Cypress FX2, uploads
849 * firmware from eeprom). If dvb_usb_device_init() succeeds that
850 * means d is a valid pointer.
852 ret = dvb_usb_device_init(intf, &anysee_properties, THIS_MODULE, &d,
857 alt = usb_altnum_to_altsetting(intf, 0);
859 deb_info("%s: no alt found!\n", __func__);
863 ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber,
864 alt->desc.bAlternateSetting);
868 return anysee_init(d);
871 static struct usb_device_id anysee_table[] = {
872 { USB_DEVICE(USB_VID_CYPRESS, USB_PID_ANYSEE) },
873 { USB_DEVICE(USB_VID_AMT, USB_PID_ANYSEE) },
874 { } /* Terminating entry */
876 MODULE_DEVICE_TABLE(usb, anysee_table);
878 static struct dvb_usb_device_properties anysee_properties = {
879 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
881 .usb_ctrl = DEVICE_SPECIFIC,
883 .size_of_priv = sizeof(struct anysee_state),
888 .streaming_ctrl = anysee_streaming_ctrl,
889 .frontend_attach = anysee_frontend_attach,
890 .tuner_attach = anysee_tuner_attach,
897 .buffersize = (16*512),
905 .rc_codes = RC_MAP_ANYSEE,
906 .protocol = RC_TYPE_OTHER,
907 .module_name = "anysee",
908 .rc_query = anysee_rc_query,
909 .rc_interval = 250, /* windows driver uses 500ms */
912 .i2c_algo = &anysee_i2c_algo,
914 .generic_bulk_ctrl_endpoint = 1,
916 .num_device_descs = 1,
919 .name = "Anysee DVB USB2.0",
921 .warm_ids = {&anysee_table[0],
922 &anysee_table[1], NULL},
927 static struct usb_driver anysee_driver = {
928 .name = "dvb_usb_anysee",
929 .probe = anysee_probe,
930 .disconnect = dvb_usb_device_exit,
931 .id_table = anysee_table,
935 static int __init anysee_module_init(void)
939 ret = usb_register(&anysee_driver);
941 err("%s: usb_register failed. Error number %d", __func__, ret);
946 static void __exit anysee_module_exit(void)
948 /* deregister this driver from the USB subsystem */
949 usb_deregister(&anysee_driver);
952 module_init(anysee_module_init);
953 module_exit(anysee_module_exit);
955 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
956 MODULE_DESCRIPTION("Driver Anysee E30 DVB-C & DVB-T USB2.0");
957 MODULE_LICENSE("GPL");