1 /* 2 * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver 3 * 4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5 * 6 * Thanks to Afatech who kindly provided information. 7 * 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. 12 * 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. 17 * 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. 21 * 22 */ 23 24 #include "af9015.h" 25 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); 30 31 static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req) 32 { 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); 36 int ret, wlen, rlen; 37 u8 write = 1; 38 39 mutex_lock(&d->usb_mutex); 40 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; 49 50 switch (req->cmd) { 51 case GET_CONFIG: 52 case READ_MEMORY: 53 case RECONNECT_USB: 54 write = 0; 55 break; 56 case READ_I2C: 57 write = 0; 58 state->buf[2] |= 0x01; /* set I2C direction */ 59 case WRITE_I2C: 60 state->buf[0] = READ_WRITE_I2C; 61 break; 62 case WRITE_MEMORY: 63 if (((req->addr & 0xff00) == 0xff00) || 64 ((req->addr & 0xff00) == 0xae00)) 65 state->buf[0] = WRITE_VIRTUAL_MEMORY; 66 case WRITE_VIRTUAL_MEMORY: 67 case COPY_FIRMWARE: 68 case DOWNLOAD_FIRMWARE: 69 case BOOT: 70 break; 71 default: 72 dev_err(&d->udev->dev, "%s: unknown command=%d\n", 73 KBUILD_MODNAME, req->cmd); 74 ret = -EIO; 75 goto error; 76 } 77 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); 83 ret = -EINVAL; 84 goto error; 85 } 86 87 /* write receives seq + status = 2 bytes 88 read receives seq + status + data = 2 + N bytes */ 89 wlen = REQ_HDR_LEN; 90 rlen = ACK_HDR_LEN; 91 if (write) { 92 wlen += req->data_len; 93 memcpy(&state->buf[REQ_HDR_LEN], req->data, req->data_len); 94 } else { 95 rlen += req->data_len; 96 } 97 98 /* no ack for these packets */ 99 if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB) 100 rlen = 0; 101 102 ret = dvb_usbv2_generic_rw_locked(d, 103 state->buf, wlen, state->buf, rlen); 104 if (ret) 105 goto error; 106 107 /* check status */ 108 if (rlen && state->buf[1]) { 109 dev_err(&d->udev->dev, "%s: command failed=%d\n", 110 KBUILD_MODNAME, state->buf[1]); 111 ret = -EIO; 112 goto error; 113 } 114 115 /* read request, copy returned data to return buf */ 116 if (!write) 117 memcpy(req->data, &state->buf[ACK_HDR_LEN], req->data_len); 118 error: 119 mutex_unlock(&d->usb_mutex); 120 121 return ret; 122 } 123 124 static int af9015_write_regs(struct dvb_usb_device *d, u16 addr, u8 *val, 125 u8 len) 126 { 127 struct req_t req = {WRITE_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len, 128 val}; 129 return af9015_ctrl_msg(d, &req); 130 } 131 132 static int af9015_read_regs(struct dvb_usb_device *d, u16 addr, u8 *val, u8 len) 133 { 134 struct req_t req = {READ_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len, 135 val}; 136 return af9015_ctrl_msg(d, &req); 137 } 138 139 static int af9015_write_reg(struct dvb_usb_device *d, u16 addr, u8 val) 140 { 141 return af9015_write_regs(d, addr, &val, 1); 142 } 143 144 static int af9015_read_reg(struct dvb_usb_device *d, u16 addr, u8 *val) 145 { 146 return af9015_read_regs(d, addr, val, 1); 147 } 148 149 static int af9015_write_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg, 150 u8 val) 151 { 152 struct af9015_state *state = d_to_priv(d); 153 struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val}; 154 155 if (addr == state->af9013_config[0].i2c_addr || 156 addr == state->af9013_config[1].i2c_addr) 157 req.addr_len = 3; 158 159 return af9015_ctrl_msg(d, &req); 160 } 161 162 static int af9015_read_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg, 163 u8 *val) 164 { 165 struct af9015_state *state = d_to_priv(d); 166 struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val}; 167 168 if (addr == state->af9013_config[0].i2c_addr || 169 addr == state->af9013_config[1].i2c_addr) 170 req.addr_len = 3; 171 172 return af9015_ctrl_msg(d, &req); 173 } 174 175 static int af9015_do_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit, u8 op) 176 { 177 int ret; 178 u8 val, mask = 0x01; 179 180 ret = af9015_read_reg(d, addr, &val); 181 if (ret) 182 return ret; 183 184 mask <<= bit; 185 if (op) { 186 /* set bit */ 187 val |= mask; 188 } else { 189 /* clear bit */ 190 mask ^= 0xff; 191 val &= mask; 192 } 193 194 return af9015_write_reg(d, addr, val); 195 } 196 197 static int af9015_set_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit) 198 { 199 return af9015_do_reg_bit(d, addr, bit, 1); 200 } 201 202 static int af9015_clear_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit) 203 { 204 return af9015_do_reg_bit(d, addr, bit, 0); 205 } 206 207 static int af9015_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], 208 int num) 209 { 210 struct dvb_usb_device *d = i2c_get_adapdata(adap); 211 struct af9015_state *state = d_to_priv(d); 212 int ret = 0, i = 0; 213 u16 addr; 214 u8 uninitialized_var(mbox), addr_len; 215 struct req_t req; 216 217 /* 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. 220 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 |____________| |____________| 238 */ 239 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) 240 return -EAGAIN; 241 242 while (i < num) { 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]; 248 addr_len = 3; 249 } else { 250 addr = msg[i].buf[0]; 251 addr_len = 1; 252 /* mbox is don't care in that case */ 253 } 254 255 if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) { 256 if (msg[i].len > 3 || msg[i+1].len > 61) { 257 ret = -EOPNOTSUPP; 258 goto error; 259 } 260 if (msg[i].addr == state->af9013_config[0].i2c_addr) 261 req.cmd = READ_MEMORY; 262 else 263 req.cmd = READ_I2C; 264 req.i2c_addr = msg[i].addr; 265 req.addr = addr; 266 req.mbox = mbox; 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); 271 i += 2; 272 } else if (msg[i].flags & I2C_M_RD) { 273 if (msg[i].len > 61) { 274 ret = -EOPNOTSUPP; 275 goto error; 276 } 277 if (msg[i].addr == state->af9013_config[0].i2c_addr) { 278 ret = -EINVAL; 279 goto error; 280 } 281 req.cmd = READ_I2C; 282 req.i2c_addr = msg[i].addr; 283 req.addr = addr; 284 req.mbox = mbox; 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); 289 i += 1; 290 } else { 291 if (msg[i].len > 21) { 292 ret = -EOPNOTSUPP; 293 goto error; 294 } 295 if (msg[i].addr == state->af9013_config[0].i2c_addr) 296 req.cmd = WRITE_MEMORY; 297 else 298 req.cmd = WRITE_I2C; 299 req.i2c_addr = msg[i].addr; 300 req.addr = addr; 301 req.mbox = mbox; 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); 306 i += 1; 307 } 308 if (ret) 309 goto error; 310 311 } 312 ret = i; 313 314 error: 315 mutex_unlock(&d->i2c_mutex); 316 317 return ret; 318 } 319 320 static u32 af9015_i2c_func(struct i2c_adapter *adapter) 321 { 322 return I2C_FUNC_I2C; 323 } 324 325 static struct i2c_algorithm af9015_i2c_algo = { 326 .master_xfer = af9015_i2c_xfer, 327 .functionality = af9015_i2c_func, 328 }; 329 330 static int af9015_identify_state(struct dvb_usb_device *d, const char **name) 331 { 332 int ret; 333 u8 reply; 334 struct req_t req = {GET_CONFIG, 0, 0, 0, 0, 1, &reply}; 335 336 ret = af9015_ctrl_msg(d, &req); 337 if (ret) 338 return ret; 339 340 dev_dbg(&d->udev->dev, "%s: reply=%02x\n", __func__, reply); 341 342 if (reply == 0x02) 343 ret = WARM; 344 else 345 ret = COLD; 346 347 return ret; 348 } 349 350 static int af9015_download_firmware(struct dvb_usb_device *d, 351 const struct firmware *fw) 352 { 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}; 356 u16 checksum = 0; 357 dev_dbg(&d->udev->dev, "%s:\n", __func__); 358 359 /* calc checksum */ 360 for (i = 0; i < fw->size; i++) 361 checksum += fw->data[i]; 362 363 state->firmware_size = fw->size; 364 state->firmware_checksum = checksum; 365 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) { 369 len = remaining; 370 if (len > LEN_MAX) 371 len = LEN_MAX; 372 373 req.data_len = len; 374 req.data = (u8 *) &fw->data[fw->size - remaining]; 375 req.addr = FW_ADDR + fw->size - remaining; 376 377 ret = af9015_ctrl_msg(d, &req); 378 if (ret) { 379 dev_err(&d->udev->dev, 380 "%s: firmware download failed=%d\n", 381 KBUILD_MODNAME, ret); 382 goto error; 383 } 384 } 385 386 /* firmware loaded, request boot */ 387 req.cmd = BOOT; 388 req.data_len = 0; 389 ret = af9015_ctrl_msg(d, &req); 390 if (ret) { 391 dev_err(&d->udev->dev, "%s: firmware boot failed=%d\n", 392 KBUILD_MODNAME, ret); 393 goto error; 394 } 395 396 error: 397 return ret; 398 } 399 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 403 404 /* hash (and dump) eeprom */ 405 static int af9015_eeprom_hash(struct dvb_usb_device *d) 406 { 407 struct af9015_state *state = d_to_priv(d); 408 int ret, i; 409 u8 buf[AF9015_EEPROM_SIZE]; 410 struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, NULL}; 411 412 /* read eeprom */ 413 for (i = 0; i < AF9015_EEPROM_SIZE; i++) { 414 req.addr = i; 415 req.data = &buf[i]; 416 ret = af9015_ctrl_msg(d, &req); 417 if (ret < 0) 418 goto err; 419 } 420 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]); 425 } 426 427 for (i = 0; i < AF9015_EEPROM_SIZE; i += 16) 428 dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 16, buf + i); 429 430 dev_dbg(&d->udev->dev, "%s: eeprom sum=%.8x\n", 431 __func__, state->eeprom_sum); 432 return 0; 433 err: 434 dev_err(&d->udev->dev, "%s: eeprom failed=%d\n", KBUILD_MODNAME, ret); 435 return ret; 436 } 437 438 static int af9015_read_config(struct dvb_usb_device *d) 439 { 440 struct af9015_state *state = d_to_priv(d); 441 int ret; 442 u8 val, i, offset = 0; 443 struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val}; 444 445 dev_dbg(&d->udev->dev, "%s:\n", __func__); 446 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); 452 if (!ret) 453 break; 454 } 455 if (ret) 456 goto error; 457 458 ret = af9015_eeprom_hash(d); 459 if (ret) 460 goto error; 461 462 state->ir_mode = val; 463 dev_dbg(&d->udev->dev, "%s: IR mode=%d\n", __func__, val); 464 465 /* TS mode - one or two receivers */ 466 req.addr = AF9015_EEPROM_TS_MODE; 467 ret = af9015_ctrl_msg(d, &req); 468 if (ret) 469 goto error; 470 471 state->dual_mode = val; 472 dev_dbg(&d->udev->dev, "%s: TS mode=%d\n", __func__, state->dual_mode); 473 474 /* disable 2nd adapter because we don't have PID-filters */ 475 if (d->udev->speed == USB_SPEED_FULL) 476 state->dual_mode = 0; 477 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); 482 if (ret) 483 goto error; 484 485 state->af9013_config[1].i2c_addr = val; 486 } 487 488 for (i = 0; i < state->dual_mode + 1; i++) { 489 if (i == 1) 490 offset = AF9015_EEPROM_OFFSET; 491 /* xtal */ 492 req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset; 493 ret = af9015_ctrl_msg(d, &req); 494 if (ret) 495 goto error; 496 switch (val) { 497 case 0: 498 state->af9013_config[i].clock = 28800000; 499 break; 500 case 1: 501 state->af9013_config[i].clock = 20480000; 502 break; 503 case 2: 504 state->af9013_config[i].clock = 28000000; 505 break; 506 case 3: 507 state->af9013_config[i].clock = 25000000; 508 break; 509 } 510 dev_dbg(&d->udev->dev, "%s: [%d] xtal=%d set clock=%d\n", 511 __func__, i, val, 512 state->af9013_config[i].clock); 513 514 /* IF frequency */ 515 req.addr = AF9015_EEPROM_IF1H + offset; 516 ret = af9015_ctrl_msg(d, &req); 517 if (ret) 518 goto error; 519 520 state->af9013_config[i].if_frequency = val << 8; 521 522 req.addr = AF9015_EEPROM_IF1L + offset; 523 ret = af9015_ctrl_msg(d, &req); 524 if (ret) 525 goto error; 526 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); 531 532 /* MT2060 IF1 */ 533 req.addr = AF9015_EEPROM_MT2060_IF1H + offset; 534 ret = af9015_ctrl_msg(d, &req); 535 if (ret) 536 goto error; 537 state->mt2060_if1[i] = val << 8; 538 req.addr = AF9015_EEPROM_MT2060_IF1L + offset; 539 ret = af9015_ctrl_msg(d, &req); 540 if (ret) 541 goto error; 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]); 545 546 /* tuner */ 547 req.addr = AF9015_EEPROM_TUNER_ID1 + offset; 548 ret = af9015_ctrl_msg(d, &req); 549 if (ret) 550 goto error; 551 switch (val) { 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; 561 break; 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; 567 break; 568 case AF9013_TUNER_MC44S803: 569 state->af9013_config[i].gpio[1] = AF9013_GPIO_LO; 570 state->af9013_config[i].spec_inv = 1; 571 break; 572 default: 573 dev_err(&d->udev->dev, "%s: tuner id=%d not " \ 574 "supported, please report!\n", 575 KBUILD_MODNAME, val); 576 return -ENODEV; 577 } 578 579 state->af9013_config[i].tuner = val; 580 dev_dbg(&d->udev->dev, "%s: [%d] tuner id=%d\n", 581 __func__, i, val); 582 } 583 584 error: 585 if (ret) 586 dev_err(&d->udev->dev, "%s: eeprom read failed=%d\n", 587 KBUILD_MODNAME, ret); 588 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", 599 __func__); 600 /* disable dual mode */ 601 state->dual_mode = 0; 602 603 /* set correct IF */ 604 state->af9013_config[0].if_frequency = 4570000; 605 } 606 607 return ret; 608 } 609 610 static int af9015_get_stream_config(struct dvb_frontend *fe, u8 *ts_type, 611 struct usb_data_stream_properties *stream) 612 { 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); 615 616 if (d->udev->speed == USB_SPEED_FULL) 617 stream->u.bulk.buffersize = TS_USB11_FRAME_SIZE; 618 619 return 0; 620 } 621 622 static int af9015_get_adapter_count(struct dvb_usb_device *d) 623 { 624 struct af9015_state *state = d_to_priv(d); 625 return state->dual_mode + 1; 626 } 627 628 /* override demod callbacks for resource locking */ 629 static int af9015_af9013_set_frontend(struct dvb_frontend *fe) 630 { 631 int ret; 632 struct af9015_state *state = fe_to_priv(fe); 633 634 if (mutex_lock_interruptible(&state->fe_mutex)) 635 return -EAGAIN; 636 637 ret = state->set_frontend[fe_to_adap(fe)->id](fe); 638 639 mutex_unlock(&state->fe_mutex); 640 641 return ret; 642 } 643 644 /* override demod callbacks for resource locking */ 645 static int af9015_af9013_read_status(struct dvb_frontend *fe, 646 enum fe_status *status) 647 { 648 int ret; 649 struct af9015_state *state = fe_to_priv(fe); 650 651 if (mutex_lock_interruptible(&state->fe_mutex)) 652 return -EAGAIN; 653 654 ret = state->read_status[fe_to_adap(fe)->id](fe, status); 655 656 mutex_unlock(&state->fe_mutex); 657 658 return ret; 659 } 660 661 /* override demod callbacks for resource locking */ 662 static int af9015_af9013_init(struct dvb_frontend *fe) 663 { 664 int ret; 665 struct af9015_state *state = fe_to_priv(fe); 666 667 if (mutex_lock_interruptible(&state->fe_mutex)) 668 return -EAGAIN; 669 670 ret = state->init[fe_to_adap(fe)->id](fe); 671 672 mutex_unlock(&state->fe_mutex); 673 674 return ret; 675 } 676 677 /* override demod callbacks for resource locking */ 678 static int af9015_af9013_sleep(struct dvb_frontend *fe) 679 { 680 int ret; 681 struct af9015_state *state = fe_to_priv(fe); 682 683 if (mutex_lock_interruptible(&state->fe_mutex)) 684 return -EAGAIN; 685 686 ret = state->sleep[fe_to_adap(fe)->id](fe); 687 688 mutex_unlock(&state->fe_mutex); 689 690 return ret; 691 } 692 693 /* override tuner callbacks for resource locking */ 694 static int af9015_tuner_init(struct dvb_frontend *fe) 695 { 696 int ret; 697 struct af9015_state *state = fe_to_priv(fe); 698 699 if (mutex_lock_interruptible(&state->fe_mutex)) 700 return -EAGAIN; 701 702 ret = state->tuner_init[fe_to_adap(fe)->id](fe); 703 704 mutex_unlock(&state->fe_mutex); 705 706 return ret; 707 } 708 709 /* override tuner callbacks for resource locking */ 710 static int af9015_tuner_sleep(struct dvb_frontend *fe) 711 { 712 int ret; 713 struct af9015_state *state = fe_to_priv(fe); 714 715 if (mutex_lock_interruptible(&state->fe_mutex)) 716 return -EAGAIN; 717 718 ret = state->tuner_sleep[fe_to_adap(fe)->id](fe); 719 720 mutex_unlock(&state->fe_mutex); 721 722 return ret; 723 } 724 725 static int af9015_copy_firmware(struct dvb_usb_device *d) 726 { 727 struct af9015_state *state = d_to_priv(d); 728 int ret; 729 u8 fw_params[4]; 730 u8 val, i; 731 struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, sizeof(fw_params), 732 fw_params }; 733 dev_dbg(&d->udev->dev, "%s:\n", __func__); 734 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; 739 740 /* wait 2nd demodulator ready */ 741 msleep(100); 742 743 ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr, 744 0x98be, &val); 745 if (ret) 746 goto error; 747 else 748 dev_dbg(&d->udev->dev, "%s: firmware status=%02x\n", 749 __func__, val); 750 751 if (val == 0x0c) /* fw is running, no need for download */ 752 goto exit; 753 754 /* set I2C master clock to fast (to speed up firmware copy) */ 755 ret = af9015_write_reg(d, 0xd416, 0x04); /* 0x04 * 400ns */ 756 if (ret) 757 goto error; 758 759 msleep(50); 760 761 /* copy firmware */ 762 ret = af9015_ctrl_msg(d, &req); 763 if (ret) 764 dev_err(&d->udev->dev, "%s: firmware copy cmd failed=%d\n", 765 KBUILD_MODNAME, ret); 766 767 dev_dbg(&d->udev->dev, "%s: firmware copy done\n", __func__); 768 769 /* set I2C master clock back to normal */ 770 ret = af9015_write_reg(d, 0xd416, 0x14); /* 0x14 * 400ns */ 771 if (ret) 772 goto error; 773 774 /* request boot firmware */ 775 ret = af9015_write_reg_i2c(d, state->af9013_config[1].i2c_addr, 776 0xe205, 1); 777 dev_dbg(&d->udev->dev, "%s: firmware boot cmd status=%d\n", 778 __func__, ret); 779 if (ret) 780 goto error; 781 782 for (i = 0; i < 15; i++) { 783 msleep(100); 784 785 /* check firmware status */ 786 ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr, 787 0x98be, &val); 788 dev_dbg(&d->udev->dev, "%s: firmware status cmd status=%d " \ 789 "firmware status=%02x\n", __func__, ret, val); 790 if (ret) 791 goto error; 792 793 if (val == 0x0c || val == 0x04) /* success or fail */ 794 break; 795 } 796 797 if (val == 0x04) { 798 dev_err(&d->udev->dev, "%s: firmware did not run\n", 799 KBUILD_MODNAME); 800 ret = -ETIMEDOUT; 801 } else if (val != 0x0c) { 802 dev_err(&d->udev->dev, "%s: firmware boot timeout\n", 803 KBUILD_MODNAME); 804 ret = -ETIMEDOUT; 805 } 806 807 error: 808 exit: 809 return ret; 810 } 811 812 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap) 813 { 814 int ret; 815 struct af9015_state *state = adap_to_priv(adap); 816 817 if (adap->id == 0) { 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; 827 828 /* copy firmware to 2nd demodulator */ 829 if (state->dual_mode) { 830 ret = af9015_copy_firmware(adap_to_d(adap)); 831 if (ret) { 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; 837 return -ENODEV; 838 } 839 } else { 840 return -ENODEV; 841 } 842 } 843 844 /* attach demodulator */ 845 adap->fe[0] = dvb_attach(af9013_attach, 846 &state->af9013_config[adap->id], &adap_to_d(adap)->i2c_adap); 847 848 /* 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. 854 */ 855 if (adap->fe[0]) { 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; 860 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; 865 866 state->init[adap->id] = adap->fe[0]->ops.init; 867 adap->fe[0]->ops.init = af9015_af9013_init; 868 869 state->sleep[adap->id] = adap->fe[0]->ops.sleep; 870 adap->fe[0]->ops.sleep = af9015_af9013_sleep; 871 } 872 873 return adap->fe[0] == NULL ? -ENODEV : 0; 874 } 875 876 static struct mt2060_config af9015_mt2060_config = { 877 .i2c_address = 0xc0, 878 .clock_out = 0, 879 }; 880 881 static struct qt1010_config af9015_qt1010_config = { 882 .i2c_address = 0xc4, 883 }; 884 885 static struct tda18271_config af9015_tda18271_config = { 886 .gate = TDA18271_GATE_DIGITAL, 887 .small_i2c = TDA18271_16_BYTE_CHUNK_INIT, 888 }; 889 890 static struct mxl5005s_config af9015_mxl5003_config = { 891 .i2c_address = 0xc6, 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, 905 }; 906 907 static struct mxl5005s_config af9015_mxl5005_config = { 908 .i2c_address = 0xc6, 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, 922 }; 923 924 static struct mc44s803_config af9015_mc44s803_config = { 925 .i2c_address = 0xc0, 926 .dig_out = 1, 927 }; 928 929 static struct tda18218_config af9015_tda18218_config = { 930 .i2c_address = 0xc0, 931 .i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */ 932 }; 933 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, 937 }; 938 939 static int af9015_tuner_attach(struct dvb_usb_adapter *adap) 940 { 941 struct dvb_usb_device *d = adap_to_d(adap); 942 struct af9015_state *state = d_to_priv(d); 943 int ret; 944 dev_dbg(&d->udev->dev, "%s:\n", __func__); 945 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; 953 break; 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; 959 break; 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; 964 break; 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; 969 break; 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; 974 break; 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; 980 break; 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; 985 break; 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; 990 break; 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; 995 break; 996 case AF9013_TUNER_UNKNOWN: 997 default: 998 dev_err(&d->udev->dev, "%s: unknown tuner id=%d\n", 999 KBUILD_MODNAME, 1000 state->af9013_config[adap->id].tuner); 1001 ret = -ENODEV; 1002 } 1003 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; 1008 } 1009 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; 1014 } 1015 1016 return ret; 1017 } 1018 1019 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff) 1020 { 1021 struct dvb_usb_device *d = adap_to_d(adap); 1022 int ret; 1023 dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff); 1024 1025 if (onoff) 1026 ret = af9015_set_reg_bit(d, 0xd503, 0); 1027 else 1028 ret = af9015_clear_reg_bit(d, 0xd503, 0); 1029 1030 return ret; 1031 } 1032 1033 static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid, 1034 int onoff) 1035 { 1036 struct dvb_usb_device *d = adap_to_d(adap); 1037 int ret; 1038 u8 idx; 1039 dev_dbg(&d->udev->dev, "%s: index=%d pid=%04x onoff=%d\n", 1040 __func__, index, pid, onoff); 1041 1042 ret = af9015_write_reg(d, 0xd505, (pid & 0xff)); 1043 if (ret) 1044 goto error; 1045 1046 ret = af9015_write_reg(d, 0xd506, (pid >> 8)); 1047 if (ret) 1048 goto error; 1049 1050 idx = ((index & 0x1f) | (1 << 5)); 1051 ret = af9015_write_reg(d, 0xd504, idx); 1052 1053 error: 1054 return ret; 1055 } 1056 1057 static int af9015_init_endpoint(struct dvb_usb_device *d) 1058 { 1059 struct af9015_state *state = d_to_priv(d); 1060 int ret; 1061 u16 frame_size; 1062 u8 packet_size; 1063 dev_dbg(&d->udev->dev, "%s: USB speed=%d\n", __func__, d->udev->speed); 1064 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; 1068 } else { 1069 frame_size = TS_USB20_FRAME_SIZE/4; 1070 packet_size = TS_USB20_MAX_PACKET_SIZE/4; 1071 } 1072 1073 ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */ 1074 if (ret) 1075 goto error; 1076 ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */ 1077 if (ret) 1078 goto error; 1079 ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */ 1080 if (ret) 1081 goto error; 1082 ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */ 1083 if (ret) 1084 goto error; 1085 ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */ 1086 if (ret) 1087 goto error; 1088 if (state->dual_mode) { 1089 ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */ 1090 if (ret) 1091 goto error; 1092 } 1093 ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */ 1094 if (ret) 1095 goto error; 1096 if (state->dual_mode) { 1097 ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */ 1098 if (ret) 1099 goto error; 1100 } 1101 /* EP4 xfer length */ 1102 ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff); 1103 if (ret) 1104 goto error; 1105 ret = af9015_write_reg(d, 0xdd89, frame_size >> 8); 1106 if (ret) 1107 goto error; 1108 /* EP5 xfer length */ 1109 ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff); 1110 if (ret) 1111 goto error; 1112 ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8); 1113 if (ret) 1114 goto error; 1115 ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */ 1116 if (ret) 1117 goto error; 1118 ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */ 1119 if (ret) 1120 goto error; 1121 ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */ 1122 if (ret) 1123 goto error; 1124 if (state->dual_mode) { 1125 ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */ 1126 if (ret) 1127 goto error; 1128 } 1129 1130 /* enable / disable mp2if2 */ 1131 if (state->dual_mode) 1132 ret = af9015_set_reg_bit(d, 0xd50b, 0); 1133 else 1134 ret = af9015_clear_reg_bit(d, 0xd50b, 0); 1135 1136 error: 1137 if (ret) 1138 dev_err(&d->udev->dev, "%s: endpoint init failed=%d\n", 1139 KBUILD_MODNAME, ret); 1140 1141 return ret; 1142 } 1143 1144 static int af9015_init(struct dvb_usb_device *d) 1145 { 1146 struct af9015_state *state = d_to_priv(d); 1147 int ret; 1148 dev_dbg(&d->udev->dev, "%s:\n", __func__); 1149 1150 mutex_init(&state->fe_mutex); 1151 1152 /* init RC canary */ 1153 ret = af9015_write_reg(d, 0x98e9, 0xff); 1154 if (ret) 1155 goto error; 1156 1157 ret = af9015_init_endpoint(d); 1158 if (ret) 1159 goto error; 1160 1161 error: 1162 return ret; 1163 } 1164 1165 #if IS_ENABLED(CONFIG_RC_CORE) 1166 struct af9015_rc_setup { 1167 unsigned int id; 1168 char *rc_codes; 1169 }; 1170 1171 static char *af9015_rc_setup_match(unsigned int id, 1172 const struct af9015_rc_setup *table) 1173 { 1174 for (; table->rc_codes; table++) 1175 if (table->id == id) 1176 return table->rc_codes; 1177 return NULL; 1178 } 1179 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 }, 1186 { } 1187 }; 1188 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 */ 1194 { } 1195 }; 1196 1197 static int af9015_rc_query(struct dvb_usb_device *d) 1198 { 1199 struct af9015_state *state = d_to_priv(d); 1200 int ret; 1201 u8 buf[17]; 1202 1203 /* read registers needed to detect remote controller code */ 1204 ret = af9015_read_regs(d, 0x98d9, buf, sizeof(buf)); 1205 if (ret) 1206 goto error; 1207 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__); 1211 return ret; 1212 } 1213 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]; 1220 return ret; 1221 } 1222 1223 /* Only process key if canary killed */ 1224 if (buf[16] != 0xff && buf[0] != 0x01) { 1225 dev_dbg(&d->udev->dev, "%s: key pressed %*ph\n", 1226 __func__, 4, buf + 12); 1227 1228 /* Reset the canary */ 1229 ret = af9015_write_reg(d, 0x98e9, 0xff); 1230 if (ret) 1231 goto error; 1232 1233 /* Remember this key */ 1234 memcpy(state->rc_last, &buf[12], 4); 1235 if (buf[14] == (u8) ~buf[15]) { 1236 if (buf[12] == (u8) ~buf[13]) { 1237 /* NEC */ 1238 state->rc_keycode = RC_SCANCODE_NEC(buf[12], 1239 buf[14]); 1240 } else { 1241 /* NEC extended*/ 1242 state->rc_keycode = RC_SCANCODE_NECX(buf[12] << 8 | 1243 buf[13], 1244 buf[14]); 1245 } 1246 } else { 1247 /* 32 bit NEC */ 1248 state->rc_keycode = RC_SCANCODE_NEC32(buf[12] << 24 | 1249 buf[13] << 16 | 1250 buf[14] << 8 | 1251 buf[15]); 1252 } 1253 rc_keydown(d->rc_dev, RC_TYPE_NEC, state->rc_keycode, 0); 1254 } else { 1255 dev_dbg(&d->udev->dev, "%s: no key press\n", __func__); 1256 /* Invalidate last keypress */ 1257 /* Not really needed, but helps with debug */ 1258 state->rc_last[2] = state->rc_last[3]; 1259 } 1260 1261 state->rc_repeat = buf[6]; 1262 state->rc_failed = false; 1263 1264 error: 1265 if (ret) { 1266 dev_warn(&d->udev->dev, "%s: rc query failed=%d\n", 1267 KBUILD_MODNAME, ret); 1268 1269 /* allow random errors as dvb-usb will stop polling on error */ 1270 if (!state->rc_failed) 1271 ret = 0; 1272 1273 state->rc_failed = true; 1274 } 1275 1276 return ret; 1277 } 1278 1279 static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc) 1280 { 1281 struct af9015_state *state = d_to_priv(d); 1282 u16 vid = le16_to_cpu(d->udev->descriptor.idVendor); 1283 1284 if (state->ir_mode == AF9015_IR_MODE_DISABLED) 1285 return 0; 1286 1287 /* try to load remote based module param */ 1288 if (!rc->map_name) 1289 rc->map_name = af9015_rc_setup_match(dvb_usb_af9015_remote, 1290 af9015_rc_setup_modparam); 1291 1292 /* try to load remote based eeprom hash */ 1293 if (!rc->map_name) 1294 rc->map_name = af9015_rc_setup_match(state->eeprom_sum, 1295 af9015_rc_setup_hashes); 1296 1297 /* try to load remote based USB iManufacturer string */ 1298 if (!rc->map_name && vid == USB_VID_AFATECH) { 1299 /* Check USB manufacturer and product strings and try 1300 to determine correct remote in case of chip vendor 1301 reference IDs are used. 1302 DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */ 1303 char manufacturer[10]; 1304 memset(manufacturer, 0, sizeof(manufacturer)); 1305 usb_string(d->udev, d->udev->descriptor.iManufacturer, 1306 manufacturer, sizeof(manufacturer)); 1307 if (!strcmp("MSI", manufacturer)) { 1308 /* iManufacturer 1 MSI 1309 iProduct 2 MSI K-VOX */ 1310 rc->map_name = af9015_rc_setup_match( 1311 AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, 1312 af9015_rc_setup_modparam); 1313 } 1314 } 1315 1316 /* load empty to enable rc */ 1317 if (!rc->map_name) 1318 rc->map_name = RC_MAP_EMPTY; 1319 1320 rc->allowed_protos = RC_BIT_NEC; 1321 rc->query = af9015_rc_query; 1322 rc->interval = 500; 1323 1324 return 0; 1325 } 1326 #else 1327 #define af9015_get_rc_config NULL 1328 #endif 1329 1330 static int af9015_probe(struct usb_interface *intf, 1331 const struct usb_device_id *id) 1332 { 1333 struct usb_device *udev = interface_to_usbdev(intf); 1334 char manufacturer[sizeof("ITE Technologies, Inc.")]; 1335 1336 memset(manufacturer, 0, sizeof(manufacturer)); 1337 usb_string(udev, udev->descriptor.iManufacturer, 1338 manufacturer, sizeof(manufacturer)); 1339 /* 1340 * There is two devices having same ID but different chipset. One uses 1341 * AF9015 and the other IT9135 chipset. Only difference seen on lsusb 1342 * is iManufacturer string. 1343 * 1344 * idVendor 0x0ccd TerraTec Electronic GmbH 1345 * idProduct 0x0099 1346 * bcdDevice 2.00 1347 * iManufacturer 1 Afatech 1348 * iProduct 2 DVB-T 2 1349 * 1350 * idVendor 0x0ccd TerraTec Electronic GmbH 1351 * idProduct 0x0099 1352 * bcdDevice 2.00 1353 * iManufacturer 1 ITE Technologies, Inc. 1354 * iProduct 2 DVB-T TV Stick 1355 */ 1356 if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) && 1357 (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) { 1358 if (!strcmp("ITE Technologies, Inc.", manufacturer)) { 1359 dev_dbg(&udev->dev, "%s: rejecting device\n", __func__); 1360 return -ENODEV; 1361 } 1362 } 1363 1364 return dvb_usbv2_probe(intf, id); 1365 } 1366 1367 /* interface 0 is used by DVB-T receiver and 1368 interface 1 is for remote controller (HID) */ 1369 static struct dvb_usb_device_properties af9015_props = { 1370 .driver_name = KBUILD_MODNAME, 1371 .owner = THIS_MODULE, 1372 .adapter_nr = adapter_nr, 1373 .size_of_priv = sizeof(struct af9015_state), 1374 1375 .generic_bulk_ctrl_endpoint = 0x02, 1376 .generic_bulk_ctrl_endpoint_response = 0x81, 1377 1378 .identify_state = af9015_identify_state, 1379 .firmware = AF9015_FIRMWARE, 1380 .download_firmware = af9015_download_firmware, 1381 1382 .i2c_algo = &af9015_i2c_algo, 1383 .read_config = af9015_read_config, 1384 .frontend_attach = af9015_af9013_frontend_attach, 1385 .tuner_attach = af9015_tuner_attach, 1386 .init = af9015_init, 1387 .get_rc_config = af9015_get_rc_config, 1388 .get_stream_config = af9015_get_stream_config, 1389 1390 .get_adapter_count = af9015_get_adapter_count, 1391 .adapter = { 1392 { 1393 .caps = DVB_USB_ADAP_HAS_PID_FILTER | 1394 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF, 1395 .pid_filter_count = 32, 1396 .pid_filter = af9015_pid_filter, 1397 .pid_filter_ctrl = af9015_pid_filter_ctrl, 1398 1399 .stream = DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE), 1400 }, { 1401 .stream = DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE), 1402 }, 1403 }, 1404 }; 1405 1406 static const struct usb_device_id af9015_id_table[] = { 1407 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015, 1408 &af9015_props, "Afatech AF9015 reference design", NULL) }, 1409 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016, 1410 &af9015_props, "Afatech AF9015 reference design", NULL) }, 1411 { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD, 1412 &af9015_props, "Leadtek WinFast DTV Dongle Gold", RC_MAP_LEADTEK_Y04G0051) }, 1413 { DVB_USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E, 1414 &af9015_props, "Pinnacle PCTV 71e", NULL) }, 1415 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U, 1416 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) }, 1417 { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN, 1418 &af9015_props, "DigitalNow TinyTwin", RC_MAP_AZUREWAVE_AD_TU700) }, 1419 { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700, 1420 &af9015_props, "TwinHan AzureWave AD-TU700(704J)", RC_MAP_AZUREWAVE_AD_TU700) }, 1421 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2, 1422 &af9015_props, "TerraTec Cinergy T USB XE", NULL) }, 1423 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T, 1424 &af9015_props, "KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)", NULL) }, 1425 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X, 1426 &af9015_props, "AVerMedia AVerTV DVB-T Volar X", RC_MAP_AVERMEDIA_M135A) }, 1427 { DVB_USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380, 1428 &af9015_props, "Xtensions XD-380", NULL) }, 1429 { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO, 1430 &af9015_props, "MSI DIGIVOX Duo", RC_MAP_MSI_DIGIVOX_III) }, 1431 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2, 1432 &af9015_props, "Fujitsu-Siemens Slim Mobile USB DVB-T", NULL) }, 1433 { DVB_USB_DEVICE(USB_VID_TELESTAR, USB_PID_TELESTAR_STARSTICK_2, 1434 &af9015_props, "Telestar Starstick 2", NULL) }, 1435 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309, 1436 &af9015_props, "AVerMedia A309", NULL) }, 1437 { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III, 1438 &af9015_props, "MSI Digi VOX mini III", RC_MAP_MSI_DIGIVOX_III) }, 1439 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U, 1440 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) }, 1441 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2, 1442 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) }, 1443 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3, 1444 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) }, 1445 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT, 1446 &af9015_props, "TrekStor DVB-T USB Stick", RC_MAP_TREKSTOR) }, 1447 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850, 1448 &af9015_props, "AverMedia AVerTV Volar Black HD (A850)", NULL) }, 1449 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805, 1450 &af9015_props, "AverMedia AVerTV Volar GPS 805 (A805)", NULL) }, 1451 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU, 1452 &af9015_props, "Conceptronic USB2.0 DVB-T CTVDIGRCU V3.0", NULL) }, 1453 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810, 1454 &af9015_props, "KWorld Digial MC-810", NULL) }, 1455 { DVB_USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03, 1456 &af9015_props, "Genius TVGo DVB-T03", NULL) }, 1457 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2, 1458 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) }, 1459 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T, 1460 &af9015_props, "KWorld PlusTV DVB-T PCI Pro Card (DVB-T PC160-T)", NULL) }, 1461 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20, 1462 &af9015_props, "Sveon STV20 Tuner USB DVB-T HDTV", NULL) }, 1463 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2, 1464 &af9015_props, "DigitalNow TinyTwin v2", RC_MAP_DIGITALNOW_TINYTWIN) }, 1465 { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS, 1466 &af9015_props, "Leadtek WinFast DTV2000DS", RC_MAP_LEADTEK_Y04G0051) }, 1467 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T, 1468 &af9015_props, "KWorld USB DVB-T Stick Mobile (UB383-T)", NULL) }, 1469 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4, 1470 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) }, 1471 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M, 1472 &af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) }, 1473 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC, 1474 &af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) }, 1475 /* XXX: that same ID [0ccd:0099] is used by af9035 driver too */ 1476 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC, 1477 &af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) }, 1478 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T, 1479 &af9015_props, "AverMedia AVerTV Red HD+ (A850T)", NULL) }, 1480 { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3, 1481 &af9015_props, "DigitalNow TinyTwin v3", RC_MAP_DIGITALNOW_TINYTWIN) }, 1482 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22, 1483 &af9015_props, "Sveon STV22 Dual USB DVB-T Tuner HDTV", RC_MAP_MSI_DIGIVOX_III) }, 1484 { } 1485 }; 1486 MODULE_DEVICE_TABLE(usb, af9015_id_table); 1487 1488 /* usb specific object needed to register this driver with the usb subsystem */ 1489 static struct usb_driver af9015_usb_driver = { 1490 .name = KBUILD_MODNAME, 1491 .id_table = af9015_id_table, 1492 .probe = af9015_probe, 1493 .disconnect = dvb_usbv2_disconnect, 1494 .suspend = dvb_usbv2_suspend, 1495 .resume = dvb_usbv2_resume, 1496 .reset_resume = dvb_usbv2_reset_resume, 1497 .no_dynamic_id = 1, 1498 .soft_unbind = 1, 1499 }; 1500 1501 module_usb_driver(af9015_usb_driver); 1502 1503 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); 1504 MODULE_DESCRIPTION("Afatech AF9015 driver"); 1505 MODULE_LICENSE("GPL"); 1506 MODULE_FIRMWARE(AF9015_FIRMWARE); 1507