Commit 52faaf78 authored by Frank Schaefer's avatar Frank Schaefer Committed by Mauro Carvalho Chehab

[media] em28xx: move TV norm from struct em28xx to struct v4l2

TV norm is specific to analog TV reception. move it out of the common
em28xx struct.
Signed-off-by: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 9297285e
...@@ -155,13 +155,15 @@ static inline unsigned int norm_maxw(struct em28xx *dev) ...@@ -155,13 +155,15 @@ static inline unsigned int norm_maxw(struct em28xx *dev)
static inline unsigned int norm_maxh(struct em28xx *dev) static inline unsigned int norm_maxh(struct em28xx *dev)
{ {
struct em28xx_v4l2 *v4l2 = dev->v4l2;
if (dev->board.is_webcam) if (dev->board.is_webcam)
return dev->sensor_yres; return dev->sensor_yres;
if (dev->board.max_range_640_480) if (dev->board.max_range_640_480)
return 480; return 480;
return (dev->norm & V4L2_STD_625_50) ? 576 : 480; return (v4l2->norm & V4L2_STD_625_50) ? 576 : 480;
} }
static int em28xx_vbi_supported(struct em28xx *dev) static int em28xx_vbi_supported(struct em28xx *dev)
...@@ -246,10 +248,10 @@ static int em28xx_set_outfmt(struct em28xx *dev) ...@@ -246,10 +248,10 @@ static int em28xx_set_outfmt(struct em28xx *dev)
em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00); em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4); em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4);
em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height); em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height);
if (dev->norm & V4L2_STD_525_60) { if (v4l2->norm & V4L2_STD_525_60) {
/* NTSC */ /* NTSC */
em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09); em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
} else if (dev->norm & V4L2_STD_625_50) { } else if (v4l2->norm & V4L2_STD_625_50) {
/* PAL */ /* PAL */
em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07); em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
} }
...@@ -330,7 +332,7 @@ static int em28xx_resolution_set(struct em28xx *dev) ...@@ -330,7 +332,7 @@ static int em28xx_resolution_set(struct em28xx *dev)
/* Properly setup VBI */ /* Properly setup VBI */
v4l2->vbi_width = 720; v4l2->vbi_width = 720;
if (dev->norm & V4L2_STD_525_60) if (v4l2->norm & V4L2_STD_525_60)
v4l2->vbi_height = 12; v4l2->vbi_height = 12;
else else
v4l2->vbi_height = 18; v4l2->vbi_height = 18;
...@@ -1345,7 +1347,7 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm) ...@@ -1345,7 +1347,7 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
struct em28xx_fh *fh = priv; struct em28xx_fh *fh = priv;
struct em28xx *dev = fh->dev; struct em28xx *dev = fh->dev;
*norm = dev->norm; *norm = dev->v4l2->norm;
return 0; return 0;
} }
...@@ -1367,13 +1369,13 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm) ...@@ -1367,13 +1369,13 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
struct em28xx_v4l2 *v4l2 = dev->v4l2; struct em28xx_v4l2 *v4l2 = dev->v4l2;
struct v4l2_format f; struct v4l2_format f;
if (norm == dev->norm) if (norm == v4l2->norm)
return 0; return 0;
if (dev->streaming_users > 0) if (dev->streaming_users > 0)
return -EBUSY; return -EBUSY;
dev->norm = norm; v4l2->norm = norm;
/* Adjusts width/height, if needed */ /* Adjusts width/height, if needed */
f.fmt.pix.width = 720; f.fmt.pix.width = 720;
...@@ -1387,7 +1389,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm) ...@@ -1387,7 +1389,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
&v4l2->hscale, &v4l2->vscale); &v4l2->hscale, &v4l2->vscale);
em28xx_resolution_set(dev); em28xx_resolution_set(dev);
v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_std, dev->norm); v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_std, v4l2->norm);
return 0; return 0;
} }
...@@ -1395,16 +1397,17 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm) ...@@ -1395,16 +1397,17 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
static int vidioc_g_parm(struct file *file, void *priv, static int vidioc_g_parm(struct file *file, void *priv,
struct v4l2_streamparm *p) struct v4l2_streamparm *p)
{ {
struct em28xx_fh *fh = priv; struct em28xx_fh *fh = priv;
struct em28xx *dev = fh->dev; struct em28xx *dev = fh->dev;
struct em28xx_v4l2 *v4l2 = dev->v4l2;
int rc = 0; int rc = 0;
p->parm.capture.readbuffers = EM28XX_MIN_BUF; p->parm.capture.readbuffers = EM28XX_MIN_BUF;
if (dev->board.is_webcam) if (dev->board.is_webcam)
rc = v4l2_device_call_until_err(&dev->v4l2->v4l2_dev, 0, rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
video, g_parm, p); video, g_parm, p);
else else
v4l2_video_std_frame_period(dev->norm, v4l2_video_std_frame_period(v4l2->norm,
&p->parm.capture.timeperframe); &p->parm.capture.timeperframe);
return rc; return rc;
...@@ -1805,11 +1808,11 @@ static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv, ...@@ -1805,11 +1808,11 @@ static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved)); memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
/* Varies by video standard (NTSC, PAL, etc.) */ /* Varies by video standard (NTSC, PAL, etc.) */
if (dev->norm & V4L2_STD_525_60) { if (v4l2->norm & V4L2_STD_525_60) {
/* NTSC */ /* NTSC */
format->fmt.vbi.start[0] = 10; format->fmt.vbi.start[0] = 10;
format->fmt.vbi.start[1] = 273; format->fmt.vbi.start[1] = 273;
} else if (dev->norm & V4L2_STD_625_50) { } else if (v4l2->norm & V4L2_STD_625_50) {
/* PAL */ /* PAL */
format->fmt.vbi.start[0] = 6; format->fmt.vbi.start[0] = 6;
format->fmt.vbi.start[1] = 318; format->fmt.vbi.start[1] = 318;
...@@ -2421,8 +2424,8 @@ static int em28xx_v4l2_init(struct em28xx *dev) ...@@ -2421,8 +2424,8 @@ static int em28xx_v4l2_init(struct em28xx *dev)
} }
/* set default norm */ /* set default norm */
dev->norm = V4L2_STD_PAL; v4l2->norm = V4L2_STD_PAL;
v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_std, dev->norm); v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_std, v4l2->norm);
dev->interlaced = EM28XX_INTERLACED_DEFAULT; dev->interlaced = EM28XX_INTERLACED_DEFAULT;
/* Analog specific initialization */ /* Analog specific initialization */
......
...@@ -519,6 +519,8 @@ struct em28xx_v4l2 { ...@@ -519,6 +519,8 @@ struct em28xx_v4l2 {
u8 vinmode; u8 vinmode;
u8 vinctl; u8 vinctl;
v4l2_std_id norm; /* selected tv norm */
/* Frame properties */ /* Frame properties */
int width; /* current frame width */ int width; /* current frame width */
int height; /* current frame height */ int height; /* current frame height */
...@@ -633,7 +635,6 @@ struct em28xx { ...@@ -633,7 +635,6 @@ struct em28xx {
/* video for linux */ /* video for linux */
int users; /* user count for exclusive use */ int users; /* user count for exclusive use */
int streaming_users; /* Number of actively streaming users */ int streaming_users; /* Number of actively streaming users */
v4l2_std_id norm; /* selected tv norm */
int ctl_freq; /* selected frequency */ int ctl_freq; /* selected frequency */
unsigned int ctl_input; /* selected input */ unsigned int ctl_input; /* selected input */
unsigned int ctl_ainput;/* selected audio input */ unsigned int ctl_ainput;/* selected audio input */
......
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