1 /* 2 * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver 3 * 4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5 * 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. 10 * 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. 15 * 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. 19 * 20 * TODO: 21 * - add smart card reader support for Conditional Access (CA) 22 * 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. 29 * 30 * Any help according to implement serial smart card reader support 31 * is highly welcome! 32 */ 33 34 #include "anysee.h" 35 #include "dvb-pll.h" 36 #include "tda1002x.h" 37 #include "mt352.h" 38 #include "mt352_priv.h" 39 #include "zl10353.h" 40 #include "tda18212.h" 41 #include "cx24116.h" 42 #include "stv0900.h" 43 #include "stv6110.h" 44 #include "isl6423.h" 45 #include "cxd2820r.h" 46 47 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 48 49 static int anysee_ctrl_msg(struct dvb_usb_device *d, 50 u8 *sbuf, u8 slen, u8 *rbuf, u8 rlen) 51 { 52 struct anysee_state *state = d_to_priv(d); 53 int act_len, ret, i; 54 55 mutex_lock(&d->usb_mutex); 56 57 memcpy(&state->buf[0], sbuf, slen); 58 state->buf[60] = state->seq++; 59 60 dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, slen, state->buf); 61 62 /* We need receive one message more after dvb_usb_generic_rw due 63 to weird transaction flow, which is 1 x send + 2 x receive. */ 64 ret = dvb_usbv2_generic_rw_locked(d, state->buf, sizeof(state->buf), 65 state->buf, sizeof(state->buf)); 66 if (ret) 67 goto error_unlock; 68 69 /* TODO FIXME: dvb_usb_generic_rw() fails rarely with error code -32 70 * (EPIPE, Broken pipe). Function supports currently msleep() as a 71 * parameter but I would not like to use it, since according to 72 * Documentation/timers/timers-howto.txt it should not be used such 73 * short, under < 20ms, sleeps. Repeating failed message would be 74 * better choice as not to add unwanted delays... 75 * Fixing that correctly is one of those or both; 76 * 1) use repeat if possible 77 * 2) add suitable delay 78 */ 79 80 /* get answer, retry few times if error returned */ 81 for (i = 0; i < 3; i++) { 82 /* receive 2nd answer */ 83 ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev, 84 d->props->generic_bulk_ctrl_endpoint), 85 state->buf, sizeof(state->buf), &act_len, 2000); 86 if (ret) { 87 dev_dbg(&d->udev->dev, 88 "%s: recv bulk message failed=%d\n", 89 __func__, ret); 90 } else { 91 dev_dbg(&d->udev->dev, "%s: <<< %*ph\n", __func__, 92 rlen, state->buf); 93 94 if (state->buf[63] != 0x4f) 95 dev_dbg(&d->udev->dev, 96 "%s: cmd failed\n", __func__); 97 break; 98 } 99 } 100 101 if (ret) { 102 /* all retries failed, it is fatal */ 103 dev_err(&d->udev->dev, "%s: recv bulk message failed=%d\n", 104 KBUILD_MODNAME, ret); 105 goto error_unlock; 106 } 107 108 /* read request, copy returned data to return buf */ 109 if (rbuf && rlen) 110 memcpy(rbuf, state->buf, rlen); 111 112 error_unlock: 113 mutex_unlock(&d->usb_mutex); 114 return ret; 115 } 116 117 static int anysee_read_reg(struct dvb_usb_device *d, u16 reg, u8 *val) 118 { 119 u8 buf[] = {CMD_REG_READ, reg >> 8, reg & 0xff, 0x01}; 120 int ret; 121 ret = anysee_ctrl_msg(d, buf, sizeof(buf), val, 1); 122 dev_dbg(&d->udev->dev, "%s: reg=%04x val=%02x\n", __func__, reg, *val); 123 return ret; 124 } 125 126 static int anysee_write_reg(struct dvb_usb_device *d, u16 reg, u8 val) 127 { 128 u8 buf[] = {CMD_REG_WRITE, reg >> 8, reg & 0xff, 0x01, val}; 129 dev_dbg(&d->udev->dev, "%s: reg=%04x val=%02x\n", __func__, reg, val); 130 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); 131 } 132 133 /* write single register with mask */ 134 static int anysee_wr_reg_mask(struct dvb_usb_device *d, u16 reg, u8 val, 135 u8 mask) 136 { 137 int ret; 138 u8 tmp; 139 140 /* no need for read if whole reg is written */ 141 if (mask != 0xff) { 142 ret = anysee_read_reg(d, reg, &tmp); 143 if (ret) 144 return ret; 145 146 val &= mask; 147 tmp &= ~mask; 148 val |= tmp; 149 } 150 151 return anysee_write_reg(d, reg, val); 152 } 153 154 /* read single register with mask */ 155 static int anysee_rd_reg_mask(struct dvb_usb_device *d, u16 reg, u8 *val, 156 u8 mask) 157 { 158 int ret, i; 159 u8 tmp; 160 161 ret = anysee_read_reg(d, reg, &tmp); 162 if (ret) 163 return ret; 164 165 tmp &= mask; 166 167 /* find position of the first bit */ 168 for (i = 0; i < 8; i++) { 169 if ((mask >> i) & 0x01) 170 break; 171 } 172 *val = tmp >> i; 173 174 return 0; 175 } 176 177 static int anysee_get_hw_info(struct dvb_usb_device *d, u8 *id) 178 { 179 u8 buf[] = {CMD_GET_HW_INFO}; 180 return anysee_ctrl_msg(d, buf, sizeof(buf), id, 3); 181 } 182 183 static int anysee_streaming_ctrl(struct dvb_frontend *fe, int onoff) 184 { 185 u8 buf[] = {CMD_STREAMING_CTRL, (u8)onoff, 0x00}; 186 dev_dbg(&fe_to_d(fe)->udev->dev, "%s: onoff=%d\n", __func__, onoff); 187 return anysee_ctrl_msg(fe_to_d(fe), buf, sizeof(buf), NULL, 0); 188 } 189 190 static int anysee_led_ctrl(struct dvb_usb_device *d, u8 mode, u8 interval) 191 { 192 u8 buf[] = {CMD_LED_AND_IR_CTRL, 0x01, mode, interval}; 193 dev_dbg(&d->udev->dev, "%s: state=%d interval=%d\n", __func__, 194 mode, interval); 195 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); 196 } 197 198 static int anysee_ir_ctrl(struct dvb_usb_device *d, u8 onoff) 199 { 200 u8 buf[] = {CMD_LED_AND_IR_CTRL, 0x02, onoff}; 201 dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff); 202 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); 203 } 204 205 /* I2C */ 206 static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, 207 int num) 208 { 209 struct dvb_usb_device *d = i2c_get_adapdata(adap); 210 int ret = 0, inc, i = 0; 211 u8 buf[52]; /* 4 + 48 (I2C WR USB command header + I2C WR max) */ 212 213 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) 214 return -EAGAIN; 215 216 while (i < num) { 217 if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) { 218 if (msg[i].len > 2 || msg[i+1].len > 60) { 219 ret = -EOPNOTSUPP; 220 break; 221 } 222 buf[0] = CMD_I2C_READ; 223 buf[1] = (msg[i].addr << 1) | 0x01; 224 buf[2] = msg[i].buf[0]; 225 buf[3] = msg[i].buf[1]; 226 buf[4] = msg[i].len-1; 227 buf[5] = msg[i+1].len; 228 ret = anysee_ctrl_msg(d, buf, 6, msg[i+1].buf, 229 msg[i+1].len); 230 inc = 2; 231 } else { 232 if (msg[i].len > 48) { 233 ret = -EOPNOTSUPP; 234 break; 235 } 236 buf[0] = CMD_I2C_WRITE; 237 buf[1] = (msg[i].addr << 1); 238 buf[2] = msg[i].len; 239 buf[3] = 0x01; 240 memcpy(&buf[4], msg[i].buf, msg[i].len); 241 ret = anysee_ctrl_msg(d, buf, 4 + msg[i].len, NULL, 0); 242 inc = 1; 243 } 244 if (ret) 245 break; 246 247 i += inc; 248 } 249 250 mutex_unlock(&d->i2c_mutex); 251 252 return ret ? ret : i; 253 } 254 255 static u32 anysee_i2c_func(struct i2c_adapter *adapter) 256 { 257 return I2C_FUNC_I2C; 258 } 259 260 static struct i2c_algorithm anysee_i2c_algo = { 261 .master_xfer = anysee_master_xfer, 262 .functionality = anysee_i2c_func, 263 }; 264 265 static int anysee_mt352_demod_init(struct dvb_frontend *fe) 266 { 267 static u8 clock_config[] = { CLOCK_CTL, 0x38, 0x28 }; 268 static u8 reset[] = { RESET, 0x80 }; 269 static u8 adc_ctl_1_cfg[] = { ADC_CTL_1, 0x40 }; 270 static u8 agc_cfg[] = { AGC_TARGET, 0x28, 0x20 }; 271 static u8 gpp_ctl_cfg[] = { GPP_CTL, 0x33 }; 272 static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 }; 273 274 mt352_write(fe, clock_config, sizeof(clock_config)); 275 udelay(200); 276 mt352_write(fe, reset, sizeof(reset)); 277 mt352_write(fe, adc_ctl_1_cfg, sizeof(adc_ctl_1_cfg)); 278 279 mt352_write(fe, agc_cfg, sizeof(agc_cfg)); 280 mt352_write(fe, gpp_ctl_cfg, sizeof(gpp_ctl_cfg)); 281 mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg)); 282 283 return 0; 284 } 285 286 /* Callbacks for DVB USB */ 287 static struct tda10023_config anysee_tda10023_config = { 288 .demod_address = (0x1a >> 1), 289 .invert = 0, 290 .xtal = 16000000, 291 .pll_m = 11, 292 .pll_p = 3, 293 .pll_n = 1, 294 .output_mode = TDA10023_OUTPUT_MODE_PARALLEL_C, 295 .deltaf = 0xfeeb, 296 }; 297 298 static struct mt352_config anysee_mt352_config = { 299 .demod_address = (0x1e >> 1), 300 .demod_init = anysee_mt352_demod_init, 301 }; 302 303 static struct zl10353_config anysee_zl10353_config = { 304 .demod_address = (0x1e >> 1), 305 .parallel_ts = 1, 306 }; 307 308 static struct zl10353_config anysee_zl10353_tda18212_config2 = { 309 .demod_address = (0x1e >> 1), 310 .parallel_ts = 1, 311 .disable_i2c_gate_ctrl = 1, 312 .no_tuner = 1, 313 .if2 = 41500, 314 }; 315 316 static struct zl10353_config anysee_zl10353_tda18212_config = { 317 .demod_address = (0x18 >> 1), 318 .parallel_ts = 1, 319 .disable_i2c_gate_ctrl = 1, 320 .no_tuner = 1, 321 .if2 = 41500, 322 }; 323 324 static struct tda10023_config anysee_tda10023_tda18212_config = { 325 .demod_address = (0x1a >> 1), 326 .xtal = 16000000, 327 .pll_m = 12, 328 .pll_p = 3, 329 .pll_n = 1, 330 .output_mode = TDA10023_OUTPUT_MODE_PARALLEL_B, 331 .deltaf = 0xba02, 332 }; 333 334 static struct tda18212_config anysee_tda18212_config = { 335 .if_dvbt_6 = 4150, 336 .if_dvbt_7 = 4150, 337 .if_dvbt_8 = 4150, 338 .if_dvbc = 5000, 339 }; 340 341 static struct tda18212_config anysee_tda18212_config2 = { 342 .if_dvbt_6 = 3550, 343 .if_dvbt_7 = 3700, 344 .if_dvbt_8 = 4150, 345 .if_dvbt2_6 = 3250, 346 .if_dvbt2_7 = 4000, 347 .if_dvbt2_8 = 4000, 348 .if_dvbc = 5000, 349 }; 350 351 static struct cx24116_config anysee_cx24116_config = { 352 .demod_address = (0xaa >> 1), 353 .mpg_clk_pos_pol = 0x00, 354 .i2c_wr_max = 48, 355 }; 356 357 static struct stv0900_config anysee_stv0900_config = { 358 .demod_address = (0xd0 >> 1), 359 .demod_mode = 0, 360 .xtal = 8000000, 361 .clkmode = 3, 362 .diseqc_mode = 2, 363 .tun1_maddress = 0, 364 .tun1_adc = 1, /* 1 Vpp */ 365 .path1_mode = 3, 366 }; 367 368 static struct stv6110_config anysee_stv6110_config = { 369 .i2c_address = (0xc0 >> 1), 370 .mclk = 16000000, 371 .clk_div = 1, 372 }; 373 374 static struct isl6423_config anysee_isl6423_config = { 375 .current_max = SEC_CURRENT_800m, 376 .curlim = SEC_CURRENT_LIM_OFF, 377 .mod_extern = 1, 378 .addr = (0x10 >> 1), 379 }; 380 381 static struct cxd2820r_config anysee_cxd2820r_config = { 382 .i2c_address = 0x6d, /* (0xda >> 1) */ 383 .ts_mode = 0x38, 384 }; 385 386 /* 387 * New USB device strings: Mfr=1, Product=2, SerialNumber=0 388 * Manufacturer: AMT.CO.KR 389 * 390 * E30 VID=04b4 PID=861f HW=2 FW=2.1 Product=???????? 391 * PCB: ? 392 * parts: DNOS404ZH102A(MT352, DTT7579(?)) 393 * 394 * E30 VID=04b4 PID=861f HW=2 FW=2.1 "anysee-T(LP)" 395 * PCB: PCB 507T (rev1.61) 396 * parts: DNOS404ZH103A(ZL10353, DTT7579(?)) 397 * OEA=0a OEB=00 OEC=00 OED=ff OEE=00 398 * IOA=45 IOB=ff IOC=00 IOD=ff IOE=00 399 * 400 * E30 Plus VID=04b4 PID=861f HW=6 FW=1.0 "anysee" 401 * PCB: 507CD (rev1.1) 402 * parts: DNOS404ZH103A(ZL10353, DTT7579(?)), CST56I01 403 * OEA=80 OEB=00 OEC=00 OED=ff OEE=fe 404 * IOA=4f IOB=ff IOC=00 IOD=06 IOE=01 405 * IOD[0] ZL10353 1=enabled 406 * IOA[7] TS 0=enabled 407 * tuner is not behind ZL10353 I2C-gate (no care if gate disabled or not) 408 * 409 * E30 C Plus VID=04b4 PID=861f HW=10 FW=1.0 "anysee-DC(LP)" 410 * PCB: 507DC (rev0.2) 411 * parts: TDA10023, DTOS403IH102B TM, CST56I01 412 * OEA=80 OEB=00 OEC=00 OED=ff OEE=fe 413 * IOA=4f IOB=ff IOC=00 IOD=26 IOE=01 414 * IOD[0] TDA10023 1=enabled 415 * 416 * E30 S2 Plus VID=04b4 PID=861f HW=11 FW=0.1 "anysee-S2(LP)" 417 * PCB: 507SI (rev2.1) 418 * parts: BS2N10WCC01(CX24116, CX24118), ISL6423, TDA8024 419 * OEA=80 OEB=00 OEC=ff OED=ff OEE=fe 420 * IOA=4d IOB=ff IOC=00 IOD=26 IOE=01 421 * IOD[0] CX24116 1=enabled 422 * 423 * E30 C Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)" 424 * PCB: 507FA (rev0.4) 425 * parts: TDA10023, DTOS403IH102B TM, TDA8024 426 * OEA=80 OEB=00 OEC=ff OED=ff OEE=ff 427 * IOA=4d IOB=ff IOC=00 IOD=00 IOE=c0 428 * IOD[5] TDA10023 1=enabled 429 * IOE[0] tuner 1=enabled 430 * 431 * E30 Combo Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)" 432 * PCB: 507FA (rev1.1) 433 * parts: ZL10353, TDA10023, DTOS403IH102B TM, TDA8024 434 * OEA=80 OEB=00 OEC=ff OED=ff OEE=ff 435 * IOA=4d IOB=ff IOC=00 IOD=00 IOE=c0 436 * DVB-C: 437 * IOD[5] TDA10023 1=enabled 438 * IOE[0] tuner 1=enabled 439 * DVB-T: 440 * IOD[0] ZL10353 1=enabled 441 * IOE[0] tuner 0=enabled 442 * tuner is behind ZL10353 I2C-gate 443 * tuner is behind TDA10023 I2C-gate 444 * 445 * E7 TC VID=1c73 PID=861f HW=18 FW=0.7 AMTCI=0.5 "anysee-E7TC(LP)" 446 * PCB: 508TC (rev0.6) 447 * parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212) 448 * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff 449 * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4 450 * IOA[7] TS 1=enabled 451 * IOE[4] TDA18212 1=enabled 452 * DVB-C: 453 * IOD[6] ZL10353 0=disabled 454 * IOD[5] TDA10023 1=enabled 455 * IOE[0] IF 1=enabled 456 * DVB-T: 457 * IOD[5] TDA10023 0=disabled 458 * IOD[6] ZL10353 1=enabled 459 * IOE[0] IF 0=enabled 460 * 461 * E7 S2 VID=1c73 PID=861f HW=19 FW=0.4 AMTCI=0.5 "anysee-E7S2(LP)" 462 * PCB: 508S2 (rev0.7) 463 * parts: DNBU10512IST(STV0903, STV6110), ISL6423 464 * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff 465 * IOA=4d IOB=00 IOC=c4 IOD=08 IOE=e4 466 * IOA[7] TS 1=enabled 467 * IOE[5] STV0903 1=enabled 468 * 469 * E7 T2C VID=1c73 PID=861f HW=20 FW=0.1 AMTCI=0.5 "anysee-E7T2C(LP)" 470 * PCB: 508T2C (rev0.3) 471 * parts: DNOQ44QCH106A(CXD2820R, TDA18212), TDA8024 472 * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff 473 * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4 474 * IOA[7] TS 1=enabled 475 * IOE[5] CXD2820R 1=enabled 476 * 477 * E7 PTC VID=1c73 PID=861f HW=21 FW=0.1 AMTCI=?? "anysee-E7PTC(LP)" 478 * PCB: 508PTC (rev0.5) 479 * parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212) 480 * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff 481 * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4 482 * IOA[7] TS 1=enabled 483 * IOE[4] TDA18212 1=enabled 484 * DVB-C: 485 * IOD[6] ZL10353 0=disabled 486 * IOD[5] TDA10023 1=enabled 487 * IOE[0] IF 1=enabled 488 * DVB-T: 489 * IOD[5] TDA10023 0=disabled 490 * IOD[6] ZL10353 1=enabled 491 * IOE[0] IF 0=enabled 492 * 493 * E7 PS2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)" 494 * PCB: 508PS2 (rev0.4) 495 * parts: DNBU10512IST(STV0903, STV6110), ISL6423 496 * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff 497 * IOA=4d IOB=00 IOC=c4 IOD=08 IOE=e4 498 * IOA[7] TS 1=enabled 499 * IOE[5] STV0903 1=enabled 500 */ 501 502 static int anysee_read_config(struct dvb_usb_device *d) 503 { 504 struct anysee_state *state = d_to_priv(d); 505 int ret; 506 u8 hw_info[3]; 507 508 /* 509 * Check which hardware we have. 510 * We must do this call two times to get reliable values (hw/fw bug). 511 */ 512 ret = anysee_get_hw_info(d, hw_info); 513 if (ret) 514 goto error; 515 516 ret = anysee_get_hw_info(d, hw_info); 517 if (ret) 518 goto error; 519 520 /* 521 * Meaning of these info bytes are guessed. 522 */ 523 dev_info(&d->udev->dev, "%s: firmware version %d.%d hardware id %d\n", 524 KBUILD_MODNAME, hw_info[1], hw_info[2], hw_info[0]); 525 526 state->hw = hw_info[0]; 527 error: 528 return ret; 529 } 530 531 /* external I2C gate used for DNOD44CDH086A(TDA18212) tuner module */ 532 static int anysee_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) 533 { 534 /* enable / disable tuner access on IOE[4] */ 535 return anysee_wr_reg_mask(fe_to_d(fe), REG_IOE, (enable << 4), 0x10); 536 } 537 538 static int anysee_frontend_ctrl(struct dvb_frontend *fe, int onoff) 539 { 540 struct anysee_state *state = fe_to_priv(fe); 541 struct dvb_usb_device *d = fe_to_d(fe); 542 int ret; 543 dev_dbg(&d->udev->dev, "%s: fe=%d onoff=%d\n", __func__, fe->id, onoff); 544 545 /* no frontend sleep control */ 546 if (onoff == 0) 547 return 0; 548 549 switch (state->hw) { 550 case ANYSEE_HW_507FA: /* 15 */ 551 /* E30 Combo Plus */ 552 /* E30 C Plus */ 553 554 if (fe->id == 0) { 555 /* disable DVB-T demod on IOD[0] */ 556 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 0), 0x01); 557 if (ret) 558 goto error; 559 560 /* enable DVB-C demod on IOD[5] */ 561 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); 562 if (ret) 563 goto error; 564 565 /* enable DVB-C tuner on IOE[0] */ 566 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 0), 0x01); 567 if (ret) 568 goto error; 569 } else { 570 /* disable DVB-C demod on IOD[5] */ 571 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); 572 if (ret) 573 goto error; 574 575 /* enable DVB-T demod on IOD[0] */ 576 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); 577 if (ret) 578 goto error; 579 580 /* enable DVB-T tuner on IOE[0] */ 581 ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 0), 0x01); 582 if (ret) 583 goto error; 584 } 585 586 break; 587 case ANYSEE_HW_508TC: /* 18 */ 588 case ANYSEE_HW_508PTC: /* 21 */ 589 /* E7 TC */ 590 /* E7 PTC */ 591 592 if (fe->id == 0) { 593 /* disable DVB-T demod on IOD[6] */ 594 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 6), 0x40); 595 if (ret) 596 goto error; 597 598 /* enable DVB-C demod on IOD[5] */ 599 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); 600 if (ret) 601 goto error; 602 603 /* enable IF route on IOE[0] */ 604 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 0), 0x01); 605 if (ret) 606 goto error; 607 } else { 608 /* disable DVB-C demod on IOD[5] */ 609 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); 610 if (ret) 611 goto error; 612 613 /* enable DVB-T demod on IOD[6] */ 614 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 6), 0x40); 615 if (ret) 616 goto error; 617 618 /* enable IF route on IOE[0] */ 619 ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 0), 0x01); 620 if (ret) 621 goto error; 622 } 623 624 break; 625 default: 626 ret = 0; 627 } 628 629 error: 630 return ret; 631 } 632 633 static int anysee_add_i2c_dev(struct dvb_usb_device *d, const char *type, 634 u8 addr, void *platform_data) 635 { 636 int ret, num; 637 struct anysee_state *state = d_to_priv(d); 638 struct i2c_client *client; 639 struct i2c_adapter *adapter = &d->i2c_adap; 640 struct i2c_board_info board_info = { 641 .addr = addr, 642 .platform_data = platform_data, 643 }; 644 645 strlcpy(board_info.type, type, I2C_NAME_SIZE); 646 647 /* find first free client */ 648 for (num = 0; num < ANYSEE_I2C_CLIENT_MAX; num++) { 649 if (state->i2c_client[num] == NULL) 650 break; 651 } 652 653 dev_dbg(&d->udev->dev, "%s: num=%d\n", __func__, num); 654 655 if (num == ANYSEE_I2C_CLIENT_MAX) { 656 dev_err(&d->udev->dev, "%s: I2C client out of index\n", 657 KBUILD_MODNAME); 658 ret = -ENODEV; 659 goto err; 660 } 661 662 request_module("%s", board_info.type); 663 664 /* register I2C device */ 665 client = i2c_new_device(adapter, &board_info); 666 if (client == NULL || client->dev.driver == NULL) { 667 ret = -ENODEV; 668 goto err; 669 } 670 671 /* increase I2C driver usage count */ 672 if (!try_module_get(client->dev.driver->owner)) { 673 i2c_unregister_device(client); 674 ret = -ENODEV; 675 goto err; 676 } 677 678 state->i2c_client[num] = client; 679 return 0; 680 err: 681 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret); 682 return ret; 683 } 684 685 static void anysee_del_i2c_dev(struct dvb_usb_device *d) 686 { 687 int num; 688 struct anysee_state *state = d_to_priv(d); 689 struct i2c_client *client; 690 691 /* find last used client */ 692 num = ANYSEE_I2C_CLIENT_MAX; 693 while (num--) { 694 if (state->i2c_client[num] != NULL) 695 break; 696 } 697 698 dev_dbg(&d->udev->dev, "%s: num=%d\n", __func__, num); 699 700 if (num == -1) { 701 dev_err(&d->udev->dev, "%s: I2C client out of index\n", 702 KBUILD_MODNAME); 703 goto err; 704 } 705 706 client = state->i2c_client[num]; 707 708 /* decrease I2C driver usage count */ 709 module_put(client->dev.driver->owner); 710 711 /* unregister I2C device */ 712 i2c_unregister_device(client); 713 714 state->i2c_client[num] = NULL; 715 err: 716 dev_dbg(&d->udev->dev, "%s: failed\n", __func__); 717 } 718 719 static int anysee_frontend_attach(struct dvb_usb_adapter *adap) 720 { 721 struct anysee_state *state = adap_to_priv(adap); 722 struct dvb_usb_device *d = adap_to_d(adap); 723 int ret = 0; 724 u8 tmp; 725 struct i2c_msg msg[2] = { 726 { 727 .addr = 0x60, 728 .flags = 0, 729 .len = 1, 730 .buf = "\x00", 731 }, { 732 .addr = 0x60, 733 .flags = I2C_M_RD, 734 .len = 1, 735 .buf = &tmp, 736 } 737 }; 738 739 switch (state->hw) { 740 case ANYSEE_HW_507T: /* 2 */ 741 /* E30 */ 742 743 /* attach demod */ 744 adap->fe[0] = dvb_attach(mt352_attach, &anysee_mt352_config, 745 &d->i2c_adap); 746 if (adap->fe[0]) 747 break; 748 749 /* attach demod */ 750 adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config, 751 &d->i2c_adap); 752 753 break; 754 case ANYSEE_HW_507CD: /* 6 */ 755 /* E30 Plus */ 756 757 /* enable DVB-T demod on IOD[0] */ 758 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); 759 if (ret) 760 goto error; 761 762 /* enable transport stream on IOA[7] */ 763 ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80); 764 if (ret) 765 goto error; 766 767 /* attach demod */ 768 adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config, 769 &d->i2c_adap); 770 771 break; 772 case ANYSEE_HW_507DC: /* 10 */ 773 /* E30 C Plus */ 774 775 /* enable DVB-C demod on IOD[0] */ 776 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); 777 if (ret) 778 goto error; 779 780 /* attach demod */ 781 adap->fe[0] = dvb_attach(tda10023_attach, 782 &anysee_tda10023_config, &d->i2c_adap, 0x48); 783 784 break; 785 case ANYSEE_HW_507SI: /* 11 */ 786 /* E30 S2 Plus */ 787 788 /* enable DVB-S/S2 demod on IOD[0] */ 789 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); 790 if (ret) 791 goto error; 792 793 /* attach demod */ 794 adap->fe[0] = dvb_attach(cx24116_attach, &anysee_cx24116_config, 795 &d->i2c_adap); 796 797 break; 798 case ANYSEE_HW_507FA: /* 15 */ 799 /* E30 Combo Plus */ 800 /* E30 C Plus */ 801 802 /* enable tuner on IOE[4] */ 803 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 4), 0x10); 804 if (ret) 805 goto error; 806 807 /* probe TDA18212 */ 808 tmp = 0; 809 ret = i2c_transfer(&d->i2c_adap, msg, 2); 810 if (ret == 2 && tmp == 0xc7) { 811 dev_dbg(&d->udev->dev, "%s: TDA18212 found\n", 812 __func__); 813 state->has_tda18212 = true; 814 } 815 else 816 tmp = 0; 817 818 /* disable tuner on IOE[4] */ 819 ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 4), 0x10); 820 if (ret) 821 goto error; 822 823 /* disable DVB-T demod on IOD[0] */ 824 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 0), 0x01); 825 if (ret) 826 goto error; 827 828 /* enable DVB-C demod on IOD[5] */ 829 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); 830 if (ret) 831 goto error; 832 833 /* attach demod */ 834 if (tmp == 0xc7) { 835 /* TDA18212 config */ 836 adap->fe[0] = dvb_attach(tda10023_attach, 837 &anysee_tda10023_tda18212_config, 838 &d->i2c_adap, 0x48); 839 840 /* I2C gate for DNOD44CDH086A(TDA18212) tuner module */ 841 if (adap->fe[0]) 842 adap->fe[0]->ops.i2c_gate_ctrl = 843 anysee_i2c_gate_ctrl; 844 } else { 845 /* PLL config */ 846 adap->fe[0] = dvb_attach(tda10023_attach, 847 &anysee_tda10023_config, 848 &d->i2c_adap, 0x48); 849 } 850 851 /* break out if first frontend attaching fails */ 852 if (!adap->fe[0]) 853 break; 854 855 /* disable DVB-C demod on IOD[5] */ 856 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); 857 if (ret) 858 goto error; 859 860 /* enable DVB-T demod on IOD[0] */ 861 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); 862 if (ret) 863 goto error; 864 865 /* attach demod */ 866 if (tmp == 0xc7) { 867 /* TDA18212 config */ 868 adap->fe[1] = dvb_attach(zl10353_attach, 869 &anysee_zl10353_tda18212_config2, 870 &d->i2c_adap); 871 872 /* I2C gate for DNOD44CDH086A(TDA18212) tuner module */ 873 if (adap->fe[1]) 874 adap->fe[1]->ops.i2c_gate_ctrl = 875 anysee_i2c_gate_ctrl; 876 } else { 877 /* PLL config */ 878 adap->fe[1] = dvb_attach(zl10353_attach, 879 &anysee_zl10353_config, 880 &d->i2c_adap); 881 } 882 883 break; 884 case ANYSEE_HW_508TC: /* 18 */ 885 case ANYSEE_HW_508PTC: /* 21 */ 886 /* E7 TC */ 887 /* E7 PTC */ 888 889 /* disable DVB-T demod on IOD[6] */ 890 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 6), 0x40); 891 if (ret) 892 goto error; 893 894 /* enable DVB-C demod on IOD[5] */ 895 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); 896 if (ret) 897 goto error; 898 899 /* attach demod */ 900 adap->fe[0] = dvb_attach(tda10023_attach, 901 &anysee_tda10023_tda18212_config, 902 &d->i2c_adap, 0x48); 903 904 /* I2C gate for DNOD44CDH086A(TDA18212) tuner module */ 905 if (adap->fe[0]) 906 adap->fe[0]->ops.i2c_gate_ctrl = anysee_i2c_gate_ctrl; 907 908 /* break out if first frontend attaching fails */ 909 if (!adap->fe[0]) 910 break; 911 912 /* disable DVB-C demod on IOD[5] */ 913 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); 914 if (ret) 915 goto error; 916 917 /* enable DVB-T demod on IOD[6] */ 918 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 6), 0x40); 919 if (ret) 920 goto error; 921 922 /* attach demod */ 923 adap->fe[1] = dvb_attach(zl10353_attach, 924 &anysee_zl10353_tda18212_config, 925 &d->i2c_adap); 926 927 /* I2C gate for DNOD44CDH086A(TDA18212) tuner module */ 928 if (adap->fe[1]) 929 adap->fe[1]->ops.i2c_gate_ctrl = anysee_i2c_gate_ctrl; 930 931 state->has_ci = true; 932 933 break; 934 case ANYSEE_HW_508S2: /* 19 */ 935 case ANYSEE_HW_508PS2: /* 22 */ 936 /* E7 S2 */ 937 /* E7 PS2 */ 938 939 /* enable DVB-S/S2 demod on IOE[5] */ 940 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 5), 0x20); 941 if (ret) 942 goto error; 943 944 /* attach demod */ 945 adap->fe[0] = dvb_attach(stv0900_attach, 946 &anysee_stv0900_config, &d->i2c_adap, 0); 947 948 state->has_ci = true; 949 950 break; 951 case ANYSEE_HW_508T2C: /* 20 */ 952 /* E7 T2C */ 953 954 /* enable DVB-T/T2/C demod on IOE[5] */ 955 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 5), 0x20); 956 if (ret) 957 goto error; 958 959 /* attach demod */ 960 adap->fe[0] = dvb_attach(cxd2820r_attach, 961 &anysee_cxd2820r_config, &d->i2c_adap, NULL); 962 963 state->has_ci = true; 964 965 break; 966 } 967 968 if (!adap->fe[0]) { 969 /* we have no frontend :-( */ 970 ret = -ENODEV; 971 dev_err(&d->udev->dev, 972 "%s: Unsupported Anysee version. Please report to <linux-media@vger.kernel.org>.\n", 973 KBUILD_MODNAME); 974 } 975 error: 976 return ret; 977 } 978 979 static int anysee_tuner_attach(struct dvb_usb_adapter *adap) 980 { 981 struct anysee_state *state = adap_to_priv(adap); 982 struct dvb_usb_device *d = adap_to_d(adap); 983 struct dvb_frontend *fe; 984 int ret; 985 dev_dbg(&d->udev->dev, "%s:\n", __func__); 986 987 switch (state->hw) { 988 case ANYSEE_HW_507T: /* 2 */ 989 /* E30 */ 990 991 /* attach tuner */ 992 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1), NULL, 993 DVB_PLL_THOMSON_DTT7579); 994 995 break; 996 case ANYSEE_HW_507CD: /* 6 */ 997 /* E30 Plus */ 998 999 /* attach tuner */ 1000 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1), 1001 &d->i2c_adap, DVB_PLL_THOMSON_DTT7579); 1002 1003 break; 1004 case ANYSEE_HW_507DC: /* 10 */ 1005 /* E30 C Plus */ 1006 1007 /* attach tuner */ 1008 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1), 1009 &d->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A); 1010 1011 break; 1012 case ANYSEE_HW_507SI: /* 11 */ 1013 /* E30 S2 Plus */ 1014 1015 /* attach LNB controller */ 1016 fe = dvb_attach(isl6423_attach, adap->fe[0], &d->i2c_adap, 1017 &anysee_isl6423_config); 1018 1019 break; 1020 case ANYSEE_HW_507FA: /* 15 */ 1021 /* E30 Combo Plus */ 1022 /* E30 C Plus */ 1023 1024 /* Try first attach TDA18212 silicon tuner on IOE[4], if that 1025 * fails attach old simple PLL. */ 1026 1027 /* attach tuner */ 1028 if (state->has_tda18212) { 1029 struct tda18212_config tda18212_config = 1030 anysee_tda18212_config; 1031 1032 tda18212_config.fe = adap->fe[0]; 1033 ret = anysee_add_i2c_dev(d, "tda18212", 0x60, 1034 &tda18212_config); 1035 if (ret) 1036 goto err; 1037 1038 /* copy tuner ops for 2nd FE as tuner is shared */ 1039 if (adap->fe[1]) { 1040 adap->fe[1]->tuner_priv = 1041 adap->fe[0]->tuner_priv; 1042 memcpy(&adap->fe[1]->ops.tuner_ops, 1043 &adap->fe[0]->ops.tuner_ops, 1044 sizeof(struct dvb_tuner_ops)); 1045 } 1046 1047 return 0; 1048 } else { 1049 /* attach tuner */ 1050 fe = dvb_attach(dvb_pll_attach, adap->fe[0], 1051 (0xc0 >> 1), &d->i2c_adap, 1052 DVB_PLL_SAMSUNG_DTOS403IH102A); 1053 1054 if (fe && adap->fe[1]) { 1055 /* attach tuner for 2nd FE */ 1056 fe = dvb_attach(dvb_pll_attach, adap->fe[1], 1057 (0xc0 >> 1), &d->i2c_adap, 1058 DVB_PLL_SAMSUNG_DTOS403IH102A); 1059 } 1060 } 1061 1062 break; 1063 case ANYSEE_HW_508TC: /* 18 */ 1064 case ANYSEE_HW_508PTC: /* 21 */ 1065 { 1066 /* E7 TC */ 1067 /* E7 PTC */ 1068 struct tda18212_config tda18212_config = anysee_tda18212_config; 1069 1070 tda18212_config.fe = adap->fe[0]; 1071 ret = anysee_add_i2c_dev(d, "tda18212", 0x60, &tda18212_config); 1072 if (ret) 1073 goto err; 1074 1075 /* copy tuner ops for 2nd FE as tuner is shared */ 1076 if (adap->fe[1]) { 1077 adap->fe[1]->tuner_priv = adap->fe[0]->tuner_priv; 1078 memcpy(&adap->fe[1]->ops.tuner_ops, 1079 &adap->fe[0]->ops.tuner_ops, 1080 sizeof(struct dvb_tuner_ops)); 1081 } 1082 1083 return 0; 1084 } 1085 case ANYSEE_HW_508S2: /* 19 */ 1086 case ANYSEE_HW_508PS2: /* 22 */ 1087 /* E7 S2 */ 1088 /* E7 PS2 */ 1089 1090 /* attach tuner */ 1091 fe = dvb_attach(stv6110_attach, adap->fe[0], 1092 &anysee_stv6110_config, &d->i2c_adap); 1093 1094 if (fe) { 1095 /* attach LNB controller */ 1096 fe = dvb_attach(isl6423_attach, adap->fe[0], 1097 &d->i2c_adap, &anysee_isl6423_config); 1098 } 1099 1100 break; 1101 1102 case ANYSEE_HW_508T2C: /* 20 */ 1103 { 1104 /* E7 T2C */ 1105 struct tda18212_config tda18212_config = 1106 anysee_tda18212_config2; 1107 1108 tda18212_config.fe = adap->fe[0]; 1109 ret = anysee_add_i2c_dev(d, "tda18212", 0x60, &tda18212_config); 1110 if (ret) 1111 goto err; 1112 1113 return 0; 1114 } 1115 default: 1116 fe = NULL; 1117 } 1118 1119 if (fe) 1120 ret = 0; 1121 else 1122 ret = -ENODEV; 1123 err: 1124 return ret; 1125 } 1126 1127 #if IS_ENABLED(CONFIG_RC_CORE) 1128 static int anysee_rc_query(struct dvb_usb_device *d) 1129 { 1130 u8 buf[] = {CMD_GET_IR_CODE}; 1131 u8 ircode[2]; 1132 int ret; 1133 1134 /* Remote controller is basic NEC using address byte 0x08. 1135 Anysee device RC query returns only two bytes, status and code, 1136 address byte is dropped. Also it does not return any value for 1137 NEC RCs having address byte other than 0x08. Due to that, we 1138 cannot use that device as standard NEC receiver. 1139 It could be possible make hack which reads whole code directly 1140 from device memory... */ 1141 1142 ret = anysee_ctrl_msg(d, buf, sizeof(buf), ircode, sizeof(ircode)); 1143 if (ret) 1144 return ret; 1145 1146 if (ircode[0]) { 1147 dev_dbg(&d->udev->dev, "%s: key pressed %02x\n", __func__, 1148 ircode[1]); 1149 rc_keydown(d->rc_dev, RC_TYPE_NEC, 1150 RC_SCANCODE_NEC(0x08, ircode[1]), 0); 1151 } 1152 1153 return 0; 1154 } 1155 1156 static int anysee_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc) 1157 { 1158 rc->allowed_protos = RC_BIT_NEC; 1159 rc->query = anysee_rc_query; 1160 rc->interval = 250; /* windows driver uses 500ms */ 1161 1162 return 0; 1163 } 1164 #else 1165 #define anysee_get_rc_config NULL 1166 #endif 1167 1168 static int anysee_ci_read_attribute_mem(struct dvb_ca_en50221 *ci, int slot, 1169 int addr) 1170 { 1171 struct dvb_usb_device *d = ci->data; 1172 int ret; 1173 u8 buf[] = {CMD_CI, 0x02, 0x40 | addr >> 8, addr & 0xff, 0x00, 1}; 1174 u8 val; 1175 1176 ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1); 1177 if (ret) 1178 return ret; 1179 1180 return val; 1181 } 1182 1183 static int anysee_ci_write_attribute_mem(struct dvb_ca_en50221 *ci, int slot, 1184 int addr, u8 val) 1185 { 1186 struct dvb_usb_device *d = ci->data; 1187 int ret; 1188 u8 buf[] = {CMD_CI, 0x03, 0x40 | addr >> 8, addr & 0xff, 0x00, 1, val}; 1189 1190 ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); 1191 if (ret) 1192 return ret; 1193 1194 return 0; 1195 } 1196 1197 static int anysee_ci_read_cam_control(struct dvb_ca_en50221 *ci, int slot, 1198 u8 addr) 1199 { 1200 struct dvb_usb_device *d = ci->data; 1201 int ret; 1202 u8 buf[] = {CMD_CI, 0x04, 0x40, addr, 0x00, 1}; 1203 u8 val; 1204 1205 ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1); 1206 if (ret) 1207 return ret; 1208 1209 return val; 1210 } 1211 1212 static int anysee_ci_write_cam_control(struct dvb_ca_en50221 *ci, int slot, 1213 u8 addr, u8 val) 1214 { 1215 struct dvb_usb_device *d = ci->data; 1216 int ret; 1217 u8 buf[] = {CMD_CI, 0x05, 0x40, addr, 0x00, 1, val}; 1218 1219 ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); 1220 if (ret) 1221 return ret; 1222 1223 return 0; 1224 } 1225 1226 static int anysee_ci_slot_reset(struct dvb_ca_en50221 *ci, int slot) 1227 { 1228 struct dvb_usb_device *d = ci->data; 1229 int ret; 1230 struct anysee_state *state = d_to_priv(d); 1231 1232 state->ci_cam_ready = jiffies + msecs_to_jiffies(1000); 1233 1234 ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80); 1235 if (ret) 1236 return ret; 1237 1238 msleep(300); 1239 1240 ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80); 1241 if (ret) 1242 return ret; 1243 1244 return 0; 1245 } 1246 1247 static int anysee_ci_slot_shutdown(struct dvb_ca_en50221 *ci, int slot) 1248 { 1249 struct dvb_usb_device *d = ci->data; 1250 int ret; 1251 1252 ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80); 1253 if (ret) 1254 return ret; 1255 1256 msleep(30); 1257 1258 ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80); 1259 if (ret) 1260 return ret; 1261 1262 return 0; 1263 } 1264 1265 static int anysee_ci_slot_ts_enable(struct dvb_ca_en50221 *ci, int slot) 1266 { 1267 struct dvb_usb_device *d = ci->data; 1268 int ret; 1269 1270 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 1), 0x02); 1271 if (ret) 1272 return ret; 1273 1274 return 0; 1275 } 1276 1277 static int anysee_ci_poll_slot_status(struct dvb_ca_en50221 *ci, int slot, 1278 int open) 1279 { 1280 struct dvb_usb_device *d = ci->data; 1281 struct anysee_state *state = d_to_priv(d); 1282 int ret; 1283 u8 tmp = 0; 1284 1285 ret = anysee_rd_reg_mask(d, REG_IOC, &tmp, 0x40); 1286 if (ret) 1287 return ret; 1288 1289 if (tmp == 0) { 1290 ret = DVB_CA_EN50221_POLL_CAM_PRESENT; 1291 if (time_after(jiffies, state->ci_cam_ready)) 1292 ret |= DVB_CA_EN50221_POLL_CAM_READY; 1293 } 1294 1295 return ret; 1296 } 1297 1298 static int anysee_ci_init(struct dvb_usb_device *d) 1299 { 1300 struct anysee_state *state = d_to_priv(d); 1301 int ret; 1302 1303 state->ci.owner = THIS_MODULE; 1304 state->ci.read_attribute_mem = anysee_ci_read_attribute_mem; 1305 state->ci.write_attribute_mem = anysee_ci_write_attribute_mem; 1306 state->ci.read_cam_control = anysee_ci_read_cam_control; 1307 state->ci.write_cam_control = anysee_ci_write_cam_control; 1308 state->ci.slot_reset = anysee_ci_slot_reset; 1309 state->ci.slot_shutdown = anysee_ci_slot_shutdown; 1310 state->ci.slot_ts_enable = anysee_ci_slot_ts_enable; 1311 state->ci.poll_slot_status = anysee_ci_poll_slot_status; 1312 state->ci.data = d; 1313 1314 ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80); 1315 if (ret) 1316 return ret; 1317 1318 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 2)|(0 << 1)|(0 << 0), 0x07); 1319 if (ret) 1320 return ret; 1321 1322 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 2)|(1 << 1)|(1 << 0), 0x07); 1323 if (ret) 1324 return ret; 1325 1326 ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1); 1327 if (ret) 1328 return ret; 1329 1330 state->ci_attached = true; 1331 1332 return 0; 1333 } 1334 1335 static void anysee_ci_release(struct dvb_usb_device *d) 1336 { 1337 struct anysee_state *state = d_to_priv(d); 1338 1339 /* detach CI */ 1340 if (state->ci_attached) 1341 dvb_ca_en50221_release(&state->ci); 1342 1343 return; 1344 } 1345 1346 static int anysee_init(struct dvb_usb_device *d) 1347 { 1348 struct anysee_state *state = d_to_priv(d); 1349 int ret; 1350 1351 /* There is one interface with two alternate settings. 1352 Alternate setting 0 is for bulk transfer. 1353 Alternate setting 1 is for isochronous transfer. 1354 We use bulk transfer (alternate setting 0). */ 1355 ret = usb_set_interface(d->udev, 0, 0); 1356 if (ret) 1357 return ret; 1358 1359 /* LED light */ 1360 ret = anysee_led_ctrl(d, 0x01, 0x03); 1361 if (ret) 1362 return ret; 1363 1364 /* enable IR */ 1365 ret = anysee_ir_ctrl(d, 1); 1366 if (ret) 1367 return ret; 1368 1369 /* attach CI */ 1370 if (state->has_ci) { 1371 ret = anysee_ci_init(d); 1372 if (ret) 1373 return ret; 1374 } 1375 1376 return 0; 1377 } 1378 1379 static void anysee_exit(struct dvb_usb_device *d) 1380 { 1381 struct anysee_state *state = d_to_priv(d); 1382 1383 if (state->i2c_client[0]) 1384 anysee_del_i2c_dev(d); 1385 1386 return anysee_ci_release(d); 1387 } 1388 1389 /* DVB USB Driver stuff */ 1390 static struct dvb_usb_device_properties anysee_props = { 1391 .driver_name = KBUILD_MODNAME, 1392 .owner = THIS_MODULE, 1393 .adapter_nr = adapter_nr, 1394 .size_of_priv = sizeof(struct anysee_state), 1395 1396 .generic_bulk_ctrl_endpoint = 0x01, 1397 .generic_bulk_ctrl_endpoint_response = 0x81, 1398 1399 .i2c_algo = &anysee_i2c_algo, 1400 .read_config = anysee_read_config, 1401 .frontend_attach = anysee_frontend_attach, 1402 .tuner_attach = anysee_tuner_attach, 1403 .init = anysee_init, 1404 .get_rc_config = anysee_get_rc_config, 1405 .frontend_ctrl = anysee_frontend_ctrl, 1406 .streaming_ctrl = anysee_streaming_ctrl, 1407 .exit = anysee_exit, 1408 1409 .num_adapters = 1, 1410 .adapter = { 1411 { 1412 .stream = DVB_USB_STREAM_BULK(0x82, 8, 16 * 512), 1413 } 1414 } 1415 }; 1416 1417 static const struct usb_device_id anysee_id_table[] = { 1418 { DVB_USB_DEVICE(USB_VID_CYPRESS, USB_PID_ANYSEE, 1419 &anysee_props, "Anysee", RC_MAP_ANYSEE) }, 1420 { DVB_USB_DEVICE(USB_VID_AMT, USB_PID_ANYSEE, 1421 &anysee_props, "Anysee", RC_MAP_ANYSEE) }, 1422 { } 1423 }; 1424 MODULE_DEVICE_TABLE(usb, anysee_id_table); 1425 1426 static struct usb_driver anysee_usb_driver = { 1427 .name = KBUILD_MODNAME, 1428 .id_table = anysee_id_table, 1429 .probe = dvb_usbv2_probe, 1430 .disconnect = dvb_usbv2_disconnect, 1431 .suspend = dvb_usbv2_suspend, 1432 .resume = dvb_usbv2_resume, 1433 .reset_resume = dvb_usbv2_reset_resume, 1434 .no_dynamic_id = 1, 1435 .soft_unbind = 1, 1436 }; 1437 1438 module_usb_driver(anysee_usb_driver); 1439 1440 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); 1441 MODULE_DESCRIPTION("Driver Anysee E30 DVB-C & DVB-T USB2.0"); 1442 MODULE_LICENSE("GPL"); 1443