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