Commit e1cf6587 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] au0828: frequency handling fixes

- define an initial frequency
- return an error if g_frequency is called for an invalid tuner index
- get the clamped frequency value after setting it: i.e. the tuner driver
  may clamp the given frequency to a valid frequency range and ctrl_freq
  should get that actual clamped frequency.
- remove obsolete tuner type checks (done by the core).
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 59e05484
...@@ -1542,7 +1542,8 @@ static int vidioc_g_frequency(struct file *file, void *priv, ...@@ -1542,7 +1542,8 @@ static int vidioc_g_frequency(struct file *file, void *priv,
struct au0828_fh *fh = priv; struct au0828_fh *fh = priv;
struct au0828_dev *dev = fh->dev; struct au0828_dev *dev = fh->dev;
freq->type = V4L2_TUNER_ANALOG_TV; if (freq->tuner != 0)
return -EINVAL;
freq->frequency = dev->ctrl_freq; freq->frequency = dev->ctrl_freq;
return 0; return 0;
} }
...@@ -1552,13 +1553,10 @@ static int vidioc_s_frequency(struct file *file, void *priv, ...@@ -1552,13 +1553,10 @@ static int vidioc_s_frequency(struct file *file, void *priv,
{ {
struct au0828_fh *fh = priv; struct au0828_fh *fh = priv;
struct au0828_dev *dev = fh->dev; struct au0828_dev *dev = fh->dev;
struct v4l2_frequency new_freq = *freq;
if (freq->tuner != 0) if (freq->tuner != 0)
return -EINVAL; return -EINVAL;
if (freq->type != V4L2_TUNER_ANALOG_TV)
return -EINVAL;
dev->ctrl_freq = freq->frequency;
if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl) if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 1); dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 1);
...@@ -1573,6 +1571,9 @@ static int vidioc_s_frequency(struct file *file, void *priv, ...@@ -1573,6 +1571,9 @@ static int vidioc_s_frequency(struct file *file, void *priv,
} }
v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, freq); v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, freq);
/* Get the actual set (and possibly clamped) frequency */
v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_frequency, &new_freq);
dev->ctrl_freq = new_freq.frequency;
if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl) if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 0); dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 0);
...@@ -1976,6 +1977,7 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1976,6 +1977,7 @@ int au0828_analog_register(struct au0828_dev *dev,
dev->frame_size = dev->field_size << 1; dev->frame_size = dev->field_size << 1;
dev->bytesperline = dev->width << 1; dev->bytesperline = dev->width << 1;
dev->ctrl_ainput = 0; dev->ctrl_ainput = 0;
dev->ctrl_freq = 960;
/* allocate and fill v4l2 video struct */ /* allocate and fill v4l2 video struct */
dev->vdev = video_device_alloc(); dev->vdev = video_device_alloc();
......
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