mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-14 00:24:15 +08:00
[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: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
9297285e51
commit
52faaf78b5
@ -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)
|
|||||||
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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
&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)
|
|||||||
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,
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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 {
|
|||||||
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 {
|
|||||||
/* 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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user