[media] snd_tea575x: Add a cannot_mute flag
Some devices which use the tea575x tuner chip don't allow direct control over the IO pins, and thus cannot mute the audio output. Signed-off-by: Hans de Goede <hdegoede@redhat.com> CC: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
31a62d4157
commit
3d0fe51cfa
2 changed files with 20 additions and 16 deletions
|
@ -53,6 +53,7 @@ struct snd_tea575x {
|
||||||
int radio_nr; /* radio_nr */
|
int radio_nr; /* radio_nr */
|
||||||
bool tea5759; /* 5759 chip is present */
|
bool tea5759; /* 5759 chip is present */
|
||||||
bool cannot_read_data; /* Device cannot read the data pin */
|
bool cannot_read_data; /* Device cannot read the data pin */
|
||||||
|
bool cannot_mute; /* Device cannot mute */
|
||||||
bool mute; /* Device is muted? */
|
bool mute; /* Device is muted? */
|
||||||
bool stereo; /* receiving stereo */
|
bool stereo; /* receiving stereo */
|
||||||
bool tuned; /* tuned to a station */
|
bool tuned; /* tuned to a station */
|
||||||
|
|
|
@ -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);
|
if (!tea->cannot_mute) {
|
||||||
v4l2_ctrl_new_std(&tea->ctrl_handler, &tea575x_ctrl_ops, V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
|
tea->vd.ctrl_handler = &tea->ctrl_handler;
|
||||||
retval = tea->ctrl_handler.error;
|
v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
|
||||||
if (retval) {
|
v4l2_ctrl_new_std(&tea->ctrl_handler, &tea575x_ctrl_ops,
|
||||||
v4l2_err(tea->v4l2_dev, "can't initialize controls\n");
|
V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
|
||||||
v4l2_ctrl_handler_free(&tea->ctrl_handler);
|
retval = tea->ctrl_handler.error;
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tea->ext_init) {
|
|
||||||
retval = tea->ext_init(tea);
|
|
||||||
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)
|
||||||
|
|
Loading…
Reference in a new issue