0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "af9035.h"
0010
0011
0012 #define MAX_XFER_SIZE 64
0013
0014 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
0015
0016 static u16 af9035_checksum(const u8 *buf, size_t len)
0017 {
0018 size_t i;
0019 u16 checksum = 0;
0020
0021 for (i = 1; i < len; i++) {
0022 if (i % 2)
0023 checksum += buf[i] << 8;
0024 else
0025 checksum += buf[i];
0026 }
0027 checksum = ~checksum;
0028
0029 return checksum;
0030 }
0031
0032 static int af9035_ctrl_msg(struct dvb_usb_device *d, struct usb_req *req)
0033 {
0034 #define REQ_HDR_LEN 4
0035 #define ACK_HDR_LEN 3
0036 #define CHECKSUM_LEN 2
0037 #define USB_TIMEOUT 2000
0038 struct state *state = d_to_priv(d);
0039 struct usb_interface *intf = d->intf;
0040 int ret, wlen, rlen;
0041 u16 checksum, tmp_checksum;
0042
0043 mutex_lock(&d->usb_mutex);
0044
0045
0046 if (req->wlen > (BUF_LEN - REQ_HDR_LEN - CHECKSUM_LEN) ||
0047 req->rlen > (BUF_LEN - ACK_HDR_LEN - CHECKSUM_LEN)) {
0048 dev_err(&intf->dev, "too much data wlen=%d rlen=%d\n",
0049 req->wlen, req->rlen);
0050 ret = -EINVAL;
0051 goto exit;
0052 }
0053
0054 state->buf[0] = REQ_HDR_LEN + req->wlen + CHECKSUM_LEN - 1;
0055 state->buf[1] = req->mbox;
0056 state->buf[2] = req->cmd;
0057 state->buf[3] = state->seq++;
0058 memcpy(&state->buf[REQ_HDR_LEN], req->wbuf, req->wlen);
0059
0060 wlen = REQ_HDR_LEN + req->wlen + CHECKSUM_LEN;
0061 rlen = ACK_HDR_LEN + req->rlen + CHECKSUM_LEN;
0062
0063
0064 checksum = af9035_checksum(state->buf, state->buf[0] - 1);
0065 state->buf[state->buf[0] - 1] = (checksum >> 8);
0066 state->buf[state->buf[0] - 0] = (checksum & 0xff);
0067
0068
0069 if (req->cmd == CMD_FW_DL)
0070 rlen = 0;
0071
0072 ret = dvb_usbv2_generic_rw_locked(d,
0073 state->buf, wlen, state->buf, rlen);
0074 if (ret)
0075 goto exit;
0076
0077
0078 if (req->cmd == CMD_FW_DL)
0079 goto exit;
0080
0081
0082 checksum = af9035_checksum(state->buf, rlen - 2);
0083 tmp_checksum = (state->buf[rlen - 2] << 8) | state->buf[rlen - 1];
0084 if (tmp_checksum != checksum) {
0085 dev_err(&intf->dev, "command=%02x checksum mismatch (%04x != %04x)\n",
0086 req->cmd, tmp_checksum, checksum);
0087 ret = -EIO;
0088 goto exit;
0089 }
0090
0091
0092 if (state->buf[2]) {
0093
0094 if (req->cmd == CMD_IR_GET || state->buf[2] == 1) {
0095 ret = 1;
0096 goto exit;
0097 }
0098
0099 dev_dbg(&intf->dev, "command=%02x failed fw error=%d\n",
0100 req->cmd, state->buf[2]);
0101 ret = -EIO;
0102 goto exit;
0103 }
0104
0105
0106 if (req->rlen)
0107 memcpy(req->rbuf, &state->buf[ACK_HDR_LEN], req->rlen);
0108 exit:
0109 mutex_unlock(&d->usb_mutex);
0110 return ret;
0111 }
0112
0113
0114 static int af9035_wr_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
0115 {
0116 struct usb_interface *intf = d->intf;
0117 u8 wbuf[MAX_XFER_SIZE];
0118 u8 mbox = (reg >> 16) & 0xff;
0119 struct usb_req req = { CMD_MEM_WR, mbox, 6 + len, wbuf, 0, NULL };
0120
0121 if (6 + len > sizeof(wbuf)) {
0122 dev_warn(&intf->dev, "i2c wr: len=%d is too big!\n", len);
0123 return -EOPNOTSUPP;
0124 }
0125
0126 wbuf[0] = len;
0127 wbuf[1] = 2;
0128 wbuf[2] = 0;
0129 wbuf[3] = 0;
0130 wbuf[4] = (reg >> 8) & 0xff;
0131 wbuf[5] = (reg >> 0) & 0xff;
0132 memcpy(&wbuf[6], val, len);
0133
0134 return af9035_ctrl_msg(d, &req);
0135 }
0136
0137
0138 static int af9035_rd_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
0139 {
0140 u8 wbuf[] = { len, 2, 0, 0, (reg >> 8) & 0xff, reg & 0xff };
0141 u8 mbox = (reg >> 16) & 0xff;
0142 struct usb_req req = { CMD_MEM_RD, mbox, sizeof(wbuf), wbuf, len, val };
0143
0144 return af9035_ctrl_msg(d, &req);
0145 }
0146
0147
0148 static int af9035_wr_reg(struct dvb_usb_device *d, u32 reg, u8 val)
0149 {
0150 return af9035_wr_regs(d, reg, &val, 1);
0151 }
0152
0153
0154 static int af9035_rd_reg(struct dvb_usb_device *d, u32 reg, u8 *val)
0155 {
0156 return af9035_rd_regs(d, reg, val, 1);
0157 }
0158
0159
0160 static int af9035_wr_reg_mask(struct dvb_usb_device *d, u32 reg, u8 val,
0161 u8 mask)
0162 {
0163 int ret;
0164 u8 tmp;
0165
0166
0167 if (mask != 0xff) {
0168 ret = af9035_rd_regs(d, reg, &tmp, 1);
0169 if (ret)
0170 return ret;
0171
0172 val &= mask;
0173 tmp &= ~mask;
0174 val |= tmp;
0175 }
0176
0177 return af9035_wr_regs(d, reg, &val, 1);
0178 }
0179
0180 static int af9035_add_i2c_dev(struct dvb_usb_device *d, const char *type,
0181 u8 addr, void *platform_data, struct i2c_adapter *adapter)
0182 {
0183 int ret, num;
0184 struct state *state = d_to_priv(d);
0185 struct usb_interface *intf = d->intf;
0186 struct i2c_client *client;
0187 struct i2c_board_info board_info = {
0188 .addr = addr,
0189 .platform_data = platform_data,
0190 };
0191
0192 strscpy(board_info.type, type, I2C_NAME_SIZE);
0193
0194
0195 for (num = 0; num < AF9035_I2C_CLIENT_MAX; num++) {
0196 if (state->i2c_client[num] == NULL)
0197 break;
0198 }
0199
0200 dev_dbg(&intf->dev, "num=%d\n", num);
0201
0202 if (num == AF9035_I2C_CLIENT_MAX) {
0203 dev_err(&intf->dev, "I2C client out of index\n");
0204 ret = -ENODEV;
0205 goto err;
0206 }
0207
0208 request_module("%s", board_info.type);
0209
0210
0211 client = i2c_new_client_device(adapter, &board_info);
0212 if (!i2c_client_has_driver(client)) {
0213 dev_err(&intf->dev, "failed to bind i2c device to %s driver\n", type);
0214 ret = -ENODEV;
0215 goto err;
0216 }
0217
0218
0219 if (!try_module_get(client->dev.driver->owner)) {
0220 i2c_unregister_device(client);
0221 ret = -ENODEV;
0222 goto err;
0223 }
0224
0225 state->i2c_client[num] = client;
0226 return 0;
0227 err:
0228 dev_dbg(&intf->dev, "failed=%d\n", ret);
0229 return ret;
0230 }
0231
0232 static void af9035_del_i2c_dev(struct dvb_usb_device *d)
0233 {
0234 int num;
0235 struct state *state = d_to_priv(d);
0236 struct usb_interface *intf = d->intf;
0237 struct i2c_client *client;
0238
0239
0240 num = AF9035_I2C_CLIENT_MAX;
0241 while (num--) {
0242 if (state->i2c_client[num] != NULL)
0243 break;
0244 }
0245
0246 dev_dbg(&intf->dev, "num=%d\n", num);
0247
0248 if (num == -1) {
0249 dev_err(&intf->dev, "I2C client out of index\n");
0250 goto err;
0251 }
0252
0253 client = state->i2c_client[num];
0254
0255
0256 module_put(client->dev.driver->owner);
0257
0258
0259 i2c_unregister_device(client);
0260
0261 state->i2c_client[num] = NULL;
0262 return;
0263 err:
0264 dev_dbg(&intf->dev, "failed\n");
0265 }
0266
0267 static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
0268 struct i2c_msg msg[], int num)
0269 {
0270 struct dvb_usb_device *d = i2c_get_adapdata(adap);
0271 struct state *state = d_to_priv(d);
0272 int ret;
0273
0274 if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
0275 return -EAGAIN;
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312 #define AF9035_IS_I2C_XFER_WRITE_READ(_msg, _num) \
0313 (_num == 2 && !(_msg[0].flags & I2C_M_RD) && (_msg[1].flags & I2C_M_RD))
0314 #define AF9035_IS_I2C_XFER_WRITE(_msg, _num) \
0315 (_num == 1 && !(_msg[0].flags & I2C_M_RD))
0316 #define AF9035_IS_I2C_XFER_READ(_msg, _num) \
0317 (_num == 1 && (_msg[0].flags & I2C_M_RD))
0318
0319 if (AF9035_IS_I2C_XFER_WRITE_READ(msg, num)) {
0320 if (msg[0].len > 40 || msg[1].len > 40) {
0321
0322 ret = -EOPNOTSUPP;
0323 } else if ((msg[0].addr == state->af9033_i2c_addr[0]) ||
0324 (msg[0].addr == state->af9033_i2c_addr[1])) {
0325
0326 u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
0327 msg[0].buf[2];
0328
0329 if (msg[0].addr == state->af9033_i2c_addr[1])
0330 reg |= 0x100000;
0331
0332 ret = af9035_rd_regs(d, reg, &msg[1].buf[0],
0333 msg[1].len);
0334 } else if (state->no_read) {
0335 memset(msg[1].buf, 0, msg[1].len);
0336 ret = 0;
0337 } else {
0338
0339 u8 buf[MAX_XFER_SIZE];
0340 struct usb_req req = { CMD_I2C_RD, 0, 5 + msg[0].len,
0341 buf, msg[1].len, msg[1].buf };
0342
0343 if (state->chip_type == 0x9306) {
0344 req.cmd = CMD_GENERIC_I2C_RD;
0345 req.wlen = 3 + msg[0].len;
0346 }
0347 req.mbox |= ((msg[0].addr & 0x80) >> 3);
0348
0349 buf[0] = msg[1].len;
0350 if (state->chip_type == 0x9306) {
0351 buf[1] = 0x03;
0352 buf[2] = msg[0].addr << 1;
0353 memcpy(&buf[3], msg[0].buf, msg[0].len);
0354 } else {
0355 buf[1] = msg[0].addr << 1;
0356 buf[3] = 0x00;
0357 buf[4] = 0x00;
0358
0359
0360 if (msg[0].len > 2) {
0361 buf[2] = 0x00;
0362 memcpy(&buf[5], msg[0].buf, msg[0].len);
0363
0364
0365 } else {
0366 req.wlen = 5;
0367 buf[2] = msg[0].len;
0368 if (msg[0].len == 2) {
0369 buf[3] = msg[0].buf[0];
0370 buf[4] = msg[0].buf[1];
0371 } else if (msg[0].len == 1) {
0372 buf[4] = msg[0].buf[0];
0373 }
0374 }
0375 }
0376 ret = af9035_ctrl_msg(d, &req);
0377 }
0378 } else if (AF9035_IS_I2C_XFER_WRITE(msg, num)) {
0379 if (msg[0].len > 40) {
0380
0381 ret = -EOPNOTSUPP;
0382 } else if ((msg[0].addr == state->af9033_i2c_addr[0]) ||
0383 (msg[0].addr == state->af9033_i2c_addr[1])) {
0384
0385 u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
0386 msg[0].buf[2];
0387
0388 if (msg[0].addr == state->af9033_i2c_addr[1])
0389 reg |= 0x100000;
0390
0391 ret = (msg[0].len >= 3) ? af9035_wr_regs(d, reg,
0392 &msg[0].buf[3],
0393 msg[0].len - 3)
0394 : -EOPNOTSUPP;
0395 } else {
0396
0397 u8 buf[MAX_XFER_SIZE];
0398 struct usb_req req = { CMD_I2C_WR, 0, 5 + msg[0].len,
0399 buf, 0, NULL };
0400
0401 if (state->chip_type == 0x9306) {
0402 req.cmd = CMD_GENERIC_I2C_WR;
0403 req.wlen = 3 + msg[0].len;
0404 }
0405
0406 req.mbox |= ((msg[0].addr & 0x80) >> 3);
0407 buf[0] = msg[0].len;
0408 if (state->chip_type == 0x9306) {
0409 buf[1] = 0x03;
0410 buf[2] = msg[0].addr << 1;
0411 memcpy(&buf[3], msg[0].buf, msg[0].len);
0412 } else {
0413 buf[1] = msg[0].addr << 1;
0414 buf[2] = 0x00;
0415 buf[3] = 0x00;
0416 buf[4] = 0x00;
0417 memcpy(&buf[5], msg[0].buf, msg[0].len);
0418 }
0419 ret = af9035_ctrl_msg(d, &req);
0420 }
0421 } else if (AF9035_IS_I2C_XFER_READ(msg, num)) {
0422 if (msg[0].len > 40) {
0423
0424 ret = -EOPNOTSUPP;
0425 } else if (state->no_read) {
0426 memset(msg[0].buf, 0, msg[0].len);
0427 ret = 0;
0428 } else {
0429
0430 u8 buf[5];
0431 struct usb_req req = { CMD_I2C_RD, 0, sizeof(buf),
0432 buf, msg[0].len, msg[0].buf };
0433
0434 if (state->chip_type == 0x9306) {
0435 req.cmd = CMD_GENERIC_I2C_RD;
0436 req.wlen = 3;
0437 }
0438 req.mbox |= ((msg[0].addr & 0x80) >> 3);
0439 buf[0] = msg[0].len;
0440 if (state->chip_type == 0x9306) {
0441 buf[1] = 0x03;
0442 buf[2] = msg[0].addr << 1;
0443 } else {
0444 buf[1] = msg[0].addr << 1;
0445 buf[2] = 0x00;
0446 buf[3] = 0x00;
0447 buf[4] = 0x00;
0448 }
0449 ret = af9035_ctrl_msg(d, &req);
0450 }
0451 } else {
0452
0453
0454
0455
0456
0457
0458 ret = -EOPNOTSUPP;
0459 }
0460
0461 mutex_unlock(&d->i2c_mutex);
0462
0463 if (ret < 0)
0464 return ret;
0465 else
0466 return num;
0467 }
0468
0469 static u32 af9035_i2c_functionality(struct i2c_adapter *adapter)
0470 {
0471 return I2C_FUNC_I2C;
0472 }
0473
0474 static struct i2c_algorithm af9035_i2c_algo = {
0475 .master_xfer = af9035_i2c_master_xfer,
0476 .functionality = af9035_i2c_functionality,
0477 };
0478
0479 static int af9035_identify_state(struct dvb_usb_device *d, const char **name)
0480 {
0481 struct state *state = d_to_priv(d);
0482 struct usb_interface *intf = d->intf;
0483 int ret, i, ts_mode_invalid;
0484 unsigned int utmp, eeprom_addr;
0485 u8 tmp;
0486 u8 wbuf[1] = { 1 };
0487 u8 rbuf[4];
0488 struct usb_req req = { CMD_FW_QUERYINFO, 0, sizeof(wbuf), wbuf,
0489 sizeof(rbuf), rbuf };
0490
0491 ret = af9035_rd_regs(d, 0x1222, rbuf, 3);
0492 if (ret < 0)
0493 goto err;
0494
0495 state->chip_version = rbuf[0];
0496 state->chip_type = rbuf[2] << 8 | rbuf[1] << 0;
0497
0498 ret = af9035_rd_reg(d, 0x384f, &state->prechip_version);
0499 if (ret < 0)
0500 goto err;
0501
0502 dev_info(&intf->dev, "prechip_version=%02x chip_version=%02x chip_type=%04x\n",
0503 state->prechip_version, state->chip_version, state->chip_type);
0504
0505 if (state->chip_type == 0x9135) {
0506 if (state->chip_version == 0x02) {
0507 *name = AF9035_FIRMWARE_IT9135_V2;
0508 utmp = 0x00461d;
0509 } else {
0510 *name = AF9035_FIRMWARE_IT9135_V1;
0511 utmp = 0x00461b;
0512 }
0513
0514
0515 ret = af9035_rd_reg(d, utmp, &tmp);
0516 if (ret < 0)
0517 goto err;
0518
0519 if (tmp == 0x00) {
0520 dev_dbg(&intf->dev, "no eeprom\n");
0521 state->no_eeprom = true;
0522 goto check_firmware_status;
0523 }
0524
0525 eeprom_addr = EEPROM_BASE_IT9135;
0526 } else if (state->chip_type == 0x9306) {
0527 *name = AF9035_FIRMWARE_IT9303;
0528 state->no_eeprom = true;
0529 goto check_firmware_status;
0530 } else {
0531 *name = AF9035_FIRMWARE_AF9035;
0532 eeprom_addr = EEPROM_BASE_AF9035;
0533 }
0534
0535
0536 for (i = 0; i < 256; i += 32) {
0537 ret = af9035_rd_regs(d, eeprom_addr + i, &state->eeprom[i], 32);
0538 if (ret < 0)
0539 goto err;
0540 }
0541
0542 dev_dbg(&intf->dev, "eeprom dump:\n");
0543 for (i = 0; i < 256; i += 16)
0544 dev_dbg(&intf->dev, "%*ph\n", 16, &state->eeprom[i]);
0545
0546
0547 tmp = state->eeprom[EEPROM_TS_MODE];
0548 ts_mode_invalid = 0;
0549 switch (tmp) {
0550 case 0:
0551 break;
0552 case 1:
0553 case 3:
0554 state->dual_mode = true;
0555 break;
0556 case 5:
0557 if (state->chip_type != 0x9135 && state->chip_type != 0x9306)
0558 state->dual_mode = true;
0559 else
0560 ts_mode_invalid = 1;
0561 break;
0562 default:
0563 ts_mode_invalid = 1;
0564 }
0565
0566 dev_dbg(&intf->dev, "ts mode=%d dual mode=%d\n", tmp, state->dual_mode);
0567
0568 if (ts_mode_invalid)
0569 dev_info(&intf->dev, "ts mode=%d not supported, defaulting to single tuner mode!", tmp);
0570
0571 check_firmware_status:
0572 ret = af9035_ctrl_msg(d, &req);
0573 if (ret < 0)
0574 goto err;
0575
0576 dev_dbg(&intf->dev, "reply=%*ph\n", 4, rbuf);
0577 if (rbuf[0] || rbuf[1] || rbuf[2] || rbuf[3])
0578 ret = WARM;
0579 else
0580 ret = COLD;
0581
0582 return ret;
0583
0584 err:
0585 dev_dbg(&intf->dev, "failed=%d\n", ret);
0586
0587 return ret;
0588 }
0589
0590 static int af9035_download_firmware_old(struct dvb_usb_device *d,
0591 const struct firmware *fw)
0592 {
0593 struct usb_interface *intf = d->intf;
0594 int ret, i, j, len;
0595 u8 wbuf[1];
0596 struct usb_req req = { 0, 0, 0, NULL, 0, NULL };
0597 struct usb_req req_fw_dl = { CMD_FW_DL, 0, 0, wbuf, 0, NULL };
0598 u8 hdr_core;
0599 u16 hdr_addr, hdr_data_len, hdr_checksum;
0600 #define MAX_DATA 58
0601 #define HDR_SIZE 7
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615 for (i = fw->size; i > HDR_SIZE;) {
0616 hdr_core = fw->data[fw->size - i + 0];
0617 hdr_addr = fw->data[fw->size - i + 1] << 8;
0618 hdr_addr |= fw->data[fw->size - i + 2] << 0;
0619 hdr_data_len = fw->data[fw->size - i + 3] << 8;
0620 hdr_data_len |= fw->data[fw->size - i + 4] << 0;
0621 hdr_checksum = fw->data[fw->size - i + 5] << 8;
0622 hdr_checksum |= fw->data[fw->size - i + 6] << 0;
0623
0624 dev_dbg(&intf->dev, "core=%d addr=%04x data_len=%d checksum=%04x\n",
0625 hdr_core, hdr_addr, hdr_data_len, hdr_checksum);
0626
0627 if (((hdr_core != 1) && (hdr_core != 2)) ||
0628 (hdr_data_len > i)) {
0629 dev_dbg(&intf->dev, "bad firmware\n");
0630 break;
0631 }
0632
0633
0634 req.cmd = CMD_FW_DL_BEGIN;
0635 ret = af9035_ctrl_msg(d, &req);
0636 if (ret < 0)
0637 goto err;
0638
0639
0640 for (j = HDR_SIZE + hdr_data_len; j > 0; j -= MAX_DATA) {
0641 len = j;
0642 if (len > MAX_DATA)
0643 len = MAX_DATA;
0644 req_fw_dl.wlen = len;
0645 req_fw_dl.wbuf = (u8 *) &fw->data[fw->size - i +
0646 HDR_SIZE + hdr_data_len - j];
0647 ret = af9035_ctrl_msg(d, &req_fw_dl);
0648 if (ret < 0)
0649 goto err;
0650 }
0651
0652
0653 req.cmd = CMD_FW_DL_END;
0654 ret = af9035_ctrl_msg(d, &req);
0655 if (ret < 0)
0656 goto err;
0657
0658 i -= hdr_data_len + HDR_SIZE;
0659
0660 dev_dbg(&intf->dev, "data uploaded=%zu\n", fw->size - i);
0661 }
0662
0663
0664 if (i)
0665 dev_warn(&intf->dev, "bad firmware\n");
0666
0667 return 0;
0668
0669 err:
0670 dev_dbg(&intf->dev, "failed=%d\n", ret);
0671
0672 return ret;
0673 }
0674
0675 static int af9035_download_firmware_new(struct dvb_usb_device *d,
0676 const struct firmware *fw)
0677 {
0678 struct usb_interface *intf = d->intf;
0679 int ret, i, i_prev;
0680 struct usb_req req_fw_dl = { CMD_FW_SCATTER_WR, 0, 0, NULL, 0, NULL };
0681 #define HDR_SIZE 7
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695 for (i = HDR_SIZE, i_prev = 0; i <= fw->size; i++) {
0696 if (i == fw->size ||
0697 (fw->data[i + 0] == 0x03 &&
0698 (fw->data[i + 1] == 0x00 ||
0699 fw->data[i + 1] == 0x01) &&
0700 fw->data[i + 2] == 0x00)) {
0701 req_fw_dl.wlen = i - i_prev;
0702 req_fw_dl.wbuf = (u8 *) &fw->data[i_prev];
0703 i_prev = i;
0704 ret = af9035_ctrl_msg(d, &req_fw_dl);
0705 if (ret < 0)
0706 goto err;
0707
0708 dev_dbg(&intf->dev, "data uploaded=%d\n", i);
0709 }
0710 }
0711
0712 return 0;
0713
0714 err:
0715 dev_dbg(&intf->dev, "failed=%d\n", ret);
0716
0717 return ret;
0718 }
0719
0720 static int af9035_download_firmware(struct dvb_usb_device *d,
0721 const struct firmware *fw)
0722 {
0723 struct usb_interface *intf = d->intf;
0724 struct state *state = d_to_priv(d);
0725 int ret;
0726 u8 wbuf[1];
0727 u8 rbuf[4];
0728 u8 tmp;
0729 struct usb_req req = { 0, 0, 0, NULL, 0, NULL };
0730 struct usb_req req_fw_ver = { CMD_FW_QUERYINFO, 0, 1, wbuf, 4, rbuf };
0731
0732 dev_dbg(&intf->dev, "\n");
0733
0734
0735
0736
0737
0738
0739
0740 if (state->dual_mode) {
0741
0742 ret = af9035_wr_reg_mask(d, 0x00d8b0, 0x01, 0x01);
0743 if (ret < 0)
0744 goto err;
0745
0746 ret = af9035_wr_reg_mask(d, 0x00d8b1, 0x01, 0x01);
0747 if (ret < 0)
0748 goto err;
0749
0750 ret = af9035_wr_reg_mask(d, 0x00d8af, 0x00, 0x01);
0751 if (ret < 0)
0752 goto err;
0753
0754 usleep_range(10000, 50000);
0755
0756 ret = af9035_wr_reg_mask(d, 0x00d8af, 0x01, 0x01);
0757 if (ret < 0)
0758 goto err;
0759
0760
0761 tmp = state->eeprom[EEPROM_2ND_DEMOD_ADDR];
0762
0763
0764 if (!tmp)
0765 tmp = 0x1d << 1;
0766
0767 if ((state->chip_type == 0x9135) ||
0768 (state->chip_type == 0x9306)) {
0769 ret = af9035_wr_reg(d, 0x004bfb, tmp);
0770 if (ret < 0)
0771 goto err;
0772 } else {
0773 ret = af9035_wr_reg(d, 0x00417f, tmp);
0774 if (ret < 0)
0775 goto err;
0776
0777
0778 ret = af9035_wr_reg_mask(d, 0x00d81a, 0x01, 0x01);
0779 if (ret < 0)
0780 goto err;
0781 }
0782 }
0783
0784 if (fw->data[0] == 0x01)
0785 ret = af9035_download_firmware_old(d, fw);
0786 else
0787 ret = af9035_download_firmware_new(d, fw);
0788 if (ret < 0)
0789 goto err;
0790
0791
0792 req.cmd = CMD_FW_BOOT;
0793 ret = af9035_ctrl_msg(d, &req);
0794 if (ret < 0)
0795 goto err;
0796
0797
0798 wbuf[0] = 1;
0799 ret = af9035_ctrl_msg(d, &req_fw_ver);
0800 if (ret < 0)
0801 goto err;
0802
0803 if (!(rbuf[0] || rbuf[1] || rbuf[2] || rbuf[3])) {
0804 dev_err(&intf->dev, "firmware did not run\n");
0805 ret = -ENODEV;
0806 goto err;
0807 }
0808
0809 dev_info(&intf->dev, "firmware version=%d.%d.%d.%d",
0810 rbuf[0], rbuf[1], rbuf[2], rbuf[3]);
0811
0812 return 0;
0813
0814 err:
0815 dev_dbg(&intf->dev, "failed=%d\n", ret);
0816
0817 return ret;
0818 }
0819
0820 static int af9035_read_config(struct dvb_usb_device *d)
0821 {
0822 struct usb_interface *intf = d->intf;
0823 struct state *state = d_to_priv(d);
0824 int ret, i;
0825 u8 tmp;
0826 u16 tmp16;
0827
0828
0829 state->af9033_i2c_addr[0] = 0x1c;
0830 state->af9033_i2c_addr[1] = 0x1d;
0831 state->af9033_config[0].adc_multiplier = AF9033_ADC_MULTIPLIER_2X;
0832 state->af9033_config[1].adc_multiplier = AF9033_ADC_MULTIPLIER_2X;
0833 state->af9033_config[0].ts_mode = AF9033_TS_MODE_USB;
0834 state->af9033_config[1].ts_mode = AF9033_TS_MODE_SERIAL;
0835 state->it930x_addresses = 0;
0836
0837 if (state->chip_type == 0x9135) {
0838
0839 state->af9033_config[0].dyn0_clk = true;
0840 state->af9033_config[1].dyn0_clk = true;
0841
0842 if (state->chip_version == 0x02) {
0843 state->af9033_config[0].tuner = AF9033_TUNER_IT9135_60;
0844 state->af9033_config[1].tuner = AF9033_TUNER_IT9135_60;
0845 } else {
0846 state->af9033_config[0].tuner = AF9033_TUNER_IT9135_38;
0847 state->af9033_config[1].tuner = AF9033_TUNER_IT9135_38;
0848 }
0849
0850 if (state->no_eeprom) {
0851
0852 state->ir_mode = 0x05;
0853 state->ir_type = 0x00;
0854
0855 goto skip_eeprom;
0856 }
0857 } else if (state->chip_type == 0x9306) {
0858
0859
0860
0861
0862 if ((le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA) &&
0863 (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_AVERMEDIA_TD310)) {
0864 state->it930x_addresses = 1;
0865 }
0866 return 0;
0867 }
0868
0869
0870 state->ir_mode = state->eeprom[EEPROM_IR_MODE];
0871 state->ir_type = state->eeprom[EEPROM_IR_TYPE];
0872
0873 if (state->dual_mode) {
0874
0875 tmp = state->eeprom[EEPROM_2ND_DEMOD_ADDR];
0876 if (tmp)
0877 state->af9033_i2c_addr[1] = tmp >> 1;
0878
0879 dev_dbg(&intf->dev, "2nd demod I2C addr=%02x\n",
0880 state->af9033_i2c_addr[1]);
0881 }
0882
0883 for (i = 0; i < state->dual_mode + 1; i++) {
0884 unsigned int eeprom_offset = 0;
0885
0886
0887 tmp = state->eeprom[EEPROM_1_TUNER_ID + eeprom_offset];
0888 dev_dbg(&intf->dev, "[%d]tuner=%02x\n", i, tmp);
0889
0890
0891 if (state->chip_type == 0x9135) {
0892 if (state->chip_version == 0x02) {
0893
0894 switch (tmp) {
0895 case AF9033_TUNER_IT9135_60:
0896 case AF9033_TUNER_IT9135_61:
0897 case AF9033_TUNER_IT9135_62:
0898 state->af9033_config[i].tuner = tmp;
0899 break;
0900 }
0901 } else {
0902
0903 switch (tmp) {
0904 case AF9033_TUNER_IT9135_38:
0905 case AF9033_TUNER_IT9135_51:
0906 case AF9033_TUNER_IT9135_52:
0907 state->af9033_config[i].tuner = tmp;
0908 break;
0909 }
0910 }
0911 } else {
0912
0913 state->af9033_config[i].tuner = tmp;
0914 }
0915
0916 if (state->af9033_config[i].tuner != tmp) {
0917 dev_info(&intf->dev, "[%d] overriding tuner from %02x to %02x\n",
0918 i, tmp, state->af9033_config[i].tuner);
0919 }
0920
0921 switch (state->af9033_config[i].tuner) {
0922 case AF9033_TUNER_TUA9001:
0923 case AF9033_TUNER_FC0011:
0924 case AF9033_TUNER_MXL5007T:
0925 case AF9033_TUNER_TDA18218:
0926 case AF9033_TUNER_FC2580:
0927 case AF9033_TUNER_FC0012:
0928 state->af9033_config[i].spec_inv = 1;
0929 break;
0930 case AF9033_TUNER_IT9135_38:
0931 case AF9033_TUNER_IT9135_51:
0932 case AF9033_TUNER_IT9135_52:
0933 case AF9033_TUNER_IT9135_60:
0934 case AF9033_TUNER_IT9135_61:
0935 case AF9033_TUNER_IT9135_62:
0936 break;
0937 default:
0938 dev_warn(&intf->dev, "tuner id=%02x not supported, please report!",
0939 tmp);
0940 }
0941
0942
0943 if (i == 1)
0944 switch (state->af9033_config[i].tuner) {
0945 case AF9033_TUNER_FC0012:
0946 case AF9033_TUNER_IT9135_38:
0947 case AF9033_TUNER_IT9135_51:
0948 case AF9033_TUNER_IT9135_52:
0949 case AF9033_TUNER_IT9135_60:
0950 case AF9033_TUNER_IT9135_61:
0951 case AF9033_TUNER_IT9135_62:
0952 case AF9033_TUNER_MXL5007T:
0953 break;
0954 default:
0955 state->dual_mode = false;
0956 dev_info(&intf->dev, "driver does not support 2nd tuner and will disable it");
0957 }
0958
0959
0960 tmp = state->eeprom[EEPROM_1_IF_L + eeprom_offset];
0961 tmp16 = tmp << 0;
0962 tmp = state->eeprom[EEPROM_1_IF_H + eeprom_offset];
0963 tmp16 |= tmp << 8;
0964 dev_dbg(&intf->dev, "[%d]IF=%d\n", i, tmp16);
0965
0966 eeprom_offset += 0x10;
0967 }
0968
0969 skip_eeprom:
0970
0971 ret = af9035_rd_reg(d, 0x00d800, &tmp);
0972 if (ret < 0)
0973 goto err;
0974
0975 tmp = (tmp >> 0) & 0x0f;
0976
0977 for (i = 0; i < ARRAY_SIZE(state->af9033_config); i++) {
0978 if (state->chip_type == 0x9135)
0979 state->af9033_config[i].clock = clock_lut_it9135[tmp];
0980 else
0981 state->af9033_config[i].clock = clock_lut_af9035[tmp];
0982 }
0983
0984 state->no_read = false;
0985
0986 if (state->af9033_config[0].tuner == AF9033_TUNER_MXL5007T &&
0987 le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA)
0988
0989 switch (le16_to_cpu(d->udev->descriptor.idProduct)) {
0990 case USB_PID_AVERMEDIA_A867:
0991 case USB_PID_AVERMEDIA_TWINSTAR:
0992 dev_info(&intf->dev,
0993 "Device may have issues with I2C read operations. Enabling fix.\n");
0994 state->no_read = true;
0995 break;
0996 }
0997
0998 return 0;
0999
1000 err:
1001 dev_dbg(&intf->dev, "failed=%d\n", ret);
1002
1003 return ret;
1004 }
1005
1006 static int af9035_tua9001_tuner_callback(struct dvb_usb_device *d,
1007 int cmd, int arg)
1008 {
1009 struct usb_interface *intf = d->intf;
1010 int ret;
1011 u8 val;
1012
1013 dev_dbg(&intf->dev, "cmd=%d arg=%d\n", cmd, arg);
1014
1015
1016
1017
1018
1019
1020
1021 switch (cmd) {
1022 case TUA9001_CMD_RESETN:
1023 if (arg)
1024 val = 0x00;
1025 else
1026 val = 0x01;
1027
1028 ret = af9035_wr_reg_mask(d, 0x00d8e7, val, 0x01);
1029 if (ret < 0)
1030 goto err;
1031 break;
1032 case TUA9001_CMD_RXEN:
1033 if (arg)
1034 val = 0x01;
1035 else
1036 val = 0x00;
1037
1038 ret = af9035_wr_reg_mask(d, 0x00d8eb, val, 0x01);
1039 if (ret < 0)
1040 goto err;
1041 break;
1042 }
1043
1044 return 0;
1045
1046 err:
1047 dev_dbg(&intf->dev, "failed=%d\n", ret);
1048
1049 return ret;
1050 }
1051
1052
1053 static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d,
1054 int cmd, int arg)
1055 {
1056 struct usb_interface *intf = d->intf;
1057 int ret;
1058
1059 switch (cmd) {
1060 case FC0011_FE_CALLBACK_POWER:
1061
1062 ret = af9035_wr_reg_mask(d, 0xd8eb, 1, 1);
1063 if (ret < 0)
1064 goto err;
1065
1066 ret = af9035_wr_reg_mask(d, 0xd8ec, 1, 1);
1067 if (ret < 0)
1068 goto err;
1069
1070 ret = af9035_wr_reg_mask(d, 0xd8ed, 1, 1);
1071 if (ret < 0)
1072 goto err;
1073
1074
1075 ret = af9035_wr_reg_mask(d, 0xd8d0, 1, 1);
1076 if (ret < 0)
1077 goto err;
1078
1079 ret = af9035_wr_reg_mask(d, 0xd8d1, 1, 1);
1080 if (ret < 0)
1081 goto err;
1082
1083 usleep_range(10000, 50000);
1084 break;
1085 case FC0011_FE_CALLBACK_RESET:
1086 ret = af9035_wr_reg(d, 0xd8e9, 1);
1087 if (ret < 0)
1088 goto err;
1089
1090 ret = af9035_wr_reg(d, 0xd8e8, 1);
1091 if (ret < 0)
1092 goto err;
1093
1094 ret = af9035_wr_reg(d, 0xd8e7, 1);
1095 if (ret < 0)
1096 goto err;
1097
1098 usleep_range(10000, 20000);
1099
1100 ret = af9035_wr_reg(d, 0xd8e7, 0);
1101 if (ret < 0)
1102 goto err;
1103
1104 usleep_range(10000, 20000);
1105 break;
1106 default:
1107 ret = -EINVAL;
1108 goto err;
1109 }
1110
1111 return 0;
1112
1113 err:
1114 dev_dbg(&intf->dev, "failed=%d\n", ret);
1115
1116 return ret;
1117 }
1118
1119 static int af9035_tuner_callback(struct dvb_usb_device *d, int cmd, int arg)
1120 {
1121 struct state *state = d_to_priv(d);
1122
1123 switch (state->af9033_config[0].tuner) {
1124 case AF9033_TUNER_FC0011:
1125 return af9035_fc0011_tuner_callback(d, cmd, arg);
1126 case AF9033_TUNER_TUA9001:
1127 return af9035_tua9001_tuner_callback(d, cmd, arg);
1128 default:
1129 break;
1130 }
1131
1132 return 0;
1133 }
1134
1135 static int af9035_frontend_callback(void *adapter_priv, int component,
1136 int cmd, int arg)
1137 {
1138 struct i2c_adapter *adap = adapter_priv;
1139 struct dvb_usb_device *d = i2c_get_adapdata(adap);
1140 struct usb_interface *intf = d->intf;
1141
1142 dev_dbg(&intf->dev, "component=%d cmd=%d arg=%d\n",
1143 component, cmd, arg);
1144
1145 switch (component) {
1146 case DVB_FRONTEND_COMPONENT_TUNER:
1147 return af9035_tuner_callback(d, cmd, arg);
1148 default:
1149 break;
1150 }
1151
1152 return 0;
1153 }
1154
1155 static int af9035_get_adapter_count(struct dvb_usb_device *d)
1156 {
1157 struct state *state = d_to_priv(d);
1158
1159 return state->dual_mode + 1;
1160 }
1161
1162 static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
1163 {
1164 struct state *state = adap_to_priv(adap);
1165 struct dvb_usb_device *d = adap_to_d(adap);
1166 struct usb_interface *intf = d->intf;
1167 int ret;
1168
1169 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1170
1171 if (!state->af9033_config[adap->id].tuner) {
1172
1173 ret = -ENODEV;
1174 goto err;
1175 }
1176
1177 state->af9033_config[adap->id].fe = &adap->fe[0];
1178 state->af9033_config[adap->id].ops = &state->ops;
1179 ret = af9035_add_i2c_dev(d, "af9033", state->af9033_i2c_addr[adap->id],
1180 &state->af9033_config[adap->id], &d->i2c_adap);
1181 if (ret)
1182 goto err;
1183
1184 if (adap->fe[0] == NULL) {
1185 ret = -ENODEV;
1186 goto err;
1187 }
1188
1189
1190 adap->fe[0]->ops.i2c_gate_ctrl = NULL;
1191 adap->fe[0]->callback = af9035_frontend_callback;
1192
1193 return 0;
1194
1195 err:
1196 dev_dbg(&intf->dev, "failed=%d\n", ret);
1197
1198 return ret;
1199 }
1200
1201
1202
1203
1204
1205
1206
1207
1208 #define I2C_SPEED_366K 7
1209
1210 static int it930x_frontend_attach(struct dvb_usb_adapter *adap)
1211 {
1212 struct state *state = adap_to_priv(adap);
1213 struct dvb_usb_device *d = adap_to_d(adap);
1214 struct usb_interface *intf = d->intf;
1215 int ret;
1216 struct si2168_config si2168_config;
1217 struct i2c_adapter *adapter;
1218
1219 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1220
1221
1222 ret = af9035_wr_reg(d, 0x00f6a7, I2C_SPEED_366K);
1223 if (ret < 0)
1224 goto err;
1225
1226
1227 ret = af9035_wr_reg(d, 0x00f103, I2C_SPEED_366K);
1228 if (ret < 0)
1229 goto err;
1230
1231
1232 ret = af9035_wr_reg_mask(d, 0xd8d4, 0x01, 0x01);
1233 if (ret < 0)
1234 goto err;
1235
1236 ret = af9035_wr_reg_mask(d, 0xd8d5, 0x01, 0x01);
1237 if (ret < 0)
1238 goto err;
1239
1240 ret = af9035_wr_reg_mask(d, 0xd8d3, 0x01, 0x01);
1241 if (ret < 0)
1242 goto err;
1243
1244
1245 ret = af9035_wr_reg_mask(d, 0xd8b8, 0x01, 0x01);
1246 if (ret < 0)
1247 goto err;
1248
1249 ret = af9035_wr_reg_mask(d, 0xd8b9, 0x01, 0x01);
1250 if (ret < 0)
1251 goto err;
1252
1253 ret = af9035_wr_reg_mask(d, 0xd8b7, 0x00, 0x01);
1254 if (ret < 0)
1255 goto err;
1256
1257 msleep(200);
1258
1259 ret = af9035_wr_reg_mask(d, 0xd8b7, 0x01, 0x01);
1260 if (ret < 0)
1261 goto err;
1262
1263 memset(&si2168_config, 0, sizeof(si2168_config));
1264 si2168_config.i2c_adapter = &adapter;
1265 si2168_config.fe = &adap->fe[0];
1266 si2168_config.ts_mode = SI2168_TS_SERIAL;
1267
1268 state->af9033_config[adap->id].fe = &adap->fe[0];
1269 state->af9033_config[adap->id].ops = &state->ops;
1270 ret = af9035_add_i2c_dev(d, "si2168",
1271 it930x_addresses_table[state->it930x_addresses].frontend_i2c_addr,
1272 &si2168_config, &d->i2c_adap);
1273 if (ret)
1274 goto err;
1275
1276 if (adap->fe[0] == NULL) {
1277 ret = -ENODEV;
1278 goto err;
1279 }
1280 state->i2c_adapter_demod = adapter;
1281
1282 return 0;
1283
1284 err:
1285 dev_dbg(&intf->dev, "failed=%d\n", ret);
1286
1287 return ret;
1288 }
1289
1290 static int af9035_frontend_detach(struct dvb_usb_adapter *adap)
1291 {
1292 struct state *state = adap_to_priv(adap);
1293 struct dvb_usb_device *d = adap_to_d(adap);
1294 struct usb_interface *intf = d->intf;
1295
1296 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1297
1298 if (adap->id == 1) {
1299 if (state->i2c_client[1])
1300 af9035_del_i2c_dev(d);
1301 } else if (adap->id == 0) {
1302 if (state->i2c_client[0])
1303 af9035_del_i2c_dev(d);
1304 }
1305
1306 return 0;
1307 }
1308
1309 static const struct fc0011_config af9035_fc0011_config = {
1310 .i2c_address = 0x60,
1311 };
1312
1313 static struct mxl5007t_config af9035_mxl5007t_config[] = {
1314 {
1315 .xtal_freq_hz = MxL_XTAL_24_MHZ,
1316 .if_freq_hz = MxL_IF_4_57_MHZ,
1317 .invert_if = 0,
1318 .loop_thru_enable = 0,
1319 .clk_out_enable = 0,
1320 .clk_out_amp = MxL_CLKOUT_AMP_0_94V,
1321 }, {
1322 .xtal_freq_hz = MxL_XTAL_24_MHZ,
1323 .if_freq_hz = MxL_IF_4_57_MHZ,
1324 .invert_if = 0,
1325 .loop_thru_enable = 1,
1326 .clk_out_enable = 1,
1327 .clk_out_amp = MxL_CLKOUT_AMP_0_94V,
1328 }
1329 };
1330
1331 static struct tda18218_config af9035_tda18218_config = {
1332 .i2c_address = 0x60,
1333 .i2c_wr_max = 21,
1334 };
1335
1336 static const struct fc0012_config af9035_fc0012_config[] = {
1337 {
1338 .i2c_address = 0x63,
1339 .xtal_freq = FC_XTAL_36_MHZ,
1340 .dual_master = true,
1341 .loop_through = true,
1342 .clock_out = true,
1343 }, {
1344 .i2c_address = 0x63 | 0x80,
1345 .xtal_freq = FC_XTAL_36_MHZ,
1346 .dual_master = true,
1347 }
1348 };
1349
1350 static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
1351 {
1352 struct state *state = adap_to_priv(adap);
1353 struct dvb_usb_device *d = adap_to_d(adap);
1354 struct usb_interface *intf = d->intf;
1355 int ret;
1356 struct dvb_frontend *fe;
1357 struct i2c_msg msg[1];
1358 u8 tuner_addr;
1359
1360 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1361
1362
1363
1364
1365
1366
1367 switch (state->af9033_config[adap->id].tuner) {
1368 case AF9033_TUNER_TUA9001: {
1369 struct tua9001_platform_data tua9001_pdata = {
1370 .dvb_frontend = adap->fe[0],
1371 };
1372
1373
1374
1375
1376
1377
1378
1379 ret = af9035_wr_reg_mask(d, 0x00d8ec, 0x01, 0x01);
1380 if (ret < 0)
1381 goto err;
1382
1383 ret = af9035_wr_reg_mask(d, 0x00d8ed, 0x01, 0x01);
1384 if (ret < 0)
1385 goto err;
1386
1387 ret = af9035_wr_reg_mask(d, 0x00d8e8, 0x01, 0x01);
1388 if (ret < 0)
1389 goto err;
1390
1391 ret = af9035_wr_reg_mask(d, 0x00d8e9, 0x01, 0x01);
1392 if (ret < 0)
1393 goto err;
1394
1395
1396 ret = af9035_add_i2c_dev(d, "tua9001", 0x60, &tua9001_pdata,
1397 &d->i2c_adap);
1398 if (ret)
1399 goto err;
1400
1401 fe = adap->fe[0];
1402 break;
1403 }
1404 case AF9033_TUNER_FC0011:
1405 fe = dvb_attach(fc0011_attach, adap->fe[0],
1406 &d->i2c_adap, &af9035_fc0011_config);
1407 break;
1408 case AF9033_TUNER_MXL5007T:
1409 if (adap->id == 0) {
1410 ret = af9035_wr_reg(d, 0x00d8e0, 1);
1411 if (ret < 0)
1412 goto err;
1413
1414 ret = af9035_wr_reg(d, 0x00d8e1, 1);
1415 if (ret < 0)
1416 goto err;
1417
1418 ret = af9035_wr_reg(d, 0x00d8df, 0);
1419 if (ret < 0)
1420 goto err;
1421
1422 msleep(30);
1423
1424 ret = af9035_wr_reg(d, 0x00d8df, 1);
1425 if (ret < 0)
1426 goto err;
1427
1428 msleep(300);
1429
1430 ret = af9035_wr_reg(d, 0x00d8c0, 1);
1431 if (ret < 0)
1432 goto err;
1433
1434 ret = af9035_wr_reg(d, 0x00d8c1, 1);
1435 if (ret < 0)
1436 goto err;
1437
1438 ret = af9035_wr_reg(d, 0x00d8bf, 0);
1439 if (ret < 0)
1440 goto err;
1441
1442 ret = af9035_wr_reg(d, 0x00d8b4, 1);
1443 if (ret < 0)
1444 goto err;
1445
1446 ret = af9035_wr_reg(d, 0x00d8b5, 1);
1447 if (ret < 0)
1448 goto err;
1449
1450 ret = af9035_wr_reg(d, 0x00d8b3, 1);
1451 if (ret < 0)
1452 goto err;
1453
1454 tuner_addr = 0x60;
1455 } else {
1456 tuner_addr = 0x60 | 0x80;
1457 }
1458
1459
1460 fe = dvb_attach(mxl5007t_attach, adap->fe[0], &d->i2c_adap,
1461 tuner_addr, &af9035_mxl5007t_config[adap->id]);
1462 break;
1463 case AF9033_TUNER_TDA18218:
1464
1465 fe = dvb_attach(tda18218_attach, adap->fe[0],
1466 &d->i2c_adap, &af9035_tda18218_config);
1467 break;
1468 case AF9033_TUNER_FC2580: {
1469 struct fc2580_platform_data fc2580_pdata = {
1470 .dvb_frontend = adap->fe[0],
1471 };
1472
1473
1474 ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
1475 if (ret < 0)
1476 goto err;
1477
1478 ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
1479 if (ret < 0)
1480 goto err;
1481
1482 ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
1483 if (ret < 0)
1484 goto err;
1485
1486 usleep_range(10000, 50000);
1487
1488 ret = af9035_add_i2c_dev(d, "fc2580", 0x56, &fc2580_pdata,
1489 &d->i2c_adap);
1490 if (ret)
1491 goto err;
1492
1493 fe = adap->fe[0];
1494 break;
1495 }
1496 case AF9033_TUNER_FC0012:
1497
1498
1499
1500
1501
1502
1503 if (adap->id == 0) {
1504
1505 ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
1506 if (ret < 0)
1507 goto err;
1508
1509 ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
1510 if (ret < 0)
1511 goto err;
1512
1513 ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
1514 if (ret < 0)
1515 goto err;
1516 } else {
1517
1518
1519
1520
1521
1522 msg[0].addr = 0x63;
1523 msg[0].flags = 0;
1524 msg[0].len = 2;
1525 msg[0].buf = "\x0d\x02";
1526 ret = i2c_transfer(&d->i2c_adap, msg, 1);
1527 if (ret < 0)
1528 goto err;
1529 }
1530
1531 usleep_range(10000, 50000);
1532
1533 fe = dvb_attach(fc0012_attach, adap->fe[0], &d->i2c_adap,
1534 &af9035_fc0012_config[adap->id]);
1535 break;
1536 case AF9033_TUNER_IT9135_38:
1537 case AF9033_TUNER_IT9135_51:
1538 case AF9033_TUNER_IT9135_52:
1539 case AF9033_TUNER_IT9135_60:
1540 case AF9033_TUNER_IT9135_61:
1541 case AF9033_TUNER_IT9135_62:
1542 {
1543 struct platform_device *pdev;
1544 const char *name;
1545 struct it913x_platform_data it913x_pdata = {
1546 .regmap = state->af9033_config[adap->id].regmap,
1547 .fe = adap->fe[0],
1548 };
1549
1550 switch (state->af9033_config[adap->id].tuner) {
1551 case AF9033_TUNER_IT9135_38:
1552 case AF9033_TUNER_IT9135_51:
1553 case AF9033_TUNER_IT9135_52:
1554 name = "it9133ax-tuner";
1555 break;
1556 case AF9033_TUNER_IT9135_60:
1557 case AF9033_TUNER_IT9135_61:
1558 case AF9033_TUNER_IT9135_62:
1559 name = "it9133bx-tuner";
1560 break;
1561 default:
1562 ret = -ENODEV;
1563 goto err;
1564 }
1565
1566 if (state->dual_mode) {
1567 if (adap->id == 0)
1568 it913x_pdata.role = IT913X_ROLE_DUAL_MASTER;
1569 else
1570 it913x_pdata.role = IT913X_ROLE_DUAL_SLAVE;
1571 } else {
1572 it913x_pdata.role = IT913X_ROLE_SINGLE;
1573 }
1574
1575 request_module("%s", "it913x");
1576 pdev = platform_device_register_data(&d->intf->dev, name,
1577 PLATFORM_DEVID_AUTO,
1578 &it913x_pdata,
1579 sizeof(it913x_pdata));
1580 if (IS_ERR(pdev) || !pdev->dev.driver) {
1581 ret = -ENODEV;
1582 goto err;
1583 }
1584 if (!try_module_get(pdev->dev.driver->owner)) {
1585 platform_device_unregister(pdev);
1586 ret = -ENODEV;
1587 goto err;
1588 }
1589
1590 state->platform_device_tuner[adap->id] = pdev;
1591 fe = adap->fe[0];
1592 break;
1593 }
1594 default:
1595 fe = NULL;
1596 }
1597
1598 if (fe == NULL) {
1599 ret = -ENODEV;
1600 goto err;
1601 }
1602
1603 return 0;
1604
1605 err:
1606 dev_dbg(&intf->dev, "failed=%d\n", ret);
1607
1608 return ret;
1609 }
1610
1611 static int it930x_tuner_attach(struct dvb_usb_adapter *adap)
1612 {
1613 struct state *state = adap_to_priv(adap);
1614 struct dvb_usb_device *d = adap_to_d(adap);
1615 struct usb_interface *intf = d->intf;
1616 int ret;
1617 struct si2157_config si2157_config;
1618
1619 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1620
1621 memset(&si2157_config, 0, sizeof(si2157_config));
1622 si2157_config.fe = adap->fe[0];
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638 if ((le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_DEXATEK &&
1639 le16_to_cpu(d->udev->descriptor.idProduct) == 0x0100) ||
1640 (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_TERRATEC &&
1641 le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_TERRATEC_CINERGY_TC2_STICK))
1642 si2157_config.dont_load_firmware = true;
1643
1644 si2157_config.if_port = it930x_addresses_table[state->it930x_addresses].tuner_if_port;
1645 ret = af9035_add_i2c_dev(d, "si2157",
1646 it930x_addresses_table[state->it930x_addresses].tuner_i2c_addr,
1647 &si2157_config, state->i2c_adapter_demod);
1648 if (ret)
1649 goto err;
1650
1651 return 0;
1652
1653 err:
1654 dev_dbg(&intf->dev, "failed=%d\n", ret);
1655
1656 return ret;
1657 }
1658
1659
1660 static int it930x_tuner_detach(struct dvb_usb_adapter *adap)
1661 {
1662 struct state *state = adap_to_priv(adap);
1663 struct dvb_usb_device *d = adap_to_d(adap);
1664 struct usb_interface *intf = d->intf;
1665
1666 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1667
1668 if (adap->id == 1) {
1669 if (state->i2c_client[3])
1670 af9035_del_i2c_dev(d);
1671 } else if (adap->id == 0) {
1672 if (state->i2c_client[1])
1673 af9035_del_i2c_dev(d);
1674 }
1675
1676 return 0;
1677 }
1678
1679
1680 static int af9035_tuner_detach(struct dvb_usb_adapter *adap)
1681 {
1682 struct state *state = adap_to_priv(adap);
1683 struct dvb_usb_device *d = adap_to_d(adap);
1684 struct usb_interface *intf = d->intf;
1685
1686 dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
1687
1688 switch (state->af9033_config[adap->id].tuner) {
1689 case AF9033_TUNER_TUA9001:
1690 case AF9033_TUNER_FC2580:
1691 if (adap->id == 1) {
1692 if (state->i2c_client[3])
1693 af9035_del_i2c_dev(d);
1694 } else if (adap->id == 0) {
1695 if (state->i2c_client[1])
1696 af9035_del_i2c_dev(d);
1697 }
1698 break;
1699 case AF9033_TUNER_IT9135_38:
1700 case AF9033_TUNER_IT9135_51:
1701 case AF9033_TUNER_IT9135_52:
1702 case AF9033_TUNER_IT9135_60:
1703 case AF9033_TUNER_IT9135_61:
1704 case AF9033_TUNER_IT9135_62:
1705 {
1706 struct platform_device *pdev;
1707
1708 pdev = state->platform_device_tuner[adap->id];
1709 if (pdev) {
1710 module_put(pdev->dev.driver->owner);
1711 platform_device_unregister(pdev);
1712 }
1713 break;
1714 }
1715 }
1716
1717 return 0;
1718 }
1719
1720 static int af9035_init(struct dvb_usb_device *d)
1721 {
1722 struct state *state = d_to_priv(d);
1723 struct usb_interface *intf = d->intf;
1724 int ret, i;
1725 u16 frame_size = (d->udev->speed == USB_SPEED_FULL ? 5 : 87) * 188 / 4;
1726 u8 packet_size = (d->udev->speed == USB_SPEED_FULL ? 64 : 512) / 4;
1727 struct reg_val_mask tab[] = {
1728 { 0x80f99d, 0x01, 0x01 },
1729 { 0x80f9a4, 0x01, 0x01 },
1730 { 0x00dd11, 0x00, 0x20 },
1731 { 0x00dd11, 0x00, 0x40 },
1732 { 0x00dd13, 0x00, 0x20 },
1733 { 0x00dd13, 0x00, 0x40 },
1734 { 0x00dd11, 0x20, 0x20 },
1735 { 0x00dd88, (frame_size >> 0) & 0xff, 0xff},
1736 { 0x00dd89, (frame_size >> 8) & 0xff, 0xff},
1737 { 0x00dd0c, packet_size, 0xff},
1738 { 0x00dd11, state->dual_mode << 6, 0x40 },
1739 { 0x00dd8a, (frame_size >> 0) & 0xff, 0xff},
1740 { 0x00dd8b, (frame_size >> 8) & 0xff, 0xff},
1741 { 0x00dd0d, packet_size, 0xff },
1742 { 0x80f9a3, state->dual_mode, 0x01 },
1743 { 0x80f9cd, state->dual_mode, 0x01 },
1744 { 0x80f99d, 0x00, 0x01 },
1745 { 0x80f9a4, 0x00, 0x01 },
1746 };
1747
1748 dev_dbg(&intf->dev, "USB speed=%d frame_size=%04x packet_size=%02x\n",
1749 d->udev->speed, frame_size, packet_size);
1750
1751
1752 for (i = 0; i < ARRAY_SIZE(tab); i++) {
1753 ret = af9035_wr_reg_mask(d, tab[i].reg, tab[i].val,
1754 tab[i].mask);
1755 if (ret < 0)
1756 goto err;
1757 }
1758
1759 return 0;
1760
1761 err:
1762 dev_dbg(&intf->dev, "failed=%d\n", ret);
1763
1764 return ret;
1765 }
1766
1767 static int it930x_init(struct dvb_usb_device *d)
1768 {
1769 struct state *state = d_to_priv(d);
1770 struct usb_interface *intf = d->intf;
1771 int ret, i;
1772 u16 frame_size = (d->udev->speed == USB_SPEED_FULL ? 5 : 816) * 188 / 4;
1773 u8 packet_size = (d->udev->speed == USB_SPEED_FULL ? 64 : 512) / 4;
1774 struct reg_val_mask tab[] = {
1775 { 0x00da1a, 0x00, 0x01 },
1776 { 0x00f41f, 0x04, 0x04 },
1777 { 0x00da10, 0x00, 0x01 },
1778 { 0x00f41a, 0x01, 0x01 },
1779 { 0x00da1d, 0x01, 0x01 },
1780 { 0x00dd11, 0x00, 0x20 },
1781 { 0x00dd13, 0x00, 0x20 },
1782 { 0x00dd11, 0x20, 0x20 },
1783 { 0x00dd11, 0x00, 0x40 },
1784 { 0x00dd13, 0x00, 0x40 },
1785 { 0x00dd11, state->dual_mode << 6, 0x40 },
1786 { 0x00dd88, (frame_size >> 0) & 0xff, 0xff},
1787 { 0x00dd89, (frame_size >> 8) & 0xff, 0xff},
1788 { 0x00dd0c, packet_size, 0xff},
1789 { 0x00dd8a, (frame_size >> 0) & 0xff, 0xff},
1790 { 0x00dd8b, (frame_size >> 8) & 0xff, 0xff},
1791 { 0x00dd0d, packet_size, 0xff },
1792 { 0x00da1d, 0x00, 0x01 },
1793 { 0x00d833, 0x01, 0xff },
1794 { 0x00d830, 0x00, 0xff },
1795 { 0x00d831, 0x01, 0xff },
1796 { 0x00d832, 0x00, 0xff },
1797
1798
1799 { 0x00d8b0, 0x01, 0xff },
1800 { 0x00d8b1, 0x01, 0xff },
1801 { 0x00d8af, 0x00, 0xff },
1802
1803
1804 { 0x00d8c4, 0x01, 0xff },
1805 { 0x00d8c5, 0x01, 0xff },
1806 { 0x00d8c3, 0x00, 0xff },
1807
1808
1809 { 0x00d8dc, 0x01, 0xff },
1810 { 0x00d8dd, 0x01, 0xff },
1811 { 0x00d8db, 0x00, 0xff },
1812
1813
1814 { 0x00d8e4, 0x01, 0xff },
1815 { 0x00d8e5, 0x01, 0xff },
1816 { 0x00d8e3, 0x00, 0xff },
1817
1818
1819 { 0x00d8e8, 0x01, 0xff },
1820 { 0x00d8e9, 0x01, 0xff },
1821 { 0x00d8e7, 0x00, 0xff },
1822
1823 { 0x00da58, 0x00, 0x01 },
1824 { 0x00da73, 0x01, 0xff },
1825 { 0x00da78, 0x47, 0xff },
1826 { 0x00da4c, 0x01, 0xff },
1827 { 0x00da5a, 0x1f, 0xff },
1828 };
1829
1830 dev_dbg(&intf->dev, "USB speed=%d frame_size=%04x packet_size=%02x\n",
1831 d->udev->speed, frame_size, packet_size);
1832
1833
1834 for (i = 0; i < ARRAY_SIZE(tab); i++) {
1835 ret = af9035_wr_reg_mask(d, tab[i].reg,
1836 tab[i].val, tab[i].mask);
1837
1838 if (ret < 0)
1839 goto err;
1840 }
1841
1842 return 0;
1843 err:
1844 dev_dbg(&intf->dev, "failed=%d\n", ret);
1845
1846 return ret;
1847 }
1848
1849
1850 #if IS_ENABLED(CONFIG_RC_CORE)
1851 static int af9035_rc_query(struct dvb_usb_device *d)
1852 {
1853 struct usb_interface *intf = d->intf;
1854 int ret;
1855 enum rc_proto proto;
1856 u32 key;
1857 u8 buf[4];
1858 struct usb_req req = { CMD_IR_GET, 0, 0, NULL, 4, buf };
1859
1860 ret = af9035_ctrl_msg(d, &req);
1861 if (ret == 1)
1862 return 0;
1863 else if (ret < 0)
1864 goto err;
1865
1866 if ((buf[2] + buf[3]) == 0xff) {
1867 if ((buf[0] + buf[1]) == 0xff) {
1868
1869 key = RC_SCANCODE_NEC(buf[0], buf[2]);
1870 proto = RC_PROTO_NEC;
1871 } else {
1872
1873 key = RC_SCANCODE_NECX(buf[0] << 8 | buf[1], buf[2]);
1874 proto = RC_PROTO_NECX;
1875 }
1876 } else {
1877
1878 key = RC_SCANCODE_NEC32(buf[0] << 24 | buf[1] << 16 |
1879 buf[2] << 8 | buf[3]);
1880 proto = RC_PROTO_NEC32;
1881 }
1882
1883 dev_dbg(&intf->dev, "%*ph\n", 4, buf);
1884
1885 rc_keydown(d->rc_dev, proto, key, 0);
1886
1887 return 0;
1888
1889 err:
1890 dev_dbg(&intf->dev, "failed=%d\n", ret);
1891
1892 return ret;
1893 }
1894
1895 static int af9035_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1896 {
1897 struct state *state = d_to_priv(d);
1898 struct usb_interface *intf = d->intf;
1899
1900 dev_dbg(&intf->dev, "ir_mode=%02x ir_type=%02x\n",
1901 state->ir_mode, state->ir_type);
1902
1903
1904 if (state->ir_mode == 0x05) {
1905 switch (state->ir_type) {
1906 case 0:
1907 default:
1908 rc->allowed_protos = RC_PROTO_BIT_NEC |
1909 RC_PROTO_BIT_NECX | RC_PROTO_BIT_NEC32;
1910 break;
1911 case 1:
1912 rc->allowed_protos = RC_PROTO_BIT_RC6_MCE;
1913 break;
1914 }
1915
1916 rc->query = af9035_rc_query;
1917 rc->interval = 500;
1918
1919
1920 if (!rc->map_name)
1921 rc->map_name = RC_MAP_EMPTY;
1922 }
1923
1924 return 0;
1925 }
1926 #else
1927 #define af9035_get_rc_config NULL
1928 #endif
1929
1930 static int af9035_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
1931 struct usb_data_stream_properties *stream)
1932 {
1933 struct dvb_usb_device *d = fe_to_d(fe);
1934 struct usb_interface *intf = d->intf;
1935
1936 dev_dbg(&intf->dev, "adap=%d\n", fe_to_adap(fe)->id);
1937
1938 if (d->udev->speed == USB_SPEED_FULL)
1939 stream->u.bulk.buffersize = 5 * 188;
1940
1941 return 0;
1942 }
1943
1944 static int af9035_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
1945 {
1946 struct state *state = adap_to_priv(adap);
1947
1948 return state->ops.pid_filter_ctrl(adap->fe[0], onoff);
1949 }
1950
1951 static int af9035_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
1952 int onoff)
1953 {
1954 struct state *state = adap_to_priv(adap);
1955
1956 return state->ops.pid_filter(adap->fe[0], index, pid, onoff);
1957 }
1958
1959 static int af9035_probe(struct usb_interface *intf,
1960 const struct usb_device_id *id)
1961 {
1962 struct usb_device *udev = interface_to_usbdev(intf);
1963 char manufacturer[sizeof("Afatech")];
1964
1965 memset(manufacturer, 0, sizeof(manufacturer));
1966 usb_string(udev, udev->descriptor.iManufacturer,
1967 manufacturer, sizeof(manufacturer));
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985 if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1986 (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1987 if (!strcmp("Afatech", manufacturer)) {
1988 dev_dbg(&udev->dev, "rejecting device\n");
1989 return -ENODEV;
1990 }
1991 }
1992
1993 return dvb_usbv2_probe(intf, id);
1994 }
1995
1996
1997
1998 static const struct dvb_usb_device_properties af9035_props = {
1999 .driver_name = KBUILD_MODNAME,
2000 .owner = THIS_MODULE,
2001 .adapter_nr = adapter_nr,
2002 .size_of_priv = sizeof(struct state),
2003
2004 .generic_bulk_ctrl_endpoint = 0x02,
2005 .generic_bulk_ctrl_endpoint_response = 0x81,
2006
2007 .identify_state = af9035_identify_state,
2008 .download_firmware = af9035_download_firmware,
2009
2010 .i2c_algo = &af9035_i2c_algo,
2011 .read_config = af9035_read_config,
2012 .frontend_attach = af9035_frontend_attach,
2013 .frontend_detach = af9035_frontend_detach,
2014 .tuner_attach = af9035_tuner_attach,
2015 .tuner_detach = af9035_tuner_detach,
2016 .init = af9035_init,
2017 .get_rc_config = af9035_get_rc_config,
2018 .get_stream_config = af9035_get_stream_config,
2019
2020 .get_adapter_count = af9035_get_adapter_count,
2021 .adapter = {
2022 {
2023 .caps = DVB_USB_ADAP_HAS_PID_FILTER |
2024 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
2025
2026 .pid_filter_count = 32,
2027 .pid_filter_ctrl = af9035_pid_filter_ctrl,
2028 .pid_filter = af9035_pid_filter,
2029
2030 .stream = DVB_USB_STREAM_BULK(0x84, 6, 87 * 188),
2031 }, {
2032 .caps = DVB_USB_ADAP_HAS_PID_FILTER |
2033 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
2034
2035 .pid_filter_count = 32,
2036 .pid_filter_ctrl = af9035_pid_filter_ctrl,
2037 .pid_filter = af9035_pid_filter,
2038
2039 .stream = DVB_USB_STREAM_BULK(0x85, 6, 87 * 188),
2040 },
2041 },
2042 };
2043
2044 static const struct dvb_usb_device_properties it930x_props = {
2045 .driver_name = KBUILD_MODNAME,
2046 .owner = THIS_MODULE,
2047 .adapter_nr = adapter_nr,
2048 .size_of_priv = sizeof(struct state),
2049
2050 .generic_bulk_ctrl_endpoint = 0x02,
2051 .generic_bulk_ctrl_endpoint_response = 0x81,
2052
2053 .identify_state = af9035_identify_state,
2054 .download_firmware = af9035_download_firmware,
2055
2056 .i2c_algo = &af9035_i2c_algo,
2057 .read_config = af9035_read_config,
2058 .frontend_attach = it930x_frontend_attach,
2059 .frontend_detach = af9035_frontend_detach,
2060 .tuner_attach = it930x_tuner_attach,
2061 .tuner_detach = it930x_tuner_detach,
2062 .init = it930x_init,
2063 .get_stream_config = af9035_get_stream_config,
2064
2065 .get_adapter_count = af9035_get_adapter_count,
2066 .adapter = {
2067 {
2068 .stream = DVB_USB_STREAM_BULK(0x84, 4, 816 * 188),
2069 }, {
2070 .stream = DVB_USB_STREAM_BULK(0x85, 4, 816 * 188),
2071 },
2072 },
2073 };
2074
2075 static const struct usb_device_id af9035_id_table[] = {
2076
2077 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_9035,
2078 &af9035_props, "Afatech AF9035 reference design", NULL) },
2079 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1000,
2080 &af9035_props, "Afatech AF9035 reference design", NULL) },
2081 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1001,
2082 &af9035_props, "Afatech AF9035 reference design", NULL) },
2083 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1002,
2084 &af9035_props, "Afatech AF9035 reference design", NULL) },
2085 { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1003,
2086 &af9035_props, "Afatech AF9035 reference design", NULL) },
2087 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK,
2088 &af9035_props, "TerraTec Cinergy T Stick", NULL) },
2089 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835,
2090 &af9035_props, "AVerMedia AVerTV Volar HD/PRO (A835)", NULL) },
2091 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_B835,
2092 &af9035_props, "AVerMedia AVerTV Volar HD/PRO (A835)", NULL) },
2093 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_1867,
2094 &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
2095 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A867,
2096 &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
2097 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TWINSTAR,
2098 &af9035_props, "AVerMedia Twinstar (A825)", NULL) },
2099 { DVB_USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100MINI_PLUS,
2100 &af9035_props, "Asus U3100Mini Plus", NULL) },
2101 { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00aa,
2102 &af9035_props, "TerraTec Cinergy T Stick (rev. 2)", NULL) },
2103 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, 0x0337,
2104 &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
2105 { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_EVOLVEO_XTRATV_STICK,
2106 &af9035_props, "EVOLVEO XtraTV stick", NULL) },
2107
2108
2109 { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135,
2110 &af9035_props, "ITE 9135 Generic", RC_MAP_IT913X_V1) },
2111 { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9005,
2112 &af9035_props, "ITE 9135(9005) Generic", RC_MAP_IT913X_V2) },
2113 { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9006,
2114 &af9035_props, "ITE 9135(9006) Generic", RC_MAP_IT913X_V1) },
2115 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_1835,
2116 &af9035_props, "Avermedia A835B(1835)", RC_MAP_IT913X_V2) },
2117 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_2835,
2118 &af9035_props, "Avermedia A835B(2835)", RC_MAP_IT913X_V2) },
2119 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_3835,
2120 &af9035_props, "Avermedia A835B(3835)", RC_MAP_IT913X_V2) },
2121 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_4835,
2122 &af9035_props, "Avermedia A835B(4835)", RC_MAP_IT913X_V2) },
2123 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TD110,
2124 &af9035_props, "Avermedia AverTV Volar HD 2 (TD110)", RC_MAP_AVERMEDIA_RM_KS) },
2125 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_H335,
2126 &af9035_props, "Avermedia H335", RC_MAP_IT913X_V2) },
2127 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB499_2T_T09,
2128 &af9035_props, "Kworld UB499-2T T09", RC_MAP_IT913X_V1) },
2129 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22_IT9137,
2130 &af9035_props, "Sveon STV22 Dual DVB-T HDTV",
2131 RC_MAP_IT913X_V1) },
2132 { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CTVDIGDUAL_V2,
2133 &af9035_props, "Digital Dual TV Receiver CTVDIGDUAL_V2",
2134 RC_MAP_IT913X_V1) },
2135 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_T1,
2136 &af9035_props, "TerraTec T1", RC_MAP_IT913X_V1) },
2137
2138 { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x0099,
2139 &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)",
2140 NULL) },
2141 { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a05,
2142 &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) },
2143 { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900,
2144 &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) },
2145 { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_78E,
2146 &af9035_props, "PCTV AndroiDTV (78e)", RC_MAP_IT913X_V1) },
2147 { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_79E,
2148 &af9035_props, "PCTV microStick (79e)", RC_MAP_IT913X_V2) },
2149
2150
2151 { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9303,
2152 &it930x_props, "ITE 9303 Generic", NULL) },
2153 { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TD310,
2154 &it930x_props, "AVerMedia TD310 DVB-T2", NULL) },
2155 { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x0100,
2156 &it930x_props, "Logilink VG0022A", NULL) },
2157 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_TC2_STICK,
2158 &it930x_props, "TerraTec Cinergy TC2 Stick", NULL) },
2159 { }
2160 };
2161 MODULE_DEVICE_TABLE(usb, af9035_id_table);
2162
2163 static struct usb_driver af9035_usb_driver = {
2164 .name = KBUILD_MODNAME,
2165 .id_table = af9035_id_table,
2166 .probe = af9035_probe,
2167 .disconnect = dvb_usbv2_disconnect,
2168 .suspend = dvb_usbv2_suspend,
2169 .resume = dvb_usbv2_resume,
2170 .reset_resume = dvb_usbv2_reset_resume,
2171 .no_dynamic_id = 1,
2172 .soft_unbind = 1,
2173 };
2174
2175 module_usb_driver(af9035_usb_driver);
2176
2177 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
2178 MODULE_DESCRIPTION("Afatech AF9035 driver");
2179 MODULE_LICENSE("GPL");
2180 MODULE_FIRMWARE(AF9035_FIRMWARE_AF9035);
2181 MODULE_FIRMWARE(AF9035_FIRMWARE_IT9135_V1);
2182 MODULE_FIRMWARE(AF9035_FIRMWARE_IT9135_V2);
2183 MODULE_FIRMWARE(AF9035_FIRMWARE_IT9303);