diff options
author | Ondrej Zary <linux@rainbow-software.org> | 2013-06-14 16:01:39 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-06-21 10:30:01 -0400 |
commit | d9ec089ef248064ec9b3d027ed707ac6e0a3f2aa (patch) | |
tree | d9631fc29387622e3bd1dcc8322544b46c0de5df /drivers/media/radio/radio-sf16fmi.c | |
parent | 9291682ea490756157cd26dcc94fd46bd725df6b (diff) |
[media] radio-sf16fmi: Set frequency during init
Set freqency during initialization to fix v4l2-compliance error.
This also fixes VIDIOC_G_FREQUENCY always returning zero (broken by me during LM7000 conversion).
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/radio/radio-sf16fmi.c')
-rw-r--r-- | drivers/media/radio/radio-sf16fmi.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/media/radio/radio-sf16fmi.c b/drivers/media/radio/radio-sf16fmi.c index ed7299d42a24..6f4318ff0db3 100644 --- a/drivers/media/radio/radio-sf16fmi.c +++ b/drivers/media/radio/radio-sf16fmi.c | |||
@@ -50,7 +50,7 @@ struct fmi | |||
50 | struct video_device vdev; | 50 | struct video_device vdev; |
51 | int io; | 51 | int io; |
52 | bool mute; | 52 | bool mute; |
53 | unsigned long curfreq; /* freq in kHz */ | 53 | u32 curfreq; /* freq in kHz */ |
54 | struct mutex lock; | 54 | struct mutex lock; |
55 | }; | 55 | }; |
56 | 56 | ||
@@ -118,6 +118,14 @@ static inline int fmi_getsigstr(struct fmi *fmi) | |||
118 | return (res & 2) ? 0 : 0xFFFF; | 118 | return (res & 2) ? 0 : 0xFFFF; |
119 | } | 119 | } |
120 | 120 | ||
121 | static void fmi_set_freq(struct fmi *fmi) | ||
122 | { | ||
123 | fmi->curfreq = clamp(fmi->curfreq, RSF16_MINFREQ, RSF16_MAXFREQ); | ||
124 | /* rounding in steps of 800 to match the freq | ||
125 | that will be used */ | ||
126 | lm7000_set_freq((fmi->curfreq / 800) * 800, fmi, fmi_set_pins); | ||
127 | } | ||
128 | |||
121 | static int vidioc_querycap(struct file *file, void *priv, | 129 | static int vidioc_querycap(struct file *file, void *priv, |
122 | struct v4l2_capability *v) | 130 | struct v4l2_capability *v) |
123 | { | 131 | { |
@@ -158,14 +166,13 @@ static int vidioc_s_frequency(struct file *file, void *priv, | |||
158 | const struct v4l2_frequency *f) | 166 | const struct v4l2_frequency *f) |
159 | { | 167 | { |
160 | struct fmi *fmi = video_drvdata(file); | 168 | struct fmi *fmi = video_drvdata(file); |
161 | unsigned freq = f->frequency; | ||
162 | 169 | ||
163 | if (f->tuner != 0 || f->type != V4L2_TUNER_RADIO) | 170 | if (f->tuner != 0 || f->type != V4L2_TUNER_RADIO) |
164 | return -EINVAL; | 171 | return -EINVAL; |
165 | clamp(freq, RSF16_MINFREQ, RSF16_MAXFREQ); | 172 | |
166 | /* rounding in steps of 800 to match the freq | 173 | fmi->curfreq = f->frequency; |
167 | that will be used */ | 174 | fmi_set_freq(fmi); |
168 | lm7000_set_freq((freq / 800) * 800, fmi, fmi_set_pins); | 175 | |
169 | return 0; | 176 | return 0; |
170 | } | 177 | } |
171 | 178 | ||
@@ -342,8 +349,10 @@ static int __init fmi_init(void) | |||
342 | 349 | ||
343 | mutex_init(&fmi->lock); | 350 | mutex_init(&fmi->lock); |
344 | 351 | ||
345 | /* mute card - prevents noisy bootups */ | 352 | /* mute card and set default frequency */ |
346 | fmi_mute(fmi); | 353 | fmi->mute = 1; |
354 | fmi->curfreq = RSF16_MINFREQ; | ||
355 | fmi_set_freq(fmi); | ||
347 | 356 | ||
348 | if (video_register_device(&fmi->vdev, VFL_TYPE_RADIO, radio_nr) < 0) { | 357 | if (video_register_device(&fmi->vdev, VFL_TYPE_RADIO, radio_nr) < 0) { |
349 | v4l2_ctrl_handler_free(hdl); | 358 | v4l2_ctrl_handler_free(hdl); |