linux/drivers/media/dvb-frontends/tda1004x.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2  /*
   3     Driver for Philips tda1004xh OFDM Demodulator
   4
   5     (c) 2003, 2004 Andrew de Quincey & Robert Schlabbach
   6
   7
   8   */
   9/*
  10 * This driver needs external firmware. Please use the commands
  11 * "<kerneldir>/scripts/get_dvb_firmware tda10045",
  12 * "<kerneldir>/scripts/get_dvb_firmware tda10046" to
  13 * download/extract them, and then copy them to /usr/lib/hotplug/firmware
  14 * or /lib/firmware (depending on configuration of firmware hotplug).
  15 */
  16#define TDA10045_DEFAULT_FIRMWARE "dvb-fe-tda10045.fw"
  17#define TDA10046_DEFAULT_FIRMWARE "dvb-fe-tda10046.fw"
  18
  19#include <linux/init.h>
  20#include <linux/module.h>
  21#include <linux/device.h>
  22#include <linux/jiffies.h>
  23#include <linux/string.h>
  24#include <linux/slab.h>
  25
  26#include <media/dvb_frontend.h>
  27#include "tda1004x.h"
  28
  29static int debug;
  30#define dprintk(args...) \
  31        do { \
  32                if (debug) printk(KERN_DEBUG "tda1004x: " args); \
  33        } while (0)
  34
  35#define TDA1004X_CHIPID          0x00
  36#define TDA1004X_AUTO            0x01
  37#define TDA1004X_IN_CONF1        0x02
  38#define TDA1004X_IN_CONF2        0x03
  39#define TDA1004X_OUT_CONF1       0x04
  40#define TDA1004X_OUT_CONF2       0x05
  41#define TDA1004X_STATUS_CD       0x06
  42#define TDA1004X_CONFC4          0x07
  43#define TDA1004X_DSSPARE2        0x0C
  44#define TDA10045H_CODE_IN        0x0D
  45#define TDA10045H_FWPAGE         0x0E
  46#define TDA1004X_SCAN_CPT        0x10
  47#define TDA1004X_DSP_CMD         0x11
  48#define TDA1004X_DSP_ARG         0x12
  49#define TDA1004X_DSP_DATA1       0x13
  50#define TDA1004X_DSP_DATA2       0x14
  51#define TDA1004X_CONFADC1        0x15
  52#define TDA1004X_CONFC1          0x16
  53#define TDA10045H_S_AGC          0x1a
  54#define TDA10046H_AGC_TUN_LEVEL  0x1a
  55#define TDA1004X_SNR             0x1c
  56#define TDA1004X_CONF_TS1        0x1e
  57#define TDA1004X_CONF_TS2        0x1f
  58#define TDA1004X_CBER_RESET      0x20
  59#define TDA1004X_CBER_MSB        0x21
  60#define TDA1004X_CBER_LSB        0x22
  61#define TDA1004X_CVBER_LUT       0x23
  62#define TDA1004X_VBER_MSB        0x24
  63#define TDA1004X_VBER_MID        0x25
  64#define TDA1004X_VBER_LSB        0x26
  65#define TDA1004X_UNCOR           0x27
  66
  67#define TDA10045H_CONFPLL_P      0x2D
  68#define TDA10045H_CONFPLL_M_MSB  0x2E
  69#define TDA10045H_CONFPLL_M_LSB  0x2F
  70#define TDA10045H_CONFPLL_N      0x30
  71
  72#define TDA10046H_CONFPLL1       0x2D
  73#define TDA10046H_CONFPLL2       0x2F
  74#define TDA10046H_CONFPLL3       0x30
  75#define TDA10046H_TIME_WREF1     0x31
  76#define TDA10046H_TIME_WREF2     0x32
  77#define TDA10046H_TIME_WREF3     0x33
  78#define TDA10046H_TIME_WREF4     0x34
  79#define TDA10046H_TIME_WREF5     0x35
  80
  81#define TDA10045H_UNSURW_MSB     0x31
  82#define TDA10045H_UNSURW_LSB     0x32
  83#define TDA10045H_WREF_MSB       0x33
  84#define TDA10045H_WREF_MID       0x34
  85#define TDA10045H_WREF_LSB       0x35
  86#define TDA10045H_MUXOUT         0x36
  87#define TDA1004X_CONFADC2        0x37
  88
  89#define TDA10045H_IOFFSET        0x38
  90
  91#define TDA10046H_CONF_TRISTATE1 0x3B
  92#define TDA10046H_CONF_TRISTATE2 0x3C
  93#define TDA10046H_CONF_POLARITY  0x3D
  94#define TDA10046H_FREQ_OFFSET    0x3E
  95#define TDA10046H_GPIO_OUT_SEL   0x41
  96#define TDA10046H_GPIO_SELECT    0x42
  97#define TDA10046H_AGC_CONF       0x43
  98#define TDA10046H_AGC_THR        0x44
  99#define TDA10046H_AGC_RENORM     0x45
 100#define TDA10046H_AGC_GAINS      0x46
 101#define TDA10046H_AGC_TUN_MIN    0x47
 102#define TDA10046H_AGC_TUN_MAX    0x48
 103#define TDA10046H_AGC_IF_MIN     0x49
 104#define TDA10046H_AGC_IF_MAX     0x4A
 105
 106#define TDA10046H_FREQ_PHY2_MSB  0x4D
 107#define TDA10046H_FREQ_PHY2_LSB  0x4E
 108
 109#define TDA10046H_CVBER_CTRL     0x4F
 110#define TDA10046H_AGC_IF_LEVEL   0x52
 111#define TDA10046H_CODE_CPT       0x57
 112#define TDA10046H_CODE_IN        0x58
 113
 114
 115static int tda1004x_write_byteI(struct tda1004x_state *state, int reg, int data)
 116{
 117        int ret;
 118        u8 buf[] = { reg, data };
 119        struct i2c_msg msg = { .flags = 0, .buf = buf, .len = 2 };
 120
 121        dprintk("%s: reg=0x%x, data=0x%x\n", __func__, reg, data);
 122
 123        msg.addr = state->config->demod_address;
 124        ret = i2c_transfer(state->i2c, &msg, 1);
 125
 126        if (ret != 1)
 127                dprintk("%s: error reg=0x%x, data=0x%x, ret=%i\n",
 128                        __func__, reg, data, ret);
 129
 130        dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __func__,
 131                reg, data, ret);
 132        return (ret != 1) ? -1 : 0;
 133}
 134
 135static int tda1004x_read_byte(struct tda1004x_state *state, int reg)
 136{
 137        int ret;
 138        u8 b0[] = { reg };
 139        u8 b1[] = { 0 };
 140        struct i2c_msg msg[] = {{ .flags = 0, .buf = b0, .len = 1 },
 141                                { .flags = I2C_M_RD, .buf = b1, .len = 1 }};
 142
 143        dprintk("%s: reg=0x%x\n", __func__, reg);
 144
 145        msg[0].addr = state->config->demod_address;
 146        msg[1].addr = state->config->demod_address;
 147        ret = i2c_transfer(state->i2c, msg, 2);
 148
 149        if (ret != 2) {
 150                dprintk("%s: error reg=0x%x, ret=%i\n", __func__, reg,
 151                        ret);
 152                return -EINVAL;
 153        }
 154
 155        dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __func__,
 156                reg, b1[0], ret);
 157        return b1[0];
 158}
 159
 160static int tda1004x_write_mask(struct tda1004x_state *state, int reg, int mask, int data)
 161{
 162        int val;
 163        dprintk("%s: reg=0x%x, mask=0x%x, data=0x%x\n", __func__, reg,
 164                mask, data);
 165
 166        // read a byte and check
 167        val = tda1004x_read_byte(state, reg);
 168        if (val < 0)
 169                return val;
 170
 171        // mask if off
 172        val = val & ~mask;
 173        val |= data & 0xff;
 174
 175        // write it out again
 176        return tda1004x_write_byteI(state, reg, val);
 177}
 178
 179static int tda1004x_write_buf(struct tda1004x_state *state, int reg, unsigned char *buf, int len)
 180{
 181        int i;
 182        int result;
 183
 184        dprintk("%s: reg=0x%x, len=0x%x\n", __func__, reg, len);
 185
 186        result = 0;
 187        for (i = 0; i < len; i++) {
 188                result = tda1004x_write_byteI(state, reg + i, buf[i]);
 189                if (result != 0)
 190                        break;
 191        }
 192
 193        return result;
 194}
 195
 196static int tda1004x_enable_tuner_i2c(struct tda1004x_state *state)
 197{
 198        int result;
 199        dprintk("%s\n", __func__);
 200
 201        result = tda1004x_write_mask(state, TDA1004X_CONFC4, 2, 2);
 202        msleep(20);
 203        return result;
 204}
 205
 206static int tda1004x_disable_tuner_i2c(struct tda1004x_state *state)
 207{
 208        dprintk("%s\n", __func__);
 209
 210        return tda1004x_write_mask(state, TDA1004X_CONFC4, 2, 0);
 211}
 212
 213static int tda10045h_set_bandwidth(struct tda1004x_state *state,
 214                                   u32 bandwidth)
 215{
 216        static u8 bandwidth_6mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x60, 0x1e, 0xa7, 0x45, 0x4f };
 217        static u8 bandwidth_7mhz[] = { 0x02, 0x00, 0x37, 0x00, 0x4a, 0x2f, 0x6d, 0x76, 0xdb };
 218        static u8 bandwidth_8mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x48, 0x17, 0x89, 0xc7, 0x14 };
 219
 220        switch (bandwidth) {
 221        case 6000000:
 222                tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_6mhz, sizeof(bandwidth_6mhz));
 223                break;
 224
 225        case 7000000:
 226                tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_7mhz, sizeof(bandwidth_7mhz));
 227                break;
 228
 229        case 8000000:
 230                tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_8mhz, sizeof(bandwidth_8mhz));
 231                break;
 232
 233        default:
 234                return -EINVAL;
 235        }
 236
 237        tda1004x_write_byteI(state, TDA10045H_IOFFSET, 0);
 238
 239        return 0;
 240}
 241
 242static int tda10046h_set_bandwidth(struct tda1004x_state *state,
 243                                   u32 bandwidth)
 244{
 245        static u8 bandwidth_6mhz_53M[] = { 0x7b, 0x2e, 0x11, 0xf0, 0xd2 };
 246        static u8 bandwidth_7mhz_53M[] = { 0x6a, 0x02, 0x6a, 0x43, 0x9f };
 247        static u8 bandwidth_8mhz_53M[] = { 0x5c, 0x32, 0xc2, 0x96, 0x6d };
 248
 249        static u8 bandwidth_6mhz_48M[] = { 0x70, 0x02, 0x49, 0x24, 0x92 };
 250        static u8 bandwidth_7mhz_48M[] = { 0x60, 0x02, 0xaa, 0xaa, 0xab };
 251        static u8 bandwidth_8mhz_48M[] = { 0x54, 0x03, 0x0c, 0x30, 0xc3 };
 252        int tda10046_clk53m;
 253
 254        if ((state->config->if_freq == TDA10046_FREQ_045) ||
 255            (state->config->if_freq == TDA10046_FREQ_052))
 256                tda10046_clk53m = 0;
 257        else
 258                tda10046_clk53m = 1;
 259        switch (bandwidth) {
 260        case 6000000:
 261                if (tda10046_clk53m)
 262                        tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_6mhz_53M,
 263                                                  sizeof(bandwidth_6mhz_53M));
 264                else
 265                        tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_6mhz_48M,
 266                                                  sizeof(bandwidth_6mhz_48M));
 267                if (state->config->if_freq == TDA10046_FREQ_045) {
 268                        tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0a);
 269                        tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0xab);
 270                }
 271                break;
 272
 273        case 7000000:
 274                if (tda10046_clk53m)
 275                        tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_7mhz_53M,
 276                                                  sizeof(bandwidth_7mhz_53M));
 277                else
 278                        tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_7mhz_48M,
 279                                                  sizeof(bandwidth_7mhz_48M));
 280                if (state->config->if_freq == TDA10046_FREQ_045) {
 281                        tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
 282                        tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x00);
 283                }
 284                break;
 285
 286        case 8000000:
 287                if (tda10046_clk53m)
 288                        tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_8mhz_53M,
 289                                                  sizeof(bandwidth_8mhz_53M));
 290                else
 291                        tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_8mhz_48M,
 292                                                  sizeof(bandwidth_8mhz_48M));
 293                if (state->config->if_freq == TDA10046_FREQ_045) {
 294                        tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0d);
 295                        tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x55);
 296                }
 297                break;
 298
 299        default:
 300                return -EINVAL;
 301        }
 302
 303        return 0;
 304}
 305
 306static int tda1004x_do_upload(struct tda1004x_state *state,
 307                              const unsigned char *mem, unsigned int len,
 308                              u8 dspCodeCounterReg, u8 dspCodeInReg)
 309{
 310        u8 buf[65];
 311        struct i2c_msg fw_msg = { .flags = 0, .buf = buf, .len = 0 };
 312        int tx_size;
 313        int pos = 0;
 314
 315        /* clear code counter */
 316        tda1004x_write_byteI(state, dspCodeCounterReg, 0);
 317        fw_msg.addr = state->config->demod_address;
 318
 319        i2c_lock_bus(state->i2c, I2C_LOCK_SEGMENT);
 320        buf[0] = dspCodeInReg;
 321        while (pos != len) {
 322                // work out how much to send this time
 323                tx_size = len - pos;
 324                if (tx_size > 0x10)
 325                        tx_size = 0x10;
 326
 327                // send the chunk
 328                memcpy(buf + 1, mem + pos, tx_size);
 329                fw_msg.len = tx_size + 1;
 330                if (__i2c_transfer(state->i2c, &fw_msg, 1) != 1) {
 331                        printk(KERN_ERR "tda1004x: Error during firmware upload\n");
 332                        i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
 333                        return -EIO;
 334                }
 335                pos += tx_size;
 336
 337                dprintk("%s: fw_pos=0x%x\n", __func__, pos);
 338        }
 339        i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
 340
 341        /* give the DSP a chance to settle 03/10/05 Hac */
 342        msleep(100);
 343
 344        return 0;
 345}
 346
 347static int tda1004x_check_upload_ok(struct tda1004x_state *state)
 348{
 349        u8 data1, data2;
 350        unsigned long timeout;
 351
 352        if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
 353                timeout = jiffies + 2 * HZ;
 354                while(!(tda1004x_read_byte(state, TDA1004X_STATUS_CD) & 0x20)) {
 355                        if (time_after(jiffies, timeout)) {
 356                                printk(KERN_ERR "tda1004x: timeout waiting for DSP ready\n");
 357                                break;
 358                        }
 359                        msleep(1);
 360                }
 361        } else
 362                msleep(100);
 363
 364        // check upload was OK
 365        tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0); // we want to read from the DSP
 366        tda1004x_write_byteI(state, TDA1004X_DSP_CMD, 0x67);
 367
 368        data1 = tda1004x_read_byte(state, TDA1004X_DSP_DATA1);
 369        data2 = tda1004x_read_byte(state, TDA1004X_DSP_DATA2);
 370        if (data1 != 0x67 || data2 < 0x20 || data2 > 0x2e) {
 371                printk(KERN_INFO "tda1004x: found firmware revision %x -- invalid\n", data2);
 372                return -EIO;
 373        }
 374        printk(KERN_INFO "tda1004x: found firmware revision %x -- ok\n", data2);
 375        return 0;
 376}
 377
 378static int tda10045_fwupload(struct dvb_frontend* fe)
 379{
 380        struct tda1004x_state* state = fe->demodulator_priv;
 381        int ret;
 382        const struct firmware *fw;
 383
 384        /* don't re-upload unless necessary */
 385        if (tda1004x_check_upload_ok(state) == 0)
 386                return 0;
 387
 388        /* request the firmware, this will block until someone uploads it */
 389        printk(KERN_INFO "tda1004x: waiting for firmware upload (%s)...\n", TDA10045_DEFAULT_FIRMWARE);
 390        ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
 391        if (ret) {
 392                printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
 393                return ret;
 394        }
 395
 396        /* reset chip */
 397        tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0);
 398        tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8);
 399        tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 0);
 400        msleep(10);
 401
 402        /* set parameters */
 403        tda10045h_set_bandwidth(state, 8000000);
 404
 405        ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10045H_FWPAGE, TDA10045H_CODE_IN);
 406        release_firmware(fw);
 407        if (ret)
 408                return ret;
 409        printk(KERN_INFO "tda1004x: firmware upload complete\n");
 410
 411        /* wait for DSP to initialise */
 412        /* DSPREADY doesn't seem to work on the TDA10045H */
 413        msleep(100);
 414
 415        return tda1004x_check_upload_ok(state);
 416}
 417
 418static void tda10046_init_plls(struct dvb_frontend* fe)
 419{
 420        struct tda1004x_state* state = fe->demodulator_priv;
 421        int tda10046_clk53m;
 422
 423        if ((state->config->if_freq == TDA10046_FREQ_045) ||
 424            (state->config->if_freq == TDA10046_FREQ_052))
 425                tda10046_clk53m = 0;
 426        else
 427                tda10046_clk53m = 1;
 428
 429        tda1004x_write_byteI(state, TDA10046H_CONFPLL1, 0xf0);
 430        if(tda10046_clk53m) {
 431                printk(KERN_INFO "tda1004x: setting up plls for 53MHz sampling clock\n");
 432                tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x08); // PLL M = 8
 433        } else {
 434                printk(KERN_INFO "tda1004x: setting up plls for 48MHz sampling clock\n");
 435                tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x03); // PLL M = 3
 436        }
 437        if (state->config->xtal_freq == TDA10046_XTAL_4M ) {
 438                dprintk("%s: setting up PLLs for a 4 MHz Xtal\n", __func__);
 439                tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 0); // PLL P = N = 0
 440        } else {
 441                dprintk("%s: setting up PLLs for a 16 MHz Xtal\n", __func__);
 442                tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 3); // PLL P = 0, N = 3
 443        }
 444        if(tda10046_clk53m)
 445                tda1004x_write_byteI(state, TDA10046H_FREQ_OFFSET, 0x67);
 446        else
 447                tda1004x_write_byteI(state, TDA10046H_FREQ_OFFSET, 0x72);
 448        /* Note clock frequency is handled implicitly */
 449        switch (state->config->if_freq) {
 450        case TDA10046_FREQ_045:
 451                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
 452                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x00);
 453                break;
 454        case TDA10046_FREQ_052:
 455                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0d);
 456                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0xc7);
 457                break;
 458        case TDA10046_FREQ_3617:
 459                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0xd7);
 460                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x59);
 461                break;
 462        case TDA10046_FREQ_3613:
 463                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0xd7);
 464                tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x3f);
 465                break;
 466        }
 467        tda10046h_set_bandwidth(state, 8000000); /* default bandwidth 8 MHz */
 468        /* let the PLLs settle */
 469        msleep(120);
 470}
 471
 472static int tda10046_fwupload(struct dvb_frontend* fe)
 473{
 474        struct tda1004x_state* state = fe->demodulator_priv;
 475        int ret, confc4;
 476        const struct firmware *fw;
 477
 478        /* reset + wake up chip */
 479        if (state->config->xtal_freq == TDA10046_XTAL_4M) {
 480                confc4 = 0;
 481        } else {
 482                dprintk("%s: 16MHz Xtal, reducing I2C speed\n", __func__);
 483                confc4 = 0x80;
 484        }
 485        tda1004x_write_byteI(state, TDA1004X_CONFC4, confc4);
 486
 487        tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 1, 0);
 488        /* set GPIO 1 and 3 */
 489        if (state->config->gpio_config != TDA10046_GPTRI) {
 490                tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE2, 0x33);
 491                tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f, state->config->gpio_config &0x0f);
 492        }
 493        /* let the clocks recover from sleep */
 494        msleep(10);
 495
 496        /* The PLLs need to be reprogrammed after sleep */
 497        tda10046_init_plls(fe);
 498        tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0);
 499
 500        /* don't re-upload unless necessary */
 501        if (tda1004x_check_upload_ok(state) == 0)
 502                return 0;
 503
 504        /*
 505           For i2c normal work, we need to slow down the bus speed.
 506           However, the slow down breaks the eeprom firmware load.
 507           So, use normal speed for eeprom booting and then restore the
 508           i2c speed after that. Tested with MSI TV @nyware A/D board,
 509           that comes with firmware version 29 inside their eeprom.
 510
 511           It should also be noticed that no other I2C transfer should
 512           be in course while booting from eeprom, otherwise, tda10046
 513           goes into an instable state. So, proper locking are needed
 514           at the i2c bus master.
 515         */
 516        printk(KERN_INFO "tda1004x: trying to boot from eeprom\n");
 517        tda1004x_write_byteI(state, TDA1004X_CONFC4, 4);
 518        msleep(300);
 519        tda1004x_write_byteI(state, TDA1004X_CONFC4, confc4);
 520
 521        /* Checks if eeprom firmware went without troubles */
 522        if (tda1004x_check_upload_ok(state) == 0)
 523                return 0;
 524
 525        /* eeprom firmware didn't work. Load one manually. */
 526
 527        if (state->config->request_firmware != NULL) {
 528                /* request the firmware, this will block until someone uploads it */
 529                printk(KERN_INFO "tda1004x: waiting for firmware upload...\n");
 530                ret = state->config->request_firmware(fe, &fw, TDA10046_DEFAULT_FIRMWARE);
 531                if (ret) {
 532                        /* remain compatible to old bug: try to load with tda10045 image name */
 533                        ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
 534                        if (ret) {
 535                                printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
 536                                return ret;
 537                        } else {
 538                                printk(KERN_INFO "tda1004x: please rename the firmware file to %s\n",
 539                                                  TDA10046_DEFAULT_FIRMWARE);
 540                        }
 541                }
 542        } else {
 543                printk(KERN_ERR "tda1004x: no request function defined, can't upload from file\n");
 544                return -EIO;
 545        }
 546        tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8); // going to boot from HOST
 547        ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10046H_CODE_CPT, TDA10046H_CODE_IN);
 548        release_firmware(fw);
 549        return tda1004x_check_upload_ok(state);
 550}
 551
 552static int tda1004x_encode_fec(int fec)
 553{
 554        // convert known FEC values
 555        switch (fec) {
 556        case FEC_1_2:
 557                return 0;
 558        case FEC_2_3:
 559                return 1;
 560        case FEC_3_4:
 561                return 2;
 562        case FEC_5_6:
 563                return 3;
 564        case FEC_7_8:
 565                return 4;
 566        }
 567
 568        // unsupported
 569        return -EINVAL;
 570}
 571
 572static int tda1004x_decode_fec(int tdafec)
 573{
 574        // convert known FEC values
 575        switch (tdafec) {
 576        case 0:
 577                return FEC_1_2;
 578        case 1:
 579                return FEC_2_3;
 580        case 2:
 581                return FEC_3_4;
 582        case 3:
 583                return FEC_5_6;
 584        case 4:
 585                return FEC_7_8;
 586        }
 587
 588        // unsupported
 589        return -1;
 590}
 591
 592static int tda1004x_write(struct dvb_frontend* fe, const u8 buf[], int len)
 593{
 594        struct tda1004x_state* state = fe->demodulator_priv;
 595
 596        if (len != 2)
 597                return -EINVAL;
 598
 599        return tda1004x_write_byteI(state, buf[0], buf[1]);
 600}
 601
 602static int tda10045_init(struct dvb_frontend* fe)
 603{
 604        struct tda1004x_state* state = fe->demodulator_priv;
 605
 606        dprintk("%s\n", __func__);
 607
 608        if (tda10045_fwupload(fe)) {
 609                printk("tda1004x: firmware upload failed\n");
 610                return -EIO;
 611        }
 612
 613        tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0); // wake up the ADC
 614
 615        // tda setup
 616        tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP watchdog timer
 617        tda1004x_write_mask(state, TDA1004X_AUTO, 8, 0); // select HP stream
 618        tda1004x_write_mask(state, TDA1004X_CONFC1, 0x40, 0); // set polarity of VAGC signal
 619        tda1004x_write_mask(state, TDA1004X_CONFC1, 0x80, 0x80); // enable pulse killer
 620        tda1004x_write_mask(state, TDA1004X_AUTO, 0x10, 0x10); // enable auto offset
 621        tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0xC0, 0x0); // no frequency offset
 622        tda1004x_write_byteI(state, TDA1004X_CONF_TS1, 0); // setup MPEG2 TS interface
 623        tda1004x_write_byteI(state, TDA1004X_CONF_TS2, 0); // setup MPEG2 TS interface
 624        tda1004x_write_mask(state, TDA1004X_VBER_MSB, 0xe0, 0xa0); // 10^6 VBER measurement bits
 625        tda1004x_write_mask(state, TDA1004X_CONFC1, 0x10, 0); // VAGC polarity
 626        tda1004x_write_byteI(state, TDA1004X_CONFADC1, 0x2e);
 627
 628        tda1004x_write_mask(state, 0x1f, 0x01, state->config->invert_oclk);
 629
 630        return 0;
 631}
 632
 633static int tda10046_init(struct dvb_frontend* fe)
 634{
 635        struct tda1004x_state* state = fe->demodulator_priv;
 636        dprintk("%s\n", __func__);
 637
 638        if (tda10046_fwupload(fe)) {
 639                printk("tda1004x: firmware upload failed\n");
 640                return -EIO;
 641        }
 642
 643        // tda setup
 644        tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP watchdog timer
 645        tda1004x_write_byteI(state, TDA1004X_AUTO, 0x87);    // 100 ppm crystal, select HP stream
 646        tda1004x_write_byteI(state, TDA1004X_CONFC1, 0x88);      // enable pulse killer
 647
 648        switch (state->config->agc_config) {
 649        case TDA10046_AGC_DEFAULT:
 650                tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x00); // AGC setup
 651                tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
 652                break;
 653        case TDA10046_AGC_IFO_AUTO_NEG:
 654                tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC setup
 655                tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
 656                break;
 657        case TDA10046_AGC_IFO_AUTO_POS:
 658                tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC setup
 659                tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x00);  // set AGC polarities
 660                break;
 661        case TDA10046_AGC_TDA827X:
 662                tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x02);   // AGC setup
 663                tda1004x_write_byteI(state, TDA10046H_AGC_THR, 0x70);    // AGC Threshold
 664                tda1004x_write_byteI(state, TDA10046H_AGC_RENORM, 0x08); // Gain Renormalize
 665                tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
 666                break;
 667        }
 668        if (state->config->ts_mode == 0) {
 669                tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 0xc0, 0x40);
 670                tda1004x_write_mask(state, 0x3a, 0x80, state->config->invert_oclk << 7);
 671        } else {
 672                tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 0xc0, 0x80);
 673                tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x10,
 674                                                        state->config->invert_oclk << 4);
 675        }
 676        tda1004x_write_byteI(state, TDA1004X_CONFADC2, 0x38);
 677        tda1004x_write_mask (state, TDA10046H_CONF_TRISTATE1, 0x3e, 0x38); // Turn IF AGC output on
 678        tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MIN, 0);    // }
 679        tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MAX, 0xff); // } AGC min/max values
 680        tda1004x_write_byteI(state, TDA10046H_AGC_IF_MIN, 0);     // }
 681        tda1004x_write_byteI(state, TDA10046H_AGC_IF_MAX, 0xff);  // }
 682        tda1004x_write_byteI(state, TDA10046H_AGC_GAINS, 0x12); // IF gain 2, TUN gain 1
 683        tda1004x_write_byteI(state, TDA10046H_CVBER_CTRL, 0x1a); // 10^6 VBER measurement bits
 684        tda1004x_write_byteI(state, TDA1004X_CONF_TS1, 7); // MPEG2 interface config
 685        tda1004x_write_byteI(state, TDA1004X_CONF_TS2, 0xc0); // MPEG2 interface config
 686        // tda1004x_write_mask(state, 0x50, 0x80, 0x80);         // handle out of guard echoes
 687
 688        return 0;
 689}
 690
 691static int tda1004x_set_fe(struct dvb_frontend *fe)
 692{
 693        struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
 694        struct tda1004x_state* state = fe->demodulator_priv;
 695        int tmp;
 696        int inversion;
 697
 698        dprintk("%s\n", __func__);
 699
 700        if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
 701                // setup auto offset
 702                tda1004x_write_mask(state, TDA1004X_AUTO, 0x10, 0x10);
 703                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x80, 0);
 704                tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0xC0, 0);
 705
 706                // disable agc_conf[2]
 707                tda1004x_write_mask(state, TDA10046H_AGC_CONF, 4, 0);
 708        }
 709
 710        // set frequency
 711        if (fe->ops.tuner_ops.set_params) {
 712                fe->ops.tuner_ops.set_params(fe);
 713                if (fe->ops.i2c_gate_ctrl)
 714                        fe->ops.i2c_gate_ctrl(fe, 0);
 715        }
 716
 717        // Hardcoded to use auto as much as possible on the TDA10045 as it
 718        // is very unreliable if AUTO mode is _not_ used.
 719        if (state->demod_type == TDA1004X_DEMOD_TDA10045) {
 720                fe_params->code_rate_HP = FEC_AUTO;
 721                fe_params->guard_interval = GUARD_INTERVAL_AUTO;
 722                fe_params->transmission_mode = TRANSMISSION_MODE_AUTO;
 723        }
 724
 725        // Set standard params.. or put them to auto
 726        if ((fe_params->code_rate_HP == FEC_AUTO) ||
 727                (fe_params->code_rate_LP == FEC_AUTO) ||
 728                (fe_params->modulation == QAM_AUTO) ||
 729                (fe_params->hierarchy == HIERARCHY_AUTO)) {
 730                tda1004x_write_mask(state, TDA1004X_AUTO, 1, 1);        // enable auto
 731                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x03, 0); /* turn off modulation bits */
 732                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 0); // turn off hierarchy bits
 733                tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0x3f, 0); // turn off FEC bits
 734        } else {
 735                tda1004x_write_mask(state, TDA1004X_AUTO, 1, 0);        // disable auto
 736
 737                // set HP FEC
 738                tmp = tda1004x_encode_fec(fe_params->code_rate_HP);
 739                if (tmp < 0)
 740                        return tmp;
 741                tda1004x_write_mask(state, TDA1004X_IN_CONF2, 7, tmp);
 742
 743                // set LP FEC
 744                tmp = tda1004x_encode_fec(fe_params->code_rate_LP);
 745                if (tmp < 0)
 746                        return tmp;
 747                tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0x38, tmp << 3);
 748
 749                /* set modulation */
 750                switch (fe_params->modulation) {
 751                case QPSK:
 752                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 0);
 753                        break;
 754
 755                case QAM_16:
 756                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 1);
 757                        break;
 758
 759                case QAM_64:
 760                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 2);
 761                        break;
 762
 763                default:
 764                        return -EINVAL;
 765                }
 766
 767                // set hierarchy
 768                switch (fe_params->hierarchy) {
 769                case HIERARCHY_NONE:
 770                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 0 << 5);
 771                        break;
 772
 773                case HIERARCHY_1:
 774                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 1 << 5);
 775                        break;
 776
 777                case HIERARCHY_2:
 778                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 2 << 5);
 779                        break;
 780
 781                case HIERARCHY_4:
 782                        tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 3 << 5);
 783                        break;
 784
 785                default:
 786                        return -EINVAL;
 787                }
 788        }
 789
 790        // set bandwidth
 791        switch (state->demod_type) {
 792        case TDA1004X_DEMOD_TDA10045:
 793                tda10045h_set_bandwidth(state, fe_params->bandwidth_hz);
 794                break;
 795
 796        case TDA1004X_DEMOD_TDA10046:
 797                tda10046h_set_bandwidth(state, fe_params->bandwidth_hz);
 798                break;
 799        }
 800
 801        // set inversion
 802        inversion = fe_params->inversion;
 803        if (state->config->invert)
 804                inversion = inversion ? INVERSION_OFF : INVERSION_ON;
 805        switch (inversion) {
 806        case INVERSION_OFF:
 807                tda1004x_write_mask(state, TDA1004X_CONFC1, 0x20, 0);
 808                break;
 809
 810        case INVERSION_ON:
 811                tda1004x_write_mask(state, TDA1004X_CONFC1, 0x20, 0x20);
 812                break;
 813
 814        default:
 815                return -EINVAL;
 816        }
 817
 818        // set guard interval
 819        switch (fe_params->guard_interval) {
 820        case GUARD_INTERVAL_1_32:
 821                tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
 822                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
 823                break;
 824
 825        case GUARD_INTERVAL_1_16:
 826                tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
 827                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 1 << 2);
 828                break;
 829
 830        case GUARD_INTERVAL_1_8:
 831                tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
 832                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 2 << 2);
 833                break;
 834
 835        case GUARD_INTERVAL_1_4:
 836                tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
 837                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 3 << 2);
 838                break;
 839
 840        case GUARD_INTERVAL_AUTO:
 841                tda1004x_write_mask(state, TDA1004X_AUTO, 2, 2);
 842                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
 843                break;
 844
 845        default:
 846                return -EINVAL;
 847        }
 848
 849        // set transmission mode
 850        switch (fe_params->transmission_mode) {
 851        case TRANSMISSION_MODE_2K:
 852                tda1004x_write_mask(state, TDA1004X_AUTO, 4, 0);
 853                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 0 << 4);
 854                break;
 855
 856        case TRANSMISSION_MODE_8K:
 857                tda1004x_write_mask(state, TDA1004X_AUTO, 4, 0);
 858                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 1 << 4);
 859                break;
 860
 861        case TRANSMISSION_MODE_AUTO:
 862                tda1004x_write_mask(state, TDA1004X_AUTO, 4, 4);
 863                tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 0);
 864                break;
 865
 866        default:
 867                return -EINVAL;
 868        }
 869
 870        // start the lock
 871        switch (state->demod_type) {
 872        case TDA1004X_DEMOD_TDA10045:
 873                tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8);
 874                tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 0);
 875                break;
 876
 877        case TDA1004X_DEMOD_TDA10046:
 878                tda1004x_write_mask(state, TDA1004X_AUTO, 0x40, 0x40);
 879                msleep(1);
 880                tda1004x_write_mask(state, TDA10046H_AGC_CONF, 4, 1);
 881                break;
 882        }
 883
 884        msleep(10);
 885
 886        return 0;
 887}
 888
 889static int tda1004x_get_fe(struct dvb_frontend *fe,
 890                           struct dtv_frontend_properties *fe_params)
 891{
 892        struct tda1004x_state* state = fe->demodulator_priv;
 893        int status;
 894
 895        dprintk("%s\n", __func__);
 896
 897        status = tda1004x_read_byte(state, TDA1004X_STATUS_CD);
 898        if (status == -1)
 899                return -EIO;
 900
 901        /* Only update the properties cache if device is locked */
 902        if (!(status & 8))
 903                return 0;
 904
 905        // inversion status
 906        fe_params->inversion = INVERSION_OFF;
 907        if (tda1004x_read_byte(state, TDA1004X_CONFC1) & 0x20)
 908                fe_params->inversion = INVERSION_ON;
 909        if (state->config->invert)
 910                fe_params->inversion = fe_params->inversion ? INVERSION_OFF : INVERSION_ON;
 911
 912        // bandwidth
 913        switch (state->demod_type) {
 914        case TDA1004X_DEMOD_TDA10045:
 915                switch (tda1004x_read_byte(state, TDA10045H_WREF_LSB)) {
 916                case 0x14:
 917                        fe_params->bandwidth_hz = 8000000;
 918                        break;
 919                case 0xdb:
 920                        fe_params->bandwidth_hz = 7000000;
 921                        break;
 922                case 0x4f:
 923                        fe_params->bandwidth_hz = 6000000;
 924                        break;
 925                }
 926                break;
 927        case TDA1004X_DEMOD_TDA10046:
 928                switch (tda1004x_read_byte(state, TDA10046H_TIME_WREF1)) {
 929                case 0x5c:
 930                case 0x54:
 931                        fe_params->bandwidth_hz = 8000000;
 932                        break;
 933                case 0x6a:
 934                case 0x60:
 935                        fe_params->bandwidth_hz = 7000000;
 936                        break;
 937                case 0x7b:
 938                case 0x70:
 939                        fe_params->bandwidth_hz = 6000000;
 940                        break;
 941                }
 942                break;
 943        }
 944
 945        // FEC
 946        fe_params->code_rate_HP =
 947            tda1004x_decode_fec(tda1004x_read_byte(state, TDA1004X_OUT_CONF2) & 7);
 948        fe_params->code_rate_LP =
 949            tda1004x_decode_fec((tda1004x_read_byte(state, TDA1004X_OUT_CONF2) >> 3) & 7);
 950
 951        /* modulation */
 952        switch (tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 3) {
 953        case 0:
 954                fe_params->modulation = QPSK;
 955                break;
 956        case 1:
 957                fe_params->modulation = QAM_16;
 958                break;
 959        case 2:
 960                fe_params->modulation = QAM_64;
 961                break;
 962        }
 963
 964        // transmission mode
 965        fe_params->transmission_mode = TRANSMISSION_MODE_2K;
 966        if (tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x10)
 967                fe_params->transmission_mode = TRANSMISSION_MODE_8K;
 968
 969        // guard interval
 970        switch ((tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x0c) >> 2) {
 971        case 0:
 972                fe_params->guard_interval = GUARD_INTERVAL_1_32;
 973                break;
 974        case 1:
 975                fe_params->guard_interval = GUARD_INTERVAL_1_16;
 976                break;
 977        case 2:
 978                fe_params->guard_interval = GUARD_INTERVAL_1_8;
 979                break;
 980        case 3:
 981                fe_params->guard_interval = GUARD_INTERVAL_1_4;
 982                break;
 983        }
 984
 985        // hierarchy
 986        switch ((tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x60) >> 5) {
 987        case 0:
 988                fe_params->hierarchy = HIERARCHY_NONE;
 989                break;
 990        case 1:
 991                fe_params->hierarchy = HIERARCHY_1;
 992                break;
 993        case 2:
 994                fe_params->hierarchy = HIERARCHY_2;
 995                break;
 996        case 3:
 997                fe_params->hierarchy = HIERARCHY_4;
 998                break;
 999        }
1000
1001        return 0;
1002}
1003
1004static int tda1004x_read_status(struct dvb_frontend *fe,
1005                                enum fe_status *fe_status)
1006{
1007        struct tda1004x_state* state = fe->demodulator_priv;
1008        int status;
1009        int cber;
1010        int vber;
1011
1012        dprintk("%s\n", __func__);
1013
1014        // read status
1015        status = tda1004x_read_byte(state, TDA1004X_STATUS_CD);
1016        if (status == -1)
1017                return -EIO;
1018
1019        // decode
1020        *fe_status = 0;
1021        if (status & 4)
1022                *fe_status |= FE_HAS_SIGNAL;
1023        if (status & 2)
1024                *fe_status |= FE_HAS_CARRIER;
1025        if (status & 8)
1026                *fe_status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
1027
1028        // if we don't already have VITERBI (i.e. not LOCKED), see if the viterbi
1029        // is getting anything valid
1030        if (!(*fe_status & FE_HAS_VITERBI)) {
1031                // read the CBER
1032                cber = tda1004x_read_byte(state, TDA1004X_CBER_LSB);
1033                if (cber == -1)
1034                        return -EIO;
1035                status = tda1004x_read_byte(state, TDA1004X_CBER_MSB);
1036                if (status == -1)
1037                        return -EIO;
1038                cber |= (status << 8);
1039                // The address 0x20 should be read to cope with a TDA10046 bug
1040                tda1004x_read_byte(state, TDA1004X_CBER_RESET);
1041
1042                if (cber != 65535)
1043                        *fe_status |= FE_HAS_VITERBI;
1044        }
1045
1046        // if we DO have some valid VITERBI output, but don't already have SYNC
1047        // bytes (i.e. not LOCKED), see if the RS decoder is getting anything valid.
1048        if ((*fe_status & FE_HAS_VITERBI) && (!(*fe_status & FE_HAS_SYNC))) {
1049                // read the VBER
1050                vber = tda1004x_read_byte(state, TDA1004X_VBER_LSB);
1051                if (vber == -1)
1052                        return -EIO;
1053                status = tda1004x_read_byte(state, TDA1004X_VBER_MID);
1054                if (status == -1)
1055                        return -EIO;
1056                vber |= (status << 8);
1057                status = tda1004x_read_byte(state, TDA1004X_VBER_MSB);
1058                if (status == -1)
1059                        return -EIO;
1060                vber |= (status & 0x0f) << 16;
1061                // The CVBER_LUT should be read to cope with TDA10046 hardware bug
1062                tda1004x_read_byte(state, TDA1004X_CVBER_LUT);
1063
1064                // if RS has passed some valid TS packets, then we must be
1065                // getting some SYNC bytes
1066                if (vber < 16632)
1067                        *fe_status |= FE_HAS_SYNC;
1068        }
1069
1070        // success
1071        dprintk("%s: fe_status=0x%x\n", __func__, *fe_status);
1072        return 0;
1073}
1074
1075static int tda1004x_read_signal_strength(struct dvb_frontend* fe, u16 * signal)
1076{
1077        struct tda1004x_state* state = fe->demodulator_priv;
1078        int tmp;
1079        int reg = 0;
1080
1081        dprintk("%s\n", __func__);
1082
1083        // determine the register to use
1084        switch (state->demod_type) {
1085        case TDA1004X_DEMOD_TDA10045:
1086                reg = TDA10045H_S_AGC;
1087                break;
1088
1089        case TDA1004X_DEMOD_TDA10046:
1090                reg = TDA10046H_AGC_IF_LEVEL;
1091                break;
1092        }
1093
1094        // read it
1095        tmp = tda1004x_read_byte(state, reg);
1096        if (tmp < 0)
1097                return -EIO;
1098
1099        *signal = (tmp << 8) | tmp;
1100        dprintk("%s: signal=0x%x\n", __func__, *signal);
1101        return 0;
1102}
1103
1104static int tda1004x_read_snr(struct dvb_frontend* fe, u16 * snr)
1105{
1106        struct tda1004x_state* state = fe->demodulator_priv;
1107        int tmp;
1108
1109        dprintk("%s\n", __func__);
1110
1111        // read it
1112        tmp = tda1004x_read_byte(state, TDA1004X_SNR);
1113        if (tmp < 0)
1114                return -EIO;
1115        tmp = 255 - tmp;
1116
1117        *snr = ((tmp << 8) | tmp);
1118        dprintk("%s: snr=0x%x\n", __func__, *snr);
1119        return 0;
1120}
1121
1122static int tda1004x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
1123{
1124        struct tda1004x_state* state = fe->demodulator_priv;
1125        int tmp;
1126        int tmp2;
1127        int counter;
1128
1129        dprintk("%s\n", __func__);
1130
1131        // read the UCBLOCKS and reset
1132        counter = 0;
1133        tmp = tda1004x_read_byte(state, TDA1004X_UNCOR);
1134        if (tmp < 0)
1135                return -EIO;
1136        tmp &= 0x7f;
1137        while (counter++ < 5) {
1138                tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1139                tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1140                tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1141
1142                tmp2 = tda1004x_read_byte(state, TDA1004X_UNCOR);
1143                if (tmp2 < 0)
1144                        return -EIO;
1145                tmp2 &= 0x7f;
1146                if ((tmp2 < tmp) || (tmp2 == 0))
1147                        break;
1148        }
1149
1150        if (tmp != 0x7f)
1151                *ucblocks = tmp;
1152        else
1153                *ucblocks = 0xffffffff;
1154
1155        dprintk("%s: ucblocks=0x%x\n", __func__, *ucblocks);
1156        return 0;
1157}
1158
1159static int tda1004x_read_ber(struct dvb_frontend* fe, u32* ber)
1160{
1161        struct tda1004x_state* state = fe->demodulator_priv;
1162        int tmp;
1163
1164        dprintk("%s\n", __func__);
1165
1166        // read it in
1167        tmp = tda1004x_read_byte(state, TDA1004X_CBER_LSB);
1168        if (tmp < 0)
1169                return -EIO;
1170        *ber = tmp << 1;
1171        tmp = tda1004x_read_byte(state, TDA1004X_CBER_MSB);
1172        if (tmp < 0)
1173                return -EIO;
1174        *ber |= (tmp << 9);
1175        // The address 0x20 should be read to cope with a TDA10046 bug
1176        tda1004x_read_byte(state, TDA1004X_CBER_RESET);
1177
1178        dprintk("%s: ber=0x%x\n", __func__, *ber);
1179        return 0;
1180}
1181
1182static int tda1004x_sleep(struct dvb_frontend* fe)
1183{
1184        struct tda1004x_state* state = fe->demodulator_priv;
1185        int gpio_conf;
1186
1187        switch (state->demod_type) {
1188        case TDA1004X_DEMOD_TDA10045:
1189                tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0x10);
1190                break;
1191
1192        case TDA1004X_DEMOD_TDA10046:
1193                /* set outputs to tristate */
1194                tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE1, 0xff);
1195                /* invert GPIO 1 and 3 if desired*/
1196                gpio_conf = state->config->gpio_config;
1197                if (gpio_conf >= TDA10046_GP00_I)
1198                        tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f,
1199                                                        (gpio_conf & 0x0f) ^ 0x0a);
1200
1201                tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0xc0);
1202                tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1);
1203                break;
1204        }
1205
1206        return 0;
1207}
1208
1209static int tda1004x_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
1210{
1211        struct tda1004x_state* state = fe->demodulator_priv;
1212
1213        if (enable) {
1214                return tda1004x_enable_tuner_i2c(state);
1215        } else {
1216                return tda1004x_disable_tuner_i2c(state);
1217        }
1218}
1219
1220static int tda1004x_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings)
1221{
1222        fesettings->min_delay_ms = 800;
1223        /* Drift compensation makes no sense for DVB-T */
1224        fesettings->step_size = 0;
1225        fesettings->max_drift = 0;
1226        return 0;
1227}
1228
1229static void tda1004x_release(struct dvb_frontend* fe)
1230{
1231        struct tda1004x_state *state = fe->demodulator_priv;
1232        kfree(state);
1233}
1234
1235static const struct dvb_frontend_ops tda10045_ops = {
1236        .delsys = { SYS_DVBT },
1237        .info = {
1238                .name = "Philips TDA10045H DVB-T",
1239                .frequency_min_hz =  51 * MHz,
1240                .frequency_max_hz = 858 * MHz,
1241                .frequency_stepsize_hz = 166667,
1242                .caps =
1243                    FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1244                    FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1245                    FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
1246                    FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
1247        },
1248
1249        .release = tda1004x_release,
1250
1251        .init = tda10045_init,
1252        .sleep = tda1004x_sleep,
1253        .write = tda1004x_write,
1254        .i2c_gate_ctrl = tda1004x_i2c_gate_ctrl,
1255
1256        .set_frontend = tda1004x_set_fe,
1257        .get_frontend = tda1004x_get_fe,
1258        .get_tune_settings = tda1004x_get_tune_settings,
1259
1260        .read_status = tda1004x_read_status,
1261        .read_ber = tda1004x_read_ber,
1262        .read_signal_strength = tda1004x_read_signal_strength,
1263        .read_snr = tda1004x_read_snr,
1264        .read_ucblocks = tda1004x_read_ucblocks,
1265};
1266
1267struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
1268                                     struct i2c_adapter* i2c)
1269{
1270        struct tda1004x_state *state;
1271        int id;
1272
1273        /* allocate memory for the internal state */
1274        state = kzalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
1275        if (!state) {
1276                printk(KERN_ERR "Can't allocate memory for tda10045 state\n");
1277                return NULL;
1278        }
1279
1280        /* setup the state */
1281        state->config = config;
1282        state->i2c = i2c;
1283        state->demod_type = TDA1004X_DEMOD_TDA10045;
1284
1285        /* check if the demod is there */
1286        id = tda1004x_read_byte(state, TDA1004X_CHIPID);
1287        if (id < 0) {
1288                printk(KERN_ERR "tda10045: chip is not answering. Giving up.\n");
1289                kfree(state);
1290                return NULL;
1291        }
1292
1293        if (id != 0x25) {
1294                printk(KERN_ERR "Invalid tda1004x ID = 0x%02x. Can't proceed\n", id);
1295                kfree(state);
1296                return NULL;
1297        }
1298
1299        /* create dvb_frontend */
1300        memcpy(&state->frontend.ops, &tda10045_ops, sizeof(struct dvb_frontend_ops));
1301        state->frontend.demodulator_priv = state;
1302        return &state->frontend;
1303}
1304
1305static const struct dvb_frontend_ops tda10046_ops = {
1306        .delsys = { SYS_DVBT },
1307        .info = {
1308                .name = "Philips TDA10046H DVB-T",
1309                .frequency_min_hz =  51 * MHz,
1310                .frequency_max_hz = 858 * MHz,
1311                .frequency_stepsize_hz = 166667,
1312                .caps =
1313                    FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1314                    FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1315                    FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
1316                    FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
1317        },
1318
1319        .release = tda1004x_release,
1320
1321        .init = tda10046_init,
1322        .sleep = tda1004x_sleep,
1323        .write = tda1004x_write,
1324        .i2c_gate_ctrl = tda1004x_i2c_gate_ctrl,
1325
1326        .set_frontend = tda1004x_set_fe,
1327        .get_frontend = tda1004x_get_fe,
1328        .get_tune_settings = tda1004x_get_tune_settings,
1329
1330        .read_status = tda1004x_read_status,
1331        .read_ber = tda1004x_read_ber,
1332        .read_signal_strength = tda1004x_read_signal_strength,
1333        .read_snr = tda1004x_read_snr,
1334        .read_ucblocks = tda1004x_read_ucblocks,
1335};
1336
1337struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config,
1338                                     struct i2c_adapter* i2c)
1339{
1340        struct tda1004x_state *state;
1341        int id;
1342
1343        /* allocate memory for the internal state */
1344        state = kzalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
1345        if (!state) {
1346                printk(KERN_ERR "Can't allocate memory for tda10046 state\n");
1347                return NULL;
1348        }
1349
1350        /* setup the state */
1351        state->config = config;
1352        state->i2c = i2c;
1353        state->demod_type = TDA1004X_DEMOD_TDA10046;
1354
1355        /* check if the demod is there */
1356        id = tda1004x_read_byte(state, TDA1004X_CHIPID);
1357        if (id < 0) {
1358                printk(KERN_ERR "tda10046: chip is not answering. Giving up.\n");
1359                kfree(state);
1360                return NULL;
1361        }
1362        if (id != 0x46) {
1363                printk(KERN_ERR "Invalid tda1004x ID = 0x%02x. Can't proceed\n", id);
1364                kfree(state);
1365                return NULL;
1366        }
1367
1368        /* create dvb_frontend */
1369        memcpy(&state->frontend.ops, &tda10046_ops, sizeof(struct dvb_frontend_ops));
1370        state->frontend.demodulator_priv = state;
1371        return &state->frontend;
1372}
1373
1374module_param(debug, int, 0644);
1375MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
1376
1377MODULE_DESCRIPTION("Philips TDA10045H & TDA10046H DVB-T Demodulator");
1378MODULE_AUTHOR("Andrew de Quincey & Robert Schlabbach");
1379MODULE_LICENSE("GPL");
1380
1381EXPORT_SYMBOL(tda10045_attach);
1382EXPORT_SYMBOL(tda10046_attach);
1383