Commit 4475c044 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Mauro Carvalho Chehab

V4L/DVB (12794): tm6000: handle also PAL/SECAM resolutions

Fix the resolutions for 625 line video standards (european PAL/SECAM)
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 88894cba
...@@ -421,9 +421,24 @@ REG PAL PAL_M PAL_N SECAM NTSC Comp. PAL PAL_M PAL_N SECAM NTSC ...@@ -421,9 +421,24 @@ REG PAL PAL_M PAL_N SECAM NTSC Comp. PAL PAL_M PAL_N SECAM NTSC
0x3f 0x00 0x00 0x00 0x00 0x00 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) int tm6000_set_standard (struct tm6000_core *dev, v4l2_std_id *norm)
{ {
dev->norm=*norm; dev->norm=*norm;
tm6000_get_std_res(dev);
/* HACK: Should use, instead, the common code!!! */ /* HACK: Should use, instead, the common code!!! */
if (*norm & V4L2_STD_PAL_M) { if (*norm & V4L2_STD_PAL_M) {
......
...@@ -125,7 +125,7 @@ static LIST_HEAD(tm6000_corelist); ...@@ -125,7 +125,7 @@ static LIST_HEAD(tm6000_corelist);
------------------------------------------------------------------*/ ------------------------------------------------------------------*/
#define norm_maxw(a) 720 #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)
#define norm_minw(a) norm_maxw(a) #define norm_minw(a) norm_maxw(a)
...@@ -758,15 +758,6 @@ buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb, ...@@ -758,15 +758,6 @@ buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
BUG_ON(NULL == fh->fmt); BUG_ON(NULL == fh->fmt);
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 "
"supported range\n", fh->width, fh->height);
dprintk(dev, V4L2_DEBUG_QUEUE, "Valid range is from (%dx%d) to "
"(%dx%d)\n", norm_minw(core), norm_minh(core),
norm_maxw(core),norm_maxh(core));
return -EINVAL;
}
/* FIXME: It assumes depth=2 */ /* FIXME: It assumes depth=2 */
/* The only currently supported format is 16 bits/pixel */ /* The only currently supported format is 16 bits/pixel */
...@@ -993,17 +984,10 @@ static int vidioc_try_fmt_cap (struct file *file, void *priv, ...@@ -993,17 +984,10 @@ static int vidioc_try_fmt_cap (struct file *file, void *priv,
return -EINVAL; return -EINVAL;
} }
if (f->fmt.pix.width < norm_minw(core)) tm6000_get_std_res (dev);
f->fmt.pix.width = norm_minw(core);
if (f->fmt.pix.width > norm_maxw(core))
f->fmt.pix.width = norm_maxw(core);
if (f->fmt.pix.height < norm_minh(core)) f->fmt.pix.width = dev->width;
f->fmt.pix.height = norm_minh(core); f->fmt.pix.height = dev->height;
if (f->fmt.pix.height > norm_maxh(core))
f->fmt.pix.height = norm_maxh(core);
f->fmt.pix.width &= ~0x01; f->fmt.pix.width &= ~0x01;
...@@ -1385,8 +1369,11 @@ static int tm6000_open(struct inode *inode, struct file *file) ...@@ -1385,8 +1369,11 @@ static int tm6000_open(struct inode *inode, struct file *file)
dev->fourcc = format[0].fourcc; dev->fourcc = format[0].fourcc;
fh->fmt = format_by_fourcc(dev->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, " dprintk(dev, V4L2_DEBUG_OPEN, "Open: fh=0x%08lx, dev=0x%08lx, "
"dev->vidq=0x%08lx\n", "dev->vidq=0x%08lx\n",
......
...@@ -122,6 +122,7 @@ struct tm6000_core { ...@@ -122,6 +122,7 @@ struct tm6000_core {
int devno; /* marks the number of this device */ int devno; /* marks the number of this device */
v4l2_std_id norm; /* Current norm */ v4l2_std_id norm; /* Current norm */
int width,height; /* Selected resolution */
enum tm6000_core_state state; enum tm6000_core_state state;
...@@ -204,6 +205,7 @@ int tm6000_init_after_firmware (struct tm6000_core *dev); ...@@ -204,6 +205,7 @@ int tm6000_init_after_firmware (struct tm6000_core *dev);
int tm6000_init_analog_mode (struct tm6000_core *dev); int tm6000_init_analog_mode (struct tm6000_core *dev);
int tm6000_init_digital_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_standard (struct tm6000_core *dev, v4l2_std_id *norm);
int tm6000_set_audio_bitrate (struct tm6000_core *dev, int bitrate); int tm6000_set_audio_bitrate (struct tm6000_core *dev, int bitrate);
......
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