diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2013-05-31 05:19:55 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-06-17 08:31:29 -0400 |
commit | fa915996fb4e06a90d15fa485742a77cd8c1642b (patch) | |
tree | 8e9960095760b20a3c5d86e3fe4386a52bd57a2e | |
parent | 46821b1d206cbafab54fa0ba6dd80904722326e2 (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.c | 10 |
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 | ||