linux/drivers/media/tuners/xc5000.c
<<
>>
Prefs
   1/*
   2 *  Driver for Xceive XC5000 "QAM/8VSB single chip tuner"
   3 *
   4 *  Copyright (c) 2007 Xceive Corporation
   5 *  Copyright (c) 2007 Steven Toth <stoth@linuxtv.org>
   6 *  Copyright (c) 2009 Devin Heitmueller <dheitmueller@kernellabs.com>
   7 *
   8 *  This program is free software; you can redistribute it and/or modify
   9 *  it under the terms of the GNU General Public License as published by
  10 *  the Free Software Foundation; either version 2 of the License, or
  11 *  (at your option) any later version.
  12 *
  13 *  This program is distributed in the hope that it will be useful,
  14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 *
  17 *  GNU General Public License for more details.
  18 *
  19 *  You should have received a copy of the GNU General Public License
  20 *  along with this program; if not, write to the Free Software
  21 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22 */
  23
  24#include <linux/module.h>
  25#include <linux/moduleparam.h>
  26#include <linux/videodev2.h>
  27#include <linux/delay.h>
  28#include <linux/workqueue.h>
  29#include <linux/dvb/frontend.h>
  30#include <linux/i2c.h>
  31
  32#include "dvb_frontend.h"
  33
  34#include "xc5000.h"
  35#include "tuner-i2c.h"
  36
  37static int debug;
  38module_param(debug, int, 0644);
  39MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
  40
  41static int no_poweroff;
  42module_param(no_poweroff, int, 0644);
  43MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
  44        "\t\t1 keep device energized and with tuner ready all the times.\n"
  45        "\t\tFaster, but consumes more power and keeps the device hotter");
  46
  47static DEFINE_MUTEX(xc5000_list_mutex);
  48static LIST_HEAD(hybrid_tuner_instance_list);
  49
  50#define dprintk(level, fmt, arg...) if (debug >= level) \
  51        printk(KERN_INFO "%s: " fmt, "xc5000", ## arg)
  52
  53struct xc5000_priv {
  54        struct tuner_i2c_props i2c_props;
  55        struct list_head hybrid_tuner_instance_list;
  56
  57        u32 if_khz;
  58        u16 xtal_khz;
  59        u32 freq_hz, freq_offset;
  60        u32 bandwidth;
  61        u8  video_standard;
  62        unsigned int mode;
  63        u8  rf_mode;
  64        u8  radio_input;
  65        u16  output_amp;
  66
  67        int chip_id;
  68        u16 pll_register_no;
  69        u8 init_status_supported;
  70        u8 fw_checksum_supported;
  71
  72        struct dvb_frontend *fe;
  73        struct delayed_work timer_sleep;
  74
  75        const struct firmware   *firmware;
  76};
  77
  78/* Misc Defines */
  79#define MAX_TV_STANDARD                 24
  80#define XC_MAX_I2C_WRITE_LENGTH         64
  81
  82/* Time to suspend after the .sleep callback is called */
  83#define XC5000_SLEEP_TIME               5000 /* ms */
  84
  85/* Signal Types */
  86#define XC_RF_MODE_AIR                  0
  87#define XC_RF_MODE_CABLE                1
  88
  89/* Product id */
  90#define XC_PRODUCT_ID_FW_NOT_LOADED     0x2000
  91#define XC_PRODUCT_ID_FW_LOADED 0x1388
  92
  93/* Registers */
  94#define XREG_INIT         0x00
  95#define XREG_VIDEO_MODE   0x01
  96#define XREG_AUDIO_MODE   0x02
  97#define XREG_RF_FREQ      0x03
  98#define XREG_D_CODE       0x04
  99#define XREG_IF_OUT       0x05
 100#define XREG_SEEK_MODE    0x07
 101#define XREG_POWER_DOWN   0x0A /* Obsolete */
 102/* Set the output amplitude - SIF for analog, DTVP/DTVN for digital */
 103#define XREG_OUTPUT_AMP   0x0B
 104#define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */
 105#define XREG_SMOOTHEDCVBS 0x0E
 106#define XREG_XTALFREQ     0x0F
 107#define XREG_FINERFREQ    0x10
 108#define XREG_DDIMODE      0x11
 109
 110#define XREG_ADC_ENV      0x00
 111#define XREG_QUALITY      0x01
 112#define XREG_FRAME_LINES  0x02
 113#define XREG_HSYNC_FREQ   0x03
 114#define XREG_LOCK         0x04
 115#define XREG_FREQ_ERROR   0x05
 116#define XREG_SNR          0x06
 117#define XREG_VERSION      0x07
 118#define XREG_PRODUCT_ID   0x08
 119#define XREG_BUSY         0x09
 120#define XREG_BUILD        0x0D
 121#define XREG_TOTALGAIN    0x0F
 122#define XREG_FW_CHECKSUM  0x12
 123#define XREG_INIT_STATUS  0x13
 124
 125/*
 126   Basic firmware description. This will remain with
 127   the driver for documentation purposes.
 128
 129   This represents an I2C firmware file encoded as a
 130   string of unsigned char. Format is as follows:
 131
 132   char[0  ]=len0_MSB  -> len = len_MSB * 256 + len_LSB
 133   char[1  ]=len0_LSB  -> length of first write transaction
 134   char[2  ]=data0 -> first byte to be sent
 135   char[3  ]=data1
 136   char[4  ]=data2
 137   char[   ]=...
 138   char[M  ]=dataN  -> last byte to be sent
 139   char[M+1]=len1_MSB  -> len = len_MSB * 256 + len_LSB
 140   char[M+2]=len1_LSB  -> length of second write transaction
 141   char[M+3]=data0
 142   char[M+4]=data1
 143   ...
 144   etc.
 145
 146   The [len] value should be interpreted as follows:
 147
 148   len= len_MSB _ len_LSB
 149   len=1111_1111_1111_1111   : End of I2C_SEQUENCE
 150   len=0000_0000_0000_0000   : Reset command: Do hardware reset
 151   len=0NNN_NNNN_NNNN_NNNN   : Normal transaction: number of bytes = {1:32767)
 152   len=1WWW_WWWW_WWWW_WWWW   : Wait command: wait for {1:32767} ms
 153
 154   For the RESET and WAIT commands, the two following bytes will contain
 155   immediately the length of the following transaction.
 156
 157*/
 158struct XC_TV_STANDARD {
 159        char *name;
 160        u16 audio_mode;
 161        u16 video_mode;
 162};
 163
 164/* Tuner standards */
 165#define MN_NTSC_PAL_BTSC        0
 166#define MN_NTSC_PAL_A2          1
 167#define MN_NTSC_PAL_EIAJ        2
 168#define MN_NTSC_PAL_MONO        3
 169#define BG_PAL_A2               4
 170#define BG_PAL_NICAM            5
 171#define BG_PAL_MONO             6
 172#define I_PAL_NICAM             7
 173#define I_PAL_NICAM_MONO        8
 174#define DK_PAL_A2               9
 175#define DK_PAL_NICAM            10
 176#define DK_PAL_MONO             11
 177#define DK_SECAM_A2DK1          12
 178#define DK_SECAM_A2LDK3         13
 179#define DK_SECAM_A2MONO         14
 180#define L_SECAM_NICAM           15
 181#define LC_SECAM_NICAM          16
 182#define DTV6                    17
 183#define DTV8                    18
 184#define DTV7_8                  19
 185#define DTV7                    20
 186#define FM_RADIO_INPUT2         21
 187#define FM_RADIO_INPUT1         22
 188#define FM_RADIO_INPUT1_MONO    23
 189
 190static struct XC_TV_STANDARD xc5000_standard[MAX_TV_STANDARD] = {
 191        {"M/N-NTSC/PAL-BTSC", 0x0400, 0x8020},
 192        {"M/N-NTSC/PAL-A2",   0x0600, 0x8020},
 193        {"M/N-NTSC/PAL-EIAJ", 0x0440, 0x8020},
 194        {"M/N-NTSC/PAL-Mono", 0x0478, 0x8020},
 195        {"B/G-PAL-A2",        0x0A00, 0x8049},
 196        {"B/G-PAL-NICAM",     0x0C04, 0x8049},
 197        {"B/G-PAL-MONO",      0x0878, 0x8059},
 198        {"I-PAL-NICAM",       0x1080, 0x8009},
 199        {"I-PAL-NICAM-MONO",  0x0E78, 0x8009},
 200        {"D/K-PAL-A2",        0x1600, 0x8009},
 201        {"D/K-PAL-NICAM",     0x0E80, 0x8009},
 202        {"D/K-PAL-MONO",      0x1478, 0x8009},
 203        {"D/K-SECAM-A2 DK1",  0x1200, 0x8009},
 204        {"D/K-SECAM-A2 L/DK3", 0x0E00, 0x8009},
 205        {"D/K-SECAM-A2 MONO", 0x1478, 0x8009},
 206        {"L-SECAM-NICAM",     0x8E82, 0x0009},
 207        {"L'-SECAM-NICAM",    0x8E82, 0x4009},
 208        {"DTV6",              0x00C0, 0x8002},
 209        {"DTV8",              0x00C0, 0x800B},
 210        {"DTV7/8",            0x00C0, 0x801B},
 211        {"DTV7",              0x00C0, 0x8007},
 212        {"FM Radio-INPUT2",   0x9802, 0x9002},
 213        {"FM Radio-INPUT1",   0x0208, 0x9002},
 214        {"FM Radio-INPUT1_MONO", 0x0278, 0x9002}
 215};
 216
 217
 218struct xc5000_fw_cfg {
 219        char *name;
 220        u16 size;
 221        u16 pll_reg;
 222        u8 init_status_supported;
 223        u8 fw_checksum_supported;
 224};
 225
 226#define XC5000A_FIRMWARE "dvb-fe-xc5000-1.6.114.fw"
 227static const struct xc5000_fw_cfg xc5000a_1_6_114 = {
 228        .name = XC5000A_FIRMWARE,
 229        .size = 12401,
 230        .pll_reg = 0x806c,
 231};
 232
 233#define XC5000C_FIRMWARE "dvb-fe-xc5000c-4.1.30.7.fw"
 234static const struct xc5000_fw_cfg xc5000c_41_024_5 = {
 235        .name = XC5000C_FIRMWARE,
 236        .size = 16497,
 237        .pll_reg = 0x13,
 238        .init_status_supported = 1,
 239        .fw_checksum_supported = 1,
 240};
 241
 242static inline const struct xc5000_fw_cfg *xc5000_assign_firmware(int chip_id)
 243{
 244        switch (chip_id) {
 245        default:
 246        case XC5000A:
 247                return &xc5000a_1_6_114;
 248        case XC5000C:
 249                return &xc5000c_41_024_5;
 250        }
 251}
 252
 253static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force);
 254static int xc5000_is_firmware_loaded(struct dvb_frontend *fe);
 255static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val);
 256static int xc5000_tuner_reset(struct dvb_frontend *fe);
 257
 258static int xc_send_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
 259{
 260        struct i2c_msg msg = { .addr = priv->i2c_props.addr,
 261                               .flags = 0, .buf = buf, .len = len };
 262
 263        if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
 264                printk(KERN_ERR "xc5000: I2C write failed (len=%i)\n", len);
 265                return -EREMOTEIO;
 266        }
 267        return 0;
 268}
 269
 270#if 0
 271/* This routine is never used because the only time we read data from the
 272   i2c bus is when we read registers, and we want that to be an atomic i2c
 273   transaction in case we are on a multi-master bus */
 274static int xc_read_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
 275{
 276        struct i2c_msg msg = { .addr = priv->i2c_props.addr,
 277                .flags = I2C_M_RD, .buf = buf, .len = len };
 278
 279        if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
 280                printk(KERN_ERR "xc5000 I2C read failed (len=%i)\n", len);
 281                return -EREMOTEIO;
 282        }
 283        return 0;
 284}
 285#endif
 286
 287static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val)
 288{
 289        u8 buf[2] = { reg >> 8, reg & 0xff };
 290        u8 bval[2] = { 0, 0 };
 291        struct i2c_msg msg[2] = {
 292                { .addr = priv->i2c_props.addr,
 293                        .flags = 0, .buf = &buf[0], .len = 2 },
 294                { .addr = priv->i2c_props.addr,
 295                        .flags = I2C_M_RD, .buf = &bval[0], .len = 2 },
 296        };
 297
 298        if (i2c_transfer(priv->i2c_props.adap, msg, 2) != 2) {
 299                printk(KERN_WARNING "xc5000: I2C read failed\n");
 300                return -EREMOTEIO;
 301        }
 302
 303        *val = (bval[0] << 8) | bval[1];
 304        return 0;
 305}
 306
 307static int xc5000_tuner_reset(struct dvb_frontend *fe)
 308{
 309        struct xc5000_priv *priv = fe->tuner_priv;
 310        int ret;
 311
 312        dprintk(1, "%s()\n", __func__);
 313
 314        if (fe->callback) {
 315                ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
 316                                           fe->dvb->priv :
 317                                           priv->i2c_props.adap->algo_data,
 318                                           DVB_FRONTEND_COMPONENT_TUNER,
 319                                           XC5000_TUNER_RESET, 0);
 320                if (ret) {
 321                        printk(KERN_ERR "xc5000: reset failed\n");
 322                        return ret;
 323                }
 324        } else {
 325                printk(KERN_ERR "xc5000: no tuner reset callback function, fatal\n");
 326                return -EINVAL;
 327        }
 328        return 0;
 329}
 330
 331static int xc_write_reg(struct xc5000_priv *priv, u16 reg_addr, u16 i2c_data)
 332{
 333        u8 buf[4];
 334        int watch_dog_timer = 100;
 335        int result;
 336
 337        buf[0] = (reg_addr >> 8) & 0xFF;
 338        buf[1] = reg_addr & 0xFF;
 339        buf[2] = (i2c_data >> 8) & 0xFF;
 340        buf[3] = i2c_data & 0xFF;
 341        result = xc_send_i2c_data(priv, buf, 4);
 342        if (result == 0) {
 343                /* wait for busy flag to clear */
 344                while ((watch_dog_timer > 0) && (result == 0)) {
 345                        result = xc5000_readreg(priv, XREG_BUSY, (u16 *)buf);
 346                        if (result == 0) {
 347                                if ((buf[0] == 0) && (buf[1] == 0)) {
 348                                        /* busy flag cleared */
 349                                        break;
 350                                } else {
 351                                        msleep(5); /* wait 5 ms */
 352                                        watch_dog_timer--;
 353                                }
 354                        }
 355                }
 356        }
 357        if (watch_dog_timer <= 0)
 358                result = -EREMOTEIO;
 359
 360        return result;
 361}
 362
 363static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
 364{
 365        struct xc5000_priv *priv = fe->tuner_priv;
 366
 367        int i, nbytes_to_send, result;
 368        unsigned int len, pos, index;
 369        u8 buf[XC_MAX_I2C_WRITE_LENGTH];
 370
 371        index = 0;
 372        while ((i2c_sequence[index] != 0xFF) ||
 373                (i2c_sequence[index + 1] != 0xFF)) {
 374                len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
 375                if (len == 0x0000) {
 376                        /* RESET command */
 377                        result = xc5000_tuner_reset(fe);
 378                        index += 2;
 379                        if (result != 0)
 380                                return result;
 381                } else if (len & 0x8000) {
 382                        /* WAIT command */
 383                        msleep(len & 0x7FFF);
 384                        index += 2;
 385                } else {
 386                        /* Send i2c data whilst ensuring individual transactions
 387                         * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
 388                         */
 389                        index += 2;
 390                        buf[0] = i2c_sequence[index];
 391                        buf[1] = i2c_sequence[index + 1];
 392                        pos = 2;
 393                        while (pos < len) {
 394                                if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
 395                                        nbytes_to_send =
 396                                                XC_MAX_I2C_WRITE_LENGTH;
 397                                else
 398                                        nbytes_to_send = (len - pos + 2);
 399                                for (i = 2; i < nbytes_to_send; i++) {
 400                                        buf[i] = i2c_sequence[index + pos +
 401                                                i - 2];
 402                                }
 403                                result = xc_send_i2c_data(priv, buf,
 404                                        nbytes_to_send);
 405
 406                                if (result != 0)
 407                                        return result;
 408
 409                                pos += nbytes_to_send - 2;
 410                        }
 411                        index += len;
 412                }
 413        }
 414        return 0;
 415}
 416
 417static int xc_initialize(struct xc5000_priv *priv)
 418{
 419        dprintk(1, "%s()\n", __func__);
 420        return xc_write_reg(priv, XREG_INIT, 0);
 421}
 422
 423static int xc_set_tv_standard(struct xc5000_priv *priv,
 424        u16 video_mode, u16 audio_mode, u8 radio_mode)
 425{
 426        int ret;
 427        dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, video_mode, audio_mode);
 428        if (radio_mode) {
 429                dprintk(1, "%s() Standard = %s\n",
 430                        __func__,
 431                        xc5000_standard[radio_mode].name);
 432        } else {
 433                dprintk(1, "%s() Standard = %s\n",
 434                        __func__,
 435                        xc5000_standard[priv->video_standard].name);
 436        }
 437
 438        ret = xc_write_reg(priv, XREG_VIDEO_MODE, video_mode);
 439        if (ret == 0)
 440                ret = xc_write_reg(priv, XREG_AUDIO_MODE, audio_mode);
 441
 442        return ret;
 443}
 444
 445static int xc_set_signal_source(struct xc5000_priv *priv, u16 rf_mode)
 446{
 447        dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
 448                rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
 449
 450        if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
 451                rf_mode = XC_RF_MODE_CABLE;
 452                printk(KERN_ERR
 453                        "%s(), Invalid mode, defaulting to CABLE",
 454                        __func__);
 455        }
 456        return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
 457}
 458
 459static const struct dvb_tuner_ops xc5000_tuner_ops;
 460
 461static int xc_set_rf_frequency(struct xc5000_priv *priv, u32 freq_hz)
 462{
 463        u16 freq_code;
 464
 465        dprintk(1, "%s(%u)\n", __func__, freq_hz);
 466
 467        if ((freq_hz > xc5000_tuner_ops.info.frequency_max) ||
 468                (freq_hz < xc5000_tuner_ops.info.frequency_min))
 469                return -EINVAL;
 470
 471        freq_code = (u16)(freq_hz / 15625);
 472
 473        /* Starting in firmware version 1.1.44, Xceive recommends using the
 474           FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
 475           only be used for fast scanning for channel lock) */
 476        return xc_write_reg(priv, XREG_FINERFREQ, freq_code);
 477}
 478
 479
 480static int xc_set_IF_frequency(struct xc5000_priv *priv, u32 freq_khz)
 481{
 482        u32 freq_code = (freq_khz * 1024)/1000;
 483        dprintk(1, "%s(freq_khz = %d) freq_code = 0x%x\n",
 484                __func__, freq_khz, freq_code);
 485
 486        return xc_write_reg(priv, XREG_IF_OUT, freq_code);
 487}
 488
 489
 490static int xc_get_adc_envelope(struct xc5000_priv *priv, u16 *adc_envelope)
 491{
 492        return xc5000_readreg(priv, XREG_ADC_ENV, adc_envelope);
 493}
 494
 495static int xc_get_frequency_error(struct xc5000_priv *priv, u32 *freq_error_hz)
 496{
 497        int result;
 498        u16 reg_data;
 499        u32 tmp;
 500
 501        result = xc5000_readreg(priv, XREG_FREQ_ERROR, &reg_data);
 502        if (result != 0)
 503                return result;
 504
 505        tmp = (u32)reg_data;
 506        (*freq_error_hz) = (tmp * 15625) / 1000;
 507        return result;
 508}
 509
 510static int xc_get_lock_status(struct xc5000_priv *priv, u16 *lock_status)
 511{
 512        return xc5000_readreg(priv, XREG_LOCK, lock_status);
 513}
 514
 515static int xc_get_version(struct xc5000_priv *priv,
 516        u8 *hw_majorversion, u8 *hw_minorversion,
 517        u8 *fw_majorversion, u8 *fw_minorversion)
 518{
 519        u16 data;
 520        int result;
 521
 522        result = xc5000_readreg(priv, XREG_VERSION, &data);
 523        if (result != 0)
 524                return result;
 525
 526        (*hw_majorversion) = (data >> 12) & 0x0F;
 527        (*hw_minorversion) = (data >>  8) & 0x0F;
 528        (*fw_majorversion) = (data >>  4) & 0x0F;
 529        (*fw_minorversion) = data & 0x0F;
 530
 531        return 0;
 532}
 533
 534static int xc_get_buildversion(struct xc5000_priv *priv, u16 *buildrev)
 535{
 536        return xc5000_readreg(priv, XREG_BUILD, buildrev);
 537}
 538
 539static int xc_get_hsync_freq(struct xc5000_priv *priv, u32 *hsync_freq_hz)
 540{
 541        u16 reg_data;
 542        int result;
 543
 544        result = xc5000_readreg(priv, XREG_HSYNC_FREQ, &reg_data);
 545        if (result != 0)
 546                return result;
 547
 548        (*hsync_freq_hz) = ((reg_data & 0x0fff) * 763)/100;
 549        return result;
 550}
 551
 552static int xc_get_frame_lines(struct xc5000_priv *priv, u16 *frame_lines)
 553{
 554        return xc5000_readreg(priv, XREG_FRAME_LINES, frame_lines);
 555}
 556
 557static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
 558{
 559        return xc5000_readreg(priv, XREG_QUALITY, quality);
 560}
 561
 562static int xc_get_analogsnr(struct xc5000_priv *priv, u16 *snr)
 563{
 564        return xc5000_readreg(priv, XREG_SNR, snr);
 565}
 566
 567static int xc_get_totalgain(struct xc5000_priv *priv, u16 *totalgain)
 568{
 569        return xc5000_readreg(priv, XREG_TOTALGAIN, totalgain);
 570}
 571
 572static u16 wait_for_lock(struct xc5000_priv *priv)
 573{
 574        u16 lock_state = 0;
 575        int watch_dog_count = 40;
 576
 577        while ((lock_state == 0) && (watch_dog_count > 0)) {
 578                xc_get_lock_status(priv, &lock_state);
 579                if (lock_state != 1) {
 580                        msleep(5);
 581                        watch_dog_count--;
 582                }
 583        }
 584        return lock_state;
 585}
 586
 587#define XC_TUNE_ANALOG  0
 588#define XC_TUNE_DIGITAL 1
 589static int xc_tune_channel(struct xc5000_priv *priv, u32 freq_hz, int mode)
 590{
 591        int found = 0;
 592
 593        dprintk(1, "%s(%u)\n", __func__, freq_hz);
 594
 595        if (xc_set_rf_frequency(priv, freq_hz) != 0)
 596                return 0;
 597
 598        if (mode == XC_TUNE_ANALOG) {
 599                if (wait_for_lock(priv) == 1)
 600                        found = 1;
 601        }
 602
 603        return found;
 604}
 605
 606static int xc_set_xtal(struct dvb_frontend *fe)
 607{
 608        struct xc5000_priv *priv = fe->tuner_priv;
 609        int ret = 0;
 610
 611        switch (priv->chip_id) {
 612        default:
 613        case XC5000A:
 614                /* 32.000 MHz xtal is default */
 615                break;
 616        case XC5000C:
 617                switch (priv->xtal_khz) {
 618                default:
 619                case 32000:
 620                        /* 32.000 MHz xtal is default */
 621                        break;
 622                case 31875:
 623                        /* 31.875 MHz xtal configuration */
 624                        ret = xc_write_reg(priv, 0x000f, 0x8081);
 625                        break;
 626                }
 627                break;
 628        }
 629        return ret;
 630}
 631
 632static int xc5000_fwupload(struct dvb_frontend *fe,
 633                           const struct xc5000_fw_cfg *desired_fw,
 634                           const struct firmware *fw)
 635{
 636        struct xc5000_priv *priv = fe->tuner_priv;
 637        int ret;
 638
 639        /* request the firmware, this will block and timeout */
 640        dprintk(1, "waiting for firmware upload (%s)...\n",
 641                desired_fw->name);
 642
 643        priv->pll_register_no = desired_fw->pll_reg;
 644        priv->init_status_supported = desired_fw->init_status_supported;
 645        priv->fw_checksum_supported = desired_fw->fw_checksum_supported;
 646
 647
 648        dprintk(1, "firmware uploading...\n");
 649        ret = xc_load_i2c_sequence(fe,  fw->data);
 650        if (!ret) {
 651                ret = xc_set_xtal(fe);
 652                dprintk(1, "Firmware upload complete...\n");
 653        } else
 654                printk(KERN_ERR "xc5000: firmware upload failed...\n");
 655
 656        return ret;
 657}
 658
 659static void xc_debug_dump(struct xc5000_priv *priv)
 660{
 661        u16 adc_envelope;
 662        u32 freq_error_hz = 0;
 663        u16 lock_status;
 664        u32 hsync_freq_hz = 0;
 665        u16 frame_lines;
 666        u16 quality;
 667        u16 snr;
 668        u16 totalgain;
 669        u8 hw_majorversion = 0, hw_minorversion = 0;
 670        u8 fw_majorversion = 0, fw_minorversion = 0;
 671        u16 fw_buildversion = 0;
 672        u16 regval;
 673
 674        /* Wait for stats to stabilize.
 675         * Frame Lines needs two frame times after initial lock
 676         * before it is valid.
 677         */
 678        msleep(100);
 679
 680        xc_get_adc_envelope(priv,  &adc_envelope);
 681        dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
 682
 683        xc_get_frequency_error(priv, &freq_error_hz);
 684        dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
 685
 686        xc_get_lock_status(priv,  &lock_status);
 687        dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
 688                lock_status);
 689
 690        xc_get_version(priv,  &hw_majorversion, &hw_minorversion,
 691                &fw_majorversion, &fw_minorversion);
 692        xc_get_buildversion(priv,  &fw_buildversion);
 693        dprintk(1, "*** HW: V%d.%d, FW: V %d.%d.%d\n",
 694                hw_majorversion, hw_minorversion,
 695                fw_majorversion, fw_minorversion, fw_buildversion);
 696
 697        xc_get_hsync_freq(priv,  &hsync_freq_hz);
 698        dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
 699
 700        xc_get_frame_lines(priv,  &frame_lines);
 701        dprintk(1, "*** Frame lines = %d\n", frame_lines);
 702
 703        xc_get_quality(priv,  &quality);
 704        dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality & 0x07);
 705
 706        xc_get_analogsnr(priv,  &snr);
 707        dprintk(1, "*** Unweighted analog SNR = %d dB\n", snr & 0x3f);
 708
 709        xc_get_totalgain(priv,  &totalgain);
 710        dprintk(1, "*** Total gain = %d.%d dB\n", totalgain / 256,
 711                (totalgain % 256) * 100 / 256);
 712
 713        if (priv->pll_register_no) {
 714                xc5000_readreg(priv, priv->pll_register_no, &regval);
 715                dprintk(1, "*** PLL lock status = 0x%04x\n", regval);
 716        }
 717}
 718
 719static int xc5000_tune_digital(struct dvb_frontend *fe)
 720{
 721        struct xc5000_priv *priv = fe->tuner_priv;
 722        int ret;
 723        u32 bw = fe->dtv_property_cache.bandwidth_hz;
 724
 725        ret = xc_set_signal_source(priv, priv->rf_mode);
 726        if (ret != 0) {
 727                printk(KERN_ERR
 728                        "xc5000: xc_set_signal_source(%d) failed\n",
 729                        priv->rf_mode);
 730                return -EREMOTEIO;
 731        }
 732
 733        ret = xc_set_tv_standard(priv,
 734                xc5000_standard[priv->video_standard].video_mode,
 735                xc5000_standard[priv->video_standard].audio_mode, 0);
 736        if (ret != 0) {
 737                printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
 738                return -EREMOTEIO;
 739        }
 740
 741        ret = xc_set_IF_frequency(priv, priv->if_khz);
 742        if (ret != 0) {
 743                printk(KERN_ERR "xc5000: xc_Set_IF_frequency(%d) failed\n",
 744                       priv->if_khz);
 745                return -EIO;
 746        }
 747
 748        dprintk(1, "%s() setting OUTPUT_AMP to 0x%x\n",
 749                __func__, priv->output_amp);
 750        xc_write_reg(priv, XREG_OUTPUT_AMP, priv->output_amp);
 751
 752        xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);
 753
 754        if (debug)
 755                xc_debug_dump(priv);
 756
 757        priv->bandwidth = bw;
 758
 759        return 0;
 760}
 761
 762static int xc5000_set_digital_params(struct dvb_frontend *fe)
 763{
 764        int b;
 765        struct xc5000_priv *priv = fe->tuner_priv;
 766        u32 bw = fe->dtv_property_cache.bandwidth_hz;
 767        u32 freq = fe->dtv_property_cache.frequency;
 768        u32 delsys  = fe->dtv_property_cache.delivery_system;
 769
 770        if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
 771                dprintk(1, "Unable to load firmware and init tuner\n");
 772                return -EINVAL;
 773        }
 774
 775        dprintk(1, "%s() frequency=%d (Hz)\n", __func__, freq);
 776
 777        switch (delsys) {
 778        case SYS_ATSC:
 779                dprintk(1, "%s() VSB modulation\n", __func__);
 780                priv->rf_mode = XC_RF_MODE_AIR;
 781                priv->freq_offset = 1750000;
 782                priv->video_standard = DTV6;
 783                break;
 784        case SYS_DVBC_ANNEX_B:
 785                dprintk(1, "%s() QAM modulation\n", __func__);
 786                priv->rf_mode = XC_RF_MODE_CABLE;
 787                priv->freq_offset = 1750000;
 788                priv->video_standard = DTV6;
 789                break;
 790        case SYS_ISDBT:
 791                /* All ISDB-T are currently for 6 MHz bw */
 792                if (!bw)
 793                        bw = 6000000;
 794                /* fall to OFDM handling */
 795        case SYS_DMBTH:
 796        case SYS_DVBT:
 797        case SYS_DVBT2:
 798                dprintk(1, "%s() OFDM\n", __func__);
 799                switch (bw) {
 800                case 6000000:
 801                        priv->video_standard = DTV6;
 802                        priv->freq_offset = 1750000;
 803                        break;
 804                case 7000000:
 805                        priv->video_standard = DTV7;
 806                        priv->freq_offset = 2250000;
 807                        break;
 808                case 8000000:
 809                        priv->video_standard = DTV8;
 810                        priv->freq_offset = 2750000;
 811                        break;
 812                default:
 813                        printk(KERN_ERR "xc5000 bandwidth not set!\n");
 814                        return -EINVAL;
 815                }
 816                priv->rf_mode = XC_RF_MODE_AIR;
 817                break;
 818        case SYS_DVBC_ANNEX_A:
 819        case SYS_DVBC_ANNEX_C:
 820                dprintk(1, "%s() QAM modulation\n", __func__);
 821                priv->rf_mode = XC_RF_MODE_CABLE;
 822                if (bw <= 6000000) {
 823                        priv->video_standard = DTV6;
 824                        priv->freq_offset = 1750000;
 825                        b = 6;
 826                } else if (bw <= 7000000) {
 827                        priv->video_standard = DTV7;
 828                        priv->freq_offset = 2250000;
 829                        b = 7;
 830                } else {
 831                        priv->video_standard = DTV7_8;
 832                        priv->freq_offset = 2750000;
 833                        b = 8;
 834                }
 835                dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
 836                        b, bw);
 837                break;
 838        default:
 839                printk(KERN_ERR "xc5000: delivery system is not supported!\n");
 840                return -EINVAL;
 841        }
 842
 843        priv->freq_hz = freq - priv->freq_offset;
 844        priv->mode = V4L2_TUNER_DIGITAL_TV;
 845
 846        dprintk(1, "%s() frequency=%d (compensated to %d)\n",
 847                __func__, freq, priv->freq_hz);
 848
 849        return xc5000_tune_digital(fe);
 850}
 851
 852static int xc5000_is_firmware_loaded(struct dvb_frontend *fe)
 853{
 854        struct xc5000_priv *priv = fe->tuner_priv;
 855        int ret;
 856        u16 id;
 857
 858        ret = xc5000_readreg(priv, XREG_PRODUCT_ID, &id);
 859        if (ret == 0) {
 860                if (id == XC_PRODUCT_ID_FW_NOT_LOADED)
 861                        ret = -ENOENT;
 862                else
 863                        ret = 0;
 864        }
 865
 866        dprintk(1, "%s() returns %s id = 0x%x\n", __func__,
 867                ret == 0 ? "True" : "False", id);
 868        return ret;
 869}
 870
 871static void xc5000_config_tv(struct dvb_frontend *fe,
 872                             struct analog_parameters *params)
 873{
 874        struct xc5000_priv *priv = fe->tuner_priv;
 875
 876        dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
 877                __func__, params->frequency);
 878
 879        /* Fix me: it could be air. */
 880        priv->rf_mode = params->mode;
 881        if (params->mode > XC_RF_MODE_CABLE)
 882                priv->rf_mode = XC_RF_MODE_CABLE;
 883
 884        /* params->frequency is in units of 62.5khz */
 885        priv->freq_hz = params->frequency * 62500;
 886
 887        /* FIX ME: Some video standards may have several possible audio
 888                   standards. We simply default to one of them here.
 889         */
 890        if (params->std & V4L2_STD_MN) {
 891                /* default to BTSC audio standard */
 892                priv->video_standard = MN_NTSC_PAL_BTSC;
 893                return;
 894        }
 895
 896        if (params->std & V4L2_STD_PAL_BG) {
 897                /* default to NICAM audio standard */
 898                priv->video_standard = BG_PAL_NICAM;
 899                return;
 900        }
 901
 902        if (params->std & V4L2_STD_PAL_I) {
 903                /* default to NICAM audio standard */
 904                priv->video_standard = I_PAL_NICAM;
 905                return;
 906        }
 907
 908        if (params->std & V4L2_STD_PAL_DK) {
 909                /* default to NICAM audio standard */
 910                priv->video_standard = DK_PAL_NICAM;
 911                return;
 912        }
 913
 914        if (params->std & V4L2_STD_SECAM_DK) {
 915                /* default to A2 DK1 audio standard */
 916                priv->video_standard = DK_SECAM_A2DK1;
 917                return;
 918        }
 919
 920        if (params->std & V4L2_STD_SECAM_L) {
 921                priv->video_standard = L_SECAM_NICAM;
 922                return;
 923        }
 924
 925        if (params->std & V4L2_STD_SECAM_LC) {
 926                priv->video_standard = LC_SECAM_NICAM;
 927                return;
 928        }
 929}
 930
 931static int xc5000_set_tv_freq(struct dvb_frontend *fe)
 932{
 933        struct xc5000_priv *priv = fe->tuner_priv;
 934        u16 pll_lock_status;
 935        int ret;
 936
 937tune_channel:
 938        ret = xc_set_signal_source(priv, priv->rf_mode);
 939        if (ret != 0) {
 940                printk(KERN_ERR
 941                        "xc5000: xc_set_signal_source(%d) failed\n",
 942                        priv->rf_mode);
 943                return -EREMOTEIO;
 944        }
 945
 946        ret = xc_set_tv_standard(priv,
 947                xc5000_standard[priv->video_standard].video_mode,
 948                xc5000_standard[priv->video_standard].audio_mode, 0);
 949        if (ret != 0) {
 950                printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
 951                return -EREMOTEIO;
 952        }
 953
 954        xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
 955
 956        xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
 957
 958        if (debug)
 959                xc_debug_dump(priv);
 960
 961        if (priv->pll_register_no != 0) {
 962                msleep(20);
 963                xc5000_readreg(priv, priv->pll_register_no, &pll_lock_status);
 964                if (pll_lock_status > 63) {
 965                        /* PLL is unlocked, force reload of the firmware */
 966                        dprintk(1, "xc5000: PLL not locked (0x%x).  Reloading...\n",
 967                                pll_lock_status);
 968                        if (xc_load_fw_and_init_tuner(fe, 1) != 0) {
 969                                printk(KERN_ERR "xc5000: Unable to reload fw\n");
 970                                return -EREMOTEIO;
 971                        }
 972                        goto tune_channel;
 973                }
 974        }
 975
 976        return 0;
 977}
 978
 979static int xc5000_config_radio(struct dvb_frontend *fe,
 980                               struct analog_parameters *params)
 981
 982{
 983        struct xc5000_priv *priv = fe->tuner_priv;
 984
 985        dprintk(1, "%s() frequency=%d (in units of khz)\n",
 986                __func__, params->frequency);
 987
 988        if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
 989                dprintk(1, "%s() radio input not configured\n", __func__);
 990                return -EINVAL;
 991        }
 992
 993        priv->freq_hz = params->frequency * 125 / 2;
 994        priv->rf_mode = XC_RF_MODE_AIR;
 995
 996        return 0;
 997}
 998
 999static int xc5000_set_radio_freq(struct dvb_frontend *fe)
1000{
1001        struct xc5000_priv *priv = fe->tuner_priv;
1002        int ret;
1003        u8 radio_input;
1004
1005        if (priv->radio_input == XC5000_RADIO_FM1)
1006                radio_input = FM_RADIO_INPUT1;
1007        else if  (priv->radio_input == XC5000_RADIO_FM2)
1008                radio_input = FM_RADIO_INPUT2;
1009        else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
1010                radio_input = FM_RADIO_INPUT1_MONO;
1011        else {
1012                dprintk(1, "%s() unknown radio input %d\n", __func__,
1013                        priv->radio_input);
1014                return -EINVAL;
1015        }
1016
1017        ret = xc_set_tv_standard(priv, xc5000_standard[radio_input].video_mode,
1018                               xc5000_standard[radio_input].audio_mode, radio_input);
1019
1020        if (ret != 0) {
1021                printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
1022                return -EREMOTEIO;
1023        }
1024
1025        ret = xc_set_signal_source(priv, priv->rf_mode);
1026        if (ret != 0) {
1027                printk(KERN_ERR
1028                        "xc5000: xc_set_signal_source(%d) failed\n",
1029                        priv->rf_mode);
1030                return -EREMOTEIO;
1031        }
1032
1033        if ((priv->radio_input == XC5000_RADIO_FM1) ||
1034                                (priv->radio_input == XC5000_RADIO_FM2))
1035                xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
1036        else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
1037                xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06);
1038
1039        xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
1040
1041        return 0;
1042}
1043
1044static int xc5000_set_params(struct dvb_frontend *fe)
1045{
1046        struct xc5000_priv *priv = fe->tuner_priv;
1047
1048        if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
1049                dprintk(1, "Unable to load firmware and init tuner\n");
1050                return -EINVAL;
1051        }
1052
1053        switch (priv->mode) {
1054        case V4L2_TUNER_RADIO:
1055                return xc5000_set_radio_freq(fe);
1056        case V4L2_TUNER_ANALOG_TV:
1057                return xc5000_set_tv_freq(fe);
1058        case V4L2_TUNER_DIGITAL_TV:
1059                return xc5000_tune_digital(fe);
1060        }
1061
1062        return 0;
1063}
1064
1065static int xc5000_set_analog_params(struct dvb_frontend *fe,
1066                             struct analog_parameters *params)
1067{
1068        struct xc5000_priv *priv = fe->tuner_priv;
1069        int ret;
1070
1071        if (priv->i2c_props.adap == NULL)
1072                return -EINVAL;
1073
1074        switch (params->mode) {
1075        case V4L2_TUNER_RADIO:
1076                ret = xc5000_config_radio(fe, params);
1077                if (ret)
1078                        return ret;
1079                break;
1080        case V4L2_TUNER_ANALOG_TV:
1081                xc5000_config_tv(fe, params);
1082                break;
1083        default:
1084                break;
1085        }
1086        priv->mode = params->mode;
1087
1088        return xc5000_set_params(fe);
1089}
1090
1091static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1092{
1093        struct xc5000_priv *priv = fe->tuner_priv;
1094        dprintk(1, "%s()\n", __func__);
1095        *freq = priv->freq_hz + priv->freq_offset;
1096        return 0;
1097}
1098
1099static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
1100{
1101        struct xc5000_priv *priv = fe->tuner_priv;
1102        dprintk(1, "%s()\n", __func__);
1103        *freq = priv->if_khz * 1000;
1104        return 0;
1105}
1106
1107static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1108{
1109        struct xc5000_priv *priv = fe->tuner_priv;
1110        dprintk(1, "%s()\n", __func__);
1111
1112        *bw = priv->bandwidth;
1113        return 0;
1114}
1115
1116static int xc5000_get_status(struct dvb_frontend *fe, u32 *status)
1117{
1118        struct xc5000_priv *priv = fe->tuner_priv;
1119        u16 lock_status = 0;
1120
1121        xc_get_lock_status(priv, &lock_status);
1122
1123        dprintk(1, "%s() lock_status = 0x%08x\n", __func__, lock_status);
1124
1125        *status = lock_status;
1126
1127        return 0;
1128}
1129
1130static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
1131{
1132        struct xc5000_priv *priv = fe->tuner_priv;
1133        const struct xc5000_fw_cfg *desired_fw = xc5000_assign_firmware(priv->chip_id);
1134        const struct firmware *fw;
1135        int ret, i;
1136        u16 pll_lock_status;
1137        u16 fw_ck;
1138
1139        cancel_delayed_work(&priv->timer_sleep);
1140
1141        if (!force && xc5000_is_firmware_loaded(fe) == 0)
1142                return 0;
1143
1144        if (!priv->firmware) {
1145                ret = request_firmware(&fw, desired_fw->name,
1146                                        priv->i2c_props.adap->dev.parent);
1147                if (ret) {
1148                        pr_err("xc5000: Upload failed. rc %d\n", ret);
1149                        return ret;
1150                }
1151                dprintk(1, "firmware read %Zu bytes.\n", fw->size);
1152
1153                if (fw->size != desired_fw->size) {
1154                        pr_err("xc5000: Firmware file with incorrect size\n");
1155                        release_firmware(fw);
1156                        return -EINVAL;
1157                }
1158                priv->firmware = fw;
1159        } else
1160                fw = priv->firmware;
1161
1162        /* Try up to 5 times to load firmware */
1163        for (i = 0; i < 5; i++) {
1164                if (i)
1165                        printk(KERN_CONT " - retrying to upload firmware.\n");
1166
1167                ret = xc5000_fwupload(fe, desired_fw, fw);
1168                if (ret != 0)
1169                        goto err;
1170
1171                msleep(20);
1172
1173                if (priv->fw_checksum_supported) {
1174                        if (xc5000_readreg(priv, XREG_FW_CHECKSUM, &fw_ck)) {
1175                                printk(KERN_ERR
1176                                       "xc5000: FW checksum reading failed.");
1177                                continue;
1178                        }
1179
1180                        if (!fw_ck) {
1181                                printk(KERN_ERR
1182                                       "xc5000: FW checksum failed = 0x%04x.",
1183                                       fw_ck);
1184                                continue;
1185                        }
1186                }
1187
1188                /* Start the tuner self-calibration process */
1189                ret = xc_initialize(priv);
1190                if (ret) {
1191                        printk(KERN_ERR
1192                               "xc5000: Can't request Self-callibration.");
1193                        continue;
1194                }
1195
1196                /* Wait for calibration to complete.
1197                 * We could continue but XC5000 will clock stretch subsequent
1198                 * I2C transactions until calibration is complete.  This way we
1199                 * don't have to rely on clock stretching working.
1200                 */
1201                msleep(100);
1202
1203                if (priv->init_status_supported) {
1204                        if (xc5000_readreg(priv, XREG_INIT_STATUS, &fw_ck)) {
1205                                printk(KERN_ERR
1206                                       "xc5000: FW failed reading init status.");
1207                                continue;
1208                        }
1209
1210                        if (!fw_ck) {
1211                                printk(KERN_ERR
1212                                       "xc5000: FW init status failed = 0x%04x.",
1213                                       fw_ck);
1214                                continue;
1215                        }
1216                }
1217
1218                if (priv->pll_register_no) {
1219                        xc5000_readreg(priv, priv->pll_register_no,
1220                                       &pll_lock_status);
1221                        if (pll_lock_status > 63) {
1222                                /* PLL is unlocked, force reload of the firmware */
1223                                printk(KERN_ERR
1224                                       "xc5000: PLL not running after fwload.");
1225                                continue;
1226                        }
1227                }
1228
1229                /* Default to "CABLE" mode */
1230                ret = xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
1231                if (!ret)
1232                        break;
1233                printk(KERN_ERR "xc5000: can't set to cable mode.");
1234        }
1235
1236err:
1237        if (!ret)
1238                printk(KERN_INFO "xc5000: Firmware %s loaded and running.\n",
1239                       desired_fw->name);
1240        else
1241                printk(KERN_CONT " - too many retries. Giving up\n");
1242
1243        return ret;
1244}
1245
1246static void xc5000_do_timer_sleep(struct work_struct *timer_sleep)
1247{
1248        struct xc5000_priv *priv =container_of(timer_sleep, struct xc5000_priv,
1249                                               timer_sleep.work);
1250        struct dvb_frontend *fe = priv->fe;
1251        int ret;
1252
1253        dprintk(1, "%s()\n", __func__);
1254
1255        /* According to Xceive technical support, the "powerdown" register
1256           was removed in newer versions of the firmware.  The "supported"
1257           way to sleep the tuner is to pull the reset pin low for 10ms */
1258        ret = xc5000_tuner_reset(fe);
1259        if (ret != 0)
1260                printk(KERN_ERR
1261                        "xc5000: %s() unable to shutdown tuner\n",
1262                        __func__);
1263}
1264
1265static int xc5000_sleep(struct dvb_frontend *fe)
1266{
1267        struct xc5000_priv *priv = fe->tuner_priv;
1268
1269        dprintk(1, "%s()\n", __func__);
1270
1271        /* Avoid firmware reload on slow devices */
1272        if (no_poweroff)
1273                return 0;
1274
1275        schedule_delayed_work(&priv->timer_sleep,
1276                              msecs_to_jiffies(XC5000_SLEEP_TIME));
1277
1278        return 0;
1279}
1280
1281static int xc5000_suspend(struct dvb_frontend *fe)
1282{
1283        struct xc5000_priv *priv = fe->tuner_priv;
1284        int ret;
1285
1286        dprintk(1, "%s()\n", __func__);
1287
1288        cancel_delayed_work(&priv->timer_sleep);
1289
1290        ret = xc5000_tuner_reset(fe);
1291        if (ret != 0)
1292                printk(KERN_ERR
1293                        "xc5000: %s() unable to shutdown tuner\n",
1294                        __func__);
1295
1296        return 0;
1297}
1298
1299static int xc5000_resume(struct dvb_frontend *fe)
1300{
1301        struct xc5000_priv *priv = fe->tuner_priv;
1302
1303        dprintk(1, "%s()\n", __func__);
1304
1305        /* suspended before firmware is loaded.
1306           Avoid firmware load in resume path. */
1307        if (!priv->firmware)
1308                return 0;
1309
1310        return xc5000_set_params(fe);
1311}
1312
1313static int xc5000_init(struct dvb_frontend *fe)
1314{
1315        struct xc5000_priv *priv = fe->tuner_priv;
1316        dprintk(1, "%s()\n", __func__);
1317
1318        if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
1319                printk(KERN_ERR "xc5000: Unable to initialise tuner\n");
1320                return -EREMOTEIO;
1321        }
1322
1323        if (debug)
1324                xc_debug_dump(priv);
1325
1326        return 0;
1327}
1328
1329static int xc5000_release(struct dvb_frontend *fe)
1330{
1331        struct xc5000_priv *priv = fe->tuner_priv;
1332
1333        dprintk(1, "%s()\n", __func__);
1334
1335        mutex_lock(&xc5000_list_mutex);
1336
1337        if (priv) {
1338                cancel_delayed_work(&priv->timer_sleep);
1339                if (priv->firmware) {
1340                        release_firmware(priv->firmware);
1341                        priv->firmware = NULL;
1342                }
1343                hybrid_tuner_release_state(priv);
1344        }
1345
1346        mutex_unlock(&xc5000_list_mutex);
1347
1348        fe->tuner_priv = NULL;
1349
1350        return 0;
1351}
1352
1353static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
1354{
1355        struct xc5000_priv *priv = fe->tuner_priv;
1356        struct xc5000_config *p = priv_cfg;
1357
1358        dprintk(1, "%s()\n", __func__);
1359
1360        if (p->if_khz)
1361                priv->if_khz = p->if_khz;
1362
1363        if (p->radio_input)
1364                priv->radio_input = p->radio_input;
1365
1366        if (p->output_amp)
1367                priv->output_amp = p->output_amp;
1368
1369        return 0;
1370}
1371
1372
1373static const struct dvb_tuner_ops xc5000_tuner_ops = {
1374        .info = {
1375                .name           = "Xceive XC5000",
1376                .frequency_min  =    1000000,
1377                .frequency_max  = 1023000000,
1378                .frequency_step =      50000,
1379        },
1380
1381        .release           = xc5000_release,
1382        .init              = xc5000_init,
1383        .sleep             = xc5000_sleep,
1384        .suspend           = xc5000_suspend,
1385        .resume            = xc5000_resume,
1386
1387        .set_config        = xc5000_set_config,
1388        .set_params        = xc5000_set_digital_params,
1389        .set_analog_params = xc5000_set_analog_params,
1390        .get_frequency     = xc5000_get_frequency,
1391        .get_if_frequency  = xc5000_get_if_frequency,
1392        .get_bandwidth     = xc5000_get_bandwidth,
1393        .get_status        = xc5000_get_status
1394};
1395
1396struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
1397                                   struct i2c_adapter *i2c,
1398                                   const struct xc5000_config *cfg)
1399{
1400        struct xc5000_priv *priv = NULL;
1401        int instance;
1402        u16 id = 0;
1403
1404        dprintk(1, "%s(%d-%04x)\n", __func__,
1405                i2c ? i2c_adapter_id(i2c) : -1,
1406                cfg ? cfg->i2c_address : -1);
1407
1408        mutex_lock(&xc5000_list_mutex);
1409
1410        instance = hybrid_tuner_request_state(struct xc5000_priv, priv,
1411                                              hybrid_tuner_instance_list,
1412                                              i2c, cfg->i2c_address, "xc5000");
1413        switch (instance) {
1414        case 0:
1415                goto fail;
1416        case 1:
1417                /* new tuner instance */
1418                priv->bandwidth = 6000000;
1419                fe->tuner_priv = priv;
1420                priv->fe = fe;
1421                INIT_DELAYED_WORK(&priv->timer_sleep, xc5000_do_timer_sleep);
1422                break;
1423        default:
1424                /* existing tuner instance */
1425                fe->tuner_priv = priv;
1426                break;
1427        }
1428
1429        if (priv->if_khz == 0) {
1430                /* If the IF hasn't been set yet, use the value provided by
1431                   the caller (occurs in hybrid devices where the analog
1432                   call to xc5000_attach occurs before the digital side) */
1433                priv->if_khz = cfg->if_khz;
1434        }
1435
1436        if (priv->xtal_khz == 0)
1437                priv->xtal_khz = cfg->xtal_khz;
1438
1439        if (priv->radio_input == 0)
1440                priv->radio_input = cfg->radio_input;
1441
1442        /* don't override chip id if it's already been set
1443           unless explicitly specified */
1444        if ((priv->chip_id == 0) || (cfg->chip_id))
1445                /* use default chip id if none specified, set to 0 so
1446                   it can be overridden if this is a hybrid driver */
1447                priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
1448
1449        /* don't override output_amp if it's already been set
1450           unless explicitly specified */
1451        if ((priv->output_amp == 0) || (cfg->output_amp))
1452                /* use default output_amp value if none specified */
1453                priv->output_amp = (cfg->output_amp) ? cfg->output_amp : 0x8a;
1454
1455        /* Check if firmware has been loaded. It is possible that another
1456           instance of the driver has loaded the firmware.
1457         */
1458        if (xc5000_readreg(priv, XREG_PRODUCT_ID, &id) != 0)
1459                goto fail;
1460
1461        switch (id) {
1462        case XC_PRODUCT_ID_FW_LOADED:
1463                printk(KERN_INFO
1464                        "xc5000: Successfully identified at address 0x%02x\n",
1465                        cfg->i2c_address);
1466                printk(KERN_INFO
1467                        "xc5000: Firmware has been loaded previously\n");
1468                break;
1469        case XC_PRODUCT_ID_FW_NOT_LOADED:
1470                printk(KERN_INFO
1471                        "xc5000: Successfully identified at address 0x%02x\n",
1472                        cfg->i2c_address);
1473                printk(KERN_INFO
1474                        "xc5000: Firmware has not been loaded previously\n");
1475                break;
1476        default:
1477                printk(KERN_ERR
1478                        "xc5000: Device not found at addr 0x%02x (0x%x)\n",
1479                        cfg->i2c_address, id);
1480                goto fail;
1481        }
1482
1483        mutex_unlock(&xc5000_list_mutex);
1484
1485        memcpy(&fe->ops.tuner_ops, &xc5000_tuner_ops,
1486                sizeof(struct dvb_tuner_ops));
1487
1488        return fe;
1489fail:
1490        mutex_unlock(&xc5000_list_mutex);
1491
1492        xc5000_release(fe);
1493        return NULL;
1494}
1495EXPORT_SYMBOL(xc5000_attach);
1496
1497MODULE_AUTHOR("Steven Toth");
1498MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
1499MODULE_LICENSE("GPL");
1500MODULE_FIRMWARE(XC5000A_FIRMWARE);
1501MODULE_FIRMWARE(XC5000C_FIRMWARE);
1502