24 #include <linux/kernel.h>
25 #include <linux/module.h>
28 #include <linux/i2c.h>
29 #include <linux/videodev2.h>
30 #include <linux/slab.h>
37 static int radio_nr = -1;
40 "Minor number for radio device (-1 ==> auto assign)");
61 static int radio_si4713_fill_audout(
struct v4l2_audioout *vao)
69 static int radio_si4713_enumaudout(
struct file *
file,
void *
priv,
72 return radio_si4713_fill_audout(vao);
75 static int radio_si4713_g_audout(
struct file *
file,
void *
priv,
78 int rval = radio_si4713_fill_audout(vao);
85 static int radio_si4713_s_audout(
struct file *
file,
void *
priv,
92 static int radio_si4713_querycap(
struct file *
file,
void *
priv,
96 strlcpy(capability->
card,
"Silicon Labs Si4713 Modulator",
97 sizeof(capability->
card));
104 static int radio_si4713_queryctrl(
struct file *
file,
void *
priv,
108 static const u32 user_ctrls[] = {
115 static const u32 fmtx_ctrls[] = {
138 static const u32 *ctrl_classes[] = {
162 static inline struct v4l2_device *get_v4l2_dev(
struct file *file)
167 static int radio_si4713_g_ext_ctrls(
struct file *file,
void *
p,
174 static int radio_si4713_s_ext_ctrls(
struct file *file,
void *p,
181 static int radio_si4713_g_ctrl(
struct file *file,
void *p,
188 static int radio_si4713_s_ctrl(
struct file *file,
void *p,
195 static int radio_si4713_g_modulator(
struct file *file,
void *p,
202 static int radio_si4713_s_modulator(
struct file *file,
void *p,
209 static int radio_si4713_g_frequency(
struct file *file,
void *p,
216 static int radio_si4713_s_frequency(
struct file *file,
void *p,
223 static long radio_si4713_default(
struct file *file,
void *p,
224 bool valid_prio,
int cmd,
void *
arg)
231 .vidioc_enumaudout = radio_si4713_enumaudout,
232 .vidioc_g_audout = radio_si4713_g_audout,
233 .vidioc_s_audout = radio_si4713_s_audout,
234 .vidioc_querycap = radio_si4713_querycap,
235 .vidioc_queryctrl = radio_si4713_queryctrl,
236 .vidioc_g_ext_ctrls = radio_si4713_g_ext_ctrls,
237 .vidioc_s_ext_ctrls = radio_si4713_s_ext_ctrls,
238 .vidioc_g_ctrl = radio_si4713_g_ctrl,
239 .vidioc_s_ctrl = radio_si4713_s_ctrl,
240 .vidioc_g_modulator = radio_si4713_g_modulator,
241 .vidioc_s_modulator = radio_si4713_s_modulator,
242 .vidioc_g_frequency = radio_si4713_g_frequency,
243 .vidioc_s_frequency = radio_si4713_s_frequency,
244 .vidioc_default = radio_si4713_default,
248 static struct video_device radio_si4713_vdev_template = {
249 .fops = &radio_si4713_fops,
250 .name =
"radio-si4713",
252 .ioctl_ops = &radio_si4713_ioctl_ops,
266 dev_err(&pdev->
dev,
"Cannot proceed without platform data.\n");
273 dev_err(&pdev->
dev,
"Failed to alloc video device.\n");
280 dev_err(&pdev->
dev,
"Failed to register v4l2 device.\n");
286 dev_err(&pdev->
dev,
"Cannot get i2c adapter %d\n",
289 goto unregister_v4l2_dev;
295 dev_err(&pdev->
dev,
"Cannot get v4l2 subdevice\n");
302 dev_err(&pdev->
dev,
"Failed to alloc video device.\n");
308 sizeof(radio_si4713_vdev_template));
309 video_set_drvdata(rsdev->
radio_dev, rsdev);
311 dev_err(&pdev->
dev,
"Could not register video device.\n");
315 dev_info(&pdev->
dev,
"New device successfully probed\n");
332 struct v4l2_device *v4l2_dev = platform_get_drvdata(pdev);
349 .name =
"radio-si4713",
351 .probe = radio_si4713_pdriver_probe,
352 .remove =
__exit_p(radio_si4713_pdriver_remove),