Commit 39f0d8af authored by 邱宗炽's avatar 邱宗炽

code format clean

Signed-off-by: default avatar邱宗炽 <tqiu@neuros.com.cn>
parent f4f06deb
...@@ -156,8 +156,7 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id) ...@@ -156,8 +156,7 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id)
/* based on whether the two fields are stored interleavely */ /* based on whether the two fields are stored interleavely */
/* or separately in memory, reconfigure the CCDC memory address */ /* or separately in memory, reconfigure the CCDC memory address */
if (vpfe->field == V4L2_FIELD_SEQ_TB) { if (vpfe->field == V4L2_FIELD_SEQ_TB) {
u32 addr = u32 addr = vpfe->curFrm->boff + vpfe->field_offset;
vpfe->curFrm->boff + vpfe->field_offset;
ccdc_setfbaddr((unsigned long)addr); ccdc_setfbaddr((unsigned long)addr);
} }
} else if (fid == 1) { } else if (fid == 1) {
...@@ -168,17 +167,15 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id) ...@@ -168,17 +167,15 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id)
if (!list_empty(&vpfe->dma_queue) if (!list_empty(&vpfe->dma_queue)
&& vpfe->curFrm == vpfe->nextFrm) { && vpfe->curFrm == vpfe->nextFrm) {
vpfe->nextFrm = list_entry(vpfe->dma_queue.next, vpfe->nextFrm = list_entry(vpfe->dma_queue.next,
struct videobuf_buffer, queue); struct videobuf_buffer, queue);
list_del(&vpfe->nextFrm->queue); list_del(&vpfe->nextFrm->queue);
vpfe->nextFrm->state = STATE_ACTIVE; vpfe->nextFrm->state = STATE_ACTIVE;
ccdc_setfbaddr( ccdc_setfbaddr((unsigned long)vpfe->nextFrm->boff);
(unsigned long)vpfe->nextFrm->boff);
} }
if (vpfe->mode_changed) { if (vpfe->mode_changed) {
ccdc_setwin(&vpfe->ccdc_params); ccdc_setwin(&vpfe->ccdc_params);
/* update the field offset */ /* update the field offset */
vpfe->field_offset = vpfe->field_offset = (vpfe->vwin.height - 2) * vpfe->vwin.width;
(vpfe->vwin.height - 2) * vpfe->vwin.width;
vpfe->mode_changed = FALSE; vpfe->mode_changed = FALSE;
} }
} }
...@@ -348,8 +345,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -348,8 +345,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
switch (cmd) { switch (cmd) {
case VIDIOC_QUERYCAP: case VIDIOC_QUERYCAP:
{ {
struct v4l2_capability *cap = struct v4l2_capability *cap = (struct v4l2_capability *)arg;
(struct v4l2_capability *)arg;
memset(cap, 0, sizeof(*cap)); memset(cap, 0, sizeof(*cap));
*cap = vpfe_drvcap; *cap = vpfe_drvcap;
break; break;
...@@ -363,13 +359,11 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -363,13 +359,11 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
if (index == 0) { if (index == 0) {
/* only yuv4:2:2 format is supported at this point */ /* only yuv4:2:2 format is supported at this point */
fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
strcpy(fmt->description, strcpy(fmt->description, "YCbCr4:2:2 Interleaved UYUV");
"YCbCr4:2:2 Interleaved UYUV");
fmt->pixelformat = V4L2_PIX_FMT_UYVY; fmt->pixelformat = V4L2_PIX_FMT_UYVY;
} else if (index == 1) { } else if (index == 1) {
fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
strcpy(fmt->description, strcpy(fmt->description, "YCbCr4:2:2 Interleaved YUYV");
"YCbCr4:2:2 Interleaved YUYV");
fmt->pixelformat = V4L2_PIX_FMT_YUYV; fmt->pixelformat = V4L2_PIX_FMT_YUYV;
} else { } else {
ret = -EINVAL; ret = -EINVAL;
...@@ -389,8 +383,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -389,8 +383,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
pixfmt->field = vpfe->field; pixfmt->field = vpfe->field;
pixfmt->pixelformat = vpfe->pixelfmt; pixfmt->pixelformat = vpfe->pixelfmt;
pixfmt->bytesperline = pixfmt->width * 2; pixfmt->bytesperline = pixfmt->width * 2;
pixfmt->sizeimage = pixfmt->sizeimage = pixfmt->bytesperline * pixfmt->height;
pixfmt->bytesperline * pixfmt->height;
pixfmt->colorspace = V4L2_COLORSPACE_SMPTE170M; pixfmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
up(&vpfe->lock); up(&vpfe->lock);
} }
...@@ -412,10 +405,8 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -412,10 +405,8 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
up(&vpfe->lock); up(&vpfe->lock);
break; break;
} }
if ((pixfmt->width + vpfe->vwin.left <= if ((pixfmt->width + vpfe->vwin.left <= vpfe->bounds.width) &
vpfe->bounds.width) (pixfmt->height + vpfe->vwin.top <= vpfe->bounds.height)) {
& (pixfmt->height + vpfe->vwin.top <=
vpfe->bounds.height)) {
/* this is the case when no scaling is supported */ /* this is the case when no scaling is supported */
/* crop window is directed modified */ /* crop window is directed modified */
vpfe->vwin.height = pixfmt->height; vpfe->vwin.height = pixfmt->height;
...@@ -439,8 +430,8 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -439,8 +430,8 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
up(&vpfe->lock); up(&vpfe->lock);
break; break;
} }
if (pixfmt->field == V4L2_FIELD_NONE if (pixfmt->field == V4L2_FIELD_NONE ||
|| pixfmt->field == V4L2_FIELD_INTERLACED) { pixfmt->field == V4L2_FIELD_INTERLACED) {
params->buf_type = CCDC_BUFTYPE_FLD_INTERLEAVED; params->buf_type = CCDC_BUFTYPE_FLD_INTERLEAVED;
vpfe->field = pixfmt->field; vpfe->field = pixfmt->field;
} else if (pixfmt->field == V4L2_FIELD_SEQ_TB) { } else if (pixfmt->field == V4L2_FIELD_SEQ_TB) {
...@@ -462,11 +453,10 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -462,11 +453,10 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
ret = -EINVAL; ret = -EINVAL;
} else { } else {
struct v4l2_pix_format *pixfmt = &fmt->fmt.pix; struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
if (pixfmt->width > vpfe->bounds.width if (pixfmt->width > vpfe->bounds.width ||
|| pixfmt->height > vpfe->bounds.height pixfmt->height > vpfe->bounds.height ||
|| (pixfmt->pixelformat != V4L2_PIX_FMT_UYVY (pixfmt->pixelformat != V4L2_PIX_FMT_UYVY &&
&& pixfmt->pixelformat != pixfmt->pixelformat != V4L2_PIX_FMT_YUYV)) {
V4L2_PIX_FMT_YUYV)) {
ret = -EINVAL; ret = -EINVAL;
} }
} }
...@@ -531,9 +521,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -531,9 +521,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
vpfe->capture_params.mode = id; vpfe->capture_params.mode = id;
vpfe->capture_params.squarepixel = sqp; vpfe->capture_params.squarepixel = sqp;
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VPFE_CMD_CONFIG_CAPTURE, &vpfe->capture_params);
VPFE_CMD_CONFIG_CAPTURE,
&vpfe->capture_params);
up(&vpfe->lock); up(&vpfe->lock);
break; break;
...@@ -624,8 +612,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -624,8 +612,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
} }
case VIDIOC_CROPCAP: case VIDIOC_CROPCAP:
{ {
struct v4l2_cropcap *cropcap = struct v4l2_cropcap *cropcap = (struct v4l2_cropcap *)arg;
(struct v4l2_cropcap *)arg;
cropcap->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; cropcap->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
cropcap->bounds = cropcap->defrect = vpfe->vwin; cropcap->bounds = cropcap->defrect = vpfe->vwin;
...@@ -635,16 +622,13 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -635,16 +622,13 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
} }
case VIDIOC_G_PARM: case VIDIOC_G_PARM:
{ {
struct v4l2_streamparm *parm = struct v4l2_streamparm *parm = (struct v4l2_streamparm *)arg;
(struct v4l2_streamparm *)arg;
if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) { if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) {
/* only capture is supported */ /* only capture is supported */
ret = -EINVAL; ret = -EINVAL;
} else { } else {
struct v4l2_captureparm *capparm = struct v4l2_captureparm *capparm = &parm->parm.capture;
&parm->parm.capture; memset(capparm, 0, sizeof(struct v4l2_captureparm));
memset(capparm, 0,
sizeof(struct v4l2_captureparm));
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
if (vpfe->std & V4L2_STD_625_50) { if (vpfe->std & V4L2_STD_625_50) {
capparm->timeperframe.numerator = 1; capparm->timeperframe.numerator = 1;
...@@ -661,24 +645,21 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -661,24 +645,21 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
case VIDIOC_G_CTRL: case VIDIOC_G_CTRL:
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VIDIOC_G_CTRL, arg);
VIDIOC_G_CTRL, arg);
up(&vpfe->lock); up(&vpfe->lock);
break; break;
case VIDIOC_S_CTRL: case VIDIOC_S_CTRL:
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VIDIOC_S_CTRL, arg);
VIDIOC_S_CTRL, arg);
up(&vpfe->lock); up(&vpfe->lock);
break; break;
case VIDIOC_QUERYCTRL: case VIDIOC_QUERYCTRL:
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VIDIOC_QUERYCTRL, arg);
VIDIOC_QUERYCTRL, arg);
up(&vpfe->lock); up(&vpfe->lock);
break; break;
...@@ -704,11 +685,9 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -704,11 +685,9 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
crop->c.width = ((crop->c.width + 15 )/16 ) * 16; crop->c.width = ((crop->c.width + 15 )/16 ) * 16;
/* make sure parameters are valid */ /* make sure parameters are valid */
if (crop->type == V4L2_BUF_TYPE_VIDEO_CAPTURE if (crop->type == V4L2_BUF_TYPE_VIDEO_CAPTURE &&
&& (crop->c.left + crop->c.width (crop->c.left + crop->c.width <= vpfe->bounds.left + vpfe->bounds.width) &&
<= vpfe->bounds.left + vpfe->bounds.width) (crop->c.top + crop->c.height <= vpfe->bounds.top + vpfe->bounds.height)) {
&& (crop->c.top + crop->c.height
<= vpfe->bounds.top + vpfe->bounds.height)) {
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
vpfe->vwin = crop->c; vpfe->vwin = crop->c;
...@@ -724,8 +703,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -724,8 +703,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
v4l2_std_id *id = (v4l2_std_id *) arg; v4l2_std_id *id = (v4l2_std_id *) arg;
down_interruptible(&vpfe->lock); down_interruptible(&vpfe->lock);
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VIDIOC_QUERYSTD, id);
VIDIOC_QUERYSTD, id);
up(&vpfe->lock); up(&vpfe->lock);
break; break;
...@@ -798,17 +776,14 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -798,17 +776,14 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
} }
debug_print(KERN_INFO "cur frame %x.\n", debug_print(KERN_INFO "cur frame %x.\n",
vpfe->dma_queue.next); vpfe->dma_queue.next);
vpfe->nextFrm = vpfe->curFrm = vpfe->nextFrm = vpfe->curFrm = list_entry(vpfe->dma_queue.next,
list_entry(vpfe->dma_queue.next, struct videobuf_buffer, queue);
struct videobuf_buffer, queue);
/* remove the buffer from the queue */ /* remove the buffer from the queue */
list_del(&vpfe->curFrm->queue); list_del(&vpfe->curFrm->queue);
vpfe->curFrm->state = STATE_ACTIVE; vpfe->curFrm->state = STATE_ACTIVE;
/* sense the current video input standard */ /* sense the current video input standard */
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VPFE_CMD_CONFIG_CAPTURE, &vpfe->capture_params);
VPFE_CMD_CONFIG_CAPTURE,
&vpfe->capture_params);
if (ret < 0) if (ret < 0)
break; break;
/* configure the ccdc and resizer as needed */ /* configure the ccdc and resizer as needed */
...@@ -820,8 +795,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -820,8 +795,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
vpfe->field_id = 0; vpfe->field_id = 0;
vpfe->started = TRUE; vpfe->started = TRUE;
vpfe->mode_changed = FALSE; vpfe->mode_changed = FALSE;
vpfe->field_offset = vpfe->field_offset = (vpfe->vwin.height - 2) * vpfe->vwin.width;
(vpfe->vwin.height - 2) * vpfe->vwin.width;
ccdc_enable(TRUE); ccdc_enable(TRUE);
up(&vpfe->lock); up(&vpfe->lock);
debug_print(KERN_INFO "started video streaming.\n"); debug_print(KERN_INFO "started video streaming.\n");
...@@ -860,8 +834,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -860,8 +834,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
vpfe->vwin = params->win; vpfe->vwin = params->win;
if (params->buf_type == CCDC_BUFTYPE_FLD_INTERLEAVED) { if (params->buf_type == CCDC_BUFTYPE_FLD_INTERLEAVED) {
vpfe->field = V4L2_FIELD_INTERLACED; vpfe->field = V4L2_FIELD_INTERLACED;
} else if (params->buf_type == } else if (params->buf_type == CCDC_BUFTYPE_FLD_SEPARATED) {
CCDC_BUFTYPE_FLD_SEPARATED) {
vpfe->field = V4L2_FIELD_SEQ_TB; vpfe->field = V4L2_FIELD_SEQ_TB;
} }
if (params->pix_order == CCDC_PIXORDER_YCBYCR) { if (params->pix_order == CCDC_PIXORDER_YCBYCR) {
...@@ -877,8 +850,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -877,8 +850,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
{ {
/* the settings here must be consistant with that of the CCDC's, /* the settings here must be consistant with that of the CCDC's,
driver does not check the consistancy */ driver does not check the consistancy */
struct vpfe_capture_params *params = struct vpfe_capture_params *params = (struct vpfe_capture_param *) arg;
(struct vpfe_capture_param *) arg;
v4l2_std_id std = 0; v4l2_std_id std = 0;
if(vpfe->started){ if(vpfe->started){
/* only allowed if streaming is not started */ /* only allowed if streaming is not started */
...@@ -906,9 +878,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file, ...@@ -906,9 +878,7 @@ static int vpfe_doioctl(struct inode *inode, struct file *file,
vpfe->pixelaspect = sp_aspect; vpfe->pixelaspect = sp_aspect;
} }
vpfe->std = std; vpfe->std = std;
ret = DEVICE_CMD(ACTIVE_DEVICE(), ret = DEVICE_CMD(ACTIVE_DEVICE(), VPFE_CMD_CONFIG_CAPTURE, params);
VPFE_CMD_CONFIG_CAPTURE,
params);
vpfe->capture_params = *params; vpfe->capture_params = *params;
up(&vpfe->lock); up(&vpfe->lock);
break; break;
...@@ -1190,8 +1160,7 @@ static int vpfe_init(void) ...@@ -1190,8 +1160,7 @@ static int vpfe_init(void)
void *mem; void *mem;
/* allocate memory at initialization time to guarentee availability */ /* allocate memory at initialization time to guarentee availability */
for (i = 0; i < VPFE_DEFNUM_FBUFS; i++) { for (i = 0; i < VPFE_DEFNUM_FBUFS; i++) {
mem = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, mem = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, VPFE_MAX_FBUF_ORDER);
VPFE_MAX_FBUF_ORDER);
if (mem) { if (mem) {
unsigned long adr = (unsigned long)mem; unsigned long adr = (unsigned long)mem;
u32 size = PAGE_SIZE << VPFE_MAX_FBUF_ORDER; u32 size = PAGE_SIZE << VPFE_MAX_FBUF_ORDER;
...@@ -1203,15 +1172,13 @@ static int vpfe_init(void) ...@@ -1203,15 +1172,13 @@ static int vpfe_init(void)
size -= PAGE_SIZE; size -= PAGE_SIZE;
} }
vpfe_device.fbuffers[i] = (u8 *) mem; vpfe_device.fbuffers[i] = (u8 *) mem;
debug_print(KERN_INFO "memory address %d\t%x\n", i, debug_print(KERN_INFO "memory address %d\t%x\n", i, mem);
mem);
} else { } else {
while (--i >= 0) { while (--i >= 0) {
free_pages((unsigned long)vpfe_device.fbuffers[i], free_pages((unsigned long)vpfe_device.fbuffers[i],
VPFE_MAX_FBUF_ORDER); VPFE_MAX_FBUF_ORDER);
} }
debug_print(KERN_INFO debug_print(KERN_INFO "frame buffer memory allocation failed.\n");
"frame buffer memory allocation failed.\n");
return -ENOMEM; return -ENOMEM;
} }
} }
......
...@@ -50,41 +50,41 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)"); ...@@ -50,41 +50,41 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
/* supported controls */ /* supported controls */
static struct v4l2_queryctrl tvp5150_qctrl[] = { static struct v4l2_queryctrl tvp5150_qctrl[] = {
{ {
.id = V4L2_CID_BRIGHTNESS, .id = V4L2_CID_BRIGHTNESS,
.type = V4L2_CTRL_TYPE_INTEGER, .type = V4L2_CTRL_TYPE_INTEGER,
.name = "Brightness", .name = "Brightness",
.minimum = 0, .minimum = 0,
.maximum = 255, .maximum = 255,
.step = 1, .step = 1,
.default_value = 128, .default_value = 128,
.flags = 0, .flags = 0,
}, { }, {
.id = V4L2_CID_CONTRAST, .id = V4L2_CID_CONTRAST,
.type = V4L2_CTRL_TYPE_INTEGER, .type = V4L2_CTRL_TYPE_INTEGER,
.name = "Contrast", .name = "Contrast",
.minimum = 0, .minimum = 0,
.maximum = 255, .maximum = 255,
.step = 0x1, .step = 0x1,
.default_value = 128, .default_value = 128,
.flags = 0, .flags = 0,
}, { }, {
.id = V4L2_CID_SATURATION, .id = V4L2_CID_SATURATION,
.type = V4L2_CTRL_TYPE_INTEGER, .type = V4L2_CTRL_TYPE_INTEGER,
.name = "Saturation", .name = "Saturation",
.minimum = 0, .minimum = 0,
.maximum = 255, .maximum = 255,
.step = 0x1, .step = 0x1,
.default_value = 128, .default_value = 128,
.flags = 0, .flags = 0,
}, { }, {
.id = V4L2_CID_HUE, .id = V4L2_CID_HUE,
.type = V4L2_CTRL_TYPE_INTEGER, .type = V4L2_CTRL_TYPE_INTEGER,
.name = "Hue", .name = "Hue",
.minimum = -128, .minimum = -128,
.maximum = 127, .maximum = 127,
.step = 0x1, .step = 0x1,
.default_value = 0, .default_value = 0,
.flags = 0, .flags = 0,
} }
}; };
...@@ -136,15 +136,15 @@ static inline void tvp5150_write(struct i2c_client *c, unsigned char addr, ...@@ -136,15 +136,15 @@ static inline void tvp5150_write(struct i2c_client *c, unsigned char addr,
static void dump_reg_range(struct i2c_client *c, char *s, u8 init, const u8 end,int max_line) static void dump_reg_range(struct i2c_client *c, char *s, u8 init, const u8 end,int max_line)
{ {
int i=0; int i = 0;
while (init!=(u8)(end+1)) { while (init != (u8)(end + 1)) {
if ((i%max_line) == 0) { if ((i % max_line) == 0) {
if (i>0) if (i > 0)
printk("\n"); printk("\n");
printk("tvp5150: %s reg 0x%02x = ",s,init); printk("tvp5150: %s reg 0x%02x = ", s, init);
} }
printk("%02x ",tvp5150_read(c, init)); printk("%02x ", tvp5150_read(c, init));
init++; init++;
i++; i++;
...@@ -155,86 +155,86 @@ static void dump_reg_range(struct i2c_client *c, char *s, u8 init, const u8 end, ...@@ -155,86 +155,86 @@ static void dump_reg_range(struct i2c_client *c, char *s, u8 init, const u8 end,
static void dump_reg(struct i2c_client *c) static void dump_reg(struct i2c_client *c)
{ {
printk("tvp5150: Video input source selection #1 = 0x%02x\n", printk("tvp5150: Video input source selection #1 = 0x%02x\n",
tvp5150_read(c, TVP5150_VD_IN_SRC_SEL_1)); tvp5150_read(c, TVP5150_VD_IN_SRC_SEL_1));
printk("tvp5150: Analog channel controls = 0x%02x\n", printk("tvp5150: Analog channel controls = 0x%02x\n",
tvp5150_read(c, TVP5150_ANAL_CHL_CTL)); tvp5150_read(c, TVP5150_ANAL_CHL_CTL));
printk("tvp5150: Operation mode controls = 0x%02x\n", printk("tvp5150: Operation mode controls = 0x%02x\n",
tvp5150_read(c, TVP5150_OP_MODE_CTL)); tvp5150_read(c, TVP5150_OP_MODE_CTL));
printk("tvp5150: Miscellaneous controls = 0x%02x\n", printk("tvp5150: Miscellaneous controls = 0x%02x\n",
tvp5150_read(c, TVP5150_MISC_CTL)); tvp5150_read(c, TVP5150_MISC_CTL));
printk("tvp5150: Autoswitch mask= 0x%02x\n", printk("tvp5150: Autoswitch mask= 0x%02x\n",
tvp5150_read(c, TVP5150_AUTOSW_MSK)); tvp5150_read(c, TVP5150_AUTOSW_MSK));
printk("tvp5150: Color killer threshold control = 0x%02x\n", printk("tvp5150: Color killer threshold control = 0x%02x\n",
tvp5150_read(c, TVP5150_COLOR_KIL_THSH_CTL)); tvp5150_read(c, TVP5150_COLOR_KIL_THSH_CTL));
printk("tvp5150: Luminance processing controls #1 #2 and #3 = %02x %02x %02x\n", 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_1),
tvp5150_read(c, TVP5150_LUMA_PROC_CTL_2), tvp5150_read(c, TVP5150_LUMA_PROC_CTL_2),
tvp5150_read(c, TVP5150_LUMA_PROC_CTL_3)); tvp5150_read(c, TVP5150_LUMA_PROC_CTL_3));
printk("tvp5150: Brightness control = 0x%02x\n", printk("tvp5150: Brightness control = 0x%02x\n",
tvp5150_read(c, TVP5150_BRIGHT_CTL)); tvp5150_read(c, TVP5150_BRIGHT_CTL));
printk("tvp5150: Color saturation control = 0x%02x\n", printk("tvp5150: Color saturation control = 0x%02x\n",
tvp5150_read(c, TVP5150_SATURATION_CTL)); tvp5150_read(c, TVP5150_SATURATION_CTL));
printk("tvp5150: Hue control = 0x%02x\n", printk("tvp5150: Hue control = 0x%02x\n",
tvp5150_read(c, TVP5150_HUE_CTL)); tvp5150_read(c, TVP5150_HUE_CTL));
printk("tvp5150: Contrast control = 0x%02x\n", printk("tvp5150: Contrast control = 0x%02x\n",
tvp5150_read(c, TVP5150_CONTRAST_CTL)); tvp5150_read(c, TVP5150_CONTRAST_CTL));
printk("tvp5150: Outputs and data rates select = 0x%02x\n", printk("tvp5150: Outputs and data rates select = 0x%02x\n",
tvp5150_read(c, TVP5150_DATA_RATE_SEL)); tvp5150_read(c, TVP5150_DATA_RATE_SEL));
printk("tvp5150: Configuration shared pins = 0x%02x\n", printk("tvp5150: Configuration shared pins = 0x%02x\n",
tvp5150_read(c, TVP5150_CONF_SHARED_PIN)); tvp5150_read(c, TVP5150_CONF_SHARED_PIN));
printk("tvp5150: Active video cropping start = 0x%02x%02x\n", 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_MSB),
tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_LSB)); tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_LSB));
printk("tvp5150: Active video cropping stop = 0x%02x%02x\n", 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_MSB),
tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_LSB)); tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_LSB));
printk("tvp5150: Genlock/RTC = 0x%02x\n", printk("tvp5150: Genlock/RTC = 0x%02x\n",
tvp5150_read(c, TVP5150_GENLOCK)); tvp5150_read(c, TVP5150_GENLOCK));
printk("tvp5150: Horizontal sync start = 0x%02x\n", printk("tvp5150: Horizontal sync start = 0x%02x\n",
tvp5150_read(c, TVP5150_HORIZ_SYNC_START)); tvp5150_read(c, TVP5150_HORIZ_SYNC_START));
printk("tvp5150: Vertical blanking start = 0x%02x\n", printk("tvp5150: Vertical blanking start = 0x%02x\n",
tvp5150_read(c, TVP5150_VERT_BLANKING_START)); tvp5150_read(c, TVP5150_VERT_BLANKING_START));
printk("tvp5150: Vertical blanking stop = 0x%02x\n", printk("tvp5150: Vertical blanking stop = 0x%02x\n",
tvp5150_read(c, TVP5150_VERT_BLANKING_STOP)); tvp5150_read(c, TVP5150_VERT_BLANKING_STOP));
printk("tvp5150: Chrominance processing control #1 and #2 = %02x %02x\n", 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_1),
tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_2)); tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_2));
printk("tvp5150: Interrupt reset register B = 0x%02x\n", printk("tvp5150: Interrupt reset register B = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_RESET_REG_B)); tvp5150_read(c, TVP5150_INT_RESET_REG_B));
printk("tvp5150: Interrupt enable register B = 0x%02x\n", printk("tvp5150: Interrupt enable register B = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_ENABLE_REG_B)); tvp5150_read(c, TVP5150_INT_ENABLE_REG_B));
printk("tvp5150: Interrupt configuration register B = 0x%02x\n", printk("tvp5150: Interrupt configuration register B = 0x%02x\n",
tvp5150_read(c, TVP5150_INTT_CONFIG_REG_B)); tvp5150_read(c, TVP5150_INTT_CONFIG_REG_B));
printk("tvp5150: Video standard = 0x%02x\n", printk("tvp5150: Video standard = 0x%02x\n",
tvp5150_read(c, TVP5150_VIDEO_STD)); tvp5150_read(c, TVP5150_VIDEO_STD));
printk("tvp5150: Chroma gain factor: Cb=0x%02x Cr=0x%02x\n", printk("tvp5150: Chroma gain factor: Cb=0x%02x Cr=0x%02x\n",
tvp5150_read(c, TVP5150_CB_GAIN_FACT), tvp5150_read(c, TVP5150_CB_GAIN_FACT),
tvp5150_read(c, TVP5150_CR_GAIN_FACTOR)); tvp5150_read(c, TVP5150_CR_GAIN_FACTOR));
printk("tvp5150: Macrovision on counter = 0x%02x\n", printk("tvp5150: Macrovision on counter = 0x%02x\n",
tvp5150_read(c, TVP5150_MACROVISION_ON_CTR)); tvp5150_read(c, TVP5150_MACROVISION_ON_CTR));
printk("tvp5150: Macrovision off counter = 0x%02x\n", printk("tvp5150: Macrovision off counter = 0x%02x\n",
tvp5150_read(c, TVP5150_MACROVISION_OFF_CTR)); tvp5150_read(c, TVP5150_MACROVISION_OFF_CTR));
printk("tvp5150: ITU-R BT.656.%d timing(TVP5150AM1 only)\n", printk("tvp5150: ITU-R BT.656.%d timing(TVP5150AM1 only)\n",
(tvp5150_read(c, TVP5150_REV_SELECT)&1)?3:4); (tvp5150_read(c, TVP5150_REV_SELECT)&1)?3:4);
printk("tvp5150: Device ID = %02x%02x\n", printk("tvp5150: Device ID = %02x%02x\n",
tvp5150_read(c, TVP5150_MSB_DEV_ID), tvp5150_read(c, TVP5150_MSB_DEV_ID),
tvp5150_read(c, TVP5150_LSB_DEV_ID)); tvp5150_read(c, TVP5150_LSB_DEV_ID));
printk("tvp5150: ROM version = (hex) %02x.%02x\n", printk("tvp5150: ROM version = (hex) %02x.%02x\n",
tvp5150_read(c, TVP5150_ROM_MAJOR_VER), tvp5150_read(c, TVP5150_ROM_MAJOR_VER),
tvp5150_read(c, TVP5150_ROM_MINOR_VER)); tvp5150_read(c, TVP5150_ROM_MINOR_VER));
printk("tvp5150: Vertical line count = 0x%02x%02x\n", printk("tvp5150: Vertical line count = 0x%02x%02x\n",
tvp5150_read(c, TVP5150_VERT_LN_COUNT_MSB), tvp5150_read(c, TVP5150_VERT_LN_COUNT_MSB),
tvp5150_read(c, TVP5150_VERT_LN_COUNT_LSB)); tvp5150_read(c, TVP5150_VERT_LN_COUNT_LSB));
printk("tvp5150: Interrupt status register B = 0x%02x\n", printk("tvp5150: Interrupt status register B = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_STATUS_REG_B)); tvp5150_read(c, TVP5150_INT_STATUS_REG_B));
printk("tvp5150: Interrupt active register B = 0x%02x\n", printk("tvp5150: Interrupt active register B = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_ACTIVE_REG_B)); tvp5150_read(c, TVP5150_INT_ACTIVE_REG_B));
printk("tvp5150: Status regs #1 to #5 = %02x %02x %02x %02x %02x\n", 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_1),
tvp5150_read(c, TVP5150_STATUS_REG_2), tvp5150_read(c, TVP5150_STATUS_REG_2),
tvp5150_read(c, TVP5150_STATUS_REG_3), tvp5150_read(c, TVP5150_STATUS_REG_3),
tvp5150_read(c, TVP5150_STATUS_REG_4), tvp5150_read(c, TVP5150_STATUS_REG_4),
tvp5150_read(c, TVP5150_STATUS_REG_5)); tvp5150_read(c, TVP5150_STATUS_REG_5));
dump_reg_range(c,"Teletext filter 1", TVP5150_TELETEXT_FIL1_INI, dump_reg_range(c,"Teletext filter 1", TVP5150_TELETEXT_FIL1_INI,
TVP5150_TELETEXT_FIL1_END,8); TVP5150_TELETEXT_FIL1_END,8);
...@@ -242,32 +242,32 @@ static void dump_reg(struct i2c_client *c) ...@@ -242,32 +242,32 @@ static void dump_reg(struct i2c_client *c)
TVP5150_TELETEXT_FIL2_END,8); TVP5150_TELETEXT_FIL2_END,8);
printk("tvp5150: Teletext filter enable = 0x%02x\n", printk("tvp5150: Teletext filter enable = 0x%02x\n",
tvp5150_read(c, TVP5150_TELETEXT_FIL_ENA)); tvp5150_read(c, TVP5150_TELETEXT_FIL_ENA));
printk("tvp5150: Interrupt status register A = 0x%02x\n", printk("tvp5150: Interrupt status register A = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_STATUS_REG_A)); tvp5150_read(c, TVP5150_INT_STATUS_REG_A));
printk("tvp5150: Interrupt enable register A = 0x%02x\n", printk("tvp5150: Interrupt enable register A = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_ENABLE_REG_A)); tvp5150_read(c, TVP5150_INT_ENABLE_REG_A));
printk("tvp5150: Interrupt configuration = 0x%02x\n", printk("tvp5150: Interrupt configuration = 0x%02x\n",
tvp5150_read(c, TVP5150_INT_CONF)); tvp5150_read(c, TVP5150_INT_CONF));
printk("tvp5150: VDP status register = 0x%02x\n", printk("tvp5150: VDP status register = 0x%02x\n",
tvp5150_read(c, TVP5150_VDP_STATUS_REG)); tvp5150_read(c, TVP5150_VDP_STATUS_REG));
printk("tvp5150: FIFO word count = 0x%02x\n", printk("tvp5150: FIFO word count = 0x%02x\n",
tvp5150_read(c, TVP5150_FIFO_WORD_COUNT)); tvp5150_read(c, TVP5150_FIFO_WORD_COUNT));
printk("tvp5150: FIFO interrupt threshold = 0x%02x\n", printk("tvp5150: FIFO interrupt threshold = 0x%02x\n",
tvp5150_read(c, TVP5150_FIFO_INT_THRESHOLD)); tvp5150_read(c, TVP5150_FIFO_INT_THRESHOLD));
printk("tvp5150: FIFO reset = 0x%02x\n", printk("tvp5150: FIFO reset = 0x%02x\n",
tvp5150_read(c, TVP5150_FIFO_RESET)); tvp5150_read(c, TVP5150_FIFO_RESET));
printk("tvp5150: Line number interrupt = 0x%02x\n", printk("tvp5150: Line number interrupt = 0x%02x\n",
tvp5150_read(c, TVP5150_LINE_NUMBER_INT)); tvp5150_read(c, TVP5150_LINE_NUMBER_INT));
printk("tvp5150: Pixel alignment register = 0x%02x%02x\n", printk("tvp5150: Pixel alignment register = 0x%02x%02x\n",
tvp5150_read(c, TVP5150_PIX_ALIGN_REG_HIGH), tvp5150_read(c, TVP5150_PIX_ALIGN_REG_HIGH),
tvp5150_read(c, TVP5150_PIX_ALIGN_REG_LOW)); tvp5150_read(c, TVP5150_PIX_ALIGN_REG_LOW));
printk("tvp5150: FIFO output control = 0x%02x\n", printk("tvp5150: FIFO output control = 0x%02x\n",
tvp5150_read(c, TVP5150_FIFO_OUT_CTRL)); tvp5150_read(c, TVP5150_FIFO_OUT_CTRL));
printk("tvp5150: Full field enable = 0x%02x\n", printk("tvp5150: Full field enable = 0x%02x\n",
tvp5150_read(c, TVP5150_FULL_FIELD_ENA)); tvp5150_read(c, TVP5150_FULL_FIELD_ENA));
printk("tvp5150: Full field mode register = 0x%02x\n", printk("tvp5150: Full field mode register = 0x%02x\n",
tvp5150_read(c, TVP5150_FULL_FIELD_MODE_REG)); tvp5150_read(c, TVP5150_FULL_FIELD_MODE_REG));
dump_reg_range(c,"CC data", TVP5150_CC_DATA_INI, dump_reg_range(c,"CC data", TVP5150_CC_DATA_INI,
TVP5150_CC_DATA_END,8); TVP5150_CC_DATA_END,8);
...@@ -291,7 +291,7 @@ static void dump_reg(struct i2c_client *c) ...@@ -291,7 +291,7 @@ static void dump_reg(struct i2c_client *c)
static inline void tvp5150_selmux(struct i2c_client *c) static inline void tvp5150_selmux(struct i2c_client *c)
{ {
int opmode=0; int opmode = 0;
struct tvp5150 *decoder = i2c_get_clientdata(c); struct tvp5150 *decoder = i2c_get_clientdata(c);
int input = 0; int input = 0;
...@@ -311,7 +311,7 @@ static inline void tvp5150_selmux(struct i2c_client *c) ...@@ -311,7 +311,7 @@ static inline void tvp5150_selmux(struct i2c_client *c)
case TVP5150_SVIDEO: case TVP5150_SVIDEO:
default: default:
input |= 1; input |= 1;
opmode=0; /* Auto Mode */ opmode = 0; /* Auto Mode */
break; break;
} }
...@@ -331,161 +331,63 @@ struct i2c_reg_value { ...@@ -331,161 +331,63 @@ struct i2c_reg_value {
/* Default values as sugested at TVP5150AM1 datasheet */ /* Default values as sugested at TVP5150AM1 datasheet */
static const struct i2c_reg_value tvp5150_init_default[] = { static const struct i2c_reg_value tvp5150_init_default[] = {
{ /* 0x00 */ { TVP5150_VD_IN_SRC_SEL_1, 0x00 }, /* 0x00 */
TVP5150_VD_IN_SRC_SEL_1,0x00 { TVP5150_ANAL_CHL_CTL, 0x15 }, /* 0x01 */
}, { TVP5150_OP_MODE_CTL, 0x00 }, /* 0x02 */
{ /* 0x01 */ { TVP5150_MISC_CTL, 0x01 }, /* 0x03 */
TVP5150_ANAL_CHL_CTL,0x15 { TVP5150_COLOR_KIL_THSH_CTL, 0x10 }, /* 0x06 */
}, { TVP5150_LUMA_PROC_CTL_1, 0x60 }, /* 0x07 */
{ /* 0x02 */ { TVP5150_LUMA_PROC_CTL_2, 0x00 }, /* 0x08 */
TVP5150_OP_MODE_CTL,0x00 { TVP5150_BRIGHT_CTL, 0x80 }, /* 0x09 */
}, { TVP5150_SATURATION_CTL, 0x80 }, /* 0x0a */
{ /* 0x03 */ { TVP5150_HUE_CTL, 0x00 }, /* 0x0b */
TVP5150_MISC_CTL,0x01 { TVP5150_CONTRAST_CTL, 0x80 }, /* 0x0c */
}, { TVP5150_DATA_RATE_SEL, 0x47 }, /* 0x0d */
{ /* 0x06 */ { TVP5150_LUMA_PROC_CTL_3, 0x00 }, /* 0x0e */
TVP5150_COLOR_KIL_THSH_CTL,0x10 { TVP5150_CONF_SHARED_PIN, 0x08 }, /* 0x0f */
}, { TVP5150_ACT_VD_CROP_ST_MSB, 0x00 }, /* 0x11 */
{ /* 0x07 */ { TVP5150_ACT_VD_CROP_ST_LSB, 0x00 }, /* 0x12 */
TVP5150_LUMA_PROC_CTL_1,0x60 { TVP5150_ACT_VD_CROP_STP_MSB, 0x00 }, /* 0x13 */
}, { TVP5150_ACT_VD_CROP_STP_LSB, 0x00 }, /* 0x14 */
{ /* 0x08 */ { TVP5150_GENLOCK, 0x01 }, /* 0x15 */
TVP5150_LUMA_PROC_CTL_2,0x00 { TVP5150_HORIZ_SYNC_START, 0x80 }, /* 0x16 */
}, { TVP5150_VERT_BLANKING_START, 0x00 }, /* 0x18 */
{ /* 0x09 */ { TVP5150_VERT_BLANKING_STOP, 0x00 }, /* 0x19 */
TVP5150_BRIGHT_CTL,0x80 { TVP5150_CHROMA_PROC_CTL_1, 0x0c }, /* 0x1a */
}, { TVP5150_CHROMA_PROC_CTL_2, 0x14 }, /* 0x1b */
{ /* 0x0a */ { TVP5150_INT_RESET_REG_B, 0x00 }, /* 0x1c */
TVP5150_SATURATION_CTL,0x80 { TVP5150_INT_ENABLE_REG_B, 0x00 }, /* 0x1d */
}, { TVP5150_INTT_CONFIG_REG_B, 0x00 }, /* 0x1e */
{ /* 0x0b */ { TVP5150_VIDEO_STD, 0x00 }, /* 0x28 */
TVP5150_HUE_CTL,0x00 { TVP5150_MACROVISION_ON_CTR, 0x0f }, /* 0x2e */
}, { TVP5150_MACROVISION_OFF_CTR, 0x01 }, /* 0x2f */
{ /* 0x0c */ { TVP5150_TELETEXT_FIL_ENA, 0x00 }, /* 0xbb */
TVP5150_CONTRAST_CTL,0x80 { TVP5150_INT_STATUS_REG_A, 0x00 }, /* 0xc0 */
}, { TVP5150_INT_ENABLE_REG_A, 0x00 }, /* 0xc1 */
{ /* 0x0d */ { TVP5150_INT_CONF, 0x04 }, /* 0xc2 */
TVP5150_DATA_RATE_SEL,0x47 { TVP5150_FIFO_INT_THRESHOLD, 0x80 }, /* 0xc8 */
}, { TVP5150_FIFO_RESET, 0x00 }, /* 0xc9 */
{ /* 0x0e */ { TVP5150_LINE_NUMBER_INT, 0x00 }, /* 0xca */
TVP5150_LUMA_PROC_CTL_3,0x00 { TVP5150_PIX_ALIGN_REG_LOW, 0x4e }, /* 0xcb */
}, { TVP5150_PIX_ALIGN_REG_HIGH, 0x00 }, /* 0xcc */
{ /* 0x0f */ { TVP5150_FIFO_OUT_CTRL, 0x01 }, /* 0xcd */
TVP5150_CONF_SHARED_PIN,0x08 { TVP5150_FULL_FIELD_ENA, 0x00 }, /* 0xcf */
}, { TVP5150_LINE_MODE_INI, 0x00 }, /* 0xd0 */
{ /* 0x11 */ { TVP5150_FULL_FIELD_MODE_REG, 0x7f }, /* 0xfc */
TVP5150_ACT_VD_CROP_ST_MSB,0x00 { 0xff, 0xff } /* end of data */
},
{ /* 0x12 */
TVP5150_ACT_VD_CROP_ST_LSB,0x00
},
{ /* 0x13 */
TVP5150_ACT_VD_CROP_STP_MSB,0x00
},
{ /* 0x14 */
TVP5150_ACT_VD_CROP_STP_LSB,0x00
},
{ /* 0x15 */
TVP5150_GENLOCK,0x01
},
{ /* 0x16 */
TVP5150_HORIZ_SYNC_START,0x80
},
{ /* 0x18 */
TVP5150_VERT_BLANKING_START,0x00
},
{ /* 0x19 */
TVP5150_VERT_BLANKING_STOP,0x00
},
{ /* 0x1a */
TVP5150_CHROMA_PROC_CTL_1,0x0c
},
{ /* 0x1b */
TVP5150_CHROMA_PROC_CTL_2,0x14
},
{ /* 0x1c */
TVP5150_INT_RESET_REG_B,0x00
},
{ /* 0x1d */
TVP5150_INT_ENABLE_REG_B,0x00
},
{ /* 0x1e */
TVP5150_INTT_CONFIG_REG_B,0x00
},
{ /* 0x28 */
TVP5150_VIDEO_STD,0x00
},
{ /* 0x2e */
TVP5150_MACROVISION_ON_CTR,0x0f
},
{ /* 0x2f */
TVP5150_MACROVISION_OFF_CTR,0x01
},
{ /* 0xbb */
TVP5150_TELETEXT_FIL_ENA,0x00
},
{ /* 0xc0 */
TVP5150_INT_STATUS_REG_A,0x00
},
{ /* 0xc1 */
TVP5150_INT_ENABLE_REG_A,0x00
},
{ /* 0xc2 */
TVP5150_INT_CONF,0x04
},
{ /* 0xc8 */
TVP5150_FIFO_INT_THRESHOLD,0x80
},
{ /* 0xc9 */
TVP5150_FIFO_RESET,0x00
},
{ /* 0xca */
TVP5150_LINE_NUMBER_INT,0x00
},
{ /* 0xcb */
TVP5150_PIX_ALIGN_REG_LOW,0x4e
},
{ /* 0xcc */
TVP5150_PIX_ALIGN_REG_HIGH,0x00
},
{ /* 0xcd */
TVP5150_FIFO_OUT_CTRL,0x01
},
{ /* 0xcf */
TVP5150_FULL_FIELD_ENA,0x00
},
{ /* 0xd0 */
TVP5150_LINE_MODE_INI,0x00
},
{ /* 0xfc */
TVP5150_FULL_FIELD_MODE_REG,0x7f
},
{ /* end of data */
0xff,0xff
}
}; };
/* Default values as sugested at TVP5150AM1 datasheet */ /* Default values as sugested at TVP5150AM1 datasheet */
static const struct i2c_reg_value tvp5150_init_enable[] = { static const struct i2c_reg_value tvp5150_init_enable[] = {
{ { TVP5150_CONF_SHARED_PIN, 2 },
TVP5150_CONF_SHARED_PIN, 2 { TVP5150_ANAL_CHL_CTL, 0x15 }, /* Automatic offset and AGC enabled */
},{ /* Automatic offset and AGC enabled */ { TVP5150_MISC_CTL, 0x6f }, /* Activate YCrCb output 0x9 or 0xd ? */
TVP5150_ANAL_CHL_CTL, 0x15 { TVP5150_AUTOSW_MSK, 0x0 }, /* Activates video std autodetection for all standards */
},{ /* Activate YCrCb output 0x9 or 0xd ? */ { TVP5150_DATA_RATE_SEL, 0x47 }, /* Default format: 0x47. For 4:2:2: 0x40 */
TVP5150_MISC_CTL, 0x6f { TVP5150_CHROMA_PROC_CTL_1, 0x0c },
},{ /* Activates video std autodetection for all standards */ { TVP5150_CHROMA_PROC_CTL_2, 0x54 },
TVP5150_AUTOSW_MSK, 0x0 { 0x27, 0x20 }, /* Non documented, but initialized on WinTV USB2 */
},{ /* Default format: 0x47. For 4:2:2: 0x40 */ { 0xff, 0xff }
TVP5150_DATA_RATE_SEL, 0x47
},{
TVP5150_CHROMA_PROC_CTL_1, 0x0c
},{
TVP5150_CHROMA_PROC_CTL_2, 0x54
},{ /* Non documented, but initialized on WinTV USB2 */
0x27, 0x20
},{
0xff,0xff
}
}; };
struct tvp5150_vbi_type { struct tvp5150_vbi_type {
...@@ -590,7 +492,7 @@ static struct i2c_vbi_ram_value vbi_ram_default[] = ...@@ -590,7 +492,7 @@ static struct i2c_vbi_ram_value vbi_ram_default[] =
}; };
static int tvp5150_write_inittab(struct i2c_client *c, static int tvp5150_write_inittab(struct i2c_client *c,
const struct i2c_reg_value *regs) const struct i2c_reg_value *regs)
{ {
while (regs->reg != 0xff) { while (regs->reg != 0xff) {
tvp5150_write(c, regs->reg, regs->value); tvp5150_write(c, regs->reg, regs->value);
...@@ -600,7 +502,7 @@ static int tvp5150_write_inittab(struct i2c_client *c, ...@@ -600,7 +502,7 @@ static int tvp5150_write_inittab(struct i2c_client *c,
} }
static int tvp5150_vdp_init(struct i2c_client *c, static int tvp5150_vdp_init(struct i2c_client *c,
const struct i2c_vbi_ram_value *regs) const struct i2c_vbi_ram_value *regs)
{ {
unsigned int i; unsigned int i;
...@@ -608,16 +510,16 @@ static int tvp5150_vdp_init(struct i2c_client *c, ...@@ -608,16 +510,16 @@ static int tvp5150_vdp_init(struct i2c_client *c,
tvp5150_write(c, TVP5150_FULL_FIELD_ENA, 0); tvp5150_write(c, TVP5150_FULL_FIELD_ENA, 0);
/* Before programming, Line mode should be at 0xff */ /* Before programming, Line mode should be at 0xff */
for (i=TVP5150_LINE_MODE_INI; i<=TVP5150_LINE_MODE_END; i++) for (i = TVP5150_LINE_MODE_INI; i <= TVP5150_LINE_MODE_END; i++)
tvp5150_write(c, i, 0xff); tvp5150_write(c, i, 0xff);
/* Load Ram Table */ /* Load Ram Table */
while (regs->reg != (u16)-1 ) { while (regs->reg != (u16)-1 ) {
tvp5150_write(c, TVP5150_CONF_RAM_ADDR_HIGH,regs->reg>>8); tvp5150_write(c, TVP5150_CONF_RAM_ADDR_HIGH, regs->reg>>8);
tvp5150_write(c, TVP5150_CONF_RAM_ADDR_LOW,regs->reg); tvp5150_write(c, TVP5150_CONF_RAM_ADDR_LOW, regs->reg);
for (i=0;i<16;i++) for (i = 0; i < 16; i++)
tvp5150_write(c, TVP5150_VDP_CONF_RAM_DATA,regs->values[i]); tvp5150_write(c, TVP5150_VDP_CONF_RAM_DATA, regs->values[i]);
regs++; regs++;
} }
...@@ -633,7 +535,7 @@ static void tvp5150_vbi_get_cap(const struct i2c_vbi_ram_value *regs, ...@@ -633,7 +535,7 @@ static void tvp5150_vbi_get_cap(const struct i2c_vbi_ram_value *regs,
memset(cap, 0, sizeof *cap); memset(cap, 0, sizeof *cap);
while (regs->reg != (u16)-1 ) { while (regs->reg != (u16)-1 ) {
for (line=regs->type.ini_line;line<=regs->type.end_line;line++) { for (line = regs->type.ini_line; line <= regs->type.end_line; line++) {
cap->service_lines[0][line] |= regs->type.vbi_type; cap->service_lines[0][line] |= regs->type.vbi_type;
} }
cap->service_set |= regs->type.vbi_type; cap->service_set |= regs->type.vbi_type;
...@@ -656,14 +558,14 @@ static void tvp5150_vbi_get_cap(const struct i2c_vbi_ram_value *regs, ...@@ -656,14 +558,14 @@ static void tvp5150_vbi_get_cap(const struct i2c_vbi_ram_value *regs,
* MSB = field2 * MSB = field2
*/ */
static int tvp5150_set_vbi(struct i2c_client *c, static int tvp5150_set_vbi(struct i2c_client *c,
const struct i2c_vbi_ram_value *regs, const struct i2c_vbi_ram_value *regs,
unsigned int type,u8 flags, int line, unsigned int type,u8 flags, int line,
const int fields) const int fields)
{ {
struct tvp5150 *decoder = i2c_get_clientdata(c); struct tvp5150 *decoder = i2c_get_clientdata(c);
v4l2_std_id std=decoder->norm; v4l2_std_id std = decoder->norm;
u8 reg; u8 reg;
int pos=0; int pos = 0;
if (std == V4L2_STD_ALL) { if (std == V4L2_STD_ALL) {
tvp5150_err("VBI can't be configured without knowing number of lines\n"); tvp5150_err("VBI can't be configured without knowing number of lines\n");
...@@ -673,14 +575,14 @@ static int tvp5150_set_vbi(struct i2c_client *c, ...@@ -673,14 +575,14 @@ static int tvp5150_set_vbi(struct i2c_client *c,
line += 3; line += 3;
} }
if (line<6||line>27) if (line < 6 || line > 27)
return 0; return 0;
while (regs->reg != (u16)-1 ) { while (regs->reg != (u16)-1 ) {
if ((type & regs->type.vbi_type) && if ((type & regs->type.vbi_type) &&
(line>=regs->type.ini_line) && (line >= regs->type.ini_line) &&
(line<=regs->type.end_line)) { (line <= regs->type.end_line)) {
type=regs->type.vbi_type; type = regs->type.vbi_type;
break; break;
} }
...@@ -690,27 +592,27 @@ static int tvp5150_set_vbi(struct i2c_client *c, ...@@ -690,27 +592,27 @@ static int tvp5150_set_vbi(struct i2c_client *c,
if (regs->reg == (u16)-1) if (regs->reg == (u16)-1)
return 0; return 0;
type=pos | (flags & 0xf0); type = pos | (flags & 0xf0);
reg=((line-6)<<1)+TVP5150_LINE_MODE_INI; reg=((line - 6) << 1) + TVP5150_LINE_MODE_INI;
if (fields&1) { if (fields & 1) {
tvp5150_write(c, reg, type); tvp5150_write(c, reg, type);
} }
if (fields&2) { if (fields & 2) {
tvp5150_write(c, reg+1, type); tvp5150_write(c, reg + 1, type);
} }
return type; return type;
} }
static int tvp5150_get_vbi(struct i2c_client *c, static int tvp5150_get_vbi(struct i2c_client *c,
const struct i2c_vbi_ram_value *regs, int line) const struct i2c_vbi_ram_value *regs, int line)
{ {
struct tvp5150 *decoder = i2c_get_clientdata(c); struct tvp5150 *decoder = i2c_get_clientdata(c);
v4l2_std_id std=decoder->norm; v4l2_std_id std = decoder->norm;
u8 reg; u8 reg;
int pos, type=0; int pos, type = 0;
if (std == V4L2_STD_ALL) { if (std == V4L2_STD_ALL) {
tvp5150_err("VBI can't be configured without knowing number of lines\n"); tvp5150_err("VBI can't be configured without knowing number of lines\n");
...@@ -720,50 +622,50 @@ static int tvp5150_get_vbi(struct i2c_client *c, ...@@ -720,50 +622,50 @@ static int tvp5150_get_vbi(struct i2c_client *c,
line += 3; line += 3;
} }
if (line<6||line>27) if (line < 6 || line > 27)
return 0; return 0;
reg=((line-6)<<1)+TVP5150_LINE_MODE_INI; reg=((line - 6) << 1) + TVP5150_LINE_MODE_INI;
pos=tvp5150_read(c, reg)&0x0f; pos = tvp5150_read(c, reg) & 0x0f;
if (pos<0x0f) if (pos < 0x0f)
type=regs[pos].type.vbi_type; type = regs[pos].type.vbi_type;
pos=tvp5150_read(c, reg+1)&0x0f; pos = tvp5150_read(c, reg + 1) & 0x0f;
if (pos<0x0f) if (pos < 0x0f)
type|=regs[pos].type.vbi_type; type |= regs[pos].type.vbi_type;
return type; return type;
} }
static int tvp5150_set_std(struct i2c_client *c, v4l2_std_id std) static int tvp5150_set_std(struct i2c_client *c, v4l2_std_id std)
{ {
struct tvp5150 *decoder = i2c_get_clientdata(c); struct tvp5150 *decoder = i2c_get_clientdata(c);
int fmt=0; int fmt = 0;
decoder->norm=std; decoder->norm=std;
/* First tests should be against specific std */ /* First tests should be against specific std */
if (std == V4L2_STD_ALL) { if (std == V4L2_STD_ALL) {
fmt=0; /* Autodetect mode */ fmt = 0; /* Autodetect mode */
} else if (std & V4L2_STD_NTSC_443) { } else if (std & V4L2_STD_NTSC_443) {
fmt=0xa; fmt = 0xa;
} else if (std & V4L2_STD_PAL_M) { } else if (std & V4L2_STD_PAL_M) {
fmt=0x6; fmt = 0x6;
} else if (std & (V4L2_STD_PAL_N| V4L2_STD_PAL_Nc)) { } else if (std & (V4L2_STD_PAL_N | V4L2_STD_PAL_Nc)) {
fmt=0x8; fmt = 0x8;
} else { } else {
/* Then, test against generic ones */ /* Then, test against generic ones */
if (std & V4L2_STD_NTSC) { if (std & V4L2_STD_NTSC) {
fmt=0x2; fmt = 0x2;
} else if (std & V4L2_STD_PAL) { } else if (std & V4L2_STD_PAL) {
fmt=0x4; fmt = 0x4;
} else if (std & V4L2_STD_SECAM) { } else if (std & V4L2_STD_SECAM) {
fmt=0xc; fmt = 0xc;
} }
} }
tvp5150_dbg(1,"Set video std register to %d.\n",fmt); tvp5150_dbg(1, "Set video std register to %d.\n", fmt);
tvp5150_write(c, TVP5150_VIDEO_STD, fmt); tvp5150_write(c, TVP5150_VIDEO_STD, fmt);
return 0; return 0;
...@@ -774,22 +676,22 @@ static inline void tvp5150_reset(struct i2c_client *c) ...@@ -774,22 +676,22 @@ static inline void tvp5150_reset(struct i2c_client *c)
u8 msb_id, lsb_id, msb_rom, lsb_rom; u8 msb_id, lsb_id, msb_rom, lsb_rom;
struct tvp5150 *decoder = i2c_get_clientdata(c); struct tvp5150 *decoder = i2c_get_clientdata(c);
msb_id=tvp5150_read(c,TVP5150_MSB_DEV_ID); msb_id = tvp5150_read(c, TVP5150_MSB_DEV_ID);
lsb_id=tvp5150_read(c,TVP5150_LSB_DEV_ID); lsb_id = tvp5150_read(c, TVP5150_LSB_DEV_ID);
msb_rom=tvp5150_read(c,TVP5150_ROM_MAJOR_VER); msb_rom = tvp5150_read(c, TVP5150_ROM_MAJOR_VER);
lsb_rom=tvp5150_read(c,TVP5150_ROM_MINOR_VER); lsb_rom = tvp5150_read(c, TVP5150_ROM_MINOR_VER);
if ((msb_rom==4)&&(lsb_rom==0)) { /* Is TVP5150AM1 */ if ((msb_rom == 4) && (lsb_rom == 0)) { /* Is TVP5150AM1 */
tvp5150_info("tvp%02x%02xam1 detected.\n",msb_id, lsb_id); tvp5150_info("tvp%02x%02xam1 detected.\n", msb_id, lsb_id);
/* ITU-T BT.656.4 timing */ /* ITU-T BT.656.4 timing */
tvp5150_write(c,TVP5150_REV_SELECT,0); tvp5150_write(c, TVP5150_REV_SELECT, 0);
} else { } else {
if ((msb_rom==3)||(lsb_rom==0x21)) { /* Is TVP5150A */ if ((msb_rom == 3) || (lsb_rom == 0x21)) { /* Is TVP5150A */
tvp5150_info("tvp%02x%02xa detected.\n",msb_id, lsb_id); tvp5150_info("tvp%02x%02xa detected.\n", msb_id, lsb_id);
} else { } else {
tvp5150_info("*** unknown tvp%02x%02x chip detected.\n",msb_id,lsb_id); 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); tvp5150_info("*** Rom ver is %d.%d\n", msb_rom, lsb_rom);
} }
} }
...@@ -818,7 +720,8 @@ static int tvp5150_get_ctrl(struct i2c_client *c, struct v4l2_control *ctrl) ...@@ -818,7 +720,8 @@ static int tvp5150_get_ctrl(struct i2c_client *c, struct v4l2_control *ctrl)
{ {
/* struct tvp5150 *decoder = i2c_get_clientdata(c); */ /* struct tvp5150 *decoder = i2c_get_clientdata(c); */
switch (ctrl->id) { switch (ctrl->id)
{
case V4L2_CID_BRIGHTNESS: case V4L2_CID_BRIGHTNESS:
ctrl->value = tvp5150_read(c, TVP5150_BRIGHT_CTL); ctrl->value = tvp5150_read(c, TVP5150_BRIGHT_CTL);
return 0; return 0;
...@@ -839,7 +742,8 @@ static int tvp5150_get_std(struct i2c_client *c, v4l2_std_id *id) ...@@ -839,7 +742,8 @@ static int tvp5150_get_std(struct i2c_client *c, v4l2_std_id *id)
{ {
int fmt = tvp5150_read(c, TVP5150_STATUS_REG_5); int fmt = tvp5150_read(c, TVP5150_STATUS_REG_5);
fmt &= 0x0F; fmt &= 0x0F;
switch (fmt) { switch (fmt)
{
case 0x01: case 0x01:
*id = V4L2_STD_NTSC; *id = V4L2_STD_NTSC;
break; break;
...@@ -869,7 +773,8 @@ static int tvp5150_set_ctrl(struct i2c_client *c, struct v4l2_control *ctrl) ...@@ -869,7 +773,8 @@ static int tvp5150_set_ctrl(struct i2c_client *c, struct v4l2_control *ctrl)
{ {
/* struct tvp5150 *decoder = i2c_get_clientdata(c); */ /* struct tvp5150 *decoder = i2c_get_clientdata(c); */
switch (ctrl->id) { switch (ctrl->id)
{
case V4L2_CID_BRIGHTNESS: case V4L2_CID_BRIGHTNESS:
tvp5150_write(c, TVP5150_BRIGHT_CTL, ctrl->value); tvp5150_write(c, TVP5150_BRIGHT_CTL, ctrl->value);
return 0; return 0;
...@@ -894,8 +799,8 @@ static int tvp5150_command(struct i2c_client *c, ...@@ -894,8 +799,8 @@ static int tvp5150_command(struct i2c_client *c,
{ {
struct tvp5150 *decoder = i2c_get_clientdata(c); struct tvp5150 *decoder = i2c_get_clientdata(c);
switch (cmd) { switch (cmd)
{
case 0: case 0:
case VIDIOC_INT_RESET: case VIDIOC_INT_RESET:
tvp5150_reset(c); tvp5150_reset(c);
...@@ -956,10 +861,9 @@ static int tvp5150_command(struct i2c_client *c, ...@@ -956,10 +861,9 @@ static int tvp5150_command(struct i2c_client *c,
if (svbi->service_set != 0) { if (svbi->service_set != 0) {
for (i = 0; i <= 23; i++) { for (i = 0; i <= 23; i++) {
svbi->service_lines[1][i] = 0; svbi->service_lines[1][i] = 0;
svbi->service_lines[0][i] =
svbi->service_lines[0][i]=tvp5150_set_vbi(c, tvp5150_set_vbi(c, vbi_ram_default,
vbi_ram_default, svbi->service_lines[0][i], 0xf0, i, 3);
svbi->service_lines[0][i],0xf0,i,3);
} }
/* Enables FIFO */ /* Enables FIFO */
tvp5150_write(c, TVP5150_FIFO_OUT_CTRL,1); tvp5150_write(c, TVP5150_FIFO_OUT_CTRL,1);
...@@ -971,7 +875,7 @@ static int tvp5150_command(struct i2c_client *c, ...@@ -971,7 +875,7 @@ static int tvp5150_command(struct i2c_client *c,
tvp5150_write(c, TVP5150_FULL_FIELD_ENA, 0); tvp5150_write(c, TVP5150_FULL_FIELD_ENA, 0);
/* Disable Line modes */ /* Disable Line modes */
for (i=TVP5150_LINE_MODE_INI; i<=TVP5150_LINE_MODE_END; i++) for (i = TVP5150_LINE_MODE_INI; i <= TVP5150_LINE_MODE_END; i++)
tvp5150_write(c, i, 0xff); tvp5150_write(c, i, 0xff);
} }
break; break;
...@@ -981,7 +885,7 @@ static int tvp5150_command(struct i2c_client *c, ...@@ -981,7 +885,7 @@ static int tvp5150_command(struct i2c_client *c,
struct v4l2_format *fmt; struct v4l2_format *fmt;
struct v4l2_sliced_vbi_format *svbi; struct v4l2_sliced_vbi_format *svbi;
int i, mask=0; int i, mask = 0;
fmt = arg; fmt = arg;
if (fmt->type != V4L2_BUF_TYPE_SLICED_VBI_CAPTURE) if (fmt->type != V4L2_BUF_TYPE_SLICED_VBI_CAPTURE)
...@@ -990,11 +894,10 @@ static int tvp5150_command(struct i2c_client *c, ...@@ -990,11 +894,10 @@ static int tvp5150_command(struct i2c_client *c,
memset(svbi, 0, sizeof(*svbi)); memset(svbi, 0, sizeof(*svbi));
for (i = 0; i <= 23; i++) { for (i = 0; i <= 23; i++) {
svbi->service_lines[0][i]=tvp5150_get_vbi(c, svbi->service_lines[0][i] = tvp5150_get_vbi(c, vbi_ram_default, i);
vbi_ram_default,i); mask |= svbi->service_lines[0][i];
mask|=svbi->service_lines[0][i];
} }
svbi->service_set=mask; svbi->service_set = mask;
break; break;
} }
...@@ -1021,79 +924,75 @@ static int tvp5150_command(struct i2c_client *c, ...@@ -1021,79 +924,75 @@ static int tvp5150_command(struct i2c_client *c,
break; break;
case VIDIOC_G_TUNER: case VIDIOC_G_TUNER:
{ {
struct v4l2_tuner *vt = arg; struct v4l2_tuner *vt = arg;
int status = tvp5150_read(c, 0x88); int status = tvp5150_read(c, 0x88);
vt->signal = ((status & 0x04) && (status & 0x02)) ? 0xffff : 0x0; vt->signal = ((status & 0x04) && (status & 0x02)) ? 0xffff : 0x0;
break; break;
} }
case VIDIOC_QUERYCTRL: case VIDIOC_QUERYCTRL:
{ {
struct v4l2_queryctrl *qc = arg; struct v4l2_queryctrl *qc = arg;
int i; int i;
tvp5150_dbg(1, "VIDIOC_QUERYCTRL called\n"); tvp5150_dbg(1, "VIDIOC_QUERYCTRL called\n");
for (i = 0; i < ARRAY_SIZE(tvp5150_qctrl); i++) for (i = 0; i < ARRAY_SIZE(tvp5150_qctrl); i++)
if (qc->id && qc->id == tvp5150_qctrl[i].id) { if (qc->id && qc->id == tvp5150_qctrl[i].id) {
memcpy(qc, &(tvp5150_qctrl[i]), memcpy(qc, &(tvp5150_qctrl[i]),
sizeof(*qc)); sizeof(*qc));
return 0; return 0;
} }
return -EINVAL; return -EINVAL;
} }
case VIDIOC_G_CTRL: case VIDIOC_G_CTRL:
{ {
struct v4l2_control *ctrl = arg; struct v4l2_control *ctrl = arg;
tvp5150_dbg(1, "VIDIOC_G_CTRL called\n"); tvp5150_dbg(1, "VIDIOC_G_CTRL called\n");
return tvp5150_get_ctrl(c, ctrl); return tvp5150_get_ctrl(c, ctrl);
} }
case VIDIOC_S_CTRL: case VIDIOC_S_CTRL:
{ {
struct v4l2_control *ctrl = arg; struct v4l2_control *ctrl = arg;
u8 i, n; u8 i, n;
n = ARRAY_SIZE(tvp5150_qctrl); n = ARRAY_SIZE(tvp5150_qctrl);
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
if (ctrl->id == tvp5150_qctrl[i].id) { if (ctrl->id == tvp5150_qctrl[i].id) {
if (ctrl->value < if (ctrl->value < tvp5150_qctrl[i].minimum ||
tvp5150_qctrl[i].minimum ctrl->value > tvp5150_qctrl[i].maximum)
|| ctrl->value > return -ERANGE;
tvp5150_qctrl[i].maximum) tvp5150_dbg(1,
return -ERANGE; "VIDIOC_S_CTRL: id=%d, value=%d\n",
tvp5150_dbg(1, ctrl->id, ctrl->value);
"VIDIOC_S_CTRL: id=%d, value=%d\n", return tvp5150_set_ctrl(c, ctrl);
ctrl->id, ctrl->value); }
return tvp5150_set_ctrl(c, ctrl); return -EINVAL;
} }
return -EINVAL;
}
case VIDIOC_QUERYSTD: case VIDIOC_QUERYSTD:
{ {
v4l2_std_id *id = (v4l2_std_id *)arg; v4l2_std_id *id = (v4l2_std_id *)arg;
tvp5150_get_std(c, id); tvp5150_get_std(c, id);
break; break;
} }
case VPFE_CMD_CONFIG_CAPTURE: case VPFE_CMD_CONFIG_CAPTURE:
{ {
struct vpfe_capture_params *params = struct vpfe_capture_params *params = (struct vpfe_capture_params *)arg;
(struct vpfe_capture_params *)arg;
if (params->amuxmode == VPFE_AMUX_COMPOSITE0) {
decoder->route.input = TVP5150_COMPOSITE0;
} else if (params->amuxmode == VPFE_AMUX_COMPOSITE1) {
decoder->route.input = TVP5150_COMPOSITE1;
} else {
decoder->route.input = TVP5150_SVIDEO;
}
tvp5150_selmux(c);
tvp5150_set_std(c, params->mode);
decoder->norm = params->mode;
break;
}
if (params->amuxmode == VPFE_AMUX_COMPOSITE0) {
decoder->route.input = TVP5150_COMPOSITE0;
} else if (params->amuxmode == VPFE_AMUX_COMPOSITE1) {
decoder->route.input = TVP5150_COMPOSITE1;
} else {
decoder->route.input = TVP5150_SVIDEO;
}
tvp5150_selmux(c);
tvp5150_set_std(c, params->mode);
decoder->norm = params->mode;
break;
}
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -1119,16 +1018,15 @@ static int tvp5150_detect_client(struct i2c_adapter *adapter, ...@@ -1119,16 +1018,15 @@ static int tvp5150_detect_client(struct i2c_adapter *adapter,
if (debug) if (debug)
printk( KERN_INFO printk( KERN_INFO
"tvp5150.c: detecting tvp5150 client on address 0x%x\n", "tvp5150.c: detecting tvp5150 client on address 0x%x\n",
address << 1); address << 1);
client_template.adapter = adapter; client_template.adapter = adapter;
client_template.addr = address; client_template.addr = address;
/* Check if the adapter supports the needed features */ /* Check if the adapter supports the needed features */
if (!i2c_check_functionality if (!i2c_check_functionality
(adapter, (adapter, I2C_FUNC_SMBUS_READ_BYTE | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
I2C_FUNC_SMBUS_READ_BYTE | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
return 0; return 0;
tvp5150_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); tvp5150_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
...@@ -1168,8 +1066,8 @@ static int tvp5150_attach_adapter(struct i2c_adapter *adapter) ...@@ -1168,8 +1066,8 @@ static int tvp5150_attach_adapter(struct i2c_adapter *adapter)
{ {
if (debug) if (debug)
printk( KERN_INFO printk( KERN_INFO
"tvp5150.c: starting probe for adapter %s (0x%x)\n", "tvp5150.c: starting probe for adapter %s (0x%x)\n",
adapter->name, adapter->id); adapter->name, adapter->id);
return i2c_probe(adapter, &addr_data, &tvp5150_detect_client); return i2c_probe(adapter, &addr_data, &tvp5150_detect_client);
} }
...@@ -1179,8 +1077,8 @@ static int tvp5150_detach_client(struct i2c_client *c) ...@@ -1179,8 +1077,8 @@ static int tvp5150_detach_client(struct i2c_client *c)
int err; int err;
tvp5150_dbg(1, tvp5150_dbg(1,
"tvp5150.c: removing tvp5150 adapter on address 0x%x\n", "tvp5150.c: removing tvp5150 adapter on address 0x%x\n",
c->addr << 1); c->addr << 1);
err = i2c_detach_client(c); err = i2c_detach_client(c);
if (err) { if (err) {
...@@ -1259,7 +1157,7 @@ static struct vpfe_capture_device tvp5150_device = { ...@@ -1259,7 +1157,7 @@ static struct vpfe_capture_device tvp5150_device = {
static int __init tvp5150_init(void) static int __init tvp5150_init(void)
{ {
i2c_add_driver(&driver); i2c_add_driver(&driver);
return vpfe_capture_device_register(&tvp5150_device); return vpfe_capture_device_register(&tvp5150_device);
} }
static void __exit tvp5150_exit(void) static void __exit tvp5150_exit(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment