aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-05-31 05:19:55 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-06-17 08:31:29 -0400
commitfa915996fb4e06a90d15fa485742a77cd8c1642b (patch)
tree8e9960095760b20a3c5d86e3fe4386a52bd57a2e
parent46821b1d206cbafab54fa0ba6dd80904722326e2 (diff)
[media] tef6862: clamp frequency
Clamp the frequency to the valid frequency range as per the V4L2 specification. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Cc: Richard Röjfors <richard.rojfors@pelagicore.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/radio/tef6862.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/media/radio/tef6862.c b/drivers/media/radio/tef6862.c
index d78afbb08569..06ac69245ca1 100644
--- a/drivers/media/radio/tef6862.c
+++ b/drivers/media/radio/tef6862.c
@@ -30,8 +30,8 @@
30 30
31#define FREQ_MUL 16000 31#define FREQ_MUL 16000
32 32
33#define TEF6862_LO_FREQ (875 * FREQ_MUL / 10) 33#define TEF6862_LO_FREQ (875U * FREQ_MUL / 10)
34#define TEF6862_HI_FREQ (108 * FREQ_MUL) 34#define TEF6862_HI_FREQ (108U * FREQ_MUL)
35 35
36/* Write mode sub addresses */ 36/* Write mode sub addresses */
37#define WM_SUB_BANDWIDTH 0x0 37#define WM_SUB_BANDWIDTH 0x0
@@ -104,6 +104,7 @@ static int tef6862_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequen
104{ 104{
105 struct tef6862_state *state = to_state(sd); 105 struct tef6862_state *state = to_state(sd);
106 struct i2c_client *client = v4l2_get_subdevdata(sd); 106 struct i2c_client *client = v4l2_get_subdevdata(sd);
107 unsigned freq = f->frequency;
107 u16 pll; 108 u16 pll;
108 u8 i2cmsg[3]; 109 u8 i2cmsg[3];
109 int err; 110 int err;
@@ -111,7 +112,8 @@ static int tef6862_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequen
111 if (f->tuner != 0) 112 if (f->tuner != 0)
112 return -EINVAL; 113 return -EINVAL;
113 114
114 pll = 1964 + ((f->frequency - TEF6862_LO_FREQ) * 20) / FREQ_MUL; 115 clamp(freq, TEF6862_LO_FREQ, TEF6862_HI_FREQ);
116 pll = 1964 + ((freq - TEF6862_LO_FREQ) * 20) / FREQ_MUL;
115 i2cmsg[0] = (MODE_PRESET << MODE_SHIFT) | WM_SUB_PLLM; 117 i2cmsg[0] = (MODE_PRESET << MODE_SHIFT) | WM_SUB_PLLM;
116 i2cmsg[1] = (pll >> 8) & 0xff; 118 i2cmsg[1] = (pll >> 8) & 0xff;
117 i2cmsg[2] = pll & 0xff; 119 i2cmsg[2] = pll & 0xff;
@@ -120,7 +122,7 @@ static int tef6862_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequen
120 if (err != sizeof(i2cmsg)) 122 if (err != sizeof(i2cmsg))
121 return err < 0 ? err : -EIO; 123 return err < 0 ? err : -EIO;
122 124
123 state->freq = f->frequency; 125 state->freq = freq;
124 return 0; 126 return 0;
125} 127}
126 128