linux/drivers/media/video/tvp514x.c
<<
>>
Prefs
   1/*
   2 * drivers/media/video/tvp514x.c
   3 *
   4 * TI TVP5146/47 decoder driver
   5 *
   6 * Copyright (C) 2008 Texas Instruments Inc
   7 * Author: Vaibhav Hiremath <hvaibhav@ti.com>
   8 *
   9 * Contributors:
  10 *     Sivaraj R <sivaraj@ti.com>
  11 *     Brijesh R Jadav <brijesh.j@ti.com>
  12 *     Hardik Shah <hardik.shah@ti.com>
  13 *     Manjunath Hadli <mrh@ti.com>
  14 *     Karicheri Muralidharan <m-karicheri2@ti.com>
  15 *
  16 * This package is free software; you can redistribute it and/or modify
  17 * it under the terms of the GNU General Public License version 2 as
  18 * published by the Free Software Foundation.
  19 *
  20 * This program is distributed in the hope that it will be useful,
  21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23 * GNU General Public License for more details.
  24 *
  25 * You should have received a copy of the GNU General Public License
  26 * along with this program; if not, write to the Free Software
  27 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  28 *
  29 */
  30
  31#include <linux/i2c.h>
  32#include <linux/slab.h>
  33#include <linux/delay.h>
  34#include <linux/videodev2.h>
  35
  36#include <media/v4l2-device.h>
  37#include <media/v4l2-common.h>
  38#include <media/v4l2-mediabus.h>
  39#include <media/v4l2-chip-ident.h>
  40#include <media/v4l2-ctrls.h>
  41#include <media/tvp514x.h>
  42
  43#include "tvp514x_regs.h"
  44
  45/* Module Name */
  46#define TVP514X_MODULE_NAME             "tvp514x"
  47
  48/* Private macros for TVP */
  49#define I2C_RETRY_COUNT                 (5)
  50#define LOCK_RETRY_COUNT                (5)
  51#define LOCK_RETRY_DELAY                (200)
  52
  53/* Debug functions */
  54static int debug;
  55module_param(debug, bool, 0644);
  56MODULE_PARM_DESC(debug, "Debug level (0-1)");
  57
  58MODULE_AUTHOR("Texas Instruments");
  59MODULE_DESCRIPTION("TVP514X linux decoder driver");
  60MODULE_LICENSE("GPL");
  61
  62/* enum tvp514x_std - enum for supported standards */
  63enum tvp514x_std {
  64        STD_NTSC_MJ = 0,
  65        STD_PAL_BDGHIN,
  66        STD_INVALID
  67};
  68
  69/**
  70 * struct tvp514x_std_info - Structure to store standard informations
  71 * @width: Line width in pixels
  72 * @height:Number of active lines
  73 * @video_std: Value to write in REG_VIDEO_STD register
  74 * @standard: v4l2 standard structure information
  75 */
  76struct tvp514x_std_info {
  77        unsigned long width;
  78        unsigned long height;
  79        u8 video_std;
  80        struct v4l2_standard standard;
  81};
  82
  83static struct tvp514x_reg tvp514x_reg_list_default[0x40];
  84
  85static int tvp514x_s_stream(struct v4l2_subdev *sd, int enable);
  86/**
  87 * struct tvp514x_decoder - TVP5146/47 decoder object
  88 * @sd: Subdevice Slave handle
  89 * @tvp514x_regs: copy of hw's regs with preset values.
  90 * @pdata: Board specific
  91 * @ver: Chip version
  92 * @streaming: TVP5146/47 decoder streaming - enabled or disabled.
  93 * @current_std: Current standard
  94 * @num_stds: Number of standards
  95 * @std_list: Standards list
  96 * @input: Input routing at chip level
  97 * @output: Output routing at chip level
  98 */
  99struct tvp514x_decoder {
 100        struct v4l2_subdev sd;
 101        struct v4l2_ctrl_handler hdl;
 102        struct tvp514x_reg tvp514x_regs[ARRAY_SIZE(tvp514x_reg_list_default)];
 103        const struct tvp514x_platform_data *pdata;
 104
 105        int ver;
 106        int streaming;
 107
 108        enum tvp514x_std current_std;
 109        int num_stds;
 110        const struct tvp514x_std_info *std_list;
 111        /* Input and Output Routing parameters */
 112        u32 input;
 113        u32 output;
 114};
 115
 116/* TVP514x default register values */
 117static struct tvp514x_reg tvp514x_reg_list_default[] = {
 118        /* Composite selected */
 119        {TOK_WRITE, REG_INPUT_SEL, 0x05},
 120        {TOK_WRITE, REG_AFE_GAIN_CTRL, 0x0F},
 121        /* Auto mode */
 122        {TOK_WRITE, REG_VIDEO_STD, 0x00},
 123        {TOK_WRITE, REG_OPERATION_MODE, 0x00},
 124        {TOK_SKIP, REG_AUTOSWITCH_MASK, 0x3F},
 125        {TOK_WRITE, REG_COLOR_KILLER, 0x10},
 126        {TOK_WRITE, REG_LUMA_CONTROL1, 0x00},
 127        {TOK_WRITE, REG_LUMA_CONTROL2, 0x00},
 128        {TOK_WRITE, REG_LUMA_CONTROL3, 0x02},
 129        {TOK_WRITE, REG_BRIGHTNESS, 0x80},
 130        {TOK_WRITE, REG_CONTRAST, 0x80},
 131        {TOK_WRITE, REG_SATURATION, 0x80},
 132        {TOK_WRITE, REG_HUE, 0x00},
 133        {TOK_WRITE, REG_CHROMA_CONTROL1, 0x00},
 134        {TOK_WRITE, REG_CHROMA_CONTROL2, 0x0E},
 135        /* Reserved */
 136        {TOK_SKIP, 0x0F, 0x00},
 137        {TOK_WRITE, REG_COMP_PR_SATURATION, 0x80},
 138        {TOK_WRITE, REG_COMP_Y_CONTRAST, 0x80},
 139        {TOK_WRITE, REG_COMP_PB_SATURATION, 0x80},
 140        /* Reserved */
 141        {TOK_SKIP, 0x13, 0x00},
 142        {TOK_WRITE, REG_COMP_Y_BRIGHTNESS, 0x80},
 143        /* Reserved */
 144        {TOK_SKIP, 0x15, 0x00},
 145        /* NTSC timing */
 146        {TOK_SKIP, REG_AVID_START_PIXEL_LSB, 0x55},
 147        {TOK_SKIP, REG_AVID_START_PIXEL_MSB, 0x00},
 148        {TOK_SKIP, REG_AVID_STOP_PIXEL_LSB, 0x25},
 149        {TOK_SKIP, REG_AVID_STOP_PIXEL_MSB, 0x03},
 150        /* NTSC timing */
 151        {TOK_SKIP, REG_HSYNC_START_PIXEL_LSB, 0x00},
 152        {TOK_SKIP, REG_HSYNC_START_PIXEL_MSB, 0x00},
 153        {TOK_SKIP, REG_HSYNC_STOP_PIXEL_LSB, 0x40},
 154        {TOK_SKIP, REG_HSYNC_STOP_PIXEL_MSB, 0x00},
 155        /* NTSC timing */
 156        {TOK_SKIP, REG_VSYNC_START_LINE_LSB, 0x04},
 157        {TOK_SKIP, REG_VSYNC_START_LINE_MSB, 0x00},
 158        {TOK_SKIP, REG_VSYNC_STOP_LINE_LSB, 0x07},
 159        {TOK_SKIP, REG_VSYNC_STOP_LINE_MSB, 0x00},
 160        /* NTSC timing */
 161        {TOK_SKIP, REG_VBLK_START_LINE_LSB, 0x01},
 162        {TOK_SKIP, REG_VBLK_START_LINE_MSB, 0x00},
 163        {TOK_SKIP, REG_VBLK_STOP_LINE_LSB, 0x15},
 164        {TOK_SKIP, REG_VBLK_STOP_LINE_MSB, 0x00},
 165        /* Reserved */
 166        {TOK_SKIP, 0x26, 0x00},
 167        /* Reserved */
 168        {TOK_SKIP, 0x27, 0x00},
 169        {TOK_SKIP, REG_FAST_SWTICH_CONTROL, 0xCC},
 170        /* Reserved */
 171        {TOK_SKIP, 0x29, 0x00},
 172        {TOK_SKIP, REG_FAST_SWTICH_SCART_DELAY, 0x00},
 173        /* Reserved */
 174        {TOK_SKIP, 0x2B, 0x00},
 175        {TOK_SKIP, REG_SCART_DELAY, 0x00},
 176        {TOK_SKIP, REG_CTI_DELAY, 0x00},
 177        {TOK_SKIP, REG_CTI_CONTROL, 0x00},
 178        /* Reserved */
 179        {TOK_SKIP, 0x2F, 0x00},
 180        /* Reserved */
 181        {TOK_SKIP, 0x30, 0x00},
 182        /* Reserved */
 183        {TOK_SKIP, 0x31, 0x00},
 184        /* HS, VS active high */
 185        {TOK_WRITE, REG_SYNC_CONTROL, 0x00},
 186        /* 10-bit BT.656 */
 187        {TOK_WRITE, REG_OUTPUT_FORMATTER1, 0x00},
 188        /* Enable clk & data */
 189        {TOK_WRITE, REG_OUTPUT_FORMATTER2, 0x11},
 190        /* Enable AVID & FLD */
 191        {TOK_WRITE, REG_OUTPUT_FORMATTER3, 0xEE},
 192        /* Enable VS & HS */
 193        {TOK_WRITE, REG_OUTPUT_FORMATTER4, 0xAF},
 194        {TOK_WRITE, REG_OUTPUT_FORMATTER5, 0xFF},
 195        {TOK_WRITE, REG_OUTPUT_FORMATTER6, 0xFF},
 196        /* Clear status */
 197        {TOK_WRITE, REG_CLEAR_LOST_LOCK, 0x01},
 198        {TOK_TERM, 0, 0},
 199};
 200
 201/**
 202 * Supported standards -
 203 *
 204 * Currently supports two standards only, need to add support for rest of the
 205 * modes, like SECAM, etc...
 206 */
 207static const struct tvp514x_std_info tvp514x_std_list[] = {
 208        /* Standard: STD_NTSC_MJ */
 209        [STD_NTSC_MJ] = {
 210         .width = NTSC_NUM_ACTIVE_PIXELS,
 211         .height = NTSC_NUM_ACTIVE_LINES,
 212         .video_std = VIDEO_STD_NTSC_MJ_BIT,
 213         .standard = {
 214                      .index = 0,
 215                      .id = V4L2_STD_NTSC,
 216                      .name = "NTSC",
 217                      .frameperiod = {1001, 30000},
 218                      .framelines = 525
 219                     },
 220        /* Standard: STD_PAL_BDGHIN */
 221        },
 222        [STD_PAL_BDGHIN] = {
 223         .width = PAL_NUM_ACTIVE_PIXELS,
 224         .height = PAL_NUM_ACTIVE_LINES,
 225         .video_std = VIDEO_STD_PAL_BDGHIN_BIT,
 226         .standard = {
 227                      .index = 1,
 228                      .id = V4L2_STD_PAL,
 229                      .name = "PAL",
 230                      .frameperiod = {1, 25},
 231                      .framelines = 625
 232                     },
 233        },
 234        /* Standard: need to add for additional standard */
 235};
 236
 237
 238static inline struct tvp514x_decoder *to_decoder(struct v4l2_subdev *sd)
 239{
 240        return container_of(sd, struct tvp514x_decoder, sd);
 241}
 242
 243static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
 244{
 245        return &container_of(ctrl->handler, struct tvp514x_decoder, hdl)->sd;
 246}
 247
 248
 249/**
 250 * tvp514x_read_reg() - Read a value from a register in an TVP5146/47.
 251 * @sd: ptr to v4l2_subdev struct
 252 * @reg: TVP5146/47 register address
 253 *
 254 * Returns value read if successful, or non-zero (-1) otherwise.
 255 */
 256static int tvp514x_read_reg(struct v4l2_subdev *sd, u8 reg)
 257{
 258        int err, retry = 0;
 259        struct i2c_client *client = v4l2_get_subdevdata(sd);
 260
 261read_again:
 262
 263        err = i2c_smbus_read_byte_data(client, reg);
 264        if (err < 0) {
 265                if (retry <= I2C_RETRY_COUNT) {
 266                        v4l2_warn(sd, "Read: retry ... %d\n", retry);
 267                        retry++;
 268                        msleep_interruptible(10);
 269                        goto read_again;
 270                }
 271        }
 272
 273        return err;
 274}
 275
 276/**
 277 * dump_reg() - dump the register content of TVP5146/47.
 278 * @sd: ptr to v4l2_subdev struct
 279 * @reg: TVP5146/47 register address
 280 */
 281static void dump_reg(struct v4l2_subdev *sd, u8 reg)
 282{
 283        u32 val;
 284
 285        val = tvp514x_read_reg(sd, reg);
 286        v4l2_info(sd, "Reg(0x%.2X): 0x%.2X\n", reg, val);
 287}
 288
 289/**
 290 * tvp514x_write_reg() - Write a value to a register in TVP5146/47
 291 * @sd: ptr to v4l2_subdev struct
 292 * @reg: TVP5146/47 register address
 293 * @val: value to be written to the register
 294 *
 295 * Write a value to a register in an TVP5146/47 decoder device.
 296 * Returns zero if successful, or non-zero otherwise.
 297 */
 298static int tvp514x_write_reg(struct v4l2_subdev *sd, u8 reg, u8 val)
 299{
 300        int err, retry = 0;
 301        struct i2c_client *client = v4l2_get_subdevdata(sd);
 302
 303write_again:
 304
 305        err = i2c_smbus_write_byte_data(client, reg, val);
 306        if (err) {
 307                if (retry <= I2C_RETRY_COUNT) {
 308                        v4l2_warn(sd, "Write: retry ... %d\n", retry);
 309                        retry++;
 310                        msleep_interruptible(10);
 311                        goto write_again;
 312                }
 313        }
 314
 315        return err;
 316}
 317
 318/**
 319 * tvp514x_write_regs() : Initializes a list of TVP5146/47 registers
 320 * @sd: ptr to v4l2_subdev struct
 321 * @reglist: list of TVP5146/47 registers and values
 322 *
 323 * Initializes a list of TVP5146/47 registers:-
 324 *              if token is TOK_TERM, then entire write operation terminates
 325 *              if token is TOK_DELAY, then a delay of 'val' msec is introduced
 326 *              if token is TOK_SKIP, then the register write is skipped
 327 *              if token is TOK_WRITE, then the register write is performed
 328 * Returns zero if successful, or non-zero otherwise.
 329 */
 330static int tvp514x_write_regs(struct v4l2_subdev *sd,
 331                              const struct tvp514x_reg reglist[])
 332{
 333        int err;
 334        const struct tvp514x_reg *next = reglist;
 335
 336        for (; next->token != TOK_TERM; next++) {
 337                if (next->token == TOK_DELAY) {
 338                        msleep(next->val);
 339                        continue;
 340                }
 341
 342                if (next->token == TOK_SKIP)
 343                        continue;
 344
 345                err = tvp514x_write_reg(sd, next->reg, (u8) next->val);
 346                if (err) {
 347                        v4l2_err(sd, "Write failed. Err[%d]\n", err);
 348                        return err;
 349                }
 350        }
 351        return 0;
 352}
 353
 354/**
 355 * tvp514x_query_current_std() : Query the current standard detected by TVP5146/47
 356 * @sd: ptr to v4l2_subdev struct
 357 *
 358 * Returns the current standard detected by TVP5146/47, STD_INVALID if there is no
 359 * standard detected.
 360 */
 361static enum tvp514x_std tvp514x_query_current_std(struct v4l2_subdev *sd)
 362{
 363        u8 std, std_status;
 364
 365        std = tvp514x_read_reg(sd, REG_VIDEO_STD);
 366        if ((std & VIDEO_STD_MASK) == VIDEO_STD_AUTO_SWITCH_BIT)
 367                /* use the standard status register */
 368                std_status = tvp514x_read_reg(sd, REG_VIDEO_STD_STATUS);
 369        else
 370                /* use the standard register itself */
 371                std_status = std;
 372
 373        switch (std_status & VIDEO_STD_MASK) {
 374        case VIDEO_STD_NTSC_MJ_BIT:
 375                return STD_NTSC_MJ;
 376
 377        case VIDEO_STD_PAL_BDGHIN_BIT:
 378                return STD_PAL_BDGHIN;
 379
 380        default:
 381                return STD_INVALID;
 382        }
 383
 384        return STD_INVALID;
 385}
 386
 387/* TVP5146/47 register dump function */
 388static void tvp514x_reg_dump(struct v4l2_subdev *sd)
 389{
 390        dump_reg(sd, REG_INPUT_SEL);
 391        dump_reg(sd, REG_AFE_GAIN_CTRL);
 392        dump_reg(sd, REG_VIDEO_STD);
 393        dump_reg(sd, REG_OPERATION_MODE);
 394        dump_reg(sd, REG_COLOR_KILLER);
 395        dump_reg(sd, REG_LUMA_CONTROL1);
 396        dump_reg(sd, REG_LUMA_CONTROL2);
 397        dump_reg(sd, REG_LUMA_CONTROL3);
 398        dump_reg(sd, REG_BRIGHTNESS);
 399        dump_reg(sd, REG_CONTRAST);
 400        dump_reg(sd, REG_SATURATION);
 401        dump_reg(sd, REG_HUE);
 402        dump_reg(sd, REG_CHROMA_CONTROL1);
 403        dump_reg(sd, REG_CHROMA_CONTROL2);
 404        dump_reg(sd, REG_COMP_PR_SATURATION);
 405        dump_reg(sd, REG_COMP_Y_CONTRAST);
 406        dump_reg(sd, REG_COMP_PB_SATURATION);
 407        dump_reg(sd, REG_COMP_Y_BRIGHTNESS);
 408        dump_reg(sd, REG_AVID_START_PIXEL_LSB);
 409        dump_reg(sd, REG_AVID_START_PIXEL_MSB);
 410        dump_reg(sd, REG_AVID_STOP_PIXEL_LSB);
 411        dump_reg(sd, REG_AVID_STOP_PIXEL_MSB);
 412        dump_reg(sd, REG_HSYNC_START_PIXEL_LSB);
 413        dump_reg(sd, REG_HSYNC_START_PIXEL_MSB);
 414        dump_reg(sd, REG_HSYNC_STOP_PIXEL_LSB);
 415        dump_reg(sd, REG_HSYNC_STOP_PIXEL_MSB);
 416        dump_reg(sd, REG_VSYNC_START_LINE_LSB);
 417        dump_reg(sd, REG_VSYNC_START_LINE_MSB);
 418        dump_reg(sd, REG_VSYNC_STOP_LINE_LSB);
 419        dump_reg(sd, REG_VSYNC_STOP_LINE_MSB);
 420        dump_reg(sd, REG_VBLK_START_LINE_LSB);
 421        dump_reg(sd, REG_VBLK_START_LINE_MSB);
 422        dump_reg(sd, REG_VBLK_STOP_LINE_LSB);
 423        dump_reg(sd, REG_VBLK_STOP_LINE_MSB);
 424        dump_reg(sd, REG_SYNC_CONTROL);
 425        dump_reg(sd, REG_OUTPUT_FORMATTER1);
 426        dump_reg(sd, REG_OUTPUT_FORMATTER2);
 427        dump_reg(sd, REG_OUTPUT_FORMATTER3);
 428        dump_reg(sd, REG_OUTPUT_FORMATTER4);
 429        dump_reg(sd, REG_OUTPUT_FORMATTER5);
 430        dump_reg(sd, REG_OUTPUT_FORMATTER6);
 431        dump_reg(sd, REG_CLEAR_LOST_LOCK);
 432}
 433
 434/**
 435 * tvp514x_configure() - Configure the TVP5146/47 registers
 436 * @sd: ptr to v4l2_subdev struct
 437 * @decoder: ptr to tvp514x_decoder structure
 438 *
 439 * Returns zero if successful, or non-zero otherwise.
 440 */
 441static int tvp514x_configure(struct v4l2_subdev *sd,
 442                struct tvp514x_decoder *decoder)
 443{
 444        int err;
 445
 446        /* common register initialization */
 447        err =
 448            tvp514x_write_regs(sd, decoder->tvp514x_regs);
 449        if (err)
 450                return err;
 451
 452        if (debug)
 453                tvp514x_reg_dump(sd);
 454
 455        return 0;
 456}
 457
 458/**
 459 * tvp514x_detect() - Detect if an tvp514x is present, and if so which revision.
 460 * @sd: pointer to standard V4L2 sub-device structure
 461 * @decoder: pointer to tvp514x_decoder structure
 462 *
 463 * A device is considered to be detected if the chip ID (LSB and MSB)
 464 * registers match the expected values.
 465 * Any value of the rom version register is accepted.
 466 * Returns ENODEV error number if no device is detected, or zero
 467 * if a device is detected.
 468 */
 469static int tvp514x_detect(struct v4l2_subdev *sd,
 470                struct tvp514x_decoder *decoder)
 471{
 472        u8 chip_id_msb, chip_id_lsb, rom_ver;
 473        struct i2c_client *client = v4l2_get_subdevdata(sd);
 474
 475        chip_id_msb = tvp514x_read_reg(sd, REG_CHIP_ID_MSB);
 476        chip_id_lsb = tvp514x_read_reg(sd, REG_CHIP_ID_LSB);
 477        rom_ver = tvp514x_read_reg(sd, REG_ROM_VERSION);
 478
 479        v4l2_dbg(1, debug, sd,
 480                 "chip id detected msb:0x%x lsb:0x%x rom version:0x%x\n",
 481                 chip_id_msb, chip_id_lsb, rom_ver);
 482        if ((chip_id_msb != TVP514X_CHIP_ID_MSB)
 483                || ((chip_id_lsb != TVP5146_CHIP_ID_LSB)
 484                && (chip_id_lsb != TVP5147_CHIP_ID_LSB))) {
 485                /* We didn't read the values we expected, so this must not be
 486                 * an TVP5146/47.
 487                 */
 488                v4l2_err(sd, "chip id mismatch msb:0x%x lsb:0x%x\n",
 489                                chip_id_msb, chip_id_lsb);
 490                return -ENODEV;
 491        }
 492
 493        decoder->ver = rom_ver;
 494
 495        v4l2_info(sd, "%s (Version - 0x%.2x) found at 0x%x (%s)\n",
 496                        client->name, decoder->ver,
 497                        client->addr << 1, client->adapter->name);
 498        return 0;
 499}
 500
 501/**
 502 * tvp514x_querystd() - V4L2 decoder interface handler for querystd
 503 * @sd: pointer to standard V4L2 sub-device structure
 504 * @std_id: standard V4L2 std_id ioctl enum
 505 *
 506 * Returns the current standard detected by TVP5146/47. If no active input is
 507 * detected then *std_id is set to 0 and the function returns 0.
 508 */
 509static int tvp514x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std_id)
 510{
 511        struct tvp514x_decoder *decoder = to_decoder(sd);
 512        enum tvp514x_std current_std;
 513        enum tvp514x_input input_sel;
 514        u8 sync_lock_status, lock_mask;
 515
 516        if (std_id == NULL)
 517                return -EINVAL;
 518
 519        *std_id = V4L2_STD_UNKNOWN;
 520
 521        /* query the current standard */
 522        current_std = tvp514x_query_current_std(sd);
 523        if (current_std == STD_INVALID)
 524                return 0;
 525
 526        input_sel = decoder->input;
 527
 528        switch (input_sel) {
 529        case INPUT_CVBS_VI1A:
 530        case INPUT_CVBS_VI1B:
 531        case INPUT_CVBS_VI1C:
 532        case INPUT_CVBS_VI2A:
 533        case INPUT_CVBS_VI2B:
 534        case INPUT_CVBS_VI2C:
 535        case INPUT_CVBS_VI3A:
 536        case INPUT_CVBS_VI3B:
 537        case INPUT_CVBS_VI3C:
 538        case INPUT_CVBS_VI4A:
 539                lock_mask = STATUS_CLR_SUBCAR_LOCK_BIT |
 540                        STATUS_HORZ_SYNC_LOCK_BIT |
 541                        STATUS_VIRT_SYNC_LOCK_BIT;
 542                break;
 543
 544        case INPUT_SVIDEO_VI2A_VI1A:
 545        case INPUT_SVIDEO_VI2B_VI1B:
 546        case INPUT_SVIDEO_VI2C_VI1C:
 547        case INPUT_SVIDEO_VI2A_VI3A:
 548        case INPUT_SVIDEO_VI2B_VI3B:
 549        case INPUT_SVIDEO_VI2C_VI3C:
 550        case INPUT_SVIDEO_VI4A_VI1A:
 551        case INPUT_SVIDEO_VI4A_VI1B:
 552        case INPUT_SVIDEO_VI4A_VI1C:
 553        case INPUT_SVIDEO_VI4A_VI3A:
 554        case INPUT_SVIDEO_VI4A_VI3B:
 555        case INPUT_SVIDEO_VI4A_VI3C:
 556                lock_mask = STATUS_HORZ_SYNC_LOCK_BIT |
 557                        STATUS_VIRT_SYNC_LOCK_BIT;
 558                break;
 559                /*Need to add other interfaces*/
 560        default:
 561                return -EINVAL;
 562        }
 563        /* check whether signal is locked */
 564        sync_lock_status = tvp514x_read_reg(sd, REG_STATUS1);
 565        if (lock_mask != (sync_lock_status & lock_mask))
 566                return 0;       /* No input detected */
 567
 568        *std_id = decoder->std_list[current_std].standard.id;
 569
 570        v4l2_dbg(1, debug, sd, "Current STD: %s\n",
 571                        decoder->std_list[current_std].standard.name);
 572        return 0;
 573}
 574
 575/**
 576 * tvp514x_s_std() - V4L2 decoder interface handler for s_std
 577 * @sd: pointer to standard V4L2 sub-device structure
 578 * @std_id: standard V4L2 v4l2_std_id ioctl enum
 579 *
 580 * If std_id is supported, sets the requested standard. Otherwise, returns
 581 * -EINVAL
 582 */
 583static int tvp514x_s_std(struct v4l2_subdev *sd, v4l2_std_id std_id)
 584{
 585        struct tvp514x_decoder *decoder = to_decoder(sd);
 586        int err, i;
 587
 588        for (i = 0; i < decoder->num_stds; i++)
 589                if (std_id & decoder->std_list[i].standard.id)
 590                        break;
 591
 592        if ((i == decoder->num_stds) || (i == STD_INVALID))
 593                return -EINVAL;
 594
 595        err = tvp514x_write_reg(sd, REG_VIDEO_STD,
 596                                decoder->std_list[i].video_std);
 597        if (err)
 598                return err;
 599
 600        decoder->current_std = i;
 601        decoder->tvp514x_regs[REG_VIDEO_STD].val =
 602                decoder->std_list[i].video_std;
 603
 604        v4l2_dbg(1, debug, sd, "Standard set to: %s\n",
 605                        decoder->std_list[i].standard.name);
 606        return 0;
 607}
 608
 609/**
 610 * tvp514x_s_routing() - V4L2 decoder interface handler for s_routing
 611 * @sd: pointer to standard V4L2 sub-device structure
 612 * @input: input selector for routing the signal
 613 * @output: output selector for routing the signal
 614 * @config: config value. Not used
 615 *
 616 * If index is valid, selects the requested input. Otherwise, returns -EINVAL if
 617 * the input is not supported or there is no active signal present in the
 618 * selected input.
 619 */
 620static int tvp514x_s_routing(struct v4l2_subdev *sd,
 621                                u32 input, u32 output, u32 config)
 622{
 623        struct tvp514x_decoder *decoder = to_decoder(sd);
 624        int err;
 625        enum tvp514x_input input_sel;
 626        enum tvp514x_output output_sel;
 627        u8 sync_lock_status, lock_mask;
 628        int try_count = LOCK_RETRY_COUNT;
 629
 630        if ((input >= INPUT_INVALID) ||
 631                        (output >= OUTPUT_INVALID))
 632                /* Index out of bound */
 633                return -EINVAL;
 634
 635        /*
 636         * For the sequence streamon -> streamoff and again s_input
 637         * it fails to lock the signal, since streamoff puts TVP514x
 638         * into power off state which leads to failure in sub-sequent s_input.
 639         *
 640         * So power up the TVP514x device here, since it is important to lock
 641         * the signal at this stage.
 642         */
 643        if (!decoder->streaming)
 644                tvp514x_s_stream(sd, 1);
 645
 646        input_sel = input;
 647        output_sel = output;
 648
 649        err = tvp514x_write_reg(sd, REG_INPUT_SEL, input_sel);
 650        if (err)
 651                return err;
 652
 653        output_sel |= tvp514x_read_reg(sd,
 654                        REG_OUTPUT_FORMATTER1) & 0x7;
 655        err = tvp514x_write_reg(sd, REG_OUTPUT_FORMATTER1,
 656                        output_sel);
 657        if (err)
 658                return err;
 659
 660        decoder->tvp514x_regs[REG_INPUT_SEL].val = input_sel;
 661        decoder->tvp514x_regs[REG_OUTPUT_FORMATTER1].val = output_sel;
 662
 663        /* Clear status */
 664        msleep(LOCK_RETRY_DELAY);
 665        err =
 666            tvp514x_write_reg(sd, REG_CLEAR_LOST_LOCK, 0x01);
 667        if (err)
 668                return err;
 669
 670        switch (input_sel) {
 671        case INPUT_CVBS_VI1A:
 672        case INPUT_CVBS_VI1B:
 673        case INPUT_CVBS_VI1C:
 674        case INPUT_CVBS_VI2A:
 675        case INPUT_CVBS_VI2B:
 676        case INPUT_CVBS_VI2C:
 677        case INPUT_CVBS_VI3A:
 678        case INPUT_CVBS_VI3B:
 679        case INPUT_CVBS_VI3C:
 680        case INPUT_CVBS_VI4A:
 681                lock_mask = STATUS_CLR_SUBCAR_LOCK_BIT |
 682                        STATUS_HORZ_SYNC_LOCK_BIT |
 683                        STATUS_VIRT_SYNC_LOCK_BIT;
 684                break;
 685
 686        case INPUT_SVIDEO_VI2A_VI1A:
 687        case INPUT_SVIDEO_VI2B_VI1B:
 688        case INPUT_SVIDEO_VI2C_VI1C:
 689        case INPUT_SVIDEO_VI2A_VI3A:
 690        case INPUT_SVIDEO_VI2B_VI3B:
 691        case INPUT_SVIDEO_VI2C_VI3C:
 692        case INPUT_SVIDEO_VI4A_VI1A:
 693        case INPUT_SVIDEO_VI4A_VI1B:
 694        case INPUT_SVIDEO_VI4A_VI1C:
 695        case INPUT_SVIDEO_VI4A_VI3A:
 696        case INPUT_SVIDEO_VI4A_VI3B:
 697        case INPUT_SVIDEO_VI4A_VI3C:
 698                lock_mask = STATUS_HORZ_SYNC_LOCK_BIT |
 699                        STATUS_VIRT_SYNC_LOCK_BIT;
 700                break;
 701        /* Need to add other interfaces*/
 702        default:
 703                return -EINVAL;
 704        }
 705
 706        while (try_count-- > 0) {
 707                /* Allow decoder to sync up with new input */
 708                msleep(LOCK_RETRY_DELAY);
 709
 710                sync_lock_status = tvp514x_read_reg(sd,
 711                                REG_STATUS1);
 712                if (lock_mask == (sync_lock_status & lock_mask))
 713                        /* Input detected */
 714                        break;
 715        }
 716
 717        if (try_count < 0)
 718                return -EINVAL;
 719
 720        decoder->input = input;
 721        decoder->output = output;
 722
 723        v4l2_dbg(1, debug, sd, "Input set to: %d\n", input_sel);
 724
 725        return 0;
 726}
 727
 728/**
 729 * tvp514x_s_ctrl() - V4L2 decoder interface handler for s_ctrl
 730 * @ctrl: pointer to v4l2_ctrl structure
 731 *
 732 * If the requested control is supported, sets the control's current
 733 * value in HW. Otherwise, returns -EINVAL if the control is not supported.
 734 */
 735static int tvp514x_s_ctrl(struct v4l2_ctrl *ctrl)
 736{
 737        struct v4l2_subdev *sd = to_sd(ctrl);
 738        struct tvp514x_decoder *decoder = to_decoder(sd);
 739        int err = -EINVAL, value;
 740
 741        value = ctrl->val;
 742
 743        switch (ctrl->id) {
 744        case V4L2_CID_BRIGHTNESS:
 745                err = tvp514x_write_reg(sd, REG_BRIGHTNESS, value);
 746                if (!err)
 747                        decoder->tvp514x_regs[REG_BRIGHTNESS].val = value;
 748                break;
 749        case V4L2_CID_CONTRAST:
 750                err = tvp514x_write_reg(sd, REG_CONTRAST, value);
 751                if (!err)
 752                        decoder->tvp514x_regs[REG_CONTRAST].val = value;
 753                break;
 754        case V4L2_CID_SATURATION:
 755                err = tvp514x_write_reg(sd, REG_SATURATION, value);
 756                if (!err)
 757                        decoder->tvp514x_regs[REG_SATURATION].val = value;
 758                break;
 759        case V4L2_CID_HUE:
 760                if (value == 180)
 761                        value = 0x7F;
 762                else if (value == -180)
 763                        value = 0x80;
 764                err = tvp514x_write_reg(sd, REG_HUE, value);
 765                if (!err)
 766                        decoder->tvp514x_regs[REG_HUE].val = value;
 767                break;
 768        case V4L2_CID_AUTOGAIN:
 769                err = tvp514x_write_reg(sd, REG_AFE_GAIN_CTRL, value ? 0x0f : 0x0c);
 770                if (!err)
 771                        decoder->tvp514x_regs[REG_AFE_GAIN_CTRL].val = value;
 772                break;
 773        }
 774
 775        v4l2_dbg(1, debug, sd, "Set Control: ID - %d - %d\n",
 776                        ctrl->id, ctrl->val);
 777        return err;
 778}
 779
 780/**
 781 * tvp514x_enum_mbus_fmt() - V4L2 decoder interface handler for enum_mbus_fmt
 782 * @sd: pointer to standard V4L2 sub-device structure
 783 * @index: index of pixelcode to retrieve
 784 * @code: receives the pixelcode
 785 *
 786 * Enumerates supported mediabus formats
 787 */
 788static int
 789tvp514x_enum_mbus_fmt(struct v4l2_subdev *sd, unsigned index,
 790                                        enum v4l2_mbus_pixelcode *code)
 791{
 792        if (index)
 793                return -EINVAL;
 794
 795        *code = V4L2_MBUS_FMT_YUYV10_2X10;
 796        return 0;
 797}
 798
 799/**
 800 * tvp514x_mbus_fmt_cap() - V4L2 decoder interface handler for try/s/g_mbus_fmt
 801 * @sd: pointer to standard V4L2 sub-device structure
 802 * @f: pointer to the mediabus format structure
 803 *
 804 * Negotiates the image capture size and mediabus format.
 805 */
 806static int
 807tvp514x_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *f)
 808{
 809        struct tvp514x_decoder *decoder = to_decoder(sd);
 810        enum tvp514x_std current_std;
 811
 812        if (f == NULL)
 813                return -EINVAL;
 814
 815        /* Calculate height and width based on current standard */
 816        current_std = decoder->current_std;
 817
 818        f->code = V4L2_MBUS_FMT_YUYV10_2X10;
 819        f->width = decoder->std_list[current_std].width;
 820        f->height = decoder->std_list[current_std].height;
 821        f->field = V4L2_FIELD_INTERLACED;
 822        f->colorspace = V4L2_COLORSPACE_SMPTE170M;
 823
 824        v4l2_dbg(1, debug, sd, "MBUS_FMT: Width - %d, Height - %d\n",
 825                        f->width, f->height);
 826        return 0;
 827}
 828
 829/**
 830 * tvp514x_g_parm() - V4L2 decoder interface handler for g_parm
 831 * @sd: pointer to standard V4L2 sub-device structure
 832 * @a: pointer to standard V4L2 VIDIOC_G_PARM ioctl structure
 833 *
 834 * Returns the decoder's video CAPTURE parameters.
 835 */
 836static int
 837tvp514x_g_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *a)
 838{
 839        struct tvp514x_decoder *decoder = to_decoder(sd);
 840        struct v4l2_captureparm *cparm;
 841        enum tvp514x_std current_std;
 842
 843        if (a == NULL)
 844                return -EINVAL;
 845
 846        if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 847                /* only capture is supported */
 848                return -EINVAL;
 849
 850        /* get the current standard */
 851        current_std = decoder->current_std;
 852
 853        cparm = &a->parm.capture;
 854        cparm->capability = V4L2_CAP_TIMEPERFRAME;
 855        cparm->timeperframe =
 856                decoder->std_list[current_std].standard.frameperiod;
 857
 858        return 0;
 859}
 860
 861/**
 862 * tvp514x_s_parm() - V4L2 decoder interface handler for s_parm
 863 * @sd: pointer to standard V4L2 sub-device structure
 864 * @a: pointer to standard V4L2 VIDIOC_S_PARM ioctl structure
 865 *
 866 * Configures the decoder to use the input parameters, if possible. If
 867 * not possible, returns the appropriate error code.
 868 */
 869static int
 870tvp514x_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *a)
 871{
 872        struct tvp514x_decoder *decoder = to_decoder(sd);
 873        struct v4l2_fract *timeperframe;
 874        enum tvp514x_std current_std;
 875
 876        if (a == NULL)
 877                return -EINVAL;
 878
 879        if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 880                /* only capture is supported */
 881                return -EINVAL;
 882
 883        timeperframe = &a->parm.capture.timeperframe;
 884
 885        /* get the current standard */
 886        current_std = decoder->current_std;
 887
 888        *timeperframe =
 889            decoder->std_list[current_std].standard.frameperiod;
 890
 891        return 0;
 892}
 893
 894/**
 895 * tvp514x_s_stream() - V4L2 decoder i/f handler for s_stream
 896 * @sd: pointer to standard V4L2 sub-device structure
 897 * @enable: streaming enable or disable
 898 *
 899 * Sets streaming to enable or disable, if possible.
 900 */
 901static int tvp514x_s_stream(struct v4l2_subdev *sd, int enable)
 902{
 903        int err = 0;
 904        struct i2c_client *client = v4l2_get_subdevdata(sd);
 905        struct tvp514x_decoder *decoder = to_decoder(sd);
 906
 907        if (decoder->streaming == enable)
 908                return 0;
 909
 910        switch (enable) {
 911        case 0:
 912        {
 913                /* Power Down Sequence */
 914                err = tvp514x_write_reg(sd, REG_OPERATION_MODE, 0x01);
 915                if (err) {
 916                        v4l2_err(sd, "Unable to turn off decoder\n");
 917                        return err;
 918                }
 919                decoder->streaming = enable;
 920                break;
 921        }
 922        case 1:
 923        {
 924                struct tvp514x_reg *int_seq = (struct tvp514x_reg *)
 925                                client->driver->id_table->driver_data;
 926
 927                /* Power Up Sequence */
 928                err = tvp514x_write_regs(sd, int_seq);
 929                if (err) {
 930                        v4l2_err(sd, "Unable to turn on decoder\n");
 931                        return err;
 932                }
 933                /* Detect if not already detected */
 934                err = tvp514x_detect(sd, decoder);
 935                if (err) {
 936                        v4l2_err(sd, "Unable to detect decoder\n");
 937                        return err;
 938                }
 939                err = tvp514x_configure(sd, decoder);
 940                if (err) {
 941                        v4l2_err(sd, "Unable to configure decoder\n");
 942                        return err;
 943                }
 944                decoder->streaming = enable;
 945                break;
 946        }
 947        default:
 948                err = -ENODEV;
 949                break;
 950        }
 951
 952        return err;
 953}
 954
 955static const struct v4l2_ctrl_ops tvp514x_ctrl_ops = {
 956        .s_ctrl = tvp514x_s_ctrl,
 957};
 958
 959static const struct v4l2_subdev_core_ops tvp514x_core_ops = {
 960        .g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
 961        .try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
 962        .s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
 963        .g_ctrl = v4l2_subdev_g_ctrl,
 964        .s_ctrl = v4l2_subdev_s_ctrl,
 965        .queryctrl = v4l2_subdev_queryctrl,
 966        .querymenu = v4l2_subdev_querymenu,
 967        .s_std = tvp514x_s_std,
 968};
 969
 970static const struct v4l2_subdev_video_ops tvp514x_video_ops = {
 971        .s_routing = tvp514x_s_routing,
 972        .querystd = tvp514x_querystd,
 973        .enum_mbus_fmt = tvp514x_enum_mbus_fmt,
 974        .g_mbus_fmt = tvp514x_mbus_fmt,
 975        .try_mbus_fmt = tvp514x_mbus_fmt,
 976        .s_mbus_fmt = tvp514x_mbus_fmt,
 977        .g_parm = tvp514x_g_parm,
 978        .s_parm = tvp514x_s_parm,
 979        .s_stream = tvp514x_s_stream,
 980};
 981
 982static const struct v4l2_subdev_ops tvp514x_ops = {
 983        .core = &tvp514x_core_ops,
 984        .video = &tvp514x_video_ops,
 985};
 986
 987static struct tvp514x_decoder tvp514x_dev = {
 988        .streaming = 0,
 989        .current_std = STD_NTSC_MJ,
 990        .std_list = tvp514x_std_list,
 991        .num_stds = ARRAY_SIZE(tvp514x_std_list),
 992
 993};
 994
 995/**
 996 * tvp514x_probe() - decoder driver i2c probe handler
 997 * @client: i2c driver client device structure
 998 * @id: i2c driver id table
 999 *
1000 * Register decoder as an i2c client device and V4L2
1001 * device.
1002 */
1003static int
1004tvp514x_probe(struct i2c_client *client, const struct i2c_device_id *id)
1005{
1006        struct tvp514x_decoder *decoder;
1007        struct v4l2_subdev *sd;
1008
1009        /* Check if the adapter supports the needed features */
1010        if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1011                return -EIO;
1012
1013        if (!client->dev.platform_data) {
1014                v4l2_err(client, "No platform data!!\n");
1015                return -ENODEV;
1016        }
1017
1018        decoder = kzalloc(sizeof(*decoder), GFP_KERNEL);
1019        if (!decoder)
1020                return -ENOMEM;
1021
1022        /* Initialize the tvp514x_decoder with default configuration */
1023        *decoder = tvp514x_dev;
1024        /* Copy default register configuration */
1025        memcpy(decoder->tvp514x_regs, tvp514x_reg_list_default,
1026                        sizeof(tvp514x_reg_list_default));
1027
1028        /* Copy board specific information here */
1029        decoder->pdata = client->dev.platform_data;
1030
1031        /**
1032         * Fetch platform specific data, and configure the
1033         * tvp514x_reg_list[] accordingly. Since this is one
1034         * time configuration, no need to preserve.
1035         */
1036        decoder->tvp514x_regs[REG_OUTPUT_FORMATTER2].val |=
1037                (decoder->pdata->clk_polarity << 1);
1038        decoder->tvp514x_regs[REG_SYNC_CONTROL].val |=
1039                ((decoder->pdata->hs_polarity << 2) |
1040                 (decoder->pdata->vs_polarity << 3));
1041        /* Set default standard to auto */
1042        decoder->tvp514x_regs[REG_VIDEO_STD].val =
1043                VIDEO_STD_AUTO_SWITCH_BIT;
1044
1045        /* Register with V4L2 layer as slave device */
1046        sd = &decoder->sd;
1047        v4l2_i2c_subdev_init(sd, client, &tvp514x_ops);
1048
1049        v4l2_ctrl_handler_init(&decoder->hdl, 5);
1050        v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops,
1051                V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
1052        v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops,
1053                V4L2_CID_CONTRAST, 0, 255, 1, 128);
1054        v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops,
1055                V4L2_CID_SATURATION, 0, 255, 1, 128);
1056        v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops,
1057                V4L2_CID_HUE, -180, 180, 180, 0);
1058        v4l2_ctrl_new_std(&decoder->hdl, &tvp514x_ctrl_ops,
1059                V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
1060        sd->ctrl_handler = &decoder->hdl;
1061        if (decoder->hdl.error) {
1062                int err = decoder->hdl.error;
1063
1064                v4l2_ctrl_handler_free(&decoder->hdl);
1065                kfree(decoder);
1066                return err;
1067        }
1068        v4l2_ctrl_handler_setup(&decoder->hdl);
1069
1070        v4l2_info(sd, "%s decoder driver registered !!\n", sd->name);
1071
1072        return 0;
1073
1074}
1075
1076/**
1077 * tvp514x_remove() - decoder driver i2c remove handler
1078 * @client: i2c driver client device structure
1079 *
1080 * Unregister decoder as an i2c client device and V4L2
1081 * device. Complement of tvp514x_probe().
1082 */
1083static int tvp514x_remove(struct i2c_client *client)
1084{
1085        struct v4l2_subdev *sd = i2c_get_clientdata(client);
1086        struct tvp514x_decoder *decoder = to_decoder(sd);
1087
1088        v4l2_device_unregister_subdev(sd);
1089        v4l2_ctrl_handler_free(&decoder->hdl);
1090        kfree(decoder);
1091        return 0;
1092}
1093/* TVP5146 Init/Power on Sequence */
1094static const struct tvp514x_reg tvp5146_init_reg_seq[] = {
1095        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS1, 0x02},
1096        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS2, 0x00},
1097        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS3, 0x80},
1098        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x01},
1099        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS1, 0x60},
1100        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS2, 0x00},
1101        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS3, 0xB0},
1102        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x01},
1103        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x00},
1104        {TOK_WRITE, REG_OPERATION_MODE, 0x01},
1105        {TOK_WRITE, REG_OPERATION_MODE, 0x00},
1106        {TOK_TERM, 0, 0},
1107};
1108
1109/* TVP5147 Init/Power on Sequence */
1110static const struct tvp514x_reg tvp5147_init_reg_seq[] =        {
1111        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS1, 0x02},
1112        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS2, 0x00},
1113        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS3, 0x80},
1114        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x01},
1115        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS1, 0x60},
1116        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS2, 0x00},
1117        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS3, 0xB0},
1118        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x01},
1119        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS1, 0x16},
1120        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS2, 0x00},
1121        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS3, 0xA0},
1122        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x16},
1123        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS1, 0x60},
1124        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS2, 0x00},
1125        {TOK_WRITE, REG_VBUS_ADDRESS_ACCESS3, 0xB0},
1126        {TOK_WRITE, REG_VBUS_DATA_ACCESS_NO_VBUS_ADDR_INCR, 0x00},
1127        {TOK_WRITE, REG_OPERATION_MODE, 0x01},
1128        {TOK_WRITE, REG_OPERATION_MODE, 0x00},
1129        {TOK_TERM, 0, 0},
1130};
1131
1132/* TVP5146M2/TVP5147M1 Init/Power on Sequence */
1133static const struct tvp514x_reg tvp514xm_init_reg_seq[] = {
1134        {TOK_WRITE, REG_OPERATION_MODE, 0x01},
1135        {TOK_WRITE, REG_OPERATION_MODE, 0x00},
1136        {TOK_TERM, 0, 0},
1137};
1138
1139/**
1140 * I2C Device Table -
1141 *
1142 * name - Name of the actual device/chip.
1143 * driver_data - Driver data
1144 */
1145static const struct i2c_device_id tvp514x_id[] = {
1146        {"tvp5146", (unsigned long)tvp5146_init_reg_seq},
1147        {"tvp5146m2", (unsigned long)tvp514xm_init_reg_seq},
1148        {"tvp5147", (unsigned long)tvp5147_init_reg_seq},
1149        {"tvp5147m1", (unsigned long)tvp514xm_init_reg_seq},
1150        {},
1151};
1152
1153MODULE_DEVICE_TABLE(i2c, tvp514x_id);
1154
1155static struct i2c_driver tvp514x_driver = {
1156        .driver = {
1157                .owner = THIS_MODULE,
1158                .name = TVP514X_MODULE_NAME,
1159        },
1160        .probe = tvp514x_probe,
1161        .remove = tvp514x_remove,
1162        .id_table = tvp514x_id,
1163};
1164
1165static int __init tvp514x_init(void)
1166{
1167        return i2c_add_driver(&tvp514x_driver);
1168}
1169
1170static void __exit tvp514x_exit(void)
1171{
1172        i2c_del_driver(&tvp514x_driver);
1173}
1174
1175module_init(tvp514x_init);
1176module_exit(tvp514x_exit);
1177