Signed-off-by: Frank Schäfer <[email protected]>
---
drivers/media/pci/bt8xx/bttv-driver.c | 22 +++++++++++-----------
1 Datei geändert, 11 Zeilen hinzugefügt(+), 11 Zeilen entfernt(-)
diff --git a/drivers/media/pci/bt8xx/bttv-driver.c
b/drivers/media/pci/bt8xx/bttv-driver.c
index 8610b6a..2c09bc5 100644
--- a/drivers/media/pci/bt8xx/bttv-driver.c
+++ b/drivers/media/pci/bt8xx/bttv-driver.c
@@ -992,21 +992,20 @@ static char *audio_modes[] = {
static int
audio_mux(struct bttv *btv, int input, int mute)
{
- int gpio_val, signal;
+ int gpio_val, signal, mute_gpio;
struct v4l2_ctrl *ctrl;
gpio_inout(bttv_tvcards[btv->c.type].gpiomask,
bttv_tvcards[btv->c.type].gpiomask);
signal = btread(BT848_DSTATUS) & BT848_DSTATUS_HLOC;
- btv->mute = mute;
btv->audio = input;
/* automute */
- mute = mute || (btv->opt_automute && (!signal || !btv->users)
+ mute_gpio = mute || (btv->opt_automute && (!signal || !btv->users)
&& !btv->has_radio_tuner);
- if (mute)
+ if (mute_gpio)
gpio_val = bttv_tvcards[btv->c.type].gpiomute;
else
gpio_val = bttv_tvcards[btv->c.type].gpiomux[input];
@@ -1022,7 +1021,7 @@ audio_mux(struct bttv *btv, int input, int mute)
}
if (bttv_gpio)
- bttv_gpio_tracking(btv, audio_modes[mute ? 4 : input]);
+ bttv_gpio_tracking(btv, audio_modes[mute_gpio ? 4 : input]);
if (in_interrupt())
return 0;
@@ -1031,7 +1030,7 @@ audio_mux(struct bttv *btv, int input, int mute)
ctrl = v4l2_ctrl_find(btv->sd_msp34xx->ctrl_handler,
V4L2_CID_AUDIO_MUTE);
if (ctrl)
- v4l2_ctrl_s_ctrl(ctrl, btv->mute);
+ v4l2_ctrl_s_ctrl(ctrl, mute);
/* Note: the inputs tuner/radio/extern/intern are translated
to msp routings. This assumes common behavior for all msp3400
@@ -1080,7 +1079,7 @@ audio_mux(struct bttv *btv, int input, int mute)
ctrl = v4l2_ctrl_find(btv->sd_tvaudio->ctrl_handler,
V4L2_CID_AUDIO_MUTE);
if (ctrl)
- v4l2_ctrl_s_ctrl(ctrl, btv->mute);
+ v4l2_ctrl_s_ctrl(ctrl, mute);
v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing,
input, 0, 0);
}
@@ -1088,7 +1087,7 @@ audio_mux(struct bttv *btv, int input, int mute)
ctrl = v4l2_ctrl_find(btv->sd_tda7432->ctrl_handler,
V4L2_CID_AUDIO_MUTE);
if (ctrl)
- v4l2_ctrl_s_ctrl(ctrl, btv->mute);
+ v4l2_ctrl_s_ctrl(ctrl, mute);
}
return 0;
}
@@ -1300,6 +1299,7 @@ static int bttv_s_ctrl(struct v4l2_ctrl *c)
break;
case V4L2_CID_AUDIO_MUTE:
audio_mute(btv, c->val);
+ btv->mute = c->val;
break;
case V4L2_CID_AUDIO_VOLUME:
btv->volume_gpio(btv, c->val);
@@ -3062,8 +3062,7 @@ static int bttv_open(struct file *file)
sizeof(struct bttv_buffer),
fh, &btv->lock);
set_tvnorm(btv,btv->tvnorm);
- set_input(btv, btv->input, btv->tvnorm);
-
+ set_input(btv, btv->input, btv->tvnorm); /* also (un)mutes audio */
/* The V4L2 spec requires one global set of cropping parameters
which only change on request. These are stored in btv->crop[1].
@@ -3124,7 +3123,7 @@ static int bttv_release(struct file *file)
bttv_field_count(btv);
if (!btv->users)
- audio_mute(btv, btv->mute);
+ audio_mute(btv, 1);
v4l2_fh_del(&fh->fh);
v4l2_fh_exit(&fh->fh);
@@ -4209,6 +4208,7 @@ static int bttv_probe(struct pci_dev *dev, const struct
pci_device_id *pci_id)
btv->std = V4L2_STD_PAL;
init_irqreg(btv);
v4l2_ctrl_handler_setup(hdl);
+ audio_mute(btv, 1);
if (hdl->error) {
result = hdl->error;
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html