aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-04-08 16:25:05 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-04-14 18:53:17 -0400
commitb387754d7256b1fa3610ed8a85f9274df49d1178 (patch)
tree51ea64cac39f5c4e4a419ab32d48c323310f75e0
parent55b2a312c29695520f813e61d668318169895ba7 (diff)
[media] radio-si4713: fix g/s_frequency
- check for invalid modulators. - clamp frequency to valid range. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Eduardo Valentin <edubezval@gmail.com> Tested-by: Eduardo Valentin <edubezval@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/radio/si4713-i2c.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/media/radio/si4713-i2c.c b/drivers/media/radio/si4713-i2c.c
index 1cb9a2e7f683..56c9241ee7fb 100644
--- a/drivers/media/radio/si4713-i2c.c
+++ b/drivers/media/radio/si4713-i2c.c
@@ -1261,6 +1261,7 @@ static int si4713_setup(struct si4713_device *sdev)
1261 rval |= si4713_set_rds_radio_text(sdev, tmp->rds_info.radio_text); 1261 rval |= si4713_set_rds_radio_text(sdev, tmp->rds_info.radio_text);
1262 1262
1263 /* Device procedure needs to set frequency first */ 1263 /* Device procedure needs to set frequency first */
1264 f.tuner = 0;
1264 f.frequency = tmp->frequency ? tmp->frequency : DEFAULT_FREQUENCY; 1265 f.frequency = tmp->frequency ? tmp->frequency : DEFAULT_FREQUENCY;
1265 f.frequency = si4713_to_v4l2(f.frequency); 1266 f.frequency = si4713_to_v4l2(f.frequency);
1266 rval |= si4713_s_frequency(&sdev->sd, &f); 1267 rval |= si4713_s_frequency(&sdev->sd, &f);
@@ -1852,7 +1853,8 @@ static int si4713_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f)
1852 struct si4713_device *sdev = to_si4713_device(sd); 1853 struct si4713_device *sdev = to_si4713_device(sd);
1853 int rval = 0; 1854 int rval = 0;
1854 1855
1855 f->type = V4L2_TUNER_RADIO; 1856 if (f->tuner)
1857 return -EINVAL;
1856 1858
1857 if (sdev->power_state) { 1859 if (sdev->power_state) {
1858 u16 freq; 1860 u16 freq;
@@ -1877,9 +1879,11 @@ static int si4713_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequenc
1877 int rval = 0; 1879 int rval = 0;
1878 u16 frequency = v4l2_to_si4713(f->frequency); 1880 u16 frequency = v4l2_to_si4713(f->frequency);
1879 1881
1882 if (f->tuner)
1883 return -EINVAL;
1884
1880 /* Check frequency range */ 1885 /* Check frequency range */
1881 if (frequency < FREQ_RANGE_LOW || frequency > FREQ_RANGE_HIGH) 1886 frequency = clamp_t(u16, frequency, FREQ_RANGE_LOW, FREQ_RANGE_HIGH);
1882 return -EDOM;
1883 1887
1884 if (sdev->power_state) { 1888 if (sdev->power_state) {
1885 rval = si4713_tx_tune_freq(sdev, frequency); 1889 rval = si4713_tx_tune_freq(sdev, frequency);