linux/drivers/media/tuners/tda18250.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * NXP TDA18250 silicon tuner driver
   4 *
   5 * Copyright (C) 2017 Olli Salonen <olli.salonen@iki.fi>
   6 */
   7
   8#include "tda18250_priv.h"
   9#include <linux/regmap.h>
  10
  11static const struct dvb_tuner_ops tda18250_ops;
  12
  13static int tda18250_power_control(struct dvb_frontend *fe,
  14                unsigned int power_state)
  15{
  16        struct i2c_client *client = fe->tuner_priv;
  17        struct tda18250_dev *dev = i2c_get_clientdata(client);
  18        int ret;
  19        unsigned int utmp;
  20
  21        dev_dbg(&client->dev, "power state: %d", power_state);
  22
  23        switch (power_state) {
  24        case TDA18250_POWER_NORMAL:
  25                ret = regmap_write_bits(dev->regmap, R06_POWER2, 0x07, 0x00);
  26                if (ret)
  27                        goto err;
  28                ret = regmap_write_bits(dev->regmap, R25_REF, 0xc0, 0xc0);
  29                if (ret)
  30                        goto err;
  31                break;
  32        case TDA18250_POWER_STANDBY:
  33                if (dev->loopthrough) {
  34                        ret = regmap_write_bits(dev->regmap,
  35                                        R25_REF, 0xc0, 0x80);
  36                        if (ret)
  37                                goto err;
  38                        ret = regmap_write_bits(dev->regmap,
  39                                        R06_POWER2, 0x07, 0x02);
  40                        if (ret)
  41                                goto err;
  42                        ret = regmap_write_bits(dev->regmap,
  43                                        R10_LT1, 0x80, 0x00);
  44                        if (ret)
  45                                goto err;
  46                } else {
  47                        ret = regmap_write_bits(dev->regmap,
  48                                        R25_REF, 0xc0, 0x80);
  49                        if (ret)
  50                                goto err;
  51                        ret = regmap_write_bits(dev->regmap,
  52                                        R06_POWER2, 0x07, 0x01);
  53                        if (ret)
  54                                goto err;
  55                        ret = regmap_read(dev->regmap,
  56                                        R0D_AGC12, &utmp);
  57                        if (ret)
  58                                goto err;
  59                        ret = regmap_write_bits(dev->regmap,
  60                                        R0D_AGC12, 0x03, 0x03);
  61                        if (ret)
  62                                goto err;
  63                        ret = regmap_write_bits(dev->regmap,
  64                                        R10_LT1, 0x80, 0x80);
  65                        if (ret)
  66                                goto err;
  67                        ret = regmap_write_bits(dev->regmap,
  68                                        R0D_AGC12, 0x03, utmp & 0x03);
  69                        if (ret)
  70                                goto err;
  71                }
  72                break;
  73        default:
  74                ret = -EINVAL;
  75                goto err;
  76        }
  77
  78        return 0;
  79err:
  80        return ret;
  81}
  82
  83static int tda18250_wait_for_irq(struct dvb_frontend *fe,
  84                int maxwait, int step, u8 irq)
  85{
  86        struct i2c_client *client = fe->tuner_priv;
  87        struct tda18250_dev *dev = i2c_get_clientdata(client);
  88        int ret;
  89        unsigned long timeout;
  90        bool triggered;
  91        unsigned int utmp;
  92
  93        triggered = false;
  94        timeout = jiffies + msecs_to_jiffies(maxwait);
  95        while (!time_after(jiffies, timeout)) {
  96                // check for the IRQ
  97                ret = regmap_read(dev->regmap, R08_IRQ1, &utmp);
  98                if (ret)
  99                        goto err;
 100                if ((utmp & irq) == irq) {
 101                        triggered = true;
 102                        break;
 103                }
 104                msleep(step);
 105        }
 106
 107        dev_dbg(&client->dev, "waited IRQ (0x%02x) %d ms, triggered: %s", irq,
 108                        jiffies_to_msecs(jiffies) -
 109                        (jiffies_to_msecs(timeout) - maxwait),
 110                        triggered ? "true" : "false");
 111
 112        if (!triggered)
 113                return -ETIMEDOUT;
 114
 115        return 0;
 116err:
 117        return ret;
 118}
 119
 120static int tda18250_init(struct dvb_frontend *fe)
 121{
 122        struct i2c_client *client = fe->tuner_priv;
 123        struct tda18250_dev *dev = i2c_get_clientdata(client);
 124        int ret, i;
 125
 126        /* default values for various regs */
 127        static const u8 init_regs[][2] = {
 128                { R0C_AGC11, 0xc7 },
 129                { R0D_AGC12, 0x5d },
 130                { R0E_AGC13, 0x40 },
 131                { R0F_AGC14, 0x0e },
 132                { R10_LT1, 0x47 },
 133                { R11_LT2, 0x4e },
 134                { R12_AGC21, 0x26 },
 135                { R13_AGC22, 0x60 },
 136                { R18_AGC32, 0x37 },
 137                { R19_AGC33, 0x09 },
 138                { R1A_AGCK, 0x00 },
 139                { R1E_WI_FI, 0x29 },
 140                { R1F_RF_BPF, 0x06 },
 141                { R20_IR_MIX, 0xc6 },
 142                { R21_IF_AGC, 0x00 },
 143                { R2C_PS1, 0x75 },
 144                { R2D_PS2, 0x06 },
 145                { R2E_PS3, 0x07 },
 146                { R30_RSSI2, 0x0e },
 147                { R31_IRQ_CTRL, 0x00 },
 148                { R39_SD5, 0x00 },
 149                { R3B_REGU, 0x55 },
 150                { R3C_RCCAL1, 0xa7 },
 151                { R3F_IRCAL2, 0x85 },
 152                { R40_IRCAL3, 0x87 },
 153                { R41_IRCAL4, 0xc0 },
 154                { R43_PD1, 0x40 },
 155                { R44_PD2, 0xc0 },
 156                { R46_CPUMP, 0x0c },
 157                { R47_LNAPOL, 0x64 },
 158                { R4B_XTALOSC1, 0x30 },
 159                { R59_AGC2_UP2, 0x05 },
 160                { R5B_AGC_AUTO, 0x07 },
 161                { R5C_AGC_DEBUG, 0x00 },
 162        };
 163
 164        /* crystal related regs depend on frequency */
 165        static const u8 xtal_regs[][5] = {
 166                                        /* reg:   4d    4e    4f    50    51 */
 167                [TDA18250_XTAL_FREQ_16MHZ]  = { 0x3e, 0x80, 0x50, 0x00, 0x20 },
 168                [TDA18250_XTAL_FREQ_24MHZ]  = { 0x5d, 0xc0, 0xec, 0x00, 0x18 },
 169                [TDA18250_XTAL_FREQ_25MHZ]  = { 0x61, 0xa8, 0xec, 0x80, 0x19 },
 170                [TDA18250_XTAL_FREQ_27MHZ]  = { 0x69, 0x78, 0x8d, 0x80, 0x1b },
 171                [TDA18250_XTAL_FREQ_30MHZ]  = { 0x75, 0x30, 0x8f, 0x00, 0x1e },
 172        };
 173
 174        dev_dbg(&client->dev, "\n");
 175
 176        ret = tda18250_power_control(fe, TDA18250_POWER_NORMAL);
 177        if (ret)
 178                goto err;
 179
 180        msleep(20);
 181
 182        if (dev->warm)
 183                goto warm;
 184
 185        /* set initial register values */
 186        for (i = 0; i < ARRAY_SIZE(init_regs); i++) {
 187                ret = regmap_write(dev->regmap, init_regs[i][0],
 188                                init_regs[i][1]);
 189                if (ret)
 190                        goto err;
 191        }
 192
 193        /* set xtal related regs */
 194        ret = regmap_bulk_write(dev->regmap, R4D_XTALFLX1,
 195                        xtal_regs[dev->xtal_freq], 5);
 196        if (ret)
 197                goto err;
 198
 199        ret = regmap_write_bits(dev->regmap, R10_LT1, 0x80,
 200                        dev->loopthrough ? 0x00 : 0x80);
 201        if (ret)
 202                goto err;
 203
 204        /* clear IRQ */
 205        ret = regmap_write(dev->regmap, R0A_IRQ3, TDA18250_IRQ_HW_INIT);
 206        if (ret)
 207                goto err;
 208
 209        /* start HW init */
 210        ret = regmap_write(dev->regmap, R2A_MSM1, 0x70);
 211        if (ret)
 212                goto err;
 213
 214        ret = regmap_write(dev->regmap, R2B_MSM2, 0x01);
 215        if (ret)
 216                goto err;
 217
 218        ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_HW_INIT);
 219        if (ret)
 220                goto err;
 221
 222        /* tuner calibration */
 223        ret = regmap_write(dev->regmap, R2A_MSM1, 0x02);
 224        if (ret)
 225                goto err;
 226
 227        ret = regmap_write(dev->regmap, R2B_MSM2, 0x01);
 228        if (ret)
 229                goto err;
 230
 231        ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_CAL);
 232        if (ret)
 233                goto err;
 234
 235        dev->warm = true;
 236
 237warm:
 238        /* power up LNA */
 239        ret = regmap_write_bits(dev->regmap, R0C_AGC11, 0x80, 0x00);
 240        if (ret)
 241                goto err;
 242
 243        return 0;
 244err:
 245        dev_dbg(&client->dev, "failed=%d", ret);
 246        return ret;
 247}
 248
 249static int tda18250_set_agc(struct dvb_frontend *fe)
 250{
 251        struct i2c_client *client = fe->tuner_priv;
 252        struct tda18250_dev *dev = i2c_get_clientdata(client);
 253        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 254        int ret;
 255        u8 utmp, utmp2;
 256
 257        dev_dbg(&client->dev, "\n");
 258
 259        ret = regmap_write_bits(dev->regmap, R1F_RF_BPF, 0x87, 0x06);
 260        if (ret)
 261                goto err;
 262
 263        utmp = ((c->frequency < 100000000) &&
 264                        ((c->delivery_system == SYS_DVBC_ANNEX_A) ||
 265                        (c->delivery_system == SYS_DVBC_ANNEX_C)) &&
 266                        (c->bandwidth_hz == 6000000)) ? 0x80 : 0x00;
 267        ret = regmap_write(dev->regmap, R5A_H3H5, utmp);
 268        if (ret)
 269                goto err;
 270
 271        /* AGC1 */
 272        switch (c->delivery_system) {
 273        case SYS_ATSC:
 274        case SYS_DVBT:
 275        case SYS_DVBT2:
 276                utmp = 4;
 277                break;
 278        default: /* DVB-C/QAM */
 279                switch (c->bandwidth_hz) {
 280                case 6000000:
 281                        utmp = (c->frequency < 800000000) ? 6 : 4;
 282                        break;
 283                default: /* 7.935 and 8 MHz */
 284                        utmp = (c->frequency < 100000000) ? 2 : 3;
 285                        break;
 286                }
 287                break;
 288        }
 289
 290        ret = regmap_write_bits(dev->regmap, R0C_AGC11, 0x07, utmp);
 291        if (ret)
 292                goto err;
 293
 294        /* AGC2 */
 295        switch (c->delivery_system) {
 296        case SYS_ATSC:
 297        case SYS_DVBT:
 298        case SYS_DVBT2:
 299                utmp = (c->frequency < 320000000) ? 20 : 16;
 300                utmp2 = (c->frequency < 320000000) ? 22 : 18;
 301                break;
 302        default: /* DVB-C/QAM */
 303                switch (c->bandwidth_hz) {
 304                case 6000000:
 305                        if (c->frequency < 600000000) {
 306                                utmp = 18;
 307                                utmp2 = 22;
 308                        } else if (c->frequency < 800000000) {
 309                                utmp = 16;
 310                                utmp2 = 20;
 311                        } else {
 312                                utmp = 14;
 313                                utmp2 = 16;
 314                        }
 315                        break;
 316                default: /* 7.935 and 8 MHz */
 317                        utmp = (c->frequency < 320000000) ? 16 : 18;
 318                        utmp2 = (c->frequency < 320000000) ? 18 : 20;
 319                        break;
 320                }
 321                break;
 322        }
 323        ret = regmap_write_bits(dev->regmap, R58_AGC2_UP1, 0x1f, utmp2+8);
 324        if (ret)
 325                goto err;
 326        ret = regmap_write_bits(dev->regmap, R13_AGC22, 0x1f, utmp);
 327        if (ret)
 328                goto err;
 329        ret = regmap_write_bits(dev->regmap, R14_AGC23, 0x1f, utmp2);
 330        if (ret)
 331                goto err;
 332
 333        switch (c->delivery_system) {
 334        case SYS_ATSC:
 335        case SYS_DVBT:
 336        case SYS_DVBT2:
 337                utmp = 98;
 338                break;
 339        default: /* DVB-C/QAM */
 340                utmp = 90;
 341                break;
 342        }
 343        ret = regmap_write_bits(dev->regmap, R16_AGC25, 0xf8, utmp);
 344        if (ret)
 345                goto err;
 346
 347        ret = regmap_write_bits(dev->regmap, R12_AGC21, 0x60,
 348                        (c->frequency > 800000000) ? 0x40 : 0x20);
 349        if (ret)
 350                goto err;
 351
 352        /* AGC3 */
 353        switch (c->delivery_system) {
 354        case SYS_ATSC:
 355        case SYS_DVBT:
 356        case SYS_DVBT2:
 357                utmp = (c->frequency < 320000000) ? 5 : 7;
 358                utmp2 = (c->frequency < 320000000) ? 10 : 12;
 359                break;
 360        default: /* DVB-C/QAM */
 361                utmp = 7;
 362                utmp2 = 12;
 363                break;
 364        }
 365        ret = regmap_write(dev->regmap, R17_AGC31, (utmp << 4) | utmp2);
 366        if (ret)
 367                goto err;
 368
 369        /* S2D */
 370        switch (c->delivery_system) {
 371        case SYS_ATSC:
 372        case SYS_DVBT:
 373        case SYS_DVBT2:
 374                if (c->bandwidth_hz == 8000000)
 375                        utmp = 0x04;
 376                else
 377                        utmp = (c->frequency < 320000000) ? 0x04 : 0x02;
 378                break;
 379        default: /* DVB-C/QAM */
 380                if (c->bandwidth_hz == 6000000)
 381                        utmp = ((c->frequency > 172544000) &&
 382                                (c->frequency < 320000000)) ? 0x04 : 0x02;
 383                else /* 7.935 and 8 MHz */
 384                        utmp = ((c->frequency > 320000000) &&
 385                                (c->frequency < 600000000)) ? 0x02 : 0x04;
 386                break;
 387        }
 388        ret = regmap_write_bits(dev->regmap, R20_IR_MIX, 0x06, utmp);
 389        if (ret)
 390                goto err;
 391
 392        switch (c->delivery_system) {
 393        case SYS_ATSC:
 394        case SYS_DVBT:
 395        case SYS_DVBT2:
 396                utmp = 0;
 397                break;
 398        default: /* DVB-C/QAM */
 399                utmp = (c->frequency < 600000000) ? 0 : 3;
 400                break;
 401        }
 402        ret = regmap_write_bits(dev->regmap, R16_AGC25, 0x03, utmp);
 403        if (ret)
 404                goto err;
 405
 406        utmp = 0x09;
 407        switch (c->delivery_system) {
 408        case SYS_ATSC:
 409        case SYS_DVBT:
 410        case SYS_DVBT2:
 411                if (c->bandwidth_hz == 8000000)
 412                        utmp = 0x0c;
 413                break;
 414        default: /* DVB-C/QAM */
 415                utmp = 0x0c;
 416                break;
 417        }
 418        ret = regmap_write_bits(dev->regmap, R0F_AGC14, 0x3f, utmp);
 419        if (ret)
 420                goto err;
 421
 422        return 0;
 423err:
 424        dev_dbg(&client->dev, "failed=%d", ret);
 425        return ret;
 426}
 427
 428static int tda18250_pll_calc(struct dvb_frontend *fe, u8 *rdiv,
 429                u8 *ndiv, u8 *icp)
 430{
 431        struct i2c_client *client = fe->tuner_priv;
 432        struct tda18250_dev *dev = i2c_get_clientdata(client);
 433        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 434        int ret;
 435        unsigned int uval, exp, lopd, scale;
 436        unsigned long fvco;
 437
 438        ret = regmap_read(dev->regmap, R34_MD1, &uval);
 439        if (ret)
 440                goto err;
 441
 442        exp = (uval & 0x70) >> 4;
 443        if (exp > 5)
 444                exp = 0;
 445        lopd = 1 << (exp - 1);
 446        scale = uval & 0x0f;
 447        fvco = lopd * scale * ((c->frequency / 1000) + dev->if_frequency);
 448
 449        switch (dev->xtal_freq) {
 450        case TDA18250_XTAL_FREQ_16MHZ:
 451                *rdiv = 1;
 452                *ndiv = 0;
 453                *icp = (fvco < 6622000) ? 0x05 : 0x02;
 454        break;
 455        case TDA18250_XTAL_FREQ_24MHZ:
 456        case TDA18250_XTAL_FREQ_25MHZ:
 457                *rdiv = 3;
 458                *ndiv = 1;
 459                *icp = (fvco < 6622000) ? 0x05 : 0x02;
 460        break;
 461        case TDA18250_XTAL_FREQ_27MHZ:
 462                if (fvco < 6643000) {
 463                        *rdiv = 2;
 464                        *ndiv = 0;
 465                        *icp = 0x05;
 466                } else if (fvco < 6811000) {
 467                        *rdiv = 2;
 468                        *ndiv = 0;
 469                        *icp = 0x06;
 470                } else {
 471                        *rdiv = 3;
 472                        *ndiv = 1;
 473                        *icp = 0x02;
 474                }
 475        break;
 476        case TDA18250_XTAL_FREQ_30MHZ:
 477                *rdiv = 2;
 478                *ndiv = 0;
 479                *icp = (fvco < 6811000) ? 0x05 : 0x02;
 480        break;
 481        default:
 482                return -EINVAL;
 483        }
 484
 485        dev_dbg(&client->dev,
 486                        "lopd=%d scale=%u fvco=%lu, rdiv=%d ndiv=%d icp=%d",
 487                        lopd, scale, fvco, *rdiv, *ndiv, *icp);
 488        return 0;
 489err:
 490        return ret;
 491}
 492
 493static int tda18250_set_params(struct dvb_frontend *fe)
 494{
 495        struct i2c_client *client = fe->tuner_priv;
 496        struct tda18250_dev *dev = i2c_get_clientdata(client);
 497        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 498        u32 if_khz;
 499        int ret;
 500        unsigned int i, j;
 501        u8 utmp;
 502        u8 buf[3];
 503
 504        #define REG      0
 505        #define MASK     1
 506        #define DVBT_6   2
 507        #define DVBT_7   3
 508        #define DVBT_8   4
 509        #define DVBC_6   5
 510        #define DVBC_8   6
 511        #define ATSC     7
 512
 513        static const u8 delsys_params[][16] = {
 514                [REG]    = { 0x22, 0x23, 0x24, 0x21, 0x0d, 0x0c, 0x0f, 0x14,
 515                             0x0e, 0x12, 0x58, 0x59, 0x1a, 0x19, 0x1e, 0x30 },
 516                [MASK]   = { 0x77, 0xff, 0xff, 0x87, 0xf0, 0x78, 0x07, 0xe0,
 517                             0x60, 0x0f, 0x60, 0x0f, 0x33, 0x30, 0x80, 0x06 },
 518                [DVBT_6] = { 0x51, 0x03, 0x83, 0x82, 0x40, 0x48, 0x01, 0xe0,
 519                             0x60, 0x0f, 0x60, 0x05, 0x03, 0x10, 0x00, 0x04 },
 520                [DVBT_7] = { 0x52, 0x03, 0x85, 0x82, 0x40, 0x48, 0x01, 0xe0,
 521                             0x60, 0x0f, 0x60, 0x05, 0x03, 0x10, 0x00, 0x04 },
 522                [DVBT_8] = { 0x53, 0x03, 0x87, 0x82, 0x40, 0x48, 0x06, 0xe0,
 523                             0x60, 0x07, 0x60, 0x05, 0x03, 0x10, 0x00, 0x04 },
 524                [DVBC_6] = { 0x32, 0x05, 0x86, 0x82, 0x50, 0x00, 0x06, 0x60,
 525                             0x40, 0x0e, 0x60, 0x05, 0x33, 0x10, 0x00, 0x04 },
 526                [DVBC_8] = { 0x53, 0x03, 0x88, 0x82, 0x50, 0x00, 0x06, 0x60,
 527                             0x40, 0x0e, 0x60, 0x05, 0x33, 0x10, 0x00, 0x04 },
 528                [ATSC]   = { 0x51, 0x03, 0x83, 0x82, 0x40, 0x48, 0x01, 0xe0,
 529                             0x40, 0x0e, 0x60, 0x05, 0x03, 0x00, 0x80, 0x04 },
 530        };
 531
 532        dev_dbg(&client->dev,
 533                        "delivery_system=%d frequency=%u bandwidth_hz=%u",
 534                        c->delivery_system, c->frequency, c->bandwidth_hz);
 535
 536
 537        switch (c->delivery_system) {
 538        case SYS_ATSC:
 539                j = ATSC;
 540                if_khz = dev->if_atsc;
 541                break;
 542        case SYS_DVBT:
 543        case SYS_DVBT2:
 544                if (c->bandwidth_hz == 0) {
 545                        ret = -EINVAL;
 546                        goto err;
 547                } else if (c->bandwidth_hz <= 6000000) {
 548                        j = DVBT_6;
 549                        if_khz = dev->if_dvbt_6;
 550                } else if (c->bandwidth_hz <= 7000000) {
 551                        j = DVBT_7;
 552                        if_khz = dev->if_dvbt_7;
 553                } else if (c->bandwidth_hz <= 8000000) {
 554                        j = DVBT_8;
 555                        if_khz = dev->if_dvbt_8;
 556                } else {
 557                        ret = -EINVAL;
 558                        goto err;
 559                }
 560                break;
 561        case SYS_DVBC_ANNEX_A:
 562        case SYS_DVBC_ANNEX_C:
 563                if (c->bandwidth_hz == 0) {
 564                        ret = -EINVAL;
 565                        goto err;
 566                } else if (c->bandwidth_hz <= 6000000) {
 567                        j = DVBC_6;
 568                        if_khz = dev->if_dvbc_6;
 569                } else if (c->bandwidth_hz <= 8000000) {
 570                        j = DVBC_8;
 571                        if_khz = dev->if_dvbc_8;
 572                } else {
 573                        ret = -EINVAL;
 574                        goto err;
 575                }
 576                break;
 577        default:
 578                ret = -EINVAL;
 579                dev_err(&client->dev, "unsupported delivery system=%d",
 580                                c->delivery_system);
 581                goto err;
 582        }
 583
 584        /* set delivery system dependent registers */
 585        for (i = 0; i < 16; i++) {
 586                ret = regmap_write_bits(dev->regmap, delsys_params[REG][i],
 587                         delsys_params[MASK][i],  delsys_params[j][i]);
 588                if (ret)
 589                        goto err;
 590        }
 591
 592        /* set IF if needed */
 593        if (dev->if_frequency != if_khz) {
 594                utmp = DIV_ROUND_CLOSEST(if_khz, 50);
 595                ret = regmap_write(dev->regmap, R26_IF, utmp);
 596                if (ret)
 597                        goto err;
 598                dev->if_frequency = if_khz;
 599                dev_dbg(&client->dev, "set IF=%u kHz", if_khz);
 600
 601        }
 602
 603        ret = tda18250_set_agc(fe);
 604        if (ret)
 605                goto err;
 606
 607        ret = regmap_write_bits(dev->regmap, R1A_AGCK, 0x03, 0x01);
 608        if (ret)
 609                goto err;
 610
 611        ret = regmap_write_bits(dev->regmap, R14_AGC23, 0x40, 0x00);
 612        if (ret)
 613                goto err;
 614
 615        /* set frequency */
 616        buf[0] = ((c->frequency / 1000) >> 16) & 0xff;
 617        buf[1] = ((c->frequency / 1000) >>  8) & 0xff;
 618        buf[2] = ((c->frequency / 1000) >>  0) & 0xff;
 619        ret = regmap_bulk_write(dev->regmap, R27_RF1, buf, 3);
 620        if (ret)
 621                goto err;
 622
 623        ret = regmap_write(dev->regmap, R0A_IRQ3, TDA18250_IRQ_TUNE);
 624        if (ret)
 625                goto err;
 626
 627        /* initial tune */
 628        ret = regmap_write(dev->regmap, R2A_MSM1, 0x01);
 629        if (ret)
 630                goto err;
 631
 632        ret = regmap_write(dev->regmap, R2B_MSM2, 0x01);
 633        if (ret)
 634                goto err;
 635
 636        ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_TUNE);
 637        if (ret)
 638                goto err;
 639
 640        /* calc ndiv and rdiv */
 641        ret = tda18250_pll_calc(fe, &buf[0], &buf[1], &buf[2]);
 642        if (ret)
 643                goto err;
 644
 645        ret = regmap_write_bits(dev->regmap, R4F_XTALFLX3, 0xe0,
 646                        (buf[0] << 6) | (buf[1] << 5));
 647        if (ret)
 648                goto err;
 649
 650        /* clear IRQ */
 651        ret = regmap_write(dev->regmap, R0A_IRQ3, TDA18250_IRQ_TUNE);
 652        if (ret)
 653                goto err;
 654
 655        ret = regmap_write_bits(dev->regmap, R46_CPUMP, 0x07, 0x00);
 656        if (ret)
 657                goto err;
 658
 659        ret = regmap_write_bits(dev->regmap, R39_SD5, 0x03, 0x00);
 660        if (ret)
 661                goto err;
 662
 663        /* tune again */
 664        ret = regmap_write(dev->regmap, R2A_MSM1, 0x01); /* tune */
 665        if (ret)
 666                goto err;
 667
 668        ret = regmap_write(dev->regmap, R2B_MSM2, 0x01); /* go */
 669        if (ret)
 670                goto err;
 671
 672        ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_TUNE);
 673        if (ret)
 674                goto err;
 675
 676        /* pll locking */
 677        msleep(20);
 678
 679        ret = regmap_write_bits(dev->regmap, R2B_MSM2, 0x04, 0x04);
 680        if (ret)
 681                goto err;
 682
 683        msleep(20);
 684
 685        /* restore AGCK */
 686        ret = regmap_write_bits(dev->regmap, R1A_AGCK, 0x03, 0x03);
 687        if (ret)
 688                goto err;
 689
 690        ret = regmap_write_bits(dev->regmap, R14_AGC23, 0x40, 0x40);
 691        if (ret)
 692                goto err;
 693
 694        /* charge pump */
 695        ret = regmap_write_bits(dev->regmap, R46_CPUMP, 0x07, buf[2]);
 696
 697        return 0;
 698err:
 699        return ret;
 700}
 701
 702static int tda18250_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
 703{
 704        struct i2c_client *client = fe->tuner_priv;
 705        struct tda18250_dev *dev = i2c_get_clientdata(client);
 706
 707        *frequency = dev->if_frequency * 1000;
 708        return 0;
 709}
 710
 711static int tda18250_sleep(struct dvb_frontend *fe)
 712{
 713        struct i2c_client *client = fe->tuner_priv;
 714        struct tda18250_dev *dev = i2c_get_clientdata(client);
 715        int ret;
 716
 717        dev_dbg(&client->dev, "\n");
 718
 719        /* power down LNA */
 720        ret = regmap_write_bits(dev->regmap, R0C_AGC11, 0x80, 0x00);
 721        if (ret)
 722                return ret;
 723
 724        /* set if freq to 0 in order to make sure it's set after wake up */
 725        dev->if_frequency = 0;
 726
 727        ret = tda18250_power_control(fe, TDA18250_POWER_STANDBY);
 728        return ret;
 729}
 730
 731static const struct dvb_tuner_ops tda18250_ops = {
 732        .info = {
 733                .name              = "NXP TDA18250",
 734                .frequency_min_hz  =  42 * MHz,
 735                .frequency_max_hz  = 870 * MHz,
 736        },
 737
 738        .init = tda18250_init,
 739        .set_params = tda18250_set_params,
 740        .get_if_frequency = tda18250_get_if_frequency,
 741        .sleep = tda18250_sleep,
 742};
 743
 744static int tda18250_probe(struct i2c_client *client,
 745                const struct i2c_device_id *id)
 746{
 747        struct tda18250_config *cfg = client->dev.platform_data;
 748        struct dvb_frontend *fe = cfg->fe;
 749        struct tda18250_dev *dev;
 750        int ret;
 751        unsigned char chip_id[3];
 752
 753        /* some registers are always read from HW */
 754        static const struct regmap_range tda18250_yes_ranges[] = {
 755                regmap_reg_range(R05_POWER1, R0B_IRQ4),
 756                regmap_reg_range(R21_IF_AGC, R21_IF_AGC),
 757                regmap_reg_range(R2A_MSM1, R2B_MSM2),
 758                regmap_reg_range(R2F_RSSI1, R31_IRQ_CTRL),
 759        };
 760
 761        static const struct regmap_access_table tda18250_volatile_table = {
 762                .yes_ranges = tda18250_yes_ranges,
 763                .n_yes_ranges = ARRAY_SIZE(tda18250_yes_ranges),
 764        };
 765
 766        static const struct regmap_config tda18250_regmap_config = {
 767                .reg_bits = 8,
 768                .val_bits = 8,
 769                .max_register = TDA18250_NUM_REGS - 1,
 770                .volatile_table = &tda18250_volatile_table,
 771        };
 772
 773        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 774        if (!dev) {
 775                ret = -ENOMEM;
 776                goto err;
 777        }
 778
 779        i2c_set_clientdata(client, dev);
 780
 781        dev->fe = cfg->fe;
 782        dev->loopthrough = cfg->loopthrough;
 783        if (cfg->xtal_freq < TDA18250_XTAL_FREQ_MAX) {
 784                dev->xtal_freq = cfg->xtal_freq;
 785        } else {
 786                ret = -EINVAL;
 787                dev_err(&client->dev, "xtal_freq invalid=%d", cfg->xtal_freq);
 788                goto err_kfree;
 789        }
 790        dev->if_dvbt_6 = cfg->if_dvbt_6;
 791        dev->if_dvbt_7 = cfg->if_dvbt_7;
 792        dev->if_dvbt_8 = cfg->if_dvbt_8;
 793        dev->if_dvbc_6 = cfg->if_dvbc_6;
 794        dev->if_dvbc_8 = cfg->if_dvbc_8;
 795        dev->if_atsc = cfg->if_atsc;
 796
 797        dev->if_frequency = 0;
 798        dev->warm = false;
 799
 800        dev->regmap = devm_regmap_init_i2c(client, &tda18250_regmap_config);
 801        if (IS_ERR(dev->regmap)) {
 802                ret = PTR_ERR(dev->regmap);
 803                goto err_kfree;
 804        }
 805
 806        /* read the three chip ID registers */
 807        regmap_bulk_read(dev->regmap, R00_ID1, &chip_id, 3);
 808        dev_dbg(&client->dev, "chip_id=%02x:%02x:%02x",
 809                        chip_id[0], chip_id[1], chip_id[2]);
 810
 811        switch (chip_id[0]) {
 812        case 0xc7:
 813                dev->slave = false;
 814                break;
 815        case 0x47:
 816                dev->slave = true;
 817                break;
 818        default:
 819                ret = -ENODEV;
 820                goto err_kfree;
 821        }
 822
 823        if (chip_id[1] != 0x4a) {
 824                ret = -ENODEV;
 825                goto err_kfree;
 826        }
 827
 828        switch (chip_id[2]) {
 829        case 0x20:
 830                dev_info(&client->dev,
 831                                "NXP TDA18250AHN/%s successfully identified",
 832                                dev->slave ? "S" : "M");
 833                break;
 834        case 0x21:
 835                dev_info(&client->dev,
 836                                "NXP TDA18250BHN/%s successfully identified",
 837                                dev->slave ? "S" : "M");
 838                break;
 839        default:
 840                ret = -ENODEV;
 841                goto err_kfree;
 842        }
 843
 844        fe->tuner_priv = client;
 845        memcpy(&fe->ops.tuner_ops, &tda18250_ops,
 846                        sizeof(struct dvb_tuner_ops));
 847
 848        /* put the tuner in standby */
 849        tda18250_power_control(fe, TDA18250_POWER_STANDBY);
 850
 851        return 0;
 852err_kfree:
 853        kfree(dev);
 854err:
 855        dev_dbg(&client->dev, "failed=%d", ret);
 856        return ret;
 857}
 858
 859static int tda18250_remove(struct i2c_client *client)
 860{
 861        struct tda18250_dev *dev = i2c_get_clientdata(client);
 862        struct dvb_frontend *fe = dev->fe;
 863
 864        dev_dbg(&client->dev, "\n");
 865
 866        memset(&fe->ops.tuner_ops, 0, sizeof(struct dvb_tuner_ops));
 867        fe->tuner_priv = NULL;
 868        kfree(dev);
 869
 870        return 0;
 871}
 872
 873static const struct i2c_device_id tda18250_id_table[] = {
 874        {"tda18250", 0},
 875        {}
 876};
 877MODULE_DEVICE_TABLE(i2c, tda18250_id_table);
 878
 879static struct i2c_driver tda18250_driver = {
 880        .driver = {
 881                .name   = "tda18250",
 882        },
 883        .probe          = tda18250_probe,
 884        .remove         = tda18250_remove,
 885        .id_table       = tda18250_id_table,
 886};
 887
 888module_i2c_driver(tda18250_driver);
 889
 890MODULE_DESCRIPTION("NXP TDA18250 silicon tuner driver");
 891MODULE_AUTHOR("Olli Salonen <olli.salonen@iki.fi>");
 892MODULE_LICENSE("GPL");
 893