Skip to content

Commit

Permalink
[media] cx23885: Control cleanup on the MPEG Encoder
Browse files Browse the repository at this point in the history
Added three new control calls (g_std, querystd and g_ctrl) to
the -417 driver. Also routed other controls through the main
cx23885 driver meaning that the controls for the 417 and the
raw video device all enter the driver code and are handled
in a single place.

Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Steven Toth authored and Mauro Carvalho Chehab committed Jan 5, 2012
1 parent 3504513 commit 09b3bc2
Showing 1 changed file with 36 additions and 65 deletions.
101 changes: 36 additions & 65 deletions drivers/media/video/cx23885/cx23885-417.c
Original file line number Diff line number Diff line change
Expand Up @@ -1212,6 +1212,16 @@ static int cx23885_querymenu(struct cx23885_dev *dev,
cx2341x_ctrl_get_menu(&dev->mpeg_params, qmenu->id));
}

static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)
{
struct cx23885_fh *fh = file->private_data;
struct cx23885_dev *dev = fh->dev;

call_all(dev, core, g_std, id);

return 0;
}

static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *id)
{
struct cx23885_fh *fh = file->private_data;
Expand All @@ -1224,55 +1234,31 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *id)
if (i == ARRAY_SIZE(cx23885_tvnorms))
return -EINVAL;
dev->encodernorm = cx23885_tvnorms[i];

/* Have the drier core notify the subdevices */
mutex_lock(&dev->lock);
cx23885_set_tvnorm(dev, *id);
mutex_unlock(&dev->lock);

return 0;
}

static int vidioc_enum_input(struct file *file, void *priv,
struct v4l2_input *i)
struct v4l2_input *i)
{
struct cx23885_fh *fh = file->private_data;
struct cx23885_dev *dev = fh->dev;
struct cx23885_input *input;
int n;

if (i->index >= 4)
return -EINVAL;

input = &cx23885_boards[dev->board].input[i->index];

if (input->type == 0)
return -EINVAL;

/* FIXME
* strcpy(i->name, input->name); */
strcpy(i->name, "unset");

if (input->type == CX23885_VMUX_TELEVISION ||
input->type == CX23885_VMUX_CABLE)
i->type = V4L2_INPUT_TYPE_TUNER;
else
i->type = V4L2_INPUT_TYPE_CAMERA;

for (n = 0; n < ARRAY_SIZE(cx23885_tvnorms); n++)
i->std |= cx23885_tvnorms[n].id;
return 0;
struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev;
dprintk(1, "%s()\n", __func__);
return cx23885_enum_input(dev, i);
}

static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
{
struct cx23885_fh *fh = file->private_data;
struct cx23885_dev *dev = fh->dev;

*i = dev->input;
return 0;
return cx23885_get_input(file, priv, i);
}

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
if (i >= 4)
return -EINVAL;

return 0;
return cx23885_set_input(file, priv, i);
}

static int vidioc_g_tuner(struct file *file, void *priv,
Expand Down Expand Up @@ -1325,43 +1311,25 @@ static int vidioc_g_frequency(struct file *file, void *priv,
}

static int vidioc_s_frequency(struct file *file, void *priv,
struct v4l2_frequency *f)
struct v4l2_frequency *f)
{
struct cx23885_fh *fh = file->private_data;
struct cx23885_dev *dev = fh->dev;

cx23885_api_cmd(fh->dev, CX2341X_ENC_STOP_CAPTURE, 3, 0,
CX23885_END_NOW, CX23885_MPEG_CAPTURE,
CX23885_RAW_BITS_NONE);

dprintk(1, "VIDIOC_S_FREQUENCY: dev type %d, f\n",
dev->tuner_type);
dprintk(1, "VIDIOC_S_FREQUENCY: f tuner %d, f type %d\n",
f->tuner, f->type);
if (UNSET == dev->tuner_type)
return -EINVAL;
if (f->tuner != 0)
return -EINVAL;
if (f->type != V4L2_TUNER_ANALOG_TV)
return -EINVAL;
dev->freq = f->frequency;

call_all(dev, tuner, s_frequency, f);
return cx23885_set_frequency(file, priv, f);
}

cx23885_initialize_codec(dev, 0);
static int vidioc_g_ctrl(struct file *file, void *priv,
struct v4l2_control *ctl)
{
struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev;

return 0;
return cx23885_get_control(dev, ctl);
}

static int vidioc_s_ctrl(struct file *file, void *priv,
struct v4l2_control *ctl)
struct v4l2_control *ctl)
{
struct cx23885_fh *fh = file->private_data;
struct cx23885_dev *dev = fh->dev;
struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev;

/* Update the A/V core */
call_all(dev, core, s_ctrl, ctl);
return 0;
return cx23885_set_control(dev, ctl);
}

static int vidioc_querycap(struct file *file, void *priv,
Expand Down Expand Up @@ -1693,6 +1661,8 @@ static struct v4l2_file_operations mpeg_fops = {
};

static const struct v4l2_ioctl_ops mpeg_ioctl_ops = {
.vidioc_querystd = vidioc_g_std,
.vidioc_g_std = vidioc_g_std,
.vidioc_s_std = vidioc_s_std,
.vidioc_enum_input = vidioc_enum_input,
.vidioc_g_input = vidioc_g_input,
Expand All @@ -1702,6 +1672,7 @@ static const struct v4l2_ioctl_ops mpeg_ioctl_ops = {
.vidioc_g_frequency = vidioc_g_frequency,
.vidioc_s_frequency = vidioc_s_frequency,
.vidioc_s_ctrl = vidioc_s_ctrl,
.vidioc_g_ctrl = vidioc_g_ctrl,
.vidioc_querycap = vidioc_querycap,
.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
.vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
Expand Down

0 comments on commit 09b3bc2

Please sign in to comment.