linux/drivers/media/dvb-frontends/tda10071.c
<<
>>
Prefs
   1/*
   2 * NXP TDA10071 + Conexant CX24118A DVB-S/S2 demodulator + tuner driver
   3 *
   4 * Copyright (C) 2011 Antti Palosaari <crope@iki.fi>
   5 *
   6 *    This program is free software; you can redistribute it and/or modify
   7 *    it under the terms of the GNU General Public License as published by
   8 *    the Free Software Foundation; either version 2 of the License, or
   9 *    (at your option) any later version.
  10 *
  11 *    This program is distributed in the hope that it will be useful,
  12 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *    GNU General Public License for more details.
  15 *
  16 *    You should have received a copy of the GNU General Public License along
  17 *    with this program; if not, write to the Free Software Foundation, Inc.,
  18 *    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  19 */
  20
  21#include "tda10071_priv.h"
  22
  23/* Max transfer size done by I2C transfer functions */
  24#define MAX_XFER_SIZE  64
  25
  26static struct dvb_frontend_ops tda10071_ops;
  27
  28/* write multiple registers */
  29static int tda10071_wr_regs(struct tda10071_priv *priv, u8 reg, u8 *val,
  30        int len)
  31{
  32        int ret;
  33        u8 buf[MAX_XFER_SIZE];
  34        struct i2c_msg msg[1] = {
  35                {
  36                        .addr = priv->cfg.demod_i2c_addr,
  37                        .flags = 0,
  38                        .len = 1 + len,
  39                        .buf = buf,
  40                }
  41        };
  42
  43        if (1 + len > sizeof(buf)) {
  44                dev_warn(&priv->i2c->dev,
  45                                "%s: i2c wr reg=%04x: len=%d is too big!\n",
  46                                KBUILD_MODNAME, reg, len);
  47                return -EINVAL;
  48        }
  49
  50        buf[0] = reg;
  51        memcpy(&buf[1], val, len);
  52
  53        ret = i2c_transfer(priv->i2c, msg, 1);
  54        if (ret == 1) {
  55                ret = 0;
  56        } else {
  57                dev_warn(&priv->i2c->dev,
  58                                "%s: i2c wr failed=%d reg=%02x len=%d\n",
  59                                KBUILD_MODNAME, ret, reg, len);
  60                ret = -EREMOTEIO;
  61        }
  62        return ret;
  63}
  64
  65/* read multiple registers */
  66static int tda10071_rd_regs(struct tda10071_priv *priv, u8 reg, u8 *val,
  67        int len)
  68{
  69        int ret;
  70        u8 buf[MAX_XFER_SIZE];
  71        struct i2c_msg msg[2] = {
  72                {
  73                        .addr = priv->cfg.demod_i2c_addr,
  74                        .flags = 0,
  75                        .len = 1,
  76                        .buf = &reg,
  77                }, {
  78                        .addr = priv->cfg.demod_i2c_addr,
  79                        .flags = I2C_M_RD,
  80                        .len = len,
  81                        .buf = buf,
  82                }
  83        };
  84
  85        if (len > sizeof(buf)) {
  86                dev_warn(&priv->i2c->dev,
  87                                "%s: i2c wr reg=%04x: len=%d is too big!\n",
  88                                KBUILD_MODNAME, reg, len);
  89                return -EINVAL;
  90        }
  91
  92        ret = i2c_transfer(priv->i2c, msg, 2);
  93        if (ret == 2) {
  94                memcpy(val, buf, len);
  95                ret = 0;
  96        } else {
  97                dev_warn(&priv->i2c->dev,
  98                                "%s: i2c rd failed=%d reg=%02x len=%d\n",
  99                                KBUILD_MODNAME, ret, reg, len);
 100                ret = -EREMOTEIO;
 101        }
 102        return ret;
 103}
 104
 105/* write single register */
 106static int tda10071_wr_reg(struct tda10071_priv *priv, u8 reg, u8 val)
 107{
 108        return tda10071_wr_regs(priv, reg, &val, 1);
 109}
 110
 111/* read single register */
 112static int tda10071_rd_reg(struct tda10071_priv *priv, u8 reg, u8 *val)
 113{
 114        return tda10071_rd_regs(priv, reg, val, 1);
 115}
 116
 117/* write single register with mask */
 118static int tda10071_wr_reg_mask(struct tda10071_priv *priv,
 119                                u8 reg, u8 val, u8 mask)
 120{
 121        int ret;
 122        u8 tmp;
 123
 124        /* no need for read if whole reg is written */
 125        if (mask != 0xff) {
 126                ret = tda10071_rd_regs(priv, reg, &tmp, 1);
 127                if (ret)
 128                        return ret;
 129
 130                val &= mask;
 131                tmp &= ~mask;
 132                val |= tmp;
 133        }
 134
 135        return tda10071_wr_regs(priv, reg, &val, 1);
 136}
 137
 138/* read single register with mask */
 139static int tda10071_rd_reg_mask(struct tda10071_priv *priv,
 140                                u8 reg, u8 *val, u8 mask)
 141{
 142        int ret, i;
 143        u8 tmp;
 144
 145        ret = tda10071_rd_regs(priv, reg, &tmp, 1);
 146        if (ret)
 147                return ret;
 148
 149        tmp &= mask;
 150
 151        /* find position of the first bit */
 152        for (i = 0; i < 8; i++) {
 153                if ((mask >> i) & 0x01)
 154                        break;
 155        }
 156        *val = tmp >> i;
 157
 158        return 0;
 159}
 160
 161/* execute firmware command */
 162static int tda10071_cmd_execute(struct tda10071_priv *priv,
 163        struct tda10071_cmd *cmd)
 164{
 165        int ret, i;
 166        u8 tmp;
 167
 168        if (!priv->warm) {
 169                ret = -EFAULT;
 170                goto error;
 171        }
 172
 173        /* write cmd and args for firmware */
 174        ret = tda10071_wr_regs(priv, 0x00, cmd->args, cmd->len);
 175        if (ret)
 176                goto error;
 177
 178        /* start cmd execution */
 179        ret = tda10071_wr_reg(priv, 0x1f, 1);
 180        if (ret)
 181                goto error;
 182
 183        /* wait cmd execution terminate */
 184        for (i = 1000, tmp = 1; i && tmp; i--) {
 185                ret = tda10071_rd_reg(priv, 0x1f, &tmp);
 186                if (ret)
 187                        goto error;
 188
 189                usleep_range(200, 5000);
 190        }
 191
 192        dev_dbg(&priv->i2c->dev, "%s: loop=%d\n", __func__, i);
 193
 194        if (i == 0) {
 195                ret = -ETIMEDOUT;
 196                goto error;
 197        }
 198
 199        return ret;
 200error:
 201        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 202        return ret;
 203}
 204
 205static int tda10071_set_tone(struct dvb_frontend *fe,
 206        enum fe_sec_tone_mode fe_sec_tone_mode)
 207{
 208        struct tda10071_priv *priv = fe->demodulator_priv;
 209        struct tda10071_cmd cmd;
 210        int ret;
 211        u8 tone;
 212
 213        if (!priv->warm) {
 214                ret = -EFAULT;
 215                goto error;
 216        }
 217
 218        dev_dbg(&priv->i2c->dev, "%s: tone_mode=%d\n", __func__,
 219                        fe_sec_tone_mode);
 220
 221        switch (fe_sec_tone_mode) {
 222        case SEC_TONE_ON:
 223                tone = 1;
 224                break;
 225        case SEC_TONE_OFF:
 226                tone = 0;
 227                break;
 228        default:
 229                dev_dbg(&priv->i2c->dev, "%s: invalid fe_sec_tone_mode\n",
 230                                __func__);
 231                ret = -EINVAL;
 232                goto error;
 233        }
 234
 235        cmd.args[0] = CMD_LNB_PCB_CONFIG;
 236        cmd.args[1] = 0;
 237        cmd.args[2] = 0x00;
 238        cmd.args[3] = 0x00;
 239        cmd.args[4] = tone;
 240        cmd.len = 5;
 241        ret = tda10071_cmd_execute(priv, &cmd);
 242        if (ret)
 243                goto error;
 244
 245        return ret;
 246error:
 247        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 248        return ret;
 249}
 250
 251static int tda10071_set_voltage(struct dvb_frontend *fe,
 252        enum fe_sec_voltage fe_sec_voltage)
 253{
 254        struct tda10071_priv *priv = fe->demodulator_priv;
 255        struct tda10071_cmd cmd;
 256        int ret;
 257        u8 voltage;
 258
 259        if (!priv->warm) {
 260                ret = -EFAULT;
 261                goto error;
 262        }
 263
 264        dev_dbg(&priv->i2c->dev, "%s: voltage=%d\n", __func__, fe_sec_voltage);
 265
 266        switch (fe_sec_voltage) {
 267        case SEC_VOLTAGE_13:
 268                voltage = 0;
 269                break;
 270        case SEC_VOLTAGE_18:
 271                voltage = 1;
 272                break;
 273        case SEC_VOLTAGE_OFF:
 274                voltage = 0;
 275                break;
 276        default:
 277                dev_dbg(&priv->i2c->dev, "%s: invalid fe_sec_voltage\n",
 278                                __func__);
 279                ret = -EINVAL;
 280                goto error;
 281        }
 282
 283        cmd.args[0] = CMD_LNB_SET_DC_LEVEL;
 284        cmd.args[1] = 0;
 285        cmd.args[2] = voltage;
 286        cmd.len = 3;
 287        ret = tda10071_cmd_execute(priv, &cmd);
 288        if (ret)
 289                goto error;
 290
 291        return ret;
 292error:
 293        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 294        return ret;
 295}
 296
 297static int tda10071_diseqc_send_master_cmd(struct dvb_frontend *fe,
 298        struct dvb_diseqc_master_cmd *diseqc_cmd)
 299{
 300        struct tda10071_priv *priv = fe->demodulator_priv;
 301        struct tda10071_cmd cmd;
 302        int ret, i;
 303        u8 tmp;
 304
 305        if (!priv->warm) {
 306                ret = -EFAULT;
 307                goto error;
 308        }
 309
 310        dev_dbg(&priv->i2c->dev, "%s: msg_len=%d\n", __func__,
 311                        diseqc_cmd->msg_len);
 312
 313        if (diseqc_cmd->msg_len < 3 || diseqc_cmd->msg_len > 6) {
 314                ret = -EINVAL;
 315                goto error;
 316        }
 317
 318        /* wait LNB TX */
 319        for (i = 500, tmp = 0; i && !tmp; i--) {
 320                ret = tda10071_rd_reg_mask(priv, 0x47, &tmp, 0x01);
 321                if (ret)
 322                        goto error;
 323
 324                usleep_range(10000, 20000);
 325        }
 326
 327        dev_dbg(&priv->i2c->dev, "%s: loop=%d\n", __func__, i);
 328
 329        if (i == 0) {
 330                ret = -ETIMEDOUT;
 331                goto error;
 332        }
 333
 334        ret = tda10071_wr_reg_mask(priv, 0x47, 0x00, 0x01);
 335        if (ret)
 336                goto error;
 337
 338        cmd.args[0] = CMD_LNB_SEND_DISEQC;
 339        cmd.args[1] = 0;
 340        cmd.args[2] = 0;
 341        cmd.args[3] = 0;
 342        cmd.args[4] = 2;
 343        cmd.args[5] = 0;
 344        cmd.args[6] = diseqc_cmd->msg_len;
 345        memcpy(&cmd.args[7], diseqc_cmd->msg, diseqc_cmd->msg_len);
 346        cmd.len = 7 + diseqc_cmd->msg_len;
 347        ret = tda10071_cmd_execute(priv, &cmd);
 348        if (ret)
 349                goto error;
 350
 351        return ret;
 352error:
 353        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 354        return ret;
 355}
 356
 357static int tda10071_diseqc_recv_slave_reply(struct dvb_frontend *fe,
 358        struct dvb_diseqc_slave_reply *reply)
 359{
 360        struct tda10071_priv *priv = fe->demodulator_priv;
 361        struct tda10071_cmd cmd;
 362        int ret, i;
 363        u8 tmp;
 364
 365        if (!priv->warm) {
 366                ret = -EFAULT;
 367                goto error;
 368        }
 369
 370        dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
 371
 372        /* wait LNB RX */
 373        for (i = 500, tmp = 0; i && !tmp; i--) {
 374                ret = tda10071_rd_reg_mask(priv, 0x47, &tmp, 0x02);
 375                if (ret)
 376                        goto error;
 377
 378                usleep_range(10000, 20000);
 379        }
 380
 381        dev_dbg(&priv->i2c->dev, "%s: loop=%d\n", __func__, i);
 382
 383        if (i == 0) {
 384                ret = -ETIMEDOUT;
 385                goto error;
 386        }
 387
 388        /* reply len */
 389        ret = tda10071_rd_reg(priv, 0x46, &tmp);
 390        if (ret)
 391                goto error;
 392
 393        reply->msg_len = tmp & 0x1f; /* [4:0] */
 394        if (reply->msg_len > sizeof(reply->msg))
 395                reply->msg_len = sizeof(reply->msg); /* truncate API max */
 396
 397        /* read reply */
 398        cmd.args[0] = CMD_LNB_UPDATE_REPLY;
 399        cmd.args[1] = 0;
 400        cmd.len = 2;
 401        ret = tda10071_cmd_execute(priv, &cmd);
 402        if (ret)
 403                goto error;
 404
 405        ret = tda10071_rd_regs(priv, cmd.len, reply->msg, reply->msg_len);
 406        if (ret)
 407                goto error;
 408
 409        return ret;
 410error:
 411        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 412        return ret;
 413}
 414
 415static int tda10071_diseqc_send_burst(struct dvb_frontend *fe,
 416        enum fe_sec_mini_cmd fe_sec_mini_cmd)
 417{
 418        struct tda10071_priv *priv = fe->demodulator_priv;
 419        struct tda10071_cmd cmd;
 420        int ret, i;
 421        u8 tmp, burst;
 422
 423        if (!priv->warm) {
 424                ret = -EFAULT;
 425                goto error;
 426        }
 427
 428        dev_dbg(&priv->i2c->dev, "%s: fe_sec_mini_cmd=%d\n", __func__,
 429                        fe_sec_mini_cmd);
 430
 431        switch (fe_sec_mini_cmd) {
 432        case SEC_MINI_A:
 433                burst = 0;
 434                break;
 435        case SEC_MINI_B:
 436                burst = 1;
 437                break;
 438        default:
 439                dev_dbg(&priv->i2c->dev, "%s: invalid fe_sec_mini_cmd\n",
 440                                __func__);
 441                ret = -EINVAL;
 442                goto error;
 443        }
 444
 445        /* wait LNB TX */
 446        for (i = 500, tmp = 0; i && !tmp; i--) {
 447                ret = tda10071_rd_reg_mask(priv, 0x47, &tmp, 0x01);
 448                if (ret)
 449                        goto error;
 450
 451                usleep_range(10000, 20000);
 452        }
 453
 454        dev_dbg(&priv->i2c->dev, "%s: loop=%d\n", __func__, i);
 455
 456        if (i == 0) {
 457                ret = -ETIMEDOUT;
 458                goto error;
 459        }
 460
 461        ret = tda10071_wr_reg_mask(priv, 0x47, 0x00, 0x01);
 462        if (ret)
 463                goto error;
 464
 465        cmd.args[0] = CMD_LNB_SEND_TONEBURST;
 466        cmd.args[1] = 0;
 467        cmd.args[2] = burst;
 468        cmd.len = 3;
 469        ret = tda10071_cmd_execute(priv, &cmd);
 470        if (ret)
 471                goto error;
 472
 473        return ret;
 474error:
 475        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 476        return ret;
 477}
 478
 479static int tda10071_read_status(struct dvb_frontend *fe, enum fe_status *status)
 480{
 481        struct tda10071_priv *priv = fe->demodulator_priv;
 482        int ret;
 483        u8 tmp;
 484
 485        *status = 0;
 486
 487        if (!priv->warm) {
 488                ret = 0;
 489                goto error;
 490        }
 491
 492        ret = tda10071_rd_reg(priv, 0x39, &tmp);
 493        if (ret)
 494                goto error;
 495
 496        /* 0x39[0] tuner PLL */
 497        if (tmp & 0x02) /* demod PLL */
 498                *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER;
 499        if (tmp & 0x04) /* viterbi or LDPC*/
 500                *status |= FE_HAS_VITERBI;
 501        if (tmp & 0x08) /* RS or BCH */
 502                *status |= FE_HAS_SYNC | FE_HAS_LOCK;
 503
 504        priv->fe_status = *status;
 505
 506        return ret;
 507error:
 508        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 509        return ret;
 510}
 511
 512static int tda10071_read_snr(struct dvb_frontend *fe, u16 *snr)
 513{
 514        struct tda10071_priv *priv = fe->demodulator_priv;
 515        int ret;
 516        u8 buf[2];
 517
 518        if (!priv->warm || !(priv->fe_status & FE_HAS_LOCK)) {
 519                *snr = 0;
 520                ret = 0;
 521                goto error;
 522        }
 523
 524        ret = tda10071_rd_regs(priv, 0x3a, buf, 2);
 525        if (ret)
 526                goto error;
 527
 528        /* Es/No dBx10 */
 529        *snr = buf[0] << 8 | buf[1];
 530
 531        return ret;
 532error:
 533        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 534        return ret;
 535}
 536
 537static int tda10071_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 538{
 539        struct tda10071_priv *priv = fe->demodulator_priv;
 540        struct tda10071_cmd cmd;
 541        int ret;
 542        u8 tmp;
 543
 544        if (!priv->warm || !(priv->fe_status & FE_HAS_LOCK)) {
 545                *strength = 0;
 546                ret = 0;
 547                goto error;
 548        }
 549
 550        cmd.args[0] = CMD_GET_AGCACC;
 551        cmd.args[1] = 0;
 552        cmd.len = 2;
 553        ret = tda10071_cmd_execute(priv, &cmd);
 554        if (ret)
 555                goto error;
 556
 557        /* input power estimate dBm */
 558        ret = tda10071_rd_reg(priv, 0x50, &tmp);
 559        if (ret)
 560                goto error;
 561
 562        if (tmp < 181)
 563                tmp = 181; /* -75 dBm */
 564        else if (tmp > 236)
 565                tmp = 236; /* -20 dBm */
 566
 567        /* scale value to 0x0000-0xffff */
 568        *strength = (tmp-181) * 0xffff / (236-181);
 569
 570        return ret;
 571error:
 572        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 573        return ret;
 574}
 575
 576static int tda10071_read_ber(struct dvb_frontend *fe, u32 *ber)
 577{
 578        struct tda10071_priv *priv = fe->demodulator_priv;
 579        struct tda10071_cmd cmd;
 580        int ret, i, len;
 581        u8 tmp, reg, buf[8];
 582
 583        if (!priv->warm || !(priv->fe_status & FE_HAS_LOCK)) {
 584                *ber = priv->ber = 0;
 585                ret = 0;
 586                goto error;
 587        }
 588
 589        switch (priv->delivery_system) {
 590        case SYS_DVBS:
 591                reg = 0x4c;
 592                len = 8;
 593                i = 1;
 594                break;
 595        case SYS_DVBS2:
 596                reg = 0x4d;
 597                len = 4;
 598                i = 0;
 599                break;
 600        default:
 601                *ber = priv->ber = 0;
 602                return 0;
 603        }
 604
 605        ret = tda10071_rd_reg(priv, reg, &tmp);
 606        if (ret)
 607                goto error;
 608
 609        if (priv->meas_count[i] == tmp) {
 610                dev_dbg(&priv->i2c->dev, "%s: meas not ready=%02x\n", __func__,
 611                                tmp);
 612                *ber = priv->ber;
 613                return 0;
 614        } else {
 615                priv->meas_count[i] = tmp;
 616        }
 617
 618        cmd.args[0] = CMD_BER_UPDATE_COUNTERS;
 619        cmd.args[1] = 0;
 620        cmd.args[2] = i;
 621        cmd.len = 3;
 622        ret = tda10071_cmd_execute(priv, &cmd);
 623        if (ret)
 624                goto error;
 625
 626        ret = tda10071_rd_regs(priv, cmd.len, buf, len);
 627        if (ret)
 628                goto error;
 629
 630        if (priv->delivery_system == SYS_DVBS) {
 631                *ber = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
 632                priv->ucb += (buf[4] << 8) | buf[5];
 633        } else {
 634                *ber = (buf[0] << 8) | buf[1];
 635        }
 636        priv->ber = *ber;
 637
 638        return ret;
 639error:
 640        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 641        return ret;
 642}
 643
 644static int tda10071_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
 645{
 646        struct tda10071_priv *priv = fe->demodulator_priv;
 647        int ret = 0;
 648
 649        if (!priv->warm || !(priv->fe_status & FE_HAS_LOCK)) {
 650                *ucblocks = 0;
 651                goto error;
 652        }
 653
 654        /* UCB is updated when BER is read. Assume BER is read anyway. */
 655
 656        *ucblocks = priv->ucb;
 657
 658        return ret;
 659error:
 660        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 661        return ret;
 662}
 663
 664static int tda10071_set_frontend(struct dvb_frontend *fe)
 665{
 666        struct tda10071_priv *priv = fe->demodulator_priv;
 667        struct tda10071_cmd cmd;
 668        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 669        int ret, i;
 670        u8 mode, rolloff, pilot, inversion, div;
 671        enum fe_modulation modulation;
 672
 673        dev_dbg(&priv->i2c->dev,
 674                        "%s: delivery_system=%d modulation=%d frequency=%d symbol_rate=%d inversion=%d pilot=%d rolloff=%d\n",
 675                        __func__, c->delivery_system, c->modulation,
 676                        c->frequency, c->symbol_rate, c->inversion, c->pilot,
 677                        c->rolloff);
 678
 679        priv->delivery_system = SYS_UNDEFINED;
 680
 681        if (!priv->warm) {
 682                ret = -EFAULT;
 683                goto error;
 684        }
 685
 686        switch (c->inversion) {
 687        case INVERSION_OFF:
 688                inversion = 1;
 689                break;
 690        case INVERSION_ON:
 691                inversion = 0;
 692                break;
 693        case INVERSION_AUTO:
 694                /* 2 = auto; try first on then off
 695                 * 3 = auto; try first off then on */
 696                inversion = 3;
 697                break;
 698        default:
 699                dev_dbg(&priv->i2c->dev, "%s: invalid inversion\n", __func__);
 700                ret = -EINVAL;
 701                goto error;
 702        }
 703
 704        switch (c->delivery_system) {
 705        case SYS_DVBS:
 706                modulation = QPSK;
 707                rolloff = 0;
 708                pilot = 2;
 709                break;
 710        case SYS_DVBS2:
 711                modulation = c->modulation;
 712
 713                switch (c->rolloff) {
 714                case ROLLOFF_20:
 715                        rolloff = 2;
 716                        break;
 717                case ROLLOFF_25:
 718                        rolloff = 1;
 719                        break;
 720                case ROLLOFF_35:
 721                        rolloff = 0;
 722                        break;
 723                case ROLLOFF_AUTO:
 724                default:
 725                        dev_dbg(&priv->i2c->dev, "%s: invalid rolloff\n",
 726                                        __func__);
 727                        ret = -EINVAL;
 728                        goto error;
 729                }
 730
 731                switch (c->pilot) {
 732                case PILOT_OFF:
 733                        pilot = 0;
 734                        break;
 735                case PILOT_ON:
 736                        pilot = 1;
 737                        break;
 738                case PILOT_AUTO:
 739                        pilot = 2;
 740                        break;
 741                default:
 742                        dev_dbg(&priv->i2c->dev, "%s: invalid pilot\n",
 743                                        __func__);
 744                        ret = -EINVAL;
 745                        goto error;
 746                }
 747                break;
 748        default:
 749                dev_dbg(&priv->i2c->dev, "%s: invalid delivery_system\n",
 750                                __func__);
 751                ret = -EINVAL;
 752                goto error;
 753        }
 754
 755        for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
 756                if (c->delivery_system == TDA10071_MODCOD[i].delivery_system &&
 757                        modulation == TDA10071_MODCOD[i].modulation &&
 758                        c->fec_inner == TDA10071_MODCOD[i].fec) {
 759                        mode = TDA10071_MODCOD[i].val;
 760                        dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n",
 761                                        __func__, mode);
 762                        break;
 763                }
 764        }
 765
 766        if (mode == 0xff) {
 767                dev_dbg(&priv->i2c->dev, "%s: invalid parameter combination\n",
 768                                __func__);
 769                ret = -EINVAL;
 770                goto error;
 771        }
 772
 773        if (c->symbol_rate <= 5000000)
 774                div = 14;
 775        else
 776                div = 4;
 777
 778        ret = tda10071_wr_reg(priv, 0x81, div);
 779        if (ret)
 780                goto error;
 781
 782        ret = tda10071_wr_reg(priv, 0xe3, div);
 783        if (ret)
 784                goto error;
 785
 786        cmd.args[0] = CMD_CHANGE_CHANNEL;
 787        cmd.args[1] = 0;
 788        cmd.args[2] = mode;
 789        cmd.args[3] = (c->frequency >> 16) & 0xff;
 790        cmd.args[4] = (c->frequency >>  8) & 0xff;
 791        cmd.args[5] = (c->frequency >>  0) & 0xff;
 792        cmd.args[6] = ((c->symbol_rate / 1000) >> 8) & 0xff;
 793        cmd.args[7] = ((c->symbol_rate / 1000) >> 0) & 0xff;
 794        cmd.args[8] = (tda10071_ops.info.frequency_tolerance >> 8) & 0xff;
 795        cmd.args[9] = (tda10071_ops.info.frequency_tolerance >> 0) & 0xff;
 796        cmd.args[10] = rolloff;
 797        cmd.args[11] = inversion;
 798        cmd.args[12] = pilot;
 799        cmd.args[13] = 0x00;
 800        cmd.args[14] = 0x00;
 801        cmd.len = 15;
 802        ret = tda10071_cmd_execute(priv, &cmd);
 803        if (ret)
 804                goto error;
 805
 806        priv->delivery_system = c->delivery_system;
 807
 808        return ret;
 809error:
 810        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 811        return ret;
 812}
 813
 814static int tda10071_get_frontend(struct dvb_frontend *fe)
 815{
 816        struct tda10071_priv *priv = fe->demodulator_priv;
 817        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 818        int ret, i;
 819        u8 buf[5], tmp;
 820
 821        if (!priv->warm || !(priv->fe_status & FE_HAS_LOCK)) {
 822                ret = -EFAULT;
 823                goto error;
 824        }
 825
 826        ret = tda10071_rd_regs(priv, 0x30, buf, 5);
 827        if (ret)
 828                goto error;
 829
 830        tmp = buf[0] & 0x3f;
 831        for (i = 0; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
 832                if (tmp == TDA10071_MODCOD[i].val) {
 833                        c->modulation = TDA10071_MODCOD[i].modulation;
 834                        c->fec_inner = TDA10071_MODCOD[i].fec;
 835                        c->delivery_system = TDA10071_MODCOD[i].delivery_system;
 836                }
 837        }
 838
 839        switch ((buf[1] >> 0) & 0x01) {
 840        case 0:
 841                c->inversion = INVERSION_ON;
 842                break;
 843        case 1:
 844                c->inversion = INVERSION_OFF;
 845                break;
 846        }
 847
 848        switch ((buf[1] >> 7) & 0x01) {
 849        case 0:
 850                c->pilot = PILOT_OFF;
 851                break;
 852        case 1:
 853                c->pilot = PILOT_ON;
 854                break;
 855        }
 856
 857        c->frequency = (buf[2] << 16) | (buf[3] << 8) | (buf[4] << 0);
 858
 859        ret = tda10071_rd_regs(priv, 0x52, buf, 3);
 860        if (ret)
 861                goto error;
 862
 863        c->symbol_rate = ((buf[0] << 16) | (buf[1] << 8) | (buf[2] << 0)) * 1000;
 864
 865        return ret;
 866error:
 867        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
 868        return ret;
 869}
 870
 871static int tda10071_init(struct dvb_frontend *fe)
 872{
 873        struct tda10071_priv *priv = fe->demodulator_priv;
 874        struct tda10071_cmd cmd;
 875        int ret, i, len, remaining, fw_size;
 876        const struct firmware *fw;
 877        u8 *fw_file = TDA10071_FIRMWARE;
 878        u8 tmp, buf[4];
 879        struct tda10071_reg_val_mask tab[] = {
 880                { 0xcd, 0x00, 0x07 },
 881                { 0x80, 0x00, 0x02 },
 882                { 0xcd, 0x00, 0xc0 },
 883                { 0xce, 0x00, 0x1b },
 884                { 0x9d, 0x00, 0x01 },
 885                { 0x9d, 0x00, 0x02 },
 886                { 0x9e, 0x00, 0x01 },
 887                { 0x87, 0x00, 0x80 },
 888                { 0xce, 0x00, 0x08 },
 889                { 0xce, 0x00, 0x10 },
 890        };
 891        struct tda10071_reg_val_mask tab2[] = {
 892                { 0xf1, 0x70, 0xff },
 893                { 0x88, priv->cfg.pll_multiplier, 0x3f },
 894                { 0x89, 0x00, 0x10 },
 895                { 0x89, 0x10, 0x10 },
 896                { 0xc0, 0x01, 0x01 },
 897                { 0xc0, 0x00, 0x01 },
 898                { 0xe0, 0xff, 0xff },
 899                { 0xe0, 0x00, 0xff },
 900                { 0x96, 0x1e, 0x7e },
 901                { 0x8b, 0x08, 0x08 },
 902                { 0x8b, 0x00, 0x08 },
 903                { 0x8f, 0x1a, 0x7e },
 904                { 0x8c, 0x68, 0xff },
 905                { 0x8d, 0x08, 0xff },
 906                { 0x8e, 0x4c, 0xff },
 907                { 0x8f, 0x01, 0x01 },
 908                { 0x8b, 0x04, 0x04 },
 909                { 0x8b, 0x00, 0x04 },
 910                { 0x87, 0x05, 0x07 },
 911                { 0x80, 0x00, 0x20 },
 912                { 0xc8, 0x01, 0xff },
 913                { 0xb4, 0x47, 0xff },
 914                { 0xb5, 0x9c, 0xff },
 915                { 0xb6, 0x7d, 0xff },
 916                { 0xba, 0x00, 0x03 },
 917                { 0xb7, 0x47, 0xff },
 918                { 0xb8, 0x9c, 0xff },
 919                { 0xb9, 0x7d, 0xff },
 920                { 0xba, 0x00, 0x0c },
 921                { 0xc8, 0x00, 0xff },
 922                { 0xcd, 0x00, 0x04 },
 923                { 0xcd, 0x00, 0x20 },
 924                { 0xe8, 0x02, 0xff },
 925                { 0xcf, 0x20, 0xff },
 926                { 0x9b, 0xd7, 0xff },
 927                { 0x9a, 0x01, 0x03 },
 928                { 0xa8, 0x05, 0x0f },
 929                { 0xa8, 0x65, 0xf0 },
 930                { 0xa6, 0xa0, 0xf0 },
 931                { 0x9d, 0x50, 0xfc },
 932                { 0x9e, 0x20, 0xe0 },
 933                { 0xa3, 0x1c, 0x7c },
 934                { 0xd5, 0x03, 0x03 },
 935        };
 936
 937        if (priv->warm) {
 938                /* warm state - wake up device from sleep */
 939
 940                for (i = 0; i < ARRAY_SIZE(tab); i++) {
 941                        ret = tda10071_wr_reg_mask(priv, tab[i].reg,
 942                                tab[i].val, tab[i].mask);
 943                        if (ret)
 944                                goto error;
 945                }
 946
 947                cmd.args[0] = CMD_SET_SLEEP_MODE;
 948                cmd.args[1] = 0;
 949                cmd.args[2] = 0;
 950                cmd.len = 3;
 951                ret = tda10071_cmd_execute(priv, &cmd);
 952                if (ret)
 953                        goto error;
 954        } else {
 955                /* cold state - try to download firmware */
 956
 957                /* request the firmware, this will block and timeout */
 958                ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent);
 959                if (ret) {
 960                        dev_err(&priv->i2c->dev,
 961                                        "%s: did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)\n",
 962                                        KBUILD_MODNAME, fw_file, ret);
 963                        goto error;
 964                }
 965
 966                /* init */
 967                for (i = 0; i < ARRAY_SIZE(tab2); i++) {
 968                        ret = tda10071_wr_reg_mask(priv, tab2[i].reg,
 969                                tab2[i].val, tab2[i].mask);
 970                        if (ret)
 971                                goto error_release_firmware;
 972                }
 973
 974                /*  download firmware */
 975                ret = tda10071_wr_reg(priv, 0xe0, 0x7f);
 976                if (ret)
 977                        goto error_release_firmware;
 978
 979                ret = tda10071_wr_reg(priv, 0xf7, 0x81);
 980                if (ret)
 981                        goto error_release_firmware;
 982
 983                ret = tda10071_wr_reg(priv, 0xf8, 0x00);
 984                if (ret)
 985                        goto error_release_firmware;
 986
 987                ret = tda10071_wr_reg(priv, 0xf9, 0x00);
 988                if (ret)
 989                        goto error_release_firmware;
 990
 991                dev_info(&priv->i2c->dev,
 992                                "%s: found a '%s' in cold state, will try to load a firmware\n",
 993                                KBUILD_MODNAME, tda10071_ops.info.name);
 994                dev_info(&priv->i2c->dev,
 995                                "%s: downloading firmware from file '%s'\n",
 996                                KBUILD_MODNAME, fw_file);
 997
 998                /* do not download last byte */
 999                fw_size = fw->size - 1;
1000
1001                for (remaining = fw_size; remaining > 0;
1002                        remaining -= (priv->cfg.i2c_wr_max - 1)) {
1003                        len = remaining;
1004                        if (len > (priv->cfg.i2c_wr_max - 1))
1005                                len = (priv->cfg.i2c_wr_max - 1);
1006
1007                        ret = tda10071_wr_regs(priv, 0xfa,
1008                                (u8 *) &fw->data[fw_size - remaining], len);
1009                        if (ret) {
1010                                dev_err(&priv->i2c->dev,
1011                                                "%s: firmware download failed=%d\n",
1012                                                KBUILD_MODNAME, ret);
1013                                goto error_release_firmware;
1014                        }
1015                }
1016                release_firmware(fw);
1017
1018                ret = tda10071_wr_reg(priv, 0xf7, 0x0c);
1019                if (ret)
1020                        goto error;
1021
1022                ret = tda10071_wr_reg(priv, 0xe0, 0x00);
1023                if (ret)
1024                        goto error;
1025
1026                /* wait firmware start */
1027                msleep(250);
1028
1029                /* firmware status */
1030                ret = tda10071_rd_reg(priv, 0x51, &tmp);
1031                if (ret)
1032                        goto error;
1033
1034                if (tmp) {
1035                        dev_info(&priv->i2c->dev, "%s: firmware did not run\n",
1036                                        KBUILD_MODNAME);
1037                        ret = -EFAULT;
1038                        goto error;
1039                } else {
1040                        priv->warm = true;
1041                }
1042
1043                cmd.args[0] = CMD_GET_FW_VERSION;
1044                cmd.len = 1;
1045                ret = tda10071_cmd_execute(priv, &cmd);
1046                if (ret)
1047                        goto error;
1048
1049                ret = tda10071_rd_regs(priv, cmd.len, buf, 4);
1050                if (ret)
1051                        goto error;
1052
1053                dev_info(&priv->i2c->dev, "%s: firmware version %d.%d.%d.%d\n",
1054                                KBUILD_MODNAME, buf[0], buf[1], buf[2], buf[3]);
1055                dev_info(&priv->i2c->dev, "%s: found a '%s' in warm state\n",
1056                                KBUILD_MODNAME, tda10071_ops.info.name);
1057
1058                ret = tda10071_rd_regs(priv, 0x81, buf, 2);
1059                if (ret)
1060                        goto error;
1061
1062                cmd.args[0] = CMD_DEMOD_INIT;
1063                cmd.args[1] = ((priv->cfg.xtal / 1000) >> 8) & 0xff;
1064                cmd.args[2] = ((priv->cfg.xtal / 1000) >> 0) & 0xff;
1065                cmd.args[3] = buf[0];
1066                cmd.args[4] = buf[1];
1067                cmd.args[5] = priv->cfg.pll_multiplier;
1068                cmd.args[6] = priv->cfg.spec_inv;
1069                cmd.args[7] = 0x00;
1070                cmd.len = 8;
1071                ret = tda10071_cmd_execute(priv, &cmd);
1072                if (ret)
1073                        goto error;
1074
1075                if (priv->cfg.tuner_i2c_addr)
1076                        tmp = priv->cfg.tuner_i2c_addr;
1077                else
1078                        tmp = 0x14;
1079
1080                cmd.args[0] = CMD_TUNER_INIT;
1081                cmd.args[1] = 0x00;
1082                cmd.args[2] = 0x00;
1083                cmd.args[3] = 0x00;
1084                cmd.args[4] = 0x00;
1085                cmd.args[5] = tmp;
1086                cmd.args[6] = 0x00;
1087                cmd.args[7] = 0x03;
1088                cmd.args[8] = 0x02;
1089                cmd.args[9] = 0x02;
1090                cmd.args[10] = 0x00;
1091                cmd.args[11] = 0x00;
1092                cmd.args[12] = 0x00;
1093                cmd.args[13] = 0x00;
1094                cmd.args[14] = 0x00;
1095                cmd.len = 15;
1096                ret = tda10071_cmd_execute(priv, &cmd);
1097                if (ret)
1098                        goto error;
1099
1100                cmd.args[0] = CMD_MPEG_CONFIG;
1101                cmd.args[1] = 0;
1102                cmd.args[2] = priv->cfg.ts_mode;
1103                cmd.args[3] = 0x00;
1104                cmd.args[4] = 0x04;
1105                cmd.args[5] = 0x00;
1106                cmd.len = 6;
1107                ret = tda10071_cmd_execute(priv, &cmd);
1108                if (ret)
1109                        goto error;
1110
1111                ret = tda10071_wr_reg_mask(priv, 0xf0, 0x01, 0x01);
1112                if (ret)
1113                        goto error;
1114
1115                cmd.args[0] = CMD_LNB_CONFIG;
1116                cmd.args[1] = 0;
1117                cmd.args[2] = 150;
1118                cmd.args[3] = 3;
1119                cmd.args[4] = 22;
1120                cmd.args[5] = 1;
1121                cmd.args[6] = 1;
1122                cmd.args[7] = 30;
1123                cmd.args[8] = 30;
1124                cmd.args[9] = 30;
1125                cmd.args[10] = 30;
1126                cmd.len = 11;
1127                ret = tda10071_cmd_execute(priv, &cmd);
1128                if (ret)
1129                        goto error;
1130
1131                cmd.args[0] = CMD_BER_CONTROL;
1132                cmd.args[1] = 0;
1133                cmd.args[2] = 14;
1134                cmd.args[3] = 14;
1135                cmd.len = 4;
1136                ret = tda10071_cmd_execute(priv, &cmd);
1137                if (ret)
1138                        goto error;
1139        }
1140
1141        return ret;
1142error_release_firmware:
1143        release_firmware(fw);
1144error:
1145        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
1146        return ret;
1147}
1148
1149static int tda10071_sleep(struct dvb_frontend *fe)
1150{
1151        struct tda10071_priv *priv = fe->demodulator_priv;
1152        struct tda10071_cmd cmd;
1153        int ret, i;
1154        struct tda10071_reg_val_mask tab[] = {
1155                { 0xcd, 0x07, 0x07 },
1156                { 0x80, 0x02, 0x02 },
1157                { 0xcd, 0xc0, 0xc0 },
1158                { 0xce, 0x1b, 0x1b },
1159                { 0x9d, 0x01, 0x01 },
1160                { 0x9d, 0x02, 0x02 },
1161                { 0x9e, 0x01, 0x01 },
1162                { 0x87, 0x80, 0x80 },
1163                { 0xce, 0x08, 0x08 },
1164                { 0xce, 0x10, 0x10 },
1165        };
1166
1167        if (!priv->warm) {
1168                ret = -EFAULT;
1169                goto error;
1170        }
1171
1172        cmd.args[0] = CMD_SET_SLEEP_MODE;
1173        cmd.args[1] = 0;
1174        cmd.args[2] = 1;
1175        cmd.len = 3;
1176        ret = tda10071_cmd_execute(priv, &cmd);
1177        if (ret)
1178                goto error;
1179
1180        for (i = 0; i < ARRAY_SIZE(tab); i++) {
1181                ret = tda10071_wr_reg_mask(priv, tab[i].reg, tab[i].val,
1182                        tab[i].mask);
1183                if (ret)
1184                        goto error;
1185        }
1186
1187        return ret;
1188error:
1189        dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
1190        return ret;
1191}
1192
1193static int tda10071_get_tune_settings(struct dvb_frontend *fe,
1194        struct dvb_frontend_tune_settings *s)
1195{
1196        s->min_delay_ms = 8000;
1197        s->step_size = 0;
1198        s->max_drift = 0;
1199
1200        return 0;
1201}
1202
1203static void tda10071_release(struct dvb_frontend *fe)
1204{
1205        struct tda10071_priv *priv = fe->demodulator_priv;
1206        kfree(priv);
1207}
1208
1209struct dvb_frontend *tda10071_attach(const struct tda10071_config *config,
1210        struct i2c_adapter *i2c)
1211{
1212        int ret;
1213        struct tda10071_priv *priv = NULL;
1214        u8 tmp;
1215
1216        /* allocate memory for the internal priv */
1217        priv = kzalloc(sizeof(struct tda10071_priv), GFP_KERNEL);
1218        if (priv == NULL) {
1219                ret = -ENOMEM;
1220                goto error;
1221        }
1222
1223        /* make sure demod i2c address is specified */
1224        if (!config->demod_i2c_addr) {
1225                dev_dbg(&i2c->dev, "%s: invalid demod i2c address\n", __func__);
1226                ret = -EINVAL;
1227                goto error;
1228        }
1229
1230        /* make sure tuner i2c address is specified */
1231        if (!config->tuner_i2c_addr) {
1232                dev_dbg(&i2c->dev, "%s: invalid tuner i2c address\n", __func__);
1233                ret = -EINVAL;
1234                goto error;
1235        }
1236
1237        /* setup the priv */
1238        priv->i2c = i2c;
1239        memcpy(&priv->cfg, config, sizeof(struct tda10071_config));
1240
1241        /* chip ID */
1242        ret = tda10071_rd_reg(priv, 0xff, &tmp);
1243        if (ret || tmp != 0x0f)
1244                goto error;
1245
1246        /* chip type */
1247        ret = tda10071_rd_reg(priv, 0xdd, &tmp);
1248        if (ret || tmp != 0x00)
1249                goto error;
1250
1251        /* chip version */
1252        ret = tda10071_rd_reg(priv, 0xfe, &tmp);
1253        if (ret || tmp != 0x01)
1254                goto error;
1255
1256        /* create dvb_frontend */
1257        memcpy(&priv->fe.ops, &tda10071_ops, sizeof(struct dvb_frontend_ops));
1258        priv->fe.demodulator_priv = priv;
1259
1260        return &priv->fe;
1261error:
1262        dev_dbg(&i2c->dev, "%s: failed=%d\n", __func__, ret);
1263        kfree(priv);
1264        return NULL;
1265}
1266EXPORT_SYMBOL(tda10071_attach);
1267
1268static struct dvb_frontend_ops tda10071_ops = {
1269        .delsys = { SYS_DVBS, SYS_DVBS2 },
1270        .info = {
1271                .name = "NXP TDA10071",
1272                .frequency_min = 950000,
1273                .frequency_max = 2150000,
1274                .frequency_tolerance = 5000,
1275                .symbol_rate_min = 1000000,
1276                .symbol_rate_max = 45000000,
1277                .caps = FE_CAN_INVERSION_AUTO |
1278                        FE_CAN_FEC_1_2 |
1279                        FE_CAN_FEC_2_3 |
1280                        FE_CAN_FEC_3_4 |
1281                        FE_CAN_FEC_4_5 |
1282                        FE_CAN_FEC_5_6 |
1283                        FE_CAN_FEC_6_7 |
1284                        FE_CAN_FEC_7_8 |
1285                        FE_CAN_FEC_8_9 |
1286                        FE_CAN_FEC_AUTO |
1287                        FE_CAN_QPSK |
1288                        FE_CAN_RECOVER |
1289                        FE_CAN_2G_MODULATION
1290        },
1291
1292        .release = tda10071_release,
1293
1294        .get_tune_settings = tda10071_get_tune_settings,
1295
1296        .init = tda10071_init,
1297        .sleep = tda10071_sleep,
1298
1299        .set_frontend = tda10071_set_frontend,
1300        .get_frontend = tda10071_get_frontend,
1301
1302        .read_status = tda10071_read_status,
1303        .read_snr = tda10071_read_snr,
1304        .read_signal_strength = tda10071_read_signal_strength,
1305        .read_ber = tda10071_read_ber,
1306        .read_ucblocks = tda10071_read_ucblocks,
1307
1308        .diseqc_send_master_cmd = tda10071_diseqc_send_master_cmd,
1309        .diseqc_recv_slave_reply = tda10071_diseqc_recv_slave_reply,
1310        .diseqc_send_burst = tda10071_diseqc_send_burst,
1311
1312        .set_tone = tda10071_set_tone,
1313        .set_voltage = tda10071_set_voltage,
1314};
1315
1316static struct dvb_frontend *tda10071_get_dvb_frontend(struct i2c_client *client)
1317{
1318        struct tda10071_priv *dev = i2c_get_clientdata(client);
1319
1320        dev_dbg(&client->dev, "\n");
1321
1322        return &dev->fe;
1323}
1324
1325static int tda10071_probe(struct i2c_client *client,
1326                        const struct i2c_device_id *id)
1327{
1328        struct tda10071_priv *dev;
1329        struct tda10071_platform_data *pdata = client->dev.platform_data;
1330        int ret;
1331        u8 u8tmp;
1332
1333        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1334        if (!dev) {
1335                ret = -ENOMEM;
1336                goto err;
1337        }
1338
1339        dev->client = client;
1340        dev->i2c = client->adapter;
1341        dev->cfg.demod_i2c_addr = client->addr;
1342        dev->cfg.i2c_wr_max = pdata->i2c_wr_max;
1343        dev->cfg.ts_mode = pdata->ts_mode;
1344        dev->cfg.spec_inv = pdata->spec_inv;
1345        dev->cfg.xtal = pdata->clk;
1346        dev->cfg.pll_multiplier = pdata->pll_multiplier;
1347        dev->cfg.tuner_i2c_addr = pdata->tuner_i2c_addr;
1348
1349        /* chip ID */
1350        ret = tda10071_rd_reg(dev, 0xff, &u8tmp);
1351        if (ret)
1352                goto err_kfree;
1353        if (u8tmp != 0x0f) {
1354                ret = -ENODEV;
1355                goto err_kfree;
1356        }
1357
1358        /* chip type */
1359        ret = tda10071_rd_reg(dev, 0xdd, &u8tmp);
1360        if (ret)
1361                goto err_kfree;
1362        if (u8tmp != 0x00) {
1363                ret = -ENODEV;
1364                goto err_kfree;
1365        }
1366
1367        /* chip version */
1368        ret = tda10071_rd_reg(dev, 0xfe, &u8tmp);
1369        if (ret)
1370                goto err_kfree;
1371        if (u8tmp != 0x01) {
1372                ret = -ENODEV;
1373                goto err_kfree;
1374        }
1375
1376        /* create dvb_frontend */
1377        memcpy(&dev->fe.ops, &tda10071_ops, sizeof(struct dvb_frontend_ops));
1378        dev->fe.ops.release = NULL;
1379        dev->fe.demodulator_priv = dev;
1380        i2c_set_clientdata(client, dev);
1381
1382        /* setup callbacks */
1383        pdata->get_dvb_frontend = tda10071_get_dvb_frontend;
1384
1385        dev_info(&client->dev, "NXP TDA10071 successfully identified\n");
1386        return 0;
1387err_kfree:
1388        kfree(dev);
1389err:
1390        dev_dbg(&client->dev, "failed=%d\n", ret);
1391        return ret;
1392}
1393
1394static int tda10071_remove(struct i2c_client *client)
1395{
1396        struct tda10071_dev *dev = i2c_get_clientdata(client);
1397
1398        dev_dbg(&client->dev, "\n");
1399
1400        kfree(dev);
1401        return 0;
1402}
1403
1404static const struct i2c_device_id tda10071_id_table[] = {
1405        {"tda10071_cx24118", 0},
1406        {}
1407};
1408MODULE_DEVICE_TABLE(i2c, tda10071_id_table);
1409
1410static struct i2c_driver tda10071_driver = {
1411        .driver = {
1412                .owner  = THIS_MODULE,
1413                .name   = "tda10071",
1414                .suppress_bind_attrs = true,
1415        },
1416        .probe          = tda10071_probe,
1417        .remove         = tda10071_remove,
1418        .id_table       = tda10071_id_table,
1419};
1420
1421module_i2c_driver(tda10071_driver);
1422
1423MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1424MODULE_DESCRIPTION("NXP TDA10071 DVB-S/S2 demodulator driver");
1425MODULE_LICENSE("GPL");
1426MODULE_FIRMWARE(TDA10071_FIRMWARE);
1427