root/drivers/media/usb/dvb-usb-v2/af9015.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. af9015_ctrl_msg
  2. af9015_write_reg_i2c
  3. af9015_read_reg_i2c
  4. af9015_i2c_xfer
  5. af9015_i2c_func
  6. af9015_identify_state
  7. af9015_download_firmware
  8. af9015_eeprom_hash
  9. af9015_read_config
  10. af9015_get_stream_config
  11. af9015_streaming_ctrl
  12. af9015_get_adapter_count
  13. af9015_af9013_set_frontend
  14. af9015_af9013_read_status
  15. af9015_af9013_init
  16. af9015_af9013_sleep
  17. af9015_tuner_init
  18. af9015_tuner_sleep
  19. af9015_copy_firmware
  20. af9015_af9013_frontend_attach
  21. af9015_frontend_detach
  22. af9015_tuner_attach
  23. af9015_pid_filter_ctrl
  24. af9015_pid_filter
  25. af9015_init
  26. af9015_rc_setup_match
  27. af9015_rc_query
  28. af9015_get_rc_config
  29. af9015_regmap_write
  30. af9015_regmap_read
  31. af9015_probe
  32. af9015_disconnect

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
   4  *
   5  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
   6  *
   7  * Thanks to Afatech who kindly provided information.
   8  */
   9 
  10 #include "af9015.h"
  11 
  12 static int dvb_usb_af9015_remote;
  13 module_param_named(remote, dvb_usb_af9015_remote, int, 0644);
  14 MODULE_PARM_DESC(remote, "select remote");
  15 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
  16 
  17 static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req)
  18 {
  19 #define REQ_HDR_LEN 8 /* send header size */
  20 #define ACK_HDR_LEN 2 /* rece header size */
  21         struct af9015_state *state = d_to_priv(d);
  22         struct usb_interface *intf = d->intf;
  23         int ret, wlen, rlen;
  24         u8 write = 1;
  25 
  26         mutex_lock(&d->usb_mutex);
  27 
  28         state->buf[0] = req->cmd;
  29         state->buf[1] = state->seq++;
  30         state->buf[2] = req->i2c_addr << 1;
  31         state->buf[3] = req->addr >> 8;
  32         state->buf[4] = req->addr & 0xff;
  33         state->buf[5] = req->mbox;
  34         state->buf[6] = req->addr_len;
  35         state->buf[7] = req->data_len;
  36 
  37         switch (req->cmd) {
  38         case GET_CONFIG:
  39         case READ_MEMORY:
  40         case RECONNECT_USB:
  41                 write = 0;
  42                 break;
  43         case READ_I2C:
  44                 write = 0;
  45                 state->buf[2] |= 0x01; /* set I2C direction */
  46                 /* fall through */
  47         case WRITE_I2C:
  48                 state->buf[0] = READ_WRITE_I2C;
  49                 break;
  50         case WRITE_MEMORY:
  51                 if (((req->addr & 0xff00) == 0xff00) ||
  52                     ((req->addr & 0xff00) == 0xae00))
  53                         state->buf[0] = WRITE_VIRTUAL_MEMORY;
  54         case WRITE_VIRTUAL_MEMORY:
  55         case COPY_FIRMWARE:
  56         case DOWNLOAD_FIRMWARE:
  57         case BOOT:
  58                 break;
  59         default:
  60                 dev_err(&intf->dev, "unknown cmd %d\n", req->cmd);
  61                 ret = -EIO;
  62                 goto error;
  63         }
  64 
  65         /* Buffer overflow check */
  66         if ((write && (req->data_len > BUF_LEN - REQ_HDR_LEN)) ||
  67             (!write && (req->data_len > BUF_LEN - ACK_HDR_LEN))) {
  68                 dev_err(&intf->dev, "too much data, cmd %u, len %u\n",
  69                         req->cmd, req->data_len);
  70                 ret = -EINVAL;
  71                 goto error;
  72         }
  73 
  74         /*
  75          * Write receives seq + status = 2 bytes
  76          * Read receives seq + status + data = 2 + N bytes
  77          */
  78         wlen = REQ_HDR_LEN;
  79         rlen = ACK_HDR_LEN;
  80         if (write) {
  81                 wlen += req->data_len;
  82                 memcpy(&state->buf[REQ_HDR_LEN], req->data, req->data_len);
  83         } else {
  84                 rlen += req->data_len;
  85         }
  86 
  87         /* no ack for these packets */
  88         if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB)
  89                 rlen = 0;
  90 
  91         ret = dvb_usbv2_generic_rw_locked(d, state->buf, wlen,
  92                                           state->buf, rlen);
  93         if (ret)
  94                 goto error;
  95 
  96         /* check status */
  97         if (rlen && state->buf[1]) {
  98                 dev_err(&intf->dev, "cmd failed %u\n", state->buf[1]);
  99                 ret = -EIO;
 100                 goto error;
 101         }
 102 
 103         /* read request, copy returned data to return buf */
 104         if (!write)
 105                 memcpy(req->data, &state->buf[ACK_HDR_LEN], req->data_len);
 106 error:
 107         mutex_unlock(&d->usb_mutex);
 108 
 109         return ret;
 110 }
 111 
 112 static int af9015_write_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
 113                                 u8 val)
 114 {
 115         struct af9015_state *state = d_to_priv(d);
 116         struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val};
 117 
 118         if (addr == state->af9013_i2c_addr[0] ||
 119             addr == state->af9013_i2c_addr[1])
 120                 req.addr_len = 3;
 121 
 122         return af9015_ctrl_msg(d, &req);
 123 }
 124 
 125 static int af9015_read_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
 126                                u8 *val)
 127 {
 128         struct af9015_state *state = d_to_priv(d);
 129         struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val};
 130 
 131         if (addr == state->af9013_i2c_addr[0] ||
 132             addr == state->af9013_i2c_addr[1])
 133                 req.addr_len = 3;
 134 
 135         return af9015_ctrl_msg(d, &req);
 136 }
 137 
 138 static int af9015_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
 139                            int num)
 140 {
 141         struct dvb_usb_device *d = i2c_get_adapdata(adap);
 142         struct af9015_state *state = d_to_priv(d);
 143         struct usb_interface *intf = d->intf;
 144         int ret;
 145         u16 addr;
 146         u8 mbox, addr_len;
 147         struct req_t req;
 148 
 149         /*
 150          * I2C multiplexing:
 151          * There could be two tuners, both using same I2C address. Demodulator
 152          * I2C-gate is only possibility to select correct tuner.
 153          *
 154          * ...........................................
 155          * . AF9015 integrates AF9013 demodulator    .
 156          * . ____________               ____________ .             ____________
 157          * .|   USB IF   |             |   demod    |.            |   tuner    |
 158          * .|------------|             |------------|.            |------------|
 159          * .|   AF9015   |             |   AF9013   |.            |   MXL5003  |
 160          * .|            |--+--I2C-----|-----/ -----|.----I2C-----|            |
 161          * .|            |  |          | addr 0x1c  |.            |  addr 0x63 |
 162          * .|____________|  |          |____________|.            |____________|
 163          * .................|.........................
 164          *                  |           ____________               ____________
 165          *                  |          |   demod    |             |   tuner    |
 166          *                  |          |------------|             |------------|
 167          *                  |          |   AF9013   |             |   MXL5003  |
 168          *                  +--I2C-----|-----/ -----|-----I2C-----|            |
 169          *                             | addr 0x1d  |             |  addr 0x63 |
 170          *                             |____________|             |____________|
 171          */
 172 
 173         if (msg[0].len == 0 || msg[0].flags & I2C_M_RD) {
 174                 addr = 0x0000;
 175                 mbox = 0;
 176                 addr_len = 0;
 177         } else if (msg[0].len == 1) {
 178                 addr = msg[0].buf[0];
 179                 mbox = 0;
 180                 addr_len = 1;
 181         } else if (msg[0].len == 2) {
 182                 addr = msg[0].buf[0] << 8 | msg[0].buf[1] << 0;
 183                 mbox = 0;
 184                 addr_len = 2;
 185         } else {
 186                 addr = msg[0].buf[0] << 8 | msg[0].buf[1] << 0;
 187                 mbox = msg[0].buf[2];
 188                 addr_len = 3;
 189         }
 190 
 191         if (num == 1 && !(msg[0].flags & I2C_M_RD)) {
 192                 /* i2c write */
 193                 if (msg[0].len > 21) {
 194                         ret = -EOPNOTSUPP;
 195                         goto err;
 196                 }
 197                 if (msg[0].addr == state->af9013_i2c_addr[0])
 198                         req.cmd = WRITE_MEMORY;
 199                 else
 200                         req.cmd = WRITE_I2C;
 201                 req.i2c_addr = msg[0].addr;
 202                 req.addr = addr;
 203                 req.mbox = mbox;
 204                 req.addr_len = addr_len;
 205                 req.data_len = msg[0].len - addr_len;
 206                 req.data = &msg[0].buf[addr_len];
 207                 ret = af9015_ctrl_msg(d, &req);
 208         } else if (num == 2 && !(msg[0].flags & I2C_M_RD) &&
 209                    (msg[1].flags & I2C_M_RD)) {
 210                 /* i2c write + read */
 211                 if (msg[0].len > 3 || msg[1].len > 61) {
 212                         ret = -EOPNOTSUPP;
 213                         goto err;
 214                 }
 215                 if (msg[0].addr == state->af9013_i2c_addr[0])
 216                         req.cmd = READ_MEMORY;
 217                 else
 218                         req.cmd = READ_I2C;
 219                 req.i2c_addr = msg[0].addr;
 220                 req.addr = addr;
 221                 req.mbox = mbox;
 222                 req.addr_len = addr_len;
 223                 req.data_len = msg[1].len;
 224                 req.data = &msg[1].buf[0];
 225                 ret = af9015_ctrl_msg(d, &req);
 226         } else if (num == 1 && (msg[0].flags & I2C_M_RD)) {
 227                 /* i2c read */
 228                 if (msg[0].len > 61) {
 229                         ret = -EOPNOTSUPP;
 230                         goto err;
 231                 }
 232                 if (msg[0].addr == state->af9013_i2c_addr[0]) {
 233                         ret = -EINVAL;
 234                         goto err;
 235                 }
 236                 req.cmd = READ_I2C;
 237                 req.i2c_addr = msg[0].addr;
 238                 req.addr = addr;
 239                 req.mbox = mbox;
 240                 req.addr_len = addr_len;
 241                 req.data_len = msg[0].len;
 242                 req.data = &msg[0].buf[0];
 243                 ret = af9015_ctrl_msg(d, &req);
 244         } else {
 245                 ret = -EOPNOTSUPP;
 246                 dev_dbg(&intf->dev, "unknown msg, num %u\n", num);
 247         }
 248         if (ret)
 249                 goto err;
 250 
 251         return num;
 252 err:
 253         dev_dbg(&intf->dev, "failed %d\n", ret);
 254         return ret;
 255 }
 256 
 257 static u32 af9015_i2c_func(struct i2c_adapter *adapter)
 258 {
 259         return I2C_FUNC_I2C;
 260 }
 261 
 262 static struct i2c_algorithm af9015_i2c_algo = {
 263         .master_xfer = af9015_i2c_xfer,
 264         .functionality = af9015_i2c_func,
 265 };
 266 
 267 static int af9015_identify_state(struct dvb_usb_device *d, const char **name)
 268 {
 269         struct usb_interface *intf = d->intf;
 270         int ret;
 271         u8 reply;
 272         struct req_t req = {GET_CONFIG, 0, 0, 0, 0, 1, &reply};
 273 
 274         ret = af9015_ctrl_msg(d, &req);
 275         if (ret)
 276                 return ret;
 277 
 278         dev_dbg(&intf->dev, "reply %02x\n", reply);
 279 
 280         if (reply == 0x02)
 281                 ret = WARM;
 282         else
 283                 ret = COLD;
 284 
 285         return ret;
 286 }
 287 
 288 static int af9015_download_firmware(struct dvb_usb_device *d,
 289                                     const struct firmware *firmware)
 290 {
 291         struct af9015_state *state = d_to_priv(d);
 292         struct usb_interface *intf = d->intf;
 293         int ret, i, rem;
 294         struct req_t req = {DOWNLOAD_FIRMWARE, 0, 0, 0, 0, 0, NULL};
 295         u16 checksum;
 296 
 297         dev_dbg(&intf->dev, "\n");
 298 
 299         /* Calc checksum, we need it when copy firmware to slave demod */
 300         for (i = 0, checksum = 0; i < firmware->size; i++)
 301                 checksum += firmware->data[i];
 302 
 303         state->firmware_size = firmware->size;
 304         state->firmware_checksum = checksum;
 305 
 306         #define LEN_MAX (BUF_LEN - REQ_HDR_LEN) /* Max payload size */
 307         for (rem = firmware->size; rem > 0; rem -= LEN_MAX) {
 308                 req.data_len = min(LEN_MAX, rem);
 309                 req.data = (u8 *)&firmware->data[firmware->size - rem];
 310                 req.addr = 0x5100 + firmware->size - rem;
 311                 ret = af9015_ctrl_msg(d, &req);
 312                 if (ret) {
 313                         dev_err(&intf->dev, "firmware download failed %d\n",
 314                                 ret);
 315                         goto err;
 316                 }
 317         }
 318 
 319         req.cmd = BOOT;
 320         req.data_len = 0;
 321         ret = af9015_ctrl_msg(d, &req);
 322         if (ret) {
 323                 dev_err(&intf->dev, "firmware boot failed %d\n", ret);
 324                 goto err;
 325         }
 326 
 327         return 0;
 328 err:
 329         dev_dbg(&intf->dev, "failed %d\n", ret);
 330         return ret;
 331 }
 332 
 333 #define AF9015_EEPROM_SIZE 256
 334 /* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */
 335 #define GOLDEN_RATIO_PRIME_32 0x9e370001UL
 336 
 337 /* hash (and dump) eeprom */
 338 static int af9015_eeprom_hash(struct dvb_usb_device *d)
 339 {
 340         struct af9015_state *state = d_to_priv(d);
 341         struct usb_interface *intf = d->intf;
 342         int ret, i;
 343         u8 buf[AF9015_EEPROM_SIZE];
 344         struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, NULL};
 345 
 346         /* read eeprom */
 347         for (i = 0; i < AF9015_EEPROM_SIZE; i++) {
 348                 req.addr = i;
 349                 req.data = &buf[i];
 350                 ret = af9015_ctrl_msg(d, &req);
 351                 if (ret < 0)
 352                         goto err;
 353         }
 354 
 355         /* calculate checksum */
 356         for (i = 0; i < AF9015_EEPROM_SIZE / sizeof(u32); i++) {
 357                 state->eeprom_sum *= GOLDEN_RATIO_PRIME_32;
 358                 state->eeprom_sum += le32_to_cpu(((__le32 *)buf)[i]);
 359         }
 360 
 361         for (i = 0; i < AF9015_EEPROM_SIZE; i += 16)
 362                 dev_dbg(&intf->dev, "%*ph\n", 16, buf + i);
 363 
 364         dev_dbg(&intf->dev, "eeprom sum %.8x\n", state->eeprom_sum);
 365         return 0;
 366 err:
 367         dev_dbg(&intf->dev, "failed %d\n", ret);
 368         return ret;
 369 }
 370 
 371 static int af9015_read_config(struct dvb_usb_device *d)
 372 {
 373         struct af9015_state *state = d_to_priv(d);
 374         struct usb_interface *intf = d->intf;
 375         int ret;
 376         u8 val, i, offset = 0;
 377         struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
 378 
 379         dev_dbg(&intf->dev, "\n");
 380 
 381         /* IR remote controller */
 382         req.addr = AF9015_EEPROM_IR_MODE;
 383         /* first message will timeout often due to possible hw bug */
 384         for (i = 0; i < 4; i++) {
 385                 ret = af9015_ctrl_msg(d, &req);
 386                 if (!ret)
 387                         break;
 388         }
 389         if (ret)
 390                 goto error;
 391 
 392         ret = af9015_eeprom_hash(d);
 393         if (ret)
 394                 goto error;
 395 
 396         state->ir_mode = val;
 397         dev_dbg(&intf->dev, "ir mode %02x\n", val);
 398 
 399         /* TS mode - one or two receivers */
 400         req.addr = AF9015_EEPROM_TS_MODE;
 401         ret = af9015_ctrl_msg(d, &req);
 402         if (ret)
 403                 goto error;
 404 
 405         state->dual_mode = val;
 406         dev_dbg(&intf->dev, "ts mode %02x\n", state->dual_mode);
 407 
 408         state->af9013_i2c_addr[0] = AF9015_I2C_DEMOD;
 409 
 410         if (state->dual_mode) {
 411                 /* read 2nd demodulator I2C address */
 412                 req.addr = AF9015_EEPROM_DEMOD2_I2C;
 413                 ret = af9015_ctrl_msg(d, &req);
 414                 if (ret)
 415                         goto error;
 416 
 417                 state->af9013_i2c_addr[1] = val >> 1;
 418         }
 419 
 420         for (i = 0; i < state->dual_mode + 1; i++) {
 421                 if (i == 1)
 422                         offset = AF9015_EEPROM_OFFSET;
 423                 /* xtal */
 424                 req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset;
 425                 ret = af9015_ctrl_msg(d, &req);
 426                 if (ret)
 427                         goto error;
 428                 switch (val) {
 429                 case 0:
 430                         state->af9013_pdata[i].clk = 28800000;
 431                         break;
 432                 case 1:
 433                         state->af9013_pdata[i].clk = 20480000;
 434                         break;
 435                 case 2:
 436                         state->af9013_pdata[i].clk = 28000000;
 437                         break;
 438                 case 3:
 439                         state->af9013_pdata[i].clk = 25000000;
 440                         break;
 441                 }
 442                 dev_dbg(&intf->dev, "[%d] xtal %02x, clk %u\n",
 443                         i, val, state->af9013_pdata[i].clk);
 444 
 445                 /* IF frequency */
 446                 req.addr = AF9015_EEPROM_IF1H + offset;
 447                 ret = af9015_ctrl_msg(d, &req);
 448                 if (ret)
 449                         goto error;
 450 
 451                 state->af9013_pdata[i].if_frequency = val << 8;
 452 
 453                 req.addr = AF9015_EEPROM_IF1L + offset;
 454                 ret = af9015_ctrl_msg(d, &req);
 455                 if (ret)
 456                         goto error;
 457 
 458                 state->af9013_pdata[i].if_frequency += val;
 459                 state->af9013_pdata[i].if_frequency *= 1000;
 460                 dev_dbg(&intf->dev, "[%d] if frequency %u\n",
 461                         i, state->af9013_pdata[i].if_frequency);
 462 
 463                 /* MT2060 IF1 */
 464                 req.addr = AF9015_EEPROM_MT2060_IF1H  + offset;
 465                 ret = af9015_ctrl_msg(d, &req);
 466                 if (ret)
 467                         goto error;
 468                 state->mt2060_if1[i] = val << 8;
 469                 req.addr = AF9015_EEPROM_MT2060_IF1L + offset;
 470                 ret = af9015_ctrl_msg(d, &req);
 471                 if (ret)
 472                         goto error;
 473                 state->mt2060_if1[i] += val;
 474                 dev_dbg(&intf->dev, "[%d] MT2060 IF1 %u\n",
 475                         i, state->mt2060_if1[i]);
 476 
 477                 /* tuner */
 478                 req.addr =  AF9015_EEPROM_TUNER_ID1 + offset;
 479                 ret = af9015_ctrl_msg(d, &req);
 480                 if (ret)
 481                         goto error;
 482                 switch (val) {
 483                 case AF9013_TUNER_ENV77H11D5:
 484                 case AF9013_TUNER_MT2060:
 485                 case AF9013_TUNER_QT1010:
 486                 case AF9013_TUNER_UNKNOWN:
 487                 case AF9013_TUNER_MT2060_2:
 488                 case AF9013_TUNER_TDA18271:
 489                 case AF9013_TUNER_QT1010A:
 490                 case AF9013_TUNER_TDA18218:
 491                         state->af9013_pdata[i].spec_inv = 1;
 492                         break;
 493                 case AF9013_TUNER_MXL5003D:
 494                 case AF9013_TUNER_MXL5005D:
 495                 case AF9013_TUNER_MXL5005R:
 496                 case AF9013_TUNER_MXL5007T:
 497                         state->af9013_pdata[i].spec_inv = 0;
 498                         break;
 499                 case AF9013_TUNER_MC44S803:
 500                         state->af9013_pdata[i].gpio[1] = AF9013_GPIO_LO;
 501                         state->af9013_pdata[i].spec_inv = 1;
 502                         break;
 503                 default:
 504                         dev_err(&intf->dev,
 505                                 "tuner id %02x not supported, please report!\n",
 506                                 val);
 507                         return -ENODEV;
 508                 }
 509 
 510                 state->af9013_pdata[i].tuner = val;
 511                 dev_dbg(&intf->dev, "[%d] tuner id %02x\n", i, val);
 512         }
 513 
 514 error:
 515         if (ret)
 516                 dev_err(&intf->dev, "eeprom read failed %d\n", ret);
 517 
 518         /*
 519          * AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
 520          * content :-( Override some wrong values here. Ditto for the
 521          * AVerTV Red HD+ (A850T) device.
 522          */
 523         if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
 524             ((le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_AVERMEDIA_A850) ||
 525             (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_AVERMEDIA_A850T))) {
 526                 dev_dbg(&intf->dev, "AverMedia A850: overriding config\n");
 527                 /* disable dual mode */
 528                 state->dual_mode = 0;
 529 
 530                 /* set correct IF */
 531                 state->af9013_pdata[0].if_frequency = 4570000;
 532         }
 533 
 534         return ret;
 535 }
 536 
 537 static int af9015_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
 538                                     struct usb_data_stream_properties *stream)
 539 {
 540         struct dvb_usb_device *d = fe_to_d(fe);
 541         struct usb_interface *intf = d->intf;
 542 
 543         dev_dbg(&intf->dev, "adap %u\n", fe_to_adap(fe)->id);
 544 
 545         if (d->udev->speed == USB_SPEED_FULL)
 546                 stream->u.bulk.buffersize = 5 * 188;
 547 
 548         return 0;
 549 }
 550 
 551 static int af9015_streaming_ctrl(struct dvb_frontend *fe, int onoff)
 552 {
 553         struct dvb_usb_device *d = fe_to_d(fe);
 554         struct af9015_state *state = d_to_priv(d);
 555         struct usb_interface *intf = d->intf;
 556         int ret;
 557         unsigned int utmp1, utmp2, reg1, reg2;
 558         u8 buf[2];
 559         const unsigned int adap_id = fe_to_adap(fe)->id;
 560 
 561         dev_dbg(&intf->dev, "adap id %d, onoff %d\n", adap_id, onoff);
 562 
 563         if (!state->usb_ts_if_configured[adap_id]) {
 564                 dev_dbg(&intf->dev, "set usb and ts interface\n");
 565 
 566                 /* USB IF stream settings */
 567                 utmp1 = (d->udev->speed == USB_SPEED_FULL ? 5 : 87) * 188 / 4;
 568                 utmp2 = (d->udev->speed == USB_SPEED_FULL ? 64 : 512) / 4;
 569 
 570                 buf[0] = (utmp1 >> 0) & 0xff;
 571                 buf[1] = (utmp1 >> 8) & 0xff;
 572                 if (adap_id == 0) {
 573                         /* 1st USB IF (EP4) stream settings */
 574                         reg1 = 0xdd88;
 575                         reg2 = 0xdd0c;
 576                 } else {
 577                         /* 2nd USB IF (EP5) stream settings */
 578                         reg1 = 0xdd8a;
 579                         reg2 = 0xdd0d;
 580                 }
 581                 ret = regmap_bulk_write(state->regmap, reg1, buf, 2);
 582                 if (ret)
 583                         goto err;
 584                 ret = regmap_write(state->regmap, reg2, utmp2);
 585                 if (ret)
 586                         goto err;
 587 
 588                 /* TS IF settings */
 589                 if (state->dual_mode) {
 590                         utmp1 = 0x01;
 591                         utmp2 = 0x10;
 592                 } else {
 593                         utmp1 = 0x00;
 594                         utmp2 = 0x00;
 595                 }
 596                 ret = regmap_update_bits(state->regmap, 0xd50b, 0x01, utmp1);
 597                 if (ret)
 598                         goto err;
 599                 ret = regmap_update_bits(state->regmap, 0xd520, 0x10, utmp2);
 600                 if (ret)
 601                         goto err;
 602 
 603                 state->usb_ts_if_configured[adap_id] = true;
 604         }
 605 
 606         if (adap_id == 0 && onoff) {
 607                 /* Adapter 0 stream on. EP4: clear NAK, enable, clear reset */
 608                 ret = regmap_update_bits(state->regmap, 0xdd13, 0x20, 0x00);
 609                 if (ret)
 610                         goto err;
 611                 ret = regmap_update_bits(state->regmap, 0xdd11, 0x20, 0x20);
 612                 if (ret)
 613                         goto err;
 614                 ret = regmap_update_bits(state->regmap, 0xd507, 0x04, 0x00);
 615                 if (ret)
 616                         goto err;
 617         } else if (adap_id == 1 && onoff) {
 618                 /* Adapter 1 stream on. EP5: clear NAK, enable, clear reset */
 619                 ret = regmap_update_bits(state->regmap, 0xdd13, 0x40, 0x00);
 620                 if (ret)
 621                         goto err;
 622                 ret = regmap_update_bits(state->regmap, 0xdd11, 0x40, 0x40);
 623                 if (ret)
 624                         goto err;
 625                 ret = regmap_update_bits(state->regmap, 0xd50b, 0x02, 0x00);
 626                 if (ret)
 627                         goto err;
 628         } else if (adap_id == 0 && !onoff) {
 629                 /* Adapter 0 stream off. EP4: set reset, disable, set NAK */
 630                 ret = regmap_update_bits(state->regmap, 0xd507, 0x04, 0x04);
 631                 if (ret)
 632                         goto err;
 633                 ret = regmap_update_bits(state->regmap, 0xdd11, 0x20, 0x00);
 634                 if (ret)
 635                         goto err;
 636                 ret = regmap_update_bits(state->regmap, 0xdd13, 0x20, 0x20);
 637                 if (ret)
 638                         goto err;
 639         } else if (adap_id == 1 && !onoff) {
 640                 /* Adapter 1 stream off. EP5: set reset, disable, set NAK */
 641                 ret = regmap_update_bits(state->regmap, 0xd50b, 0x02, 0x02);
 642                 if (ret)
 643                         goto err;
 644                 ret = regmap_update_bits(state->regmap, 0xdd11, 0x40, 0x00);
 645                 if (ret)
 646                         goto err;
 647                 ret = regmap_update_bits(state->regmap, 0xdd13, 0x40, 0x40);
 648                 if (ret)
 649                         goto err;
 650         }
 651 
 652         return 0;
 653 err:
 654         dev_dbg(&intf->dev, "failed %d\n", ret);
 655         return ret;
 656 }
 657 
 658 static int af9015_get_adapter_count(struct dvb_usb_device *d)
 659 {
 660         struct af9015_state *state = d_to_priv(d);
 661 
 662         return state->dual_mode + 1;
 663 }
 664 
 665 /* override demod callbacks for resource locking */
 666 static int af9015_af9013_set_frontend(struct dvb_frontend *fe)
 667 {
 668         int ret;
 669         struct af9015_state *state = fe_to_priv(fe);
 670 
 671         if (mutex_lock_interruptible(&state->fe_mutex))
 672                 return -EAGAIN;
 673 
 674         ret = state->set_frontend[fe_to_adap(fe)->id](fe);
 675 
 676         mutex_unlock(&state->fe_mutex);
 677 
 678         return ret;
 679 }
 680 
 681 /* override demod callbacks for resource locking */
 682 static int af9015_af9013_read_status(struct dvb_frontend *fe,
 683                                      enum fe_status *status)
 684 {
 685         int ret;
 686         struct af9015_state *state = fe_to_priv(fe);
 687 
 688         if (mutex_lock_interruptible(&state->fe_mutex))
 689                 return -EAGAIN;
 690 
 691         ret = state->read_status[fe_to_adap(fe)->id](fe, status);
 692 
 693         mutex_unlock(&state->fe_mutex);
 694 
 695         return ret;
 696 }
 697 
 698 /* override demod callbacks for resource locking */
 699 static int af9015_af9013_init(struct dvb_frontend *fe)
 700 {
 701         int ret;
 702         struct af9015_state *state = fe_to_priv(fe);
 703 
 704         if (mutex_lock_interruptible(&state->fe_mutex))
 705                 return -EAGAIN;
 706 
 707         ret = state->init[fe_to_adap(fe)->id](fe);
 708 
 709         mutex_unlock(&state->fe_mutex);
 710 
 711         return ret;
 712 }
 713 
 714 /* override demod callbacks for resource locking */
 715 static int af9015_af9013_sleep(struct dvb_frontend *fe)
 716 {
 717         int ret;
 718         struct af9015_state *state = fe_to_priv(fe);
 719 
 720         if (mutex_lock_interruptible(&state->fe_mutex))
 721                 return -EAGAIN;
 722 
 723         ret = state->sleep[fe_to_adap(fe)->id](fe);
 724 
 725         mutex_unlock(&state->fe_mutex);
 726 
 727         return ret;
 728 }
 729 
 730 /* override tuner callbacks for resource locking */
 731 static int af9015_tuner_init(struct dvb_frontend *fe)
 732 {
 733         int ret;
 734         struct af9015_state *state = fe_to_priv(fe);
 735 
 736         if (mutex_lock_interruptible(&state->fe_mutex))
 737                 return -EAGAIN;
 738 
 739         ret = state->tuner_init[fe_to_adap(fe)->id](fe);
 740 
 741         mutex_unlock(&state->fe_mutex);
 742 
 743         return ret;
 744 }
 745 
 746 /* override tuner callbacks for resource locking */
 747 static int af9015_tuner_sleep(struct dvb_frontend *fe)
 748 {
 749         int ret;
 750         struct af9015_state *state = fe_to_priv(fe);
 751 
 752         if (mutex_lock_interruptible(&state->fe_mutex))
 753                 return -EAGAIN;
 754 
 755         ret = state->tuner_sleep[fe_to_adap(fe)->id](fe);
 756 
 757         mutex_unlock(&state->fe_mutex);
 758 
 759         return ret;
 760 }
 761 
 762 static int af9015_copy_firmware(struct dvb_usb_device *d)
 763 {
 764         struct af9015_state *state = d_to_priv(d);
 765         struct usb_interface *intf = d->intf;
 766         int ret;
 767         unsigned long timeout;
 768         u8 val, firmware_info[4];
 769         struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, 4, firmware_info};
 770 
 771         dev_dbg(&intf->dev, "\n");
 772 
 773         firmware_info[0] = (state->firmware_size >> 8) & 0xff;
 774         firmware_info[1] = (state->firmware_size >> 0) & 0xff;
 775         firmware_info[2] = (state->firmware_checksum >> 8) & 0xff;
 776         firmware_info[3] = (state->firmware_checksum >> 0) & 0xff;
 777 
 778         /* Check whether firmware is already running */
 779         ret = af9015_read_reg_i2c(d, state->af9013_i2c_addr[1], 0x98be, &val);
 780         if (ret)
 781                 goto err;
 782 
 783         dev_dbg(&intf->dev, "firmware status %02x\n", val);
 784 
 785         if (val == 0x0c)
 786                 return 0;
 787 
 788         /* Set i2c clock to 625kHz to speed up firmware copy */
 789         ret = regmap_write(state->regmap, 0xd416, 0x04);
 790         if (ret)
 791                 goto err;
 792 
 793         /* Copy firmware from master demod to slave demod */
 794         ret = af9015_ctrl_msg(d, &req);
 795         if (ret) {
 796                 dev_err(&intf->dev, "firmware copy cmd failed %d\n", ret);
 797                 goto err;
 798         }
 799 
 800         /* Set i2c clock to 125kHz */
 801         ret = regmap_write(state->regmap, 0xd416, 0x14);
 802         if (ret)
 803                 goto err;
 804 
 805         /* Boot firmware */
 806         ret = af9015_write_reg_i2c(d, state->af9013_i2c_addr[1], 0xe205, 0x01);
 807         if (ret)
 808                 goto err;
 809 
 810         /* Poll firmware ready */
 811         for (val = 0x00, timeout = jiffies + msecs_to_jiffies(1000);
 812              !time_after(jiffies, timeout) && val != 0x0c && val != 0x04;) {
 813                 msleep(20);
 814 
 815                 /* Check firmware status. 0c=OK, 04=fail */
 816                 ret = af9015_read_reg_i2c(d, state->af9013_i2c_addr[1],
 817                                           0x98be, &val);
 818                 if (ret)
 819                         goto err;
 820 
 821                 dev_dbg(&intf->dev, "firmware status %02x\n", val);
 822         }
 823 
 824         dev_dbg(&intf->dev, "firmware boot took %u ms\n",
 825                 jiffies_to_msecs(jiffies) - (jiffies_to_msecs(timeout) - 1000));
 826 
 827         if (val == 0x04) {
 828                 ret = -ENODEV;
 829                 dev_err(&intf->dev, "firmware did not run\n");
 830                 goto err;
 831         } else if (val != 0x0c) {
 832                 ret = -ETIMEDOUT;
 833                 dev_err(&intf->dev, "firmware boot timeout\n");
 834                 goto err;
 835         }
 836 
 837         return 0;
 838 err:
 839         dev_dbg(&intf->dev, "failed %d\n", ret);
 840         return ret;
 841 }
 842 
 843 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
 844 {
 845         struct af9015_state *state = adap_to_priv(adap);
 846         struct dvb_usb_device *d = adap_to_d(adap);
 847         struct usb_interface *intf = d->intf;
 848         struct i2c_client *client;
 849         int ret;
 850 
 851         dev_dbg(&intf->dev, "adap id %u\n", adap->id);
 852 
 853         if (adap->id == 0) {
 854                 state->af9013_pdata[0].ts_mode = AF9013_TS_MODE_USB;
 855                 memcpy(state->af9013_pdata[0].api_version, "\x0\x1\x9\x0", 4);
 856                 state->af9013_pdata[0].gpio[0] = AF9013_GPIO_HI;
 857                 state->af9013_pdata[0].gpio[3] = AF9013_GPIO_TUNER_ON;
 858         } else if (adap->id == 1) {
 859                 state->af9013_pdata[1].ts_mode = AF9013_TS_MODE_SERIAL;
 860                 state->af9013_pdata[1].ts_output_pin = 7;
 861                 memcpy(state->af9013_pdata[1].api_version, "\x0\x1\x9\x0", 4);
 862                 state->af9013_pdata[1].gpio[0] = AF9013_GPIO_TUNER_ON;
 863                 state->af9013_pdata[1].gpio[1] = AF9013_GPIO_LO;
 864 
 865                 /* copy firmware to 2nd demodulator */
 866                 if (state->dual_mode) {
 867                         /* Wait 2nd demodulator ready */
 868                         msleep(100);
 869 
 870                         ret = af9015_copy_firmware(adap_to_d(adap));
 871                         if (ret) {
 872                                 dev_err(&intf->dev,
 873                                         "firmware copy to 2nd frontend failed, will disable it\n");
 874                                 state->dual_mode = 0;
 875                                 goto err;
 876                         }
 877                 } else {
 878                         ret = -ENODEV;
 879                         goto err;
 880                 }
 881         }
 882 
 883         /* Add I2C demod */
 884         client = dvb_module_probe("af9013", NULL, &d->i2c_adap,
 885                                   state->af9013_i2c_addr[adap->id],
 886                                   &state->af9013_pdata[adap->id]);
 887         if (!client) {
 888                 ret = -ENODEV;
 889                 goto err;
 890         }
 891         adap->fe[0] = state->af9013_pdata[adap->id].get_dvb_frontend(client);
 892         state->demod_i2c_client[adap->id] = client;
 893 
 894         /*
 895          * AF9015 firmware does not like if it gets interrupted by I2C adapter
 896          * request on some critical phases. During normal operation I2C adapter
 897          * is used only 2nd demodulator and tuner on dual tuner devices.
 898          * Override demodulator callbacks and use mutex for limit access to
 899          * those "critical" paths to keep AF9015 happy.
 900          */
 901         if (adap->fe[0]) {
 902                 state->set_frontend[adap->id] = adap->fe[0]->ops.set_frontend;
 903                 adap->fe[0]->ops.set_frontend = af9015_af9013_set_frontend;
 904                 state->read_status[adap->id] = adap->fe[0]->ops.read_status;
 905                 adap->fe[0]->ops.read_status = af9015_af9013_read_status;
 906                 state->init[adap->id] = adap->fe[0]->ops.init;
 907                 adap->fe[0]->ops.init = af9015_af9013_init;
 908                 state->sleep[adap->id] = adap->fe[0]->ops.sleep;
 909                 adap->fe[0]->ops.sleep = af9015_af9013_sleep;
 910         }
 911 
 912         return 0;
 913 err:
 914         dev_dbg(&intf->dev, "failed %d\n", ret);
 915         return ret;
 916 }
 917 
 918 static int af9015_frontend_detach(struct dvb_usb_adapter *adap)
 919 {
 920         struct af9015_state *state = adap_to_priv(adap);
 921         struct dvb_usb_device *d = adap_to_d(adap);
 922         struct usb_interface *intf = d->intf;
 923         struct i2c_client *client;
 924 
 925         dev_dbg(&intf->dev, "adap id %u\n", adap->id);
 926 
 927         /* Remove I2C demod */
 928         client = state->demod_i2c_client[adap->id];
 929         dvb_module_release(client);
 930 
 931         return 0;
 932 }
 933 
 934 static struct mt2060_config af9015_mt2060_config = {
 935         .i2c_address = 0x60,
 936         .clock_out = 0,
 937 };
 938 
 939 static struct qt1010_config af9015_qt1010_config = {
 940         .i2c_address = 0x62,
 941 };
 942 
 943 static struct tda18271_config af9015_tda18271_config = {
 944         .gate = TDA18271_GATE_DIGITAL,
 945         .small_i2c = TDA18271_16_BYTE_CHUNK_INIT,
 946 };
 947 
 948 static struct mxl5005s_config af9015_mxl5003_config = {
 949         .i2c_address     = 0x63,
 950         .if_freq         = IF_FREQ_4570000HZ,
 951         .xtal_freq       = CRYSTAL_FREQ_16000000HZ,
 952         .agc_mode        = MXL_SINGLE_AGC,
 953         .tracking_filter = MXL_TF_DEFAULT,
 954         .rssi_enable     = MXL_RSSI_ENABLE,
 955         .cap_select      = MXL_CAP_SEL_ENABLE,
 956         .div_out         = MXL_DIV_OUT_4,
 957         .clock_out       = MXL_CLOCK_OUT_DISABLE,
 958         .output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
 959         .top             = MXL5005S_TOP_25P2,
 960         .mod_mode        = MXL_DIGITAL_MODE,
 961         .if_mode         = MXL_ZERO_IF,
 962         .AgcMasterByte   = 0x00,
 963 };
 964 
 965 static struct mxl5005s_config af9015_mxl5005_config = {
 966         .i2c_address     = 0x63,
 967         .if_freq         = IF_FREQ_4570000HZ,
 968         .xtal_freq       = CRYSTAL_FREQ_16000000HZ,
 969         .agc_mode        = MXL_SINGLE_AGC,
 970         .tracking_filter = MXL_TF_OFF,
 971         .rssi_enable     = MXL_RSSI_ENABLE,
 972         .cap_select      = MXL_CAP_SEL_ENABLE,
 973         .div_out         = MXL_DIV_OUT_4,
 974         .clock_out       = MXL_CLOCK_OUT_DISABLE,
 975         .output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
 976         .top             = MXL5005S_TOP_25P2,
 977         .mod_mode        = MXL_DIGITAL_MODE,
 978         .if_mode         = MXL_ZERO_IF,
 979         .AgcMasterByte   = 0x00,
 980 };
 981 
 982 static struct mc44s803_config af9015_mc44s803_config = {
 983         .i2c_address = 0x60,
 984         .dig_out = 1,
 985 };
 986 
 987 static struct tda18218_config af9015_tda18218_config = {
 988         .i2c_address = 0x60,
 989         .i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */
 990 };
 991 
 992 static struct mxl5007t_config af9015_mxl5007t_config = {
 993         .xtal_freq_hz = MxL_XTAL_24_MHZ,
 994         .if_freq_hz = MxL_IF_4_57_MHZ,
 995 };
 996 
 997 static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
 998 {
 999         struct dvb_usb_device *d = adap_to_d(adap);
1000         struct af9015_state *state = d_to_priv(d);
1001         struct usb_interface *intf = d->intf;
1002         struct i2c_client *client;
1003         struct i2c_adapter *adapter;
1004         int ret;
1005 
1006         dev_dbg(&intf->dev, "adap id %u\n", adap->id);
1007 
1008         client = state->demod_i2c_client[adap->id];
1009         adapter = state->af9013_pdata[adap->id].get_i2c_adapter(client);
1010 
1011         switch (state->af9013_pdata[adap->id].tuner) {
1012         case AF9013_TUNER_MT2060:
1013         case AF9013_TUNER_MT2060_2:
1014                 ret = dvb_attach(mt2060_attach, adap->fe[0], adapter,
1015                                  &af9015_mt2060_config,
1016                                  state->mt2060_if1[adap->id]) == NULL ? -ENODEV : 0;
1017                 break;
1018         case AF9013_TUNER_QT1010:
1019         case AF9013_TUNER_QT1010A:
1020                 ret = dvb_attach(qt1010_attach, adap->fe[0], adapter,
1021                                  &af9015_qt1010_config) == NULL ? -ENODEV : 0;
1022                 break;
1023         case AF9013_TUNER_TDA18271:
1024                 ret = dvb_attach(tda18271_attach, adap->fe[0], 0x60, adapter,
1025                                  &af9015_tda18271_config) == NULL ? -ENODEV : 0;
1026                 break;
1027         case AF9013_TUNER_TDA18218:
1028                 ret = dvb_attach(tda18218_attach, adap->fe[0], adapter,
1029                                  &af9015_tda18218_config) == NULL ? -ENODEV : 0;
1030                 break;
1031         case AF9013_TUNER_MXL5003D:
1032                 ret = dvb_attach(mxl5005s_attach, adap->fe[0], adapter,
1033                                  &af9015_mxl5003_config) == NULL ? -ENODEV : 0;
1034                 break;
1035         case AF9013_TUNER_MXL5005D:
1036         case AF9013_TUNER_MXL5005R:
1037                 ret = dvb_attach(mxl5005s_attach, adap->fe[0], adapter,
1038                                  &af9015_mxl5005_config) == NULL ? -ENODEV : 0;
1039                 break;
1040         case AF9013_TUNER_ENV77H11D5:
1041                 ret = dvb_attach(dvb_pll_attach, adap->fe[0], 0x60, adapter,
1042                                  DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
1043                 break;
1044         case AF9013_TUNER_MC44S803:
1045                 ret = dvb_attach(mc44s803_attach, adap->fe[0], adapter,
1046                                  &af9015_mc44s803_config) == NULL ? -ENODEV : 0;
1047                 break;
1048         case AF9013_TUNER_MXL5007T:
1049                 ret = dvb_attach(mxl5007t_attach, adap->fe[0], adapter,
1050                                  0x60, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
1051                 break;
1052         case AF9013_TUNER_UNKNOWN:
1053         default:
1054                 dev_err(&intf->dev, "unknown tuner, tuner id %02x\n",
1055                         state->af9013_pdata[adap->id].tuner);
1056                 ret = -ENODEV;
1057         }
1058 
1059         if (adap->fe[0]->ops.tuner_ops.init) {
1060                 state->tuner_init[adap->id] =
1061                         adap->fe[0]->ops.tuner_ops.init;
1062                 adap->fe[0]->ops.tuner_ops.init = af9015_tuner_init;
1063         }
1064 
1065         if (adap->fe[0]->ops.tuner_ops.sleep) {
1066                 state->tuner_sleep[adap->id] =
1067                         adap->fe[0]->ops.tuner_ops.sleep;
1068                 adap->fe[0]->ops.tuner_ops.sleep = af9015_tuner_sleep;
1069         }
1070 
1071         return ret;
1072 }
1073 
1074 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
1075 {
1076         struct af9015_state *state = adap_to_priv(adap);
1077         struct af9013_platform_data *pdata = &state->af9013_pdata[adap->id];
1078         int ret;
1079 
1080         mutex_lock(&state->fe_mutex);
1081         ret = pdata->pid_filter_ctrl(adap->fe[0], onoff);
1082         mutex_unlock(&state->fe_mutex);
1083 
1084         return ret;
1085 }
1086 
1087 static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index,
1088                              u16 pid, int onoff)
1089 {
1090         struct af9015_state *state = adap_to_priv(adap);
1091         struct af9013_platform_data *pdata = &state->af9013_pdata[adap->id];
1092         int ret;
1093 
1094         mutex_lock(&state->fe_mutex);
1095         ret = pdata->pid_filter(adap->fe[0], index, pid, onoff);
1096         mutex_unlock(&state->fe_mutex);
1097 
1098         return ret;
1099 }
1100 
1101 static int af9015_init(struct dvb_usb_device *d)
1102 {
1103         struct af9015_state *state = d_to_priv(d);
1104         struct usb_interface *intf = d->intf;
1105         int ret;
1106 
1107         dev_dbg(&intf->dev, "\n");
1108 
1109         mutex_init(&state->fe_mutex);
1110 
1111         /* init RC canary */
1112         ret = regmap_write(state->regmap, 0x98e9, 0xff);
1113         if (ret)
1114                 goto error;
1115 
1116 error:
1117         return ret;
1118 }
1119 
1120 #if IS_ENABLED(CONFIG_RC_CORE)
1121 struct af9015_rc_setup {
1122         unsigned int id;
1123         char *rc_codes;
1124 };
1125 
1126 static char *af9015_rc_setup_match(unsigned int id,
1127                                    const struct af9015_rc_setup *table)
1128 {
1129         for (; table->rc_codes; table++)
1130                 if (table->id == id)
1131                         return table->rc_codes;
1132         return NULL;
1133 }
1134 
1135 static const struct af9015_rc_setup af9015_rc_setup_modparam[] = {
1136         { AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
1137         { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
1138         { AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
1139         { AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
1140         { AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
1141         { }
1142 };
1143 
1144 static const struct af9015_rc_setup af9015_rc_setup_hashes[] = {
1145         { 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
1146         { 0xa3703d00, RC_MAP_ALINK_DTU_M },
1147         { 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
1148         { 0x5d49e3db, RC_MAP_DIGITTRADE }, /* LC-Power LC-USB-DVBT */
1149         { }
1150 };
1151 
1152 static int af9015_rc_query(struct dvb_usb_device *d)
1153 {
1154         struct af9015_state *state = d_to_priv(d);
1155         struct usb_interface *intf = d->intf;
1156         int ret;
1157         u8 buf[17];
1158 
1159         /* read registers needed to detect remote controller code */
1160         ret = regmap_bulk_read(state->regmap, 0x98d9, buf, sizeof(buf));
1161         if (ret)
1162                 goto error;
1163 
1164         /* If any of these are non-zero, assume invalid data */
1165         if (buf[1] || buf[2] || buf[3]) {
1166                 dev_dbg(&intf->dev, "invalid data\n");
1167                 return ret;
1168         }
1169 
1170         /* Check for repeat of previous code */
1171         if ((state->rc_repeat != buf[6] || buf[0]) &&
1172             !memcmp(&buf[12], state->rc_last, 4)) {
1173                 dev_dbg(&intf->dev, "key repeated\n");
1174                 rc_repeat(d->rc_dev);
1175                 state->rc_repeat = buf[6];
1176                 return ret;
1177         }
1178 
1179         /* Only process key if canary killed */
1180         if (buf[16] != 0xff && buf[0] != 0x01) {
1181                 enum rc_proto proto;
1182 
1183                 dev_dbg(&intf->dev, "key pressed %*ph\n", 4, buf + 12);
1184 
1185                 /* Reset the canary */
1186                 ret = regmap_write(state->regmap, 0x98e9, 0xff);
1187                 if (ret)
1188                         goto error;
1189 
1190                 /* Remember this key */
1191                 memcpy(state->rc_last, &buf[12], 4);
1192                 if (buf[14] == (u8)~buf[15]) {
1193                         if (buf[12] == (u8)~buf[13]) {
1194                                 /* NEC */
1195                                 state->rc_keycode = RC_SCANCODE_NEC(buf[12],
1196                                                                     buf[14]);
1197                                 proto = RC_PROTO_NEC;
1198                         } else {
1199                                 /* NEC extended*/
1200                                 state->rc_keycode = RC_SCANCODE_NECX(buf[12] << 8 |
1201                                                                      buf[13],
1202                                                                      buf[14]);
1203                                 proto = RC_PROTO_NECX;
1204                         }
1205                 } else {
1206                         /* 32 bit NEC */
1207                         state->rc_keycode = RC_SCANCODE_NEC32(buf[12] << 24 |
1208                                                               buf[13] << 16 |
1209                                                               buf[14] << 8  |
1210                                                               buf[15]);
1211                         proto = RC_PROTO_NEC32;
1212                 }
1213                 rc_keydown(d->rc_dev, proto, state->rc_keycode, 0);
1214         } else {
1215                 dev_dbg(&intf->dev, "no key press\n");
1216                 /* Invalidate last keypress */
1217                 /* Not really needed, but helps with debug */
1218                 state->rc_last[2] = state->rc_last[3];
1219         }
1220 
1221         state->rc_repeat = buf[6];
1222         state->rc_failed = false;
1223 
1224 error:
1225         if (ret) {
1226                 dev_warn(&intf->dev, "rc query failed %d\n", ret);
1227 
1228                 /* allow random errors as dvb-usb will stop polling on error */
1229                 if (!state->rc_failed)
1230                         ret = 0;
1231 
1232                 state->rc_failed = true;
1233         }
1234 
1235         return ret;
1236 }
1237 
1238 static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1239 {
1240         struct af9015_state *state = d_to_priv(d);
1241         u16 vid = le16_to_cpu(d->udev->descriptor.idVendor);
1242 
1243         if (state->ir_mode == AF9015_IR_MODE_DISABLED)
1244                 return 0;
1245 
1246         /* try to load remote based module param */
1247         if (!rc->map_name)
1248                 rc->map_name = af9015_rc_setup_match(dvb_usb_af9015_remote,
1249                                                      af9015_rc_setup_modparam);
1250 
1251         /* try to load remote based eeprom hash */
1252         if (!rc->map_name)
1253                 rc->map_name = af9015_rc_setup_match(state->eeprom_sum,
1254                                                      af9015_rc_setup_hashes);
1255 
1256         /* try to load remote based USB iManufacturer string */
1257         if (!rc->map_name && vid == USB_VID_AFATECH) {
1258                 /*
1259                  * Check USB manufacturer and product strings and try
1260                  * to determine correct remote in case of chip vendor
1261                  * reference IDs are used.
1262                  * DO NOT ADD ANYTHING NEW HERE. Use hashes instead.
1263                  */
1264                 char manufacturer[10];
1265 
1266                 memset(manufacturer, 0, sizeof(manufacturer));
1267                 usb_string(d->udev, d->udev->descriptor.iManufacturer,
1268                            manufacturer, sizeof(manufacturer));
1269                 if (!strcmp("MSI", manufacturer)) {
1270                         /*
1271                          * iManufacturer 1 MSI
1272                          * iProduct      2 MSI K-VOX
1273                          */
1274                         rc->map_name = af9015_rc_setup_match(AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
1275                                                              af9015_rc_setup_modparam);
1276                 }
1277         }
1278 
1279         /* load empty to enable rc */
1280         if (!rc->map_name)
1281                 rc->map_name = RC_MAP_EMPTY;
1282 
1283         rc->allowed_protos = RC_PROTO_BIT_NEC | RC_PROTO_BIT_NECX |
1284                                                 RC_PROTO_BIT_NEC32;
1285         rc->query = af9015_rc_query;
1286         rc->interval = 500;
1287 
1288         return 0;
1289 }
1290 #else
1291         #define af9015_get_rc_config NULL
1292 #endif
1293 
1294 static int af9015_regmap_write(void *context, const void *data, size_t count)
1295 {
1296         struct dvb_usb_device *d = context;
1297         struct usb_interface *intf = d->intf;
1298         int ret;
1299         u16 reg = ((u8 *)data)[0] << 8 | ((u8 *)data)[1] << 0;
1300         u8 *val = &((u8 *)data)[2];
1301         const unsigned int len = count - 2;
1302         struct req_t req = {WRITE_MEMORY, 0, reg, 0, 0, len, val};
1303 
1304         ret = af9015_ctrl_msg(d, &req);
1305         if (ret)
1306                 goto err;
1307 
1308         return 0;
1309 err:
1310         dev_dbg(&intf->dev, "failed %d\n", ret);
1311         return ret;
1312 }
1313 
1314 static int af9015_regmap_read(void *context, const void *reg_buf,
1315                               size_t reg_size, void *val_buf, size_t val_size)
1316 {
1317         struct dvb_usb_device *d = context;
1318         struct usb_interface *intf = d->intf;
1319         int ret;
1320         u16 reg = ((u8 *)reg_buf)[0] << 8 | ((u8 *)reg_buf)[1] << 0;
1321         u8 *val = &((u8 *)val_buf)[0];
1322         const unsigned int len = val_size;
1323         struct req_t req = {READ_MEMORY, 0, reg, 0, 0, len, val};
1324 
1325         ret = af9015_ctrl_msg(d, &req);
1326         if (ret)
1327                 goto err;
1328 
1329         return 0;
1330 err:
1331         dev_dbg(&intf->dev, "failed %d\n", ret);
1332         return ret;
1333 }
1334 
1335 static int af9015_probe(struct dvb_usb_device *d)
1336 {
1337         struct af9015_state *state = d_to_priv(d);
1338         struct usb_interface *intf = d->intf;
1339         struct usb_device *udev = interface_to_usbdev(intf);
1340         int ret;
1341         char manufacturer[sizeof("ITE Technologies, Inc.")];
1342         static const struct regmap_config regmap_config = {
1343                 .reg_bits    =  16,
1344                 .val_bits    =  8,
1345         };
1346         static const struct regmap_bus regmap_bus = {
1347                 .read = af9015_regmap_read,
1348                 .write = af9015_regmap_write,
1349         };
1350 
1351         dev_dbg(&intf->dev, "\n");
1352 
1353         memset(manufacturer, 0, sizeof(manufacturer));
1354         usb_string(udev, udev->descriptor.iManufacturer,
1355                    manufacturer, sizeof(manufacturer));
1356         /*
1357          * There is two devices having same ID but different chipset. One uses
1358          * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1359          * is iManufacturer string.
1360          *
1361          * idVendor           0x0ccd TerraTec Electronic GmbH
1362          * idProduct          0x0099
1363          * bcdDevice            2.00
1364          * iManufacturer           1 Afatech
1365          * iProduct                2 DVB-T 2
1366          *
1367          * idVendor           0x0ccd TerraTec Electronic GmbH
1368          * idProduct          0x0099
1369          * bcdDevice            2.00
1370          * iManufacturer           1 ITE Technologies, Inc.
1371          * iProduct                2 DVB-T TV Stick
1372          */
1373         if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1374             (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1375                 if (!strcmp("ITE Technologies, Inc.", manufacturer)) {
1376                         ret = -ENODEV;
1377                         dev_dbg(&intf->dev, "rejecting device\n");
1378                         goto err;
1379                 }
1380         }
1381 
1382         state->regmap = regmap_init(&intf->dev, &regmap_bus, d, &regmap_config);
1383         if (IS_ERR(state->regmap)) {
1384                 ret = PTR_ERR(state->regmap);
1385                 goto err;
1386         }
1387 
1388         return 0;
1389 err:
1390         dev_dbg(&intf->dev, "failed %d\n", ret);
1391         return ret;
1392 }
1393 
1394 static void af9015_disconnect(struct dvb_usb_device *d)
1395 {
1396         struct af9015_state *state = d_to_priv(d);
1397         struct usb_interface *intf = d->intf;
1398 
1399         dev_dbg(&intf->dev, "\n");
1400 
1401         regmap_exit(state->regmap);
1402 }
1403 
1404 /*
1405  * Interface 0 is used by DVB-T receiver and
1406  * interface 1 is for remote controller (HID)
1407  */
1408 static const struct dvb_usb_device_properties af9015_props = {
1409         .driver_name = KBUILD_MODNAME,
1410         .owner = THIS_MODULE,
1411         .adapter_nr = adapter_nr,
1412         .size_of_priv = sizeof(struct af9015_state),
1413 
1414         .generic_bulk_ctrl_endpoint = 0x02,
1415         .generic_bulk_ctrl_endpoint_response = 0x81,
1416 
1417         .probe = af9015_probe,
1418         .disconnect = af9015_disconnect,
1419         .identify_state = af9015_identify_state,
1420         .firmware = AF9015_FIRMWARE,
1421         .download_firmware = af9015_download_firmware,
1422 
1423         .i2c_algo = &af9015_i2c_algo,
1424         .read_config = af9015_read_config,
1425         .frontend_attach = af9015_af9013_frontend_attach,
1426         .frontend_detach = af9015_frontend_detach,
1427         .tuner_attach = af9015_tuner_attach,
1428         .init = af9015_init,
1429         .get_rc_config = af9015_get_rc_config,
1430         .get_stream_config = af9015_get_stream_config,
1431         .streaming_ctrl = af9015_streaming_ctrl,
1432 
1433         .get_adapter_count = af9015_get_adapter_count,
1434         .adapter = {
1435                 {
1436                         .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1437                                 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1438                         .pid_filter_count = 32,
1439                         .pid_filter = af9015_pid_filter,
1440                         .pid_filter_ctrl = af9015_pid_filter_ctrl,
1441 
1442                         .stream = DVB_USB_STREAM_BULK(0x84, 6, 87 * 188),
1443                 }, {
1444                         .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1445                                 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1446                         .pid_filter_count = 32,
1447                         .pid_filter = af9015_pid_filter,
1448                         .pid_filter_ctrl = af9015_pid_filter_ctrl,
1449 
1450                         .stream = DVB_USB_STREAM_BULK(0x85, 6, 87 * 188),
1451                 },
1452         },
1453 };
1454 
1455 static const struct usb_device_id af9015_id_table[] = {
1456         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015,
1457                 &af9015_props, "Afatech AF9015 reference design", NULL) },
1458         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016,
1459                 &af9015_props, "Afatech AF9015 reference design", NULL) },
1460         { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD,
1461                 &af9015_props, "Leadtek WinFast DTV Dongle Gold", RC_MAP_LEADTEK_Y04G0051) },
1462         { DVB_USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E,
1463                 &af9015_props, "Pinnacle PCTV 71e", NULL) },
1464         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U,
1465                 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1466         { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN,
1467                 &af9015_props, "DigitalNow TinyTwin", RC_MAP_AZUREWAVE_AD_TU700) },
1468         { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700,
1469                 &af9015_props, "TwinHan AzureWave AD-TU700(704J)", RC_MAP_AZUREWAVE_AD_TU700) },
1470         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2,
1471                 &af9015_props, "TerraTec Cinergy T USB XE", NULL) },
1472         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T,
1473                 &af9015_props, "KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)", NULL) },
1474         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X,
1475                 &af9015_props, "AVerMedia AVerTV DVB-T Volar X", RC_MAP_AVERMEDIA_M135A) },
1476         { DVB_USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380,
1477                 &af9015_props, "Xtensions XD-380", NULL) },
1478         { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO,
1479                 &af9015_props, "MSI DIGIVOX Duo", RC_MAP_MSI_DIGIVOX_III) },
1480         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2,
1481                 &af9015_props, "Fujitsu-Siemens Slim Mobile USB DVB-T", NULL) },
1482         { DVB_USB_DEVICE(USB_VID_TELESTAR,  USB_PID_TELESTAR_STARSTICK_2,
1483                 &af9015_props, "Telestar Starstick 2", NULL) },
1484         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309,
1485                 &af9015_props, "AVerMedia A309", NULL) },
1486         { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III,
1487                 &af9015_props, "MSI Digi VOX mini III", RC_MAP_MSI_DIGIVOX_III) },
1488         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U,
1489                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1490         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2,
1491                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1492         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3,
1493                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1494         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT,
1495                 &af9015_props, "TrekStor DVB-T USB Stick", RC_MAP_TREKSTOR) },
1496         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850,
1497                 &af9015_props, "AverMedia AVerTV Volar Black HD (A850)", NULL) },
1498         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805,
1499                 &af9015_props, "AverMedia AVerTV Volar GPS 805 (A805)", NULL) },
1500         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU,
1501                 &af9015_props, "Conceptronic USB2.0 DVB-T CTVDIGRCU V3.0", NULL) },
1502         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810,
1503                 &af9015_props, "KWorld Digital MC-810", NULL) },
1504         { DVB_USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03,
1505                 &af9015_props, "Genius TVGo DVB-T03", NULL) },
1506         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2,
1507                 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1508         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T,
1509                 &af9015_props, "KWorld PlusTV DVB-T PCI Pro Card (DVB-T PC160-T)", NULL) },
1510         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20,
1511                 &af9015_props, "Sveon STV20 Tuner USB DVB-T HDTV", NULL) },
1512         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2,
1513                 &af9015_props, "DigitalNow TinyTwin v2", RC_MAP_DIGITALNOW_TINYTWIN) },
1514         { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS,
1515                 &af9015_props, "Leadtek WinFast DTV2000DS", RC_MAP_LEADTEK_Y04G0051) },
1516         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T,
1517                 &af9015_props, "KWorld USB DVB-T Stick Mobile (UB383-T)", NULL) },
1518         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4,
1519                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1520         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M,
1521                 &af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) },
1522         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC,
1523                 &af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) },
1524         /* XXX: that same ID [0ccd:0099] is used by af9035 driver too */
1525         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
1526                 &af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) },
1527         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T,
1528                 &af9015_props, "AverMedia AVerTV Red HD+ (A850T)", NULL) },
1529         { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3,
1530                 &af9015_props, "DigitalNow TinyTwin v3", RC_MAP_DIGITALNOW_TINYTWIN) },
1531         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22,
1532                 &af9015_props, "Sveon STV22 Dual USB DVB-T Tuner HDTV", RC_MAP_MSI_DIGIVOX_III) },
1533         { }
1534 };
1535 MODULE_DEVICE_TABLE(usb, af9015_id_table);
1536 
1537 /* usb specific object needed to register this driver with the usb subsystem */
1538 static struct usb_driver af9015_usb_driver = {
1539         .name = KBUILD_MODNAME,
1540         .id_table = af9015_id_table,
1541         .probe = dvb_usbv2_probe,
1542         .disconnect = dvb_usbv2_disconnect,
1543         .suspend = dvb_usbv2_suspend,
1544         .resume = dvb_usbv2_resume,
1545         .reset_resume = dvb_usbv2_reset_resume,
1546         .no_dynamic_id = 1,
1547         .soft_unbind = 1,
1548 };
1549 
1550 module_usb_driver(af9015_usb_driver);
1551 
1552 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1553 MODULE_DESCRIPTION("Afatech AF9015 driver");
1554 MODULE_LICENSE("GPL");
1555 MODULE_FIRMWARE(AF9015_FIRMWARE);

/* [<][>][^][v][top][bottom][index][help] */