|
@@ -385,7 +385,6 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
|
|
strlcpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name));
|
|
strlcpy(tea->vd.name, tea->v4l2_dev->name, sizeof(tea->vd.name));
|
|
tea->vd.lock = &tea->mutex;
|
|
tea->vd.lock = &tea->mutex;
|
|
tea->vd.v4l2_dev = tea->v4l2_dev;
|
|
tea->vd.v4l2_dev = tea->v4l2_dev;
|
|
- tea->vd.ctrl_handler = &tea->ctrl_handler;
|
|
|
|
tea->fops = tea575x_fops;
|
|
tea->fops = tea575x_fops;
|
|
tea->fops.owner = owner;
|
|
tea->fops.owner = owner;
|
|
tea->vd.fops = &tea->fops;
|
|
tea->vd.fops = &tea->fops;
|
|
@@ -394,29 +393,33 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
|
|
if (tea->cannot_read_data)
|
|
if (tea->cannot_read_data)
|
|
v4l2_disable_ioctl(&tea->vd, VIDIOC_S_HW_FREQ_SEEK);
|
|
v4l2_disable_ioctl(&tea->vd, VIDIOC_S_HW_FREQ_SEEK);
|
|
|
|
|
|
- v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
|
|
|
|
- v4l2_ctrl_new_std(&tea->ctrl_handler, &tea575x_ctrl_ops, V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
|
|
|
|
- retval = tea->ctrl_handler.error;
|
|
|
|
- if (retval) {
|
|
|
|
- v4l2_err(tea->v4l2_dev, "can't initialize controls\n");
|
|
|
|
- v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
|
|
|
- return retval;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (tea->ext_init) {
|
|
|
|
- retval = tea->ext_init(tea);
|
|
|
|
|
|
+ if (!tea->cannot_mute) {
|
|
|
|
+ tea->vd.ctrl_handler = &tea->ctrl_handler;
|
|
|
|
+ v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
|
|
|
|
+ v4l2_ctrl_new_std(&tea->ctrl_handler, &tea575x_ctrl_ops,
|
|
|
|
+ V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
|
|
|
|
+ retval = tea->ctrl_handler.error;
|
|
if (retval) {
|
|
if (retval) {
|
|
|
|
+ v4l2_err(tea->v4l2_dev, "can't initialize controls\n");
|
|
v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
|
v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- v4l2_ctrl_handler_setup(&tea->ctrl_handler);
|
|
|
|
|
|
+ if (tea->ext_init) {
|
|
|
|
+ retval = tea->ext_init(tea);
|
|
|
|
+ if (retval) {
|
|
|
|
+ v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
|
|
|
+ return retval;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ v4l2_ctrl_handler_setup(&tea->ctrl_handler);
|
|
|
|
+ }
|
|
|
|
|
|
retval = video_register_device(&tea->vd, VFL_TYPE_RADIO, tea->radio_nr);
|
|
retval = video_register_device(&tea->vd, VFL_TYPE_RADIO, tea->radio_nr);
|
|
if (retval) {
|
|
if (retval) {
|
|
v4l2_err(tea->v4l2_dev, "can't register video device!\n");
|
|
v4l2_err(tea->v4l2_dev, "can't register video device!\n");
|
|
- v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
|
|
|
|
|
+ v4l2_ctrl_handler_free(tea->vd.ctrl_handler);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -426,7 +429,7 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
|
|
void snd_tea575x_exit(struct snd_tea575x *tea)
|
|
void snd_tea575x_exit(struct snd_tea575x *tea)
|
|
{
|
|
{
|
|
video_unregister_device(&tea->vd);
|
|
video_unregister_device(&tea->vd);
|
|
- v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
|
|
|
|
|
+ v4l2_ctrl_handler_free(tea->vd.ctrl_handler);
|
|
}
|
|
}
|
|
|
|
|
|
static int __init alsa_tea575x_module_init(void)
|
|
static int __init alsa_tea575x_module_init(void)
|