Date: | 2011-10-09 01:44:12 (12 years 2 months ago) |
---|---|
Author: | Maarten ter Huurne |
Commit: | 6e2603c6b0f15c7bb1083be8a04e83f1f1534338 |
Message: | media: radio: RDA5807: Implemented VIDIOC_S_HW_FREQ_SEEK ioctl. This enables hardware seeking. The seek threshold is not configurable yet though, for lack of an API. |
Files: |
drivers/media/radio/radio-rda5807.c (3 diffs) |
Change Details
drivers/media/radio/radio-rda5807.c | ||
---|---|---|
257 | 257 | return rda5807_update_reg(radio, RDA5807_REG_CHAN, mask, val); |
258 | 258 | } |
259 | 259 | |
260 | static int rda5807_seek_frequency(struct rda5807_driver *radio, | |
261 | int upward, int wrap) | |
262 | { | |
263 | u16 mask = 0; | |
264 | u16 val = 0; | |
265 | ||
266 | /* TODO: Seek threshold is configurable. How should the driver handle | |
267 | * this configuration? | |
268 | */ | |
269 | /* seek up or down? */ | |
270 | mask |= RDA5807_MASK_CTRL_SEEKUP; | |
271 | if (upward) | |
272 | val |= RDA5807_MASK_CTRL_SEEKUP; | |
273 | /* wrap around at band limit? */ | |
274 | mask |= RDA5807_MASK_CTRL_SKMODE; | |
275 | if (!wrap) | |
276 | val |= RDA5807_MASK_CTRL_SKMODE; | |
277 | /* seek command */ | |
278 | mask |= RDA5807_MASK_CTRL_SEEK; | |
279 | val |= RDA5807_MASK_CTRL_SEEK; | |
280 | ||
281 | return rda5807_update_reg(radio, RDA5807_REG_CTRL, mask, val); | |
282 | } | |
283 | ||
260 | 284 | static inline struct rda5807_driver *ctrl_to_radio(struct v4l2_ctrl *ctrl) |
261 | 285 | { |
262 | 286 | return container_of(ctrl->handler, struct rda5807_driver, ctrl_handler); |
... | ... | |
296 | 320 | .driver = "rda5807", |
297 | 321 | .card = "RDA5807 FM receiver", |
298 | 322 | .bus_info = "I2C", |
299 | .capabilities = V4L2_CAP_RADIO | V4L2_CAP_TUNER, | |
323 | .capabilities = V4L2_CAP_RADIO | V4L2_CAP_TUNER | |
324 | | V4L2_CAP_HW_FREQ_SEEK, | |
300 | 325 | }; |
301 | 326 | |
302 | 327 | return 0; |
... | ... | |
395 | 420 | return rda5807_set_frequency(radio, (a->frequency * 625) / 10000); |
396 | 421 | } |
397 | 422 | |
423 | static int rda5807_vidioc_s_hw_freq_seek(struct file *file, void *fh, | |
424 | struct v4l2_hw_freq_seek *a) | |
425 | { | |
426 | struct rda5807_driver *radio = video_drvdata(file); | |
427 | ||
428 | if (a->tuner != 0) | |
429 | return -EINVAL; | |
430 | if (a->type != V4L2_TUNER_RADIO) | |
431 | return -EINVAL; | |
432 | ||
433 | return rda5807_seek_frequency(radio, a->seek_upward, a->wrap_around); | |
434 | } | |
435 | ||
398 | 436 | static const struct v4l2_ioctl_ops rda5807_ioctl_ops = { |
399 | 437 | .vidioc_querycap = rda5807_vidioc_querycap, |
400 | 438 | .vidioc_g_audio = rda5807_vidioc_g_audio, |
401 | 439 | .vidioc_g_tuner = rda5807_vidioc_g_tuner, |
402 | 440 | .vidioc_g_frequency = rda5807_vidioc_g_frequency, |
403 | 441 | .vidioc_s_frequency = rda5807_vidioc_s_frequency, |
442 | .vidioc_s_hw_freq_seek = rda5807_vidioc_s_hw_freq_seek, | |
404 | 443 | }; |
405 | 444 | |
406 | 445 | static int __devinit rda5807_i2c_probe(struct i2c_client *client, |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9