summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
Diffstat (limited to 'linux')
-rw-r--r--linux/drivers/staging/tm6000/tm6000-core.c15
-rw-r--r--linux/drivers/staging/tm6000/tm6000-video.c19
-rw-r--r--linux/drivers/staging/tm6000/tm6000.h2
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);