Beispiel #1
0
static int tvp5150_get_vbi(struct i2c_client *c,
            const struct i2c_vbi_ram_value *regs, int line)
{
    struct tvp5150 *decoder = i2c_get_clientdata(c);
    v4l2_std_id std=decoder->norm;
    u8 reg;
    int pos, type=0;

    if (std == V4L2_STD_ALL) {
        tvp5150_err("VBI can't be configured without knowing number of lines\n");
        return 0;
    } else if (std & V4L2_STD_625_50) {
        /* Don't follow NTSC Line number convension */
        line += 3;
    }

    if (line<6||line>27)
        return 0;

    reg=((line-6)<<1)+TVP5150_LINE_MODE_INI;

    pos=tvp5150_read(c, reg)&0x0f;
    if (pos<0x0f)
        type=regs[pos].type.vbi_type;

    pos=tvp5150_read(c, reg+1)&0x0f;
    if (pos<0x0f)
        type|=regs[pos].type.vbi_type;

    return type;
}
Beispiel #2
0
static inline void tvp5150_reset(struct i2c_client *c)
{
    u8 msb_id, lsb_id, msb_rom, lsb_rom;
    struct tvp5150 *decoder = i2c_get_clientdata(c);

    msb_id=tvp5150_read(c,TVP5150_MSB_DEV_ID);
    lsb_id=tvp5150_read(c,TVP5150_LSB_DEV_ID);
    msb_rom=tvp5150_read(c,TVP5150_ROM_MAJOR_VER);
    lsb_rom=tvp5150_read(c,TVP5150_ROM_MINOR_VER);

    if ((msb_rom==4)&&(lsb_rom==0)) { /* Is TVP5150AM1 */
        tvp5150_info("tvp%02x%02xam1 detected.\n",msb_id, lsb_id);

        /* ITU-T BT.656.4 timing */
        tvp5150_write(c,TVP5150_REV_SELECT,0);
    } else {
        if ((msb_rom==3)||(lsb_rom==0x21)) { /* Is TVP5150A */
            tvp5150_info("tvp%02x%02xa detected.\n",msb_id, lsb_id);
        } else {
            tvp5150_info("*** unknown tvp%02x%02x chip detected.\n",msb_id,lsb_id);
            tvp5150_info("*** Rom ver is %d.%d\n",msb_rom,lsb_rom);
        }
    }

    /* Initializes TVP5150 to its default values */
    tvp5150_write_inittab(c, tvp5150_init_default);

    /* Initializes VDP registers */
    tvp5150_vdp_init(c, vbi_ram_default);

    /* Selects decoder input */
    tvp5150_selmux(c);

    /* Initializes TVP5150 to stream enabled values */
    tvp5150_write_inittab(c, tvp5150_init_enable);

    /* Initialize image preferences */
    tvp5150_write(c, TVP5150_BRIGHT_CTL, decoder->bright);
    tvp5150_write(c, TVP5150_CONTRAST_CTL, decoder->contrast);
    tvp5150_write(c, TVP5150_SATURATION_CTL, decoder->contrast);
    tvp5150_write(c, TVP5150_HUE_CTL, decoder->hue);

    tvp5150_set_std(c, decoder->norm);
};
Beispiel #3
0
static int tvp5150_get_ctrl(struct i2c_client *c, struct v4l2_control *ctrl)
{
/*    struct tvp5150 *decoder = i2c_get_clientdata(c); */

    switch (ctrl->id) {
    case V4L2_CID_BRIGHTNESS:
        ctrl->value = tvp5150_read(c, TVP5150_BRIGHT_CTL);
        return 0;
    case V4L2_CID_CONTRAST:
        ctrl->value = tvp5150_read(c, TVP5150_CONTRAST_CTL);
        return 0;
    case V4L2_CID_SATURATION:
        ctrl->value = tvp5150_read(c, TVP5150_SATURATION_CTL);
        return 0;
    case V4L2_CID_HUE:
        ctrl->value = tvp5150_read(c, TVP5150_HUE_CTL);
        return 0;
    }
    return -EINVAL;
}
Beispiel #4
0
static void dump_reg_range(struct i2c_client *c, char *s, u8 init, const u8 end,int max_line)
{
    int i=0;

    while (init!=(u8)(end+1)) {
        if ((i%max_line) == 0) {
            if (i>0)
                printk("\n");
            printk("tvp5150: %s reg 0x%02x = ",s,init);
        }
        printk("%02x ",tvp5150_read(c, init));

        init++;
        i++;
    }
    printk("\n");
}
Beispiel #5
0
static inline void tvp5150_selmux(struct i2c_client *c)
{
    int opmode=0;
    struct tvp5150 *decoder = i2c_get_clientdata(c);
    int input = 0;
    unsigned char val;

    if ((decoder->route.output & TVP5150_BLACK_SCREEN) || !decoder->enable)
        input = 8;

    switch (decoder->route.input) {
    case TVP5150_COMPOSITE1:
        input |= 2;
        /* fall through */
    case TVP5150_COMPOSITE0:
        opmode=0x30;        /* TV Mode */
        break;
    case TVP5150_SVIDEO:
    default:
        input |= 1;
        opmode=0;        /* Auto Mode */
        break;
    }

    tvp5150_dbg( 1, "Selecting video route: route input=%i, output=%i "
            "=> tvp5150 input=%i, opmode=%i\n",
            decoder->route.input,decoder->route.output,
            input, opmode );

    tvp5150_write(c, TVP5150_OP_MODE_CTL, opmode);
    tvp5150_write(c, TVP5150_VD_IN_SRC_SEL_1, input);

    /* Svideo should enable YCrCb output and disable GPCL output
     * For Composite and TV, it should be the reverse
     */
    val = tvp5150_read(c, TVP5150_MISC_CTL);
    if (decoder->route.input == TVP5150_SVIDEO)
        val = (val & ~0x40) | 0x10;
    else
        val = (val & ~0x10) | 0x40;
    tvp5150_write(c, TVP5150_MISC_CTL, val);
};
Beispiel #6
0
/****************************************************************************
            I2C Command
 ****************************************************************************/
static int tvp5150_command(struct i2c_client *c,
               unsigned int cmd, void *arg)
{
    struct tvp5150 *decoder = i2c_get_clientdata(c);

    switch (cmd) {

    case 0:
    case VIDIOC_INT_RESET:
        tvp5150_reset(c);
        break;
    case VIDIOC_INT_G_VIDEO_ROUTING:
    {
        struct v4l2_routing *route = arg;

        *route = decoder->route;
        break;
    }
    case VIDIOC_INT_S_VIDEO_ROUTING:
    {
        struct v4l2_routing *route = arg;

        decoder->route = *route;
        tvp5150_selmux(c);
        break;
    }
    case VIDIOC_S_STD:
        if (decoder->norm == *(v4l2_std_id *)arg)
            break;
        return tvp5150_set_std(c, *(v4l2_std_id *)arg);
    case VIDIOC_G_STD:
        *(v4l2_std_id *)arg = decoder->norm;
        break;

    case VIDIOC_G_SLICED_VBI_CAP:
    {
        struct v4l2_sliced_vbi_cap *cap = arg;
        tvp5150_dbg(1, "VIDIOC_G_SLICED_VBI_CAP\n");

        tvp5150_vbi_get_cap(vbi_ram_default, cap);
        break;
    }
    case VIDIOC_S_FMT:
    {
        struct v4l2_format *fmt;
        struct v4l2_sliced_vbi_format *svbi;
        int i;

        fmt = arg;
        if (fmt->type != V4L2_BUF_TYPE_SLICED_VBI_CAPTURE)
            return -EINVAL;
        svbi = &fmt->fmt.sliced;
        if (svbi->service_set != 0) {
            for (i = 0; i <= 23; i++) {
                svbi->service_lines[1][i] = 0;

                svbi->service_lines[0][i]=tvp5150_set_vbi(c,
                     vbi_ram_default,
                     svbi->service_lines[0][i],0xf0,i,3);
            }
            /* Enables FIFO */
            tvp5150_write(c, TVP5150_FIFO_OUT_CTRL,1);
        } else {
            /* Disables FIFO*/
            tvp5150_write(c, TVP5150_FIFO_OUT_CTRL,0);

            /* Disable Full Field */
            tvp5150_write(c, TVP5150_FULL_FIELD_ENA, 0);

            /* Disable Line modes */
            for (i=TVP5150_LINE_MODE_INI; i<=TVP5150_LINE_MODE_END; i++)
                tvp5150_write(c, i, 0xff);
        }
        break;
    }
    case VIDIOC_G_FMT:
    {
        struct v4l2_format *fmt;
        struct v4l2_sliced_vbi_format *svbi;

        int i, mask=0;

        fmt = arg;
        if (fmt->type != V4L2_BUF_TYPE_SLICED_VBI_CAPTURE)
            return -EINVAL;
        svbi = &fmt->fmt.sliced;
        memset(svbi, 0, sizeof(*svbi));

        for (i = 0; i <= 23; i++) {
            svbi->service_lines[0][i]=tvp5150_get_vbi(c,
                vbi_ram_default,i);
            mask|=svbi->service_lines[0][i];
        }
        svbi->service_set=mask;
        break;
    }

#ifdef CONFIG_VIDEO_ADV_DEBUG
    case VIDIOC_DBG_G_REGISTER:
    case VIDIOC_DBG_S_REGISTER:
    {
        struct v4l2_register *reg = arg;

        if (!v4l2_chip_match_i2c_client(c, reg->match_type, reg->match_chip))
            return -EINVAL;
        if (!capable(CAP_SYS_ADMIN))
            return -EPERM;
        if (cmd == VIDIOC_DBG_G_REGISTER)
            reg->val = tvp5150_read(c, reg->reg & 0xff);
        else
            tvp5150_write(c, reg->reg & 0xff, reg->val & 0xff);
        break;
    }
#endif

    case VIDIOC_LOG_STATUS:
        dump_reg(c);
        break;

    case VIDIOC_G_TUNER:
        {
            struct v4l2_tuner *vt = arg;
            int status = tvp5150_read(c, 0x88);

            vt->signal = ((status & 0x04) && (status & 0x02)) ? 0xffff : 0x0;
            break;
        }
    case VIDIOC_QUERYCTRL:
        {
            struct v4l2_queryctrl *qc = arg;
            int i;

            tvp5150_dbg(1, "VIDIOC_QUERYCTRL called\n");

            for (i = 0; i < ARRAY_SIZE(tvp5150_qctrl); i++)
                if (qc->id && qc->id == tvp5150_qctrl[i].id) {
                    memcpy(qc, &(tvp5150_qctrl[i]),
                           sizeof(*qc));
                    return 0;
                }

            return -EINVAL;
        }
    case VIDIOC_G_CTRL:
        {
            struct v4l2_control *ctrl = arg;
            tvp5150_dbg(1, "VIDIOC_G_CTRL called\n");

            return tvp5150_get_ctrl(c, ctrl);
        }
    case VIDIOC_S_CTRL:
        {
            struct v4l2_control *ctrl = arg;
            u8 i, n;
            n = ARRAY_SIZE(tvp5150_qctrl);
            for (i = 0; i < n; i++)
                if (ctrl->id == tvp5150_qctrl[i].id) {
                    if (ctrl->value <
                        tvp5150_qctrl[i].minimum
                        || ctrl->value >
                        tvp5150_qctrl[i].maximum)
                        return -ERANGE;
                    tvp5150_dbg(1,
                        "VIDIOC_S_CTRL: id=%d, value=%d\n",
                        ctrl->id, ctrl->value);
                    return tvp5150_set_ctrl(c, ctrl);
                }
            return -EINVAL;
        }

    default:
        return -EINVAL;
    }

    return 0;
}
Beispiel #7
0
static void dump_reg(struct i2c_client *c)
{
    printk("tvp5150: Video input source selection #1 = 0x%02x\n",
                    tvp5150_read(c, TVP5150_VD_IN_SRC_SEL_1));
    printk("tvp5150: Analog channel controls = 0x%02x\n",
                    tvp5150_read(c, TVP5150_ANAL_CHL_CTL));
    printk("tvp5150: Operation mode controls = 0x%02x\n",
                    tvp5150_read(c, TVP5150_OP_MODE_CTL));
    printk("tvp5150: Miscellaneous controls = 0x%02x\n",
                    tvp5150_read(c, TVP5150_MISC_CTL));
    printk("tvp5150: Autoswitch mask= 0x%02x\n",
                    tvp5150_read(c, TVP5150_AUTOSW_MSK));
    printk("tvp5150: Color killer threshold control = 0x%02x\n",
                    tvp5150_read(c, TVP5150_COLOR_KIL_THSH_CTL));
    printk("tvp5150: Luminance processing controls #1 #2 and #3 = %02x %02x %02x\n",
                    tvp5150_read(c, TVP5150_LUMA_PROC_CTL_1),
                    tvp5150_read(c, TVP5150_LUMA_PROC_CTL_2),
                    tvp5150_read(c, TVP5150_LUMA_PROC_CTL_3));
    printk("tvp5150: Brightness control = 0x%02x\n",
                    tvp5150_read(c, TVP5150_BRIGHT_CTL));
    printk("tvp5150: Color saturation control = 0x%02x\n",
                    tvp5150_read(c, TVP5150_SATURATION_CTL));
    printk("tvp5150: Hue control = 0x%02x\n",
                    tvp5150_read(c, TVP5150_HUE_CTL));
    printk("tvp5150: Contrast control = 0x%02x\n",
                    tvp5150_read(c, TVP5150_CONTRAST_CTL));
    printk("tvp5150: Outputs and data rates select = 0x%02x\n",
                    tvp5150_read(c, TVP5150_DATA_RATE_SEL));
    printk("tvp5150: Configuration shared pins = 0x%02x\n",
                    tvp5150_read(c, TVP5150_CONF_SHARED_PIN));
    printk("tvp5150: Active video cropping start = 0x%02x%02x\n",
                    tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_MSB),
                    tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_LSB));
    printk("tvp5150: Active video cropping stop  = 0x%02x%02x\n",
                    tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_MSB),
                    tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_LSB));
    printk("tvp5150: Genlock/RTC = 0x%02x\n",
                    tvp5150_read(c, TVP5150_GENLOCK));
    printk("tvp5150: Horizontal sync start = 0x%02x\n",
                    tvp5150_read(c, TVP5150_HORIZ_SYNC_START));
    printk("tvp5150: Vertical blanking start = 0x%02x\n",
                    tvp5150_read(c, TVP5150_VERT_BLANKING_START));
    printk("tvp5150: Vertical blanking stop = 0x%02x\n",
                    tvp5150_read(c, TVP5150_VERT_BLANKING_STOP));
    printk("tvp5150: Chrominance processing control #1 and #2 = %02x %02x\n",
                    tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_1),
                    tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_2));
    printk("tvp5150: Interrupt reset register B = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_RESET_REG_B));
    printk("tvp5150: Interrupt enable register B = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_ENABLE_REG_B));
    printk("tvp5150: Interrupt configuration register B = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INTT_CONFIG_REG_B));
    printk("tvp5150: Video standard = 0x%02x\n",
                    tvp5150_read(c, TVP5150_VIDEO_STD));
    printk("tvp5150: Chroma gain factor: Cb=0x%02x Cr=0x%02x\n",
                    tvp5150_read(c, TVP5150_CB_GAIN_FACT),
                    tvp5150_read(c, TVP5150_CR_GAIN_FACTOR));
    printk("tvp5150: Macrovision on counter = 0x%02x\n",
                    tvp5150_read(c, TVP5150_MACROVISION_ON_CTR));
    printk("tvp5150: Macrovision off counter = 0x%02x\n",
                    tvp5150_read(c, TVP5150_MACROVISION_OFF_CTR));
    printk("tvp5150: ITU-R BT.656.%d timing(TVP5150AM1 only)\n",
                    (tvp5150_read(c, TVP5150_REV_SELECT)&1)?3:4);
    printk("tvp5150: Device ID = %02x%02x\n",
                    tvp5150_read(c, TVP5150_MSB_DEV_ID),
                    tvp5150_read(c, TVP5150_LSB_DEV_ID));
    printk("tvp5150: ROM version = (hex) %02x.%02x\n",
                    tvp5150_read(c, TVP5150_ROM_MAJOR_VER),
                    tvp5150_read(c, TVP5150_ROM_MINOR_VER));
    printk("tvp5150: Vertical line count = 0x%02x%02x\n",
                    tvp5150_read(c, TVP5150_VERT_LN_COUNT_MSB),
                    tvp5150_read(c, TVP5150_VERT_LN_COUNT_LSB));
    printk("tvp5150: Interrupt status register B = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_STATUS_REG_B));
    printk("tvp5150: Interrupt active register B = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_ACTIVE_REG_B));
    printk("tvp5150: Status regs #1 to #5 = %02x %02x %02x %02x %02x\n",
                    tvp5150_read(c, TVP5150_STATUS_REG_1),
                    tvp5150_read(c, TVP5150_STATUS_REG_2),
                    tvp5150_read(c, TVP5150_STATUS_REG_3),
                    tvp5150_read(c, TVP5150_STATUS_REG_4),
                    tvp5150_read(c, TVP5150_STATUS_REG_5));

    dump_reg_range(c,"Teletext filter 1",   TVP5150_TELETEXT_FIL1_INI,
                        TVP5150_TELETEXT_FIL1_END,8);
    dump_reg_range(c,"Teletext filter 2",   TVP5150_TELETEXT_FIL2_INI,
                        TVP5150_TELETEXT_FIL2_END,8);

    printk("tvp5150: Teletext filter enable = 0x%02x\n",
                    tvp5150_read(c, TVP5150_TELETEXT_FIL_ENA));
    printk("tvp5150: Interrupt status register A = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_STATUS_REG_A));
    printk("tvp5150: Interrupt enable register A = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_ENABLE_REG_A));
    printk("tvp5150: Interrupt configuration = 0x%02x\n",
                    tvp5150_read(c, TVP5150_INT_CONF));
    printk("tvp5150: VDP status register = 0x%02x\n",
                    tvp5150_read(c, TVP5150_VDP_STATUS_REG));
    printk("tvp5150: FIFO word count = 0x%02x\n",
                    tvp5150_read(c, TVP5150_FIFO_WORD_COUNT));
    printk("tvp5150: FIFO interrupt threshold = 0x%02x\n",
                    tvp5150_read(c, TVP5150_FIFO_INT_THRESHOLD));
    printk("tvp5150: FIFO reset = 0x%02x\n",
                    tvp5150_read(c, TVP5150_FIFO_RESET));
    printk("tvp5150: Line number interrupt = 0x%02x\n",
                    tvp5150_read(c, TVP5150_LINE_NUMBER_INT));
    printk("tvp5150: Pixel alignment register = 0x%02x%02x\n",
                    tvp5150_read(c, TVP5150_PIX_ALIGN_REG_HIGH),
                    tvp5150_read(c, TVP5150_PIX_ALIGN_REG_LOW));
    printk("tvp5150: FIFO output control = 0x%02x\n",
                    tvp5150_read(c, TVP5150_FIFO_OUT_CTRL));
    printk("tvp5150: Full field enable = 0x%02x\n",
                    tvp5150_read(c, TVP5150_FULL_FIELD_ENA));
    printk("tvp5150: Full field mode register = 0x%02x\n",
                    tvp5150_read(c, TVP5150_FULL_FIELD_MODE_REG));

    dump_reg_range(c,"CC   data",   TVP5150_CC_DATA_INI,
                    TVP5150_CC_DATA_END,8);

    dump_reg_range(c,"WSS  data",   TVP5150_WSS_DATA_INI,
                    TVP5150_WSS_DATA_END,8);

    dump_reg_range(c,"VPS  data",   TVP5150_VPS_DATA_INI,
                    TVP5150_VPS_DATA_END,8);

    dump_reg_range(c,"VITC data",   TVP5150_VITC_DATA_INI,
                    TVP5150_VITC_DATA_END,10);

    dump_reg_range(c,"Line mode",   TVP5150_LINE_MODE_INI,
                    TVP5150_LINE_MODE_END,8);
}
static void dump_reg(struct i2c_client *c)
{
	printk("tvp5150: Video input source selection #1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VD_IN_SRC_SEL_1));
	printk("tvp5150: Analog channel controls = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ANAL_CHL_CTL));
	printk("tvp5150: Operation mode controls = 0x%02x\n",
	       tvp5150_read(c, TVP5150_OP_MODE_CTL));
	printk("tvp5150: Miscellaneous controls = 0x%02x\n",
	       tvp5150_read(c, TVP5150_MISC_CTL));
	printk("tvp5150: Autoswitch mask: TVP5150A / TVP5150AM = 0x%02x\n",
	       tvp5150_read(c, TVP5150_AUTOSW_MSK));
	printk("tvp5150: Color killer threshold control = 0x%02x\n",
	       tvp5150_read(c, TVP5150_COLOR_KIL_THSH_CTL));
	printk("tvp5150: Luminance processing control #1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LUMA_PROC_CTL_1));
	printk("tvp5150: Luminance processing control #2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LUMA_PROC_CTL_2));
	printk("tvp5150: Brightness control = 0x%02x\n",
	       tvp5150_read(c, TVP5150_BRIGHT_CTL));
	printk("tvp5150: Color saturation control = 0x%02x\n",
	       tvp5150_read(c, TVP5150_SATURATION_CTL));
	printk("tvp5150: Hue control = 0x%02x\n",
	       tvp5150_read(c, TVP5150_HUE_CTL));
	printk("tvp5150: Contrast control = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CONTRAST_CTL));
	printk("tvp5150: Outputs and data rates select = 0x%02x\n",
	       tvp5150_read(c, TVP5150_DATA_RATE_SEL));
	printk("tvp5150: Luminance processing control #3 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LUMA_PROC_CTL_3));
	printk("tvp5150: Configuration shared pins = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CONF_SHARED_PIN));
	printk("tvp5150: Active video cropping start MSB = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_MSB));
	printk("tvp5150: Active video cropping start LSB = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_LSB));
	printk("tvp5150: Active video cropping stop MSB = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_MSB));
	printk("tvp5150: Active video cropping stop LSB = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_LSB));
	printk("tvp5150: Genlock/RTC = 0x%02x\n",
	       tvp5150_read(c, TVP5150_GENLOCK));
	printk("tvp5150: Horizontal sync start = 0x%02x\n",
	       tvp5150_read(c, TVP5150_HORIZ_SYNC_START));
	printk("tvp5150: Vertical blanking start = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VERT_BLANKING_START));
	printk("tvp5150: Vertical blanking stop = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VERT_BLANKING_STOP));
	printk("tvp5150: Chrominance processing control #1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_1));
	printk("tvp5150: Chrominance processing control #2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_2));
	printk("tvp5150: Interrupt reset register B = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_RESET_REG_B));
	printk("tvp5150: Interrupt enable register B = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_ENABLE_REG_B));
	printk("tvp5150: Interrupt configuration register B = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INTT_CONFIG_REG_B));
	printk("tvp5150: Video standard = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VIDEO_STD));
	printk("tvp5150: Cb gain factor = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CB_GAIN_FACT));
	printk("tvp5150: Cr gain factor = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CR_GAIN_FACTOR));
	printk("tvp5150: Macrovision on counter = 0x%02x\n",
	       tvp5150_read(c, TVP5150_MACROVISION_ON_CTR));
	printk("tvp5150: Macrovision off counter = 0x%02x\n",
	       tvp5150_read(c, TVP5150_MACROVISION_OFF_CTR));
	printk("tvp5150: revision select (TVP5150AM1 only) = 0x%02x\n",
	       tvp5150_read(c, TVP5150_REV_SELECT));
	printk("tvp5150: MSB of device ID = 0x%02x\n",
	       tvp5150_read(c, TVP5150_MSB_DEV_ID));
	printk("tvp5150: LSB of device ID = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LSB_DEV_ID));
	printk("tvp5150: ROM major version = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ROM_MAJOR_VER));
	printk("tvp5150: ROM minor version = 0x%02x\n",
	       tvp5150_read(c, TVP5150_ROM_MINOR_VER));
	printk("tvp5150: Vertical line count MSB = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VERT_LN_COUNT_MSB));
	printk("tvp5150: Vertical line count LSB = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VERT_LN_COUNT_LSB));
	printk("tvp5150: Interrupt status register B = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_STATUS_REG_B));
	printk("tvp5150: Interrupt active register B = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_ACTIVE_REG_B));
	printk("tvp5150: Status register #1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_STATUS_REG_1));
	printk("tvp5150: Status register #2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_STATUS_REG_2));
	printk("tvp5150: Status register #3 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_STATUS_REG_3));
	printk("tvp5150: Status register #4 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_STATUS_REG_4));
	printk("tvp5150: Status register #5 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_STATUS_REG_5));
	printk("tvp5150: Closed caption data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CC_DATA_REG1));
	printk("tvp5150: Closed caption data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CC_DATA_REG2));
	printk("tvp5150: Closed caption data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CC_DATA_REG3));
	printk("tvp5150: Closed caption data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CC_DATA_REG4));
	printk("tvp5150: WSS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_WSS_DATA_REG1));
	printk("tvp5150: WSS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_WSS_DATA_REG2));
	printk("tvp5150: WSS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_WSS_DATA_REG3));
	printk("tvp5150: WSS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_WSS_DATA_REG4));
	printk("tvp5150: WSS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_WSS_DATA_REG5));
	printk("tvp5150: WSS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_WSS_DATA_REG6));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG1));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG2));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG3));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG4));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG5));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG6));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG7));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG8));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG9));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG10));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG11));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG12));
	printk("tvp5150: VPS data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VPS_DATA_REG13));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG1));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG2));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG3));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG4));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG5));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG6));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG7));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG8));
	printk("tvp5150: VITC data registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VITC_DATA_REG9));
	printk("tvp5150: VBI FIFO read data = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VBI_FIFO_READ_DATA));
	printk("tvp5150: Teletext filter 1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_1_1));
	printk("tvp5150: Teletext filter 1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_1_2));
	printk("tvp5150: Teletext filter 1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_1_3));
	printk("tvp5150: Teletext filter 1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_1_4));
	printk("tvp5150: Teletext filter 1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_1_5));
	printk("tvp5150: Teletext filter 2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_2_1));
	printk("tvp5150: Teletext filter 2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_2_2));
	printk("tvp5150: Teletext filter 2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_2_3));
	printk("tvp5150: Teletext filter 2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_2_4));
	printk("tvp5150: Teletext filter 2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_2_5));
	printk("tvp5150: Teletext filter enable = 0x%02x\n",
	       tvp5150_read(c, TVP5150_TELETEXT_FIL_ENA));
	printk("tvp5150: Interrupt status register A = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_STATUS_REG_A));
	printk("tvp5150: Interrupt enable register A = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_ENABLE_REG_A));
	printk("tvp5150: Interrupt configuration = 0x%02x\n",
	       tvp5150_read(c, TVP5150_INT_CONF));
	printk("tvp5150: VDP configuration RAM data = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VDP_CONF_RAM_DATA));
	printk("tvp5150: Configuration RAM address low byte = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CONF_RAM_ADDR_LOW));
	printk("tvp5150: Configuration RAM address high byte = 0x%02x\n",
	       tvp5150_read(c, TVP5150_CONF_RAM_ADDR_HIGH));
	printk("tvp5150: VDP status register = 0x%02x\n",
	       tvp5150_read(c, TVP5150_VDP_STATUS_REG));
	printk("tvp5150: FIFO word count = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FIFO_WORD_COUNT));
	printk("tvp5150: FIFO interrupt threshold = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FIFO_INT_THRESHOLD));
	printk("tvp5150: FIFO reset = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FIFO_RESET));
	printk("tvp5150: Line number interrupt = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_NUMBER_INT));
	printk("tvp5150: Pixel alignment register low byte = 0x%02x\n",
	       tvp5150_read(c, TVP5150_PIX_ALIGN_REG_LOW));
	printk("tvp5150: Pixel alignment register high byte = 0x%02x\n",
	       tvp5150_read(c, TVP5150_PIX_ALIGN_REG_HIGH));
	printk("tvp5150: FIFO output control = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FIFO_OUT_CTRL));
	printk("tvp5150: Full field enable 1 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FULL_FIELD_ENA_1));
	printk("tvp5150: Full field enable 2 = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FULL_FIELD_ENA_2));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_1));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_2));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_3));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_4));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_5));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_6));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_7));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_8));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_9));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_10));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_11));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_12));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_13));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_14));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_15));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_16));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_17));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_18));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_19));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_20));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_21));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_22));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_23));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_24));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_25));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_27));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_28));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_29));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_30));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_31));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_32));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_33));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_34));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_35));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_36));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_37));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_38));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_39));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_40));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_41));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_42));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_43));
	printk("tvp5150: Line mode registers = 0x%02x\n",
	       tvp5150_read(c, TVP5150_LINE_MODE_REG_44));
	printk("tvp5150: Full field mode register = 0x%02x\n",
	       tvp5150_read(c, TVP5150_FULL_FIELD_MODE_REG));
}