Hi, On Mon, Apr 8, 2013 at 6:47 AM, Hans Verkuil <hverkuil@xxxxxxxxx> wrote: > From: Hans Verkuil <hans.verkuil@xxxxxxxxx> > > - check for invalid modulators. > - clamp frequency to valid range. > > Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> Acked-by: Eduardo Valentin <edubezval@xxxxxxxxx> Tested-by: Eduardo Valentin <edubezval@xxxxxxxxx> Here is the output of v4l2-compliant: is radio Driver Info: Driver name : radio-si4713 Card type : Silicon Labs Si4713 Modulator Bus info : platform:radio-si4713 Driver version: 3.9.0 Capabilities : 0x80080800 RDS Output Modulator Device Capabilities Device Caps : 0x00080800 RDS Output Modulator Compliance test for device /dev/radio0 (not using libv4l2): Required ioctls: fail: v4l2-compliance.cpp(321): !(dcaps & io_caps) test VIDIOC_QUERYCAP: FAIL Allow for multiple opens: test second radio open: OK fail: v4l2-compliance.cpp(321): !(dcaps & io_caps) test VIDIOC_QUERYCAP: FAIL fail: v4l2-compliance.cpp(335): doioctl(node, VIDIOC_G_PRIORITY, &prio) test VIDIOC_G/S_PRIORITY: FAIL Debug ioctls: test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) test VIDIOC_LOG_STATUS: OK (Not Supported) Input ioctls: test VIDIOC_G/S_TUNER: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) test VIDIOC_ENUMAUDIO: OK (Not Supported) test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) test VIDIOC_G/S_AUDIO: OK (Not Supported) Inputs: 0 Audio Inputs: 0 Tuners: 0 Output ioctls: test VIDIOC_G/S_MODULATOR: OK test VIDIOC_G/S_FREQUENCY: OK test VIDIOC_ENUMAUDOUT: OK (Not Supported) test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) test VIDIOC_G/S_AUDOUT: OK (Not Supported) Outputs: 0 Audio Outputs: 0 Modulators: 1 Control ioctls: fail: v4l2-test-controls.cpp(145): can do querymenu on a non-menu control fail: v4l2-test-controls.cpp(201): invalid control 00980001 test VIDIOC_QUERYCTRL/MENU: FAIL fail: v4l2-test-controls.cpp(442): g_ctrl accepted invalid control ID test VIDIOC_G/S_CTRL: FAIL fail: v4l2-test-controls.cpp(511): g_ext_ctrls does not support count == 0 test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported) test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) Standard Controls: 0 Private Controls: 0 Input/Output configuration ioctls: test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) Format ioctls: test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported) test VIDIOC_G/S_PARM: OK (Not Supported) test VIDIOC_G_FBUF: OK (Not Supported) test VIDIOC_G_FMT: OK (Not Supported) test VIDIOC_TRY_FMT: OK (Not Supported) test VIDIOC_S_FMT: OK (Not Supported) test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) Codec ioctls: test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) test VIDIOC_G_ENC_INDEX: OK (Not Supported) test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) Buffer ioctls: test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported) Total: 36, Succeeded: 30, Failed: 6, Warnings: 0 > --- > drivers/media/radio/si4713-i2c.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/radio/si4713-i2c.c b/drivers/media/radio/si4713-i2c.c > index 1cb9a2e..facd669 100644 > --- a/drivers/media/radio/si4713-i2c.c > +++ b/drivers/media/radio/si4713-i2c.c > @@ -1852,7 +1852,8 @@ static int si4713_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f) > struct si4713_device *sdev = to_si4713_device(sd); > int rval = 0; > > - f->type = V4L2_TUNER_RADIO; > + if (f->tuner) > + return -EINVAL; > > if (sdev->power_state) { > u16 freq; > @@ -1877,9 +1878,11 @@ static int si4713_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequenc > int rval = 0; > u16 frequency = v4l2_to_si4713(f->frequency); > > + if (f->tuner) > + return -EINVAL; > + > /* Check frequency range */ > - if (frequency < FREQ_RANGE_LOW || frequency > FREQ_RANGE_HIGH) > - return -EDOM; > + frequency = clamp_t(u16, frequency, FREQ_RANGE_LOW, FREQ_RANGE_HIGH); > > if (sdev->power_state) { > rval = si4713_tx_tune_freq(sdev, frequency); > -- > 1.7.10.4 > -- Eduardo Bezerra Valentin -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html