]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - sound/i2c/other/tea575x-tuner.c
[media] snd_tea575x: Add a cannot_mute flag
[karo-tx-linux.git] / sound / i2c / other / tea575x-tuner.c
index 080aae9d1198101f7930c3f454a588683ce1761e..d14edb7d6484a1963cd9ae0c4b61750a349bfbf0 100644 (file)
@@ -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));
        tea->vd.lock = &tea->mutex;
        tea->vd.v4l2_dev = tea->v4l2_dev;
-       tea->vd.ctrl_handler = &tea->ctrl_handler;
        tea->fops = tea575x_fops;
        tea->fops.owner = owner;
        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)
                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) {
+                       v4l2_err(tea->v4l2_dev, "can't initialize controls\n");
                        v4l2_ctrl_handler_free(&tea->ctrl_handler);
                        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);
        if (retval) {
                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;
        }
 
@@ -426,7 +429,7 @@ int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
 void snd_tea575x_exit(struct snd_tea575x *tea)
 {
        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)