diff options
Diffstat (limited to 'linux')
-rw-r--r-- | linux/drivers/staging/tm6000/tm6000-core.c | 15 | ||||
-rw-r--r-- | linux/drivers/staging/tm6000/tm6000-video.c | 19 | ||||
-rw-r--r-- | linux/drivers/staging/tm6000/tm6000.h | 2 |
3 files changed, 33 insertions, 3 deletions
diff --git a/linux/drivers/staging/tm6000/tm6000-core.c b/linux/drivers/staging/tm6000/tm6000-core.c index 37eca0167..3ef32dd11 100644 --- a/linux/drivers/staging/tm6000/tm6000-core.c +++ b/linux/drivers/staging/tm6000/tm6000-core.c @@ -428,12 +428,27 @@ REG PAL PAL_M PAL_N SECAM NTSC Comp. PAL PAL_M PAL_N SECAM NTSC 0x3f 0x00 0x00 0x00 0x00 0x00 */ + +void tm6000_get_std_res(struct tm6000_core *dev) +{ + /* Currently, those are the only supported resoltions */ + if (dev->norm & V4L2_STD_525_60) { + dev->height=480; + } else { + dev->height=576; + } + dev->width=720; + +printk("tm6000: res= %dx%d\n",dev->width,dev->height); +} + int tm6000_set_standard (struct tm6000_core *dev, v4l2_std_id *norm) { #if 0 *norm=V4L2_STD_PAL_M; #endif dev->norm=*norm; + tm6000_get_std_res(dev); #if 1 /* HACK: Should use, instead, the common code!!! */ diff --git a/linux/drivers/staging/tm6000/tm6000-video.c b/linux/drivers/staging/tm6000/tm6000-video.c index 5b440180b..e304120f8 100644 --- a/linux/drivers/staging/tm6000/tm6000-video.c +++ b/linux/drivers/staging/tm6000/tm6000-video.c @@ -130,7 +130,7 @@ static LIST_HEAD(tm6000_corelist); ------------------------------------------------------------------*/ #define norm_maxw(a) 720 -#define norm_maxh(a) 480 +#define norm_maxh(a) 576 //#define norm_minw(a) norm_maxw(a) #define norm_minw(a) norm_maxw(a) @@ -804,6 +804,7 @@ buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb, BUG_ON(NULL == fh->fmt); +#if 0 if (fh->width < norm_minw(core) || fh->width > norm_maxw(core) || fh->height < norm_minh(core) || fh->height > norm_maxh(core)) { dprintk(dev, V4L2_DEBUG_QUEUE, "Window size (%dx%d) is out of " @@ -813,6 +814,7 @@ buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb, norm_maxw(core),norm_maxh(core)); return -EINVAL; } +#endif /* FIXME: It assumes depth=2 */ /* The only currently supported format is 16 bits/pixel */ @@ -1039,6 +1041,13 @@ static int vidioc_try_fmt_cap (struct file *file, void *priv, return -EINVAL; } +#if 1 + tm6000_get_std_res (dev); + + f->fmt.pix.width = dev->width; + f->fmt.pix.height = dev->height; +#else + /* Scaling is not yet supported */ if (f->fmt.pix.width < norm_minw(core)) f->fmt.pix.width = norm_minw(core); @@ -1050,6 +1059,7 @@ static int vidioc_try_fmt_cap (struct file *file, void *priv, if (f->fmt.pix.height > norm_maxh(core)) f->fmt.pix.height = norm_maxh(core); +#endif f->fmt.pix.width &= ~0x01; @@ -1437,8 +1447,11 @@ static int tm6000_open(struct inode *inode, struct file *file) dev->fourcc = format[0].fourcc; fh->fmt = format_by_fourcc(dev->fourcc); - fh->width = norm_maxw(); - fh->height = norm_maxh(); + + tm6000_get_std_res (dev); + + fh->width = dev->width; + fh->height = dev->height; dprintk(dev, V4L2_DEBUG_OPEN, "Open: fh=0x%08lx, dev=0x%08lx, " "dev->vidq=0x%08lx\n", diff --git a/linux/drivers/staging/tm6000/tm6000.h b/linux/drivers/staging/tm6000/tm6000.h index 691d095a7..c4d2cda69 100644 --- a/linux/drivers/staging/tm6000/tm6000.h +++ b/linux/drivers/staging/tm6000/tm6000.h @@ -131,6 +131,7 @@ struct tm6000_core { int devno; /* marks the number of this device */ v4l2_std_id norm; /* Current norm */ + int width,height; /* Selected resolution */ enum tm6000_core_state state; @@ -213,6 +214,7 @@ int tm6000_init_after_firmware (struct tm6000_core *dev); int tm6000_init_analog_mode (struct tm6000_core *dev); int tm6000_init_digital_mode (struct tm6000_core *dev); +void tm6000_get_std_res(struct tm6000_core *dev); int tm6000_set_standard (struct tm6000_core *dev, v4l2_std_id *norm); int tm6000_set_audio_bitrate (struct tm6000_core *dev, int bitrate); |