From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Stas Sergeev <stsp@list.ru>
Cc: Lennart Poettering <lpoetter@redhat.com>,
linux-media@vger.kernel.org,
"Nickolay V. Shmyrev" <nshmyrev@yandex.ru>,
Devin Heitmueller <dheitmueller@kernellabs.com>,
ALSA devel <alsa-devel@alsa-project.org>
Subject: Re: [patch][saa7134] do not change mute state for capturing audio
Date: Wed, 20 Jul 2011 07:41:57 -0300 [thread overview]
Message-ID: <4E26B0F5.8080300@redhat.com> (raw)
In-Reply-To: <4E26AEC0.5000405@infradead.org>
Em 20-07-2011 07:32, Mauro Carvalho Chehab escreveu:
> Em 20-07-2011 02:28, Stas Sergeev escreveu:
>> 20.07.2011 04:55, Mauro Carvalho Chehab wrote:
> [PATCHv2 - BROKEN] saa7134: Don't touch at the analog mute at the alsa driver
>
> Via the alsa driver, it is possible to start capturing from an audio input.
> When capture is started, the driver will unmute the audio input associated
> with the selected video input, if it were muted.
>
> However, if the device is using a wire for the audio output, it may produce
> audio at the speakers. This patch changes the mute logic to:
> 1) on saa7134, don't touch at the ANALOG_MUTE at alsa unmute call;
> 2) don't change the GPIO's.
>
> I suspect, however, that not changing the GPIO's is a very bad idea, and
> it will actually break audio for devices with external GPIO-based input
> switches, but, as this version was already done, it might be useful for some
> tests. A version 3 will follow shortly.
[PATCHv3] saa7134: Don't touch at the analog mute at the alsa driver
Via the alsa driver, it is possible to start capturing from an audio input.
When capture is started, the driver will unmute the audio input associated
with the selected video input, if it were muted.
However, if the device is using a wire for the audio output, it may produce
audio at the speakers. This patch changes the mute logic to don't touch
at the ANALOG_MUTE at alsa unmute call, for saa7134. Not sure if this will
produce any effect, as it will depend on how the board is wired, but it is
a worth trial.
Patch is untested.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/video/saa7134/saa7134-alsa.c b/drivers/media/video/saa7134/saa7134-alsa.c
index 10460fd..cbc665a 100644
--- a/drivers/media/video/saa7134/saa7134-alsa.c
+++ b/drivers/media/video/saa7134/saa7134-alsa.c
@@ -77,7 +77,6 @@ typedef struct snd_card_saa7134 {
unsigned long iobase;
s16 irq;
- u16 mute_was_on;
spinlock_t lock;
} snd_card_saa7134_t;
@@ -718,9 +717,10 @@ static int snd_card_saa7134_capture_close(struct snd_pcm_substream * substream)
snd_card_saa7134_t *saa7134 = snd_pcm_substream_chip(substream);
struct saa7134_dev *dev = saa7134->dev;
- if (saa7134->mute_was_on) {
+ if (dev->mute_was_on) {
dev->ctl_mute = 1;
saa7134_tvaudio_setmute(dev);
+ dev->mute_was_on = false;
}
return 0;
}
@@ -775,7 +775,7 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)
runtime->hw = snd_card_saa7134_capture;
if (dev->ctl_mute != 0) {
- saa7134->mute_was_on = 1;
+ dev->mute_was_on = true;
dev->ctl_mute = 0;
saa7134_tvaudio_setmute(dev);
}
diff --git a/drivers/media/video/saa7134/saa7134-tvaudio.c b/drivers/media/video/saa7134/saa7134-tvaudio.c
index 57e646b..11631f4 100644
--- a/drivers/media/video/saa7134/saa7134-tvaudio.c
+++ b/drivers/media/video/saa7134/saa7134-tvaudio.c
@@ -190,6 +190,9 @@ static void mute_input_7134(struct saa7134_dev *dev)
struct saa7134_input *in;
int ausel=0, ics=0, ocs=0;
int mask;
+ bool change_analog_mute;
+
+ change_analog_mute = dev->mute_was_on ? false : true;
/* look what is to do ... */
in = dev->input;
@@ -204,7 +207,8 @@ static void mute_input_7134(struct saa7134_dev *dev)
in = &card(dev).mute;
}
- if (dev->hw_mute == mute &&
+
+ if (dev->hw_mute == mute && !dev->mute_was_on &&
dev->hw_input == in && !dev->insuspend) {
dprintk("mute/input: nothing to do [mute=%d,input=%s]\n",
mute,in->name);
@@ -216,13 +220,18 @@ static void mute_input_7134(struct saa7134_dev *dev)
dev->hw_mute = mute;
dev->hw_input = in;
- if (PCI_DEVICE_ID_PHILIPS_SAA7134 == dev->pci->device)
+ if (PCI_DEVICE_ID_PHILIPS_SAA7134 == dev->pci->device) {
+ u32 mask = ~0;
+ u32 mute_val = SAA7134_MUTE_MASK;
+
+ if (!change_analog_mute)
+ mask ^= SAA7134_MUTE_ANALOG;
+ if (mute)
+ mute_val |= SAA7134_MUTE_I2S | SAA7134_MUTE_ANALOG;
+
/* 7134 mute */
- saa_writeb(SAA7134_AUDIO_MUTE_CTRL, mute ?
- SAA7134_MUTE_MASK |
- SAA7134_MUTE_ANALOG |
- SAA7134_MUTE_I2S :
- SAA7134_MUTE_MASK);
+ saa_andorb(SAA7134_AUDIO_MUTE_CTRL, mask, mute_val);
+ }
/* switch internal audio mux */
switch (in->amux) {
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
index bc8d6bb..ae34f68 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -602,6 +602,7 @@ struct saa7134_dev {
int ctl_saturation;
int ctl_freq;
int ctl_mute; /* audio */
+ bool mute_was_on;
int ctl_volume;
int ctl_invert; /* private */
int ctl_mirror;
next prev parent reply other threads:[~2011-07-20 10:41 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4E19D2F7.6060803@list.ru>
[not found] ` <4E1E05AC.2070002@infradead.org>
[not found] ` <4E1E0A1D.6000604@list.ru>
[not found] ` <4E1E1571.6010400@infradead.org>
[not found] ` <4E1E8108.3060305@list.ru>
[not found] ` <4E1F9A25.1020208@infradead.org>
2011-07-17 9:44 ` [patch][saa7134] do not change mute state for capturing audio Stas Sergeev
2011-07-17 11:51 ` Mauro Carvalho Chehab
2011-07-17 12:24 ` Stas Sergeev
2011-07-18 23:16 ` Lennart Poettering
2011-07-19 6:31 ` Stas Sergeev
2011-07-19 12:25 ` Lennart Poettering
2011-07-19 13:00 ` Mauro Carvalho Chehab
2011-07-19 13:13 ` [alsa-devel] " Lennart Poettering
2011-07-19 13:49 ` Stas Sergeev
2011-07-19 14:10 ` Mauro Carvalho Chehab
2011-07-19 14:56 ` Stas Sergeev
2011-07-19 15:27 ` Mauro Carvalho Chehab
2011-07-19 15:50 ` Stas Sergeev
2011-07-19 18:06 ` Mauro Carvalho Chehab
2011-07-19 18:38 ` Stas Sergeev
2011-07-19 19:29 ` Mauro Carvalho Chehab
2011-07-19 21:57 ` Stas Sergeev
2011-07-20 0:55 ` Mauro Carvalho Chehab
2011-07-20 5:28 ` Stas Sergeev
2011-07-20 10:32 ` Mauro Carvalho Chehab
2011-07-20 10:41 ` Mauro Carvalho Chehab [this message]
2011-07-20 10:45 ` Stas Sergeev
2011-07-20 10:48 ` Mauro Carvalho Chehab
2011-07-20 10:55 ` Stas Sergeev
[not found] ` <4E292BED.60108@list.ru>
[not found] ` <4E296D00.9040608@infradead.org>
[not found] ` <4E296F6C.9080107@list.ru>
[not found] ` <4E2971D4.1060109@infradead.org>
[not found] ` <4E29738F.7040605@list.ru>
[not found] ` <4E297505.7090307@infradead.org>
[not found] ` <4E29E02A.1020402@list.ru>
[not found] ` <4E29E02A .1020402@list.ru>
[not found] ` <4E2A23C7.3040209@infradead.org>
[not found] ` <4E2A7BF0.8080606@list.ru>
[not found] ` <4E2AC742.8020407@infradead.org>
[not found] ` <4E2ACAAD.4050602@list.ru>
[not found] ` <4E2AE40F.7030108@infradead.org>
[not found] ` <4E2C5A35.9030404@list.ru>
[not found] ` <4E2C6638.2040707@infrade ad.org>
2011-07-24 18:36 ` Mauro Carvalho Chehab
2011-07-24 19:00 ` Stas Sergeev
2011-07-25 11:15 ` Stas Sergeev
2011-09-18 15:18 ` Stas Sergeev
2011-09-24 10:57 ` Mauro Carvalho Chehab
2011-09-24 11:12 ` Stas Sergeev
2011-09-24 12:12 ` Mauro Carvalho Chehab
2011-09-24 12:36 ` Stas Sergeev
2011-09-24 12:48 ` Mauro Carvalho Chehab
2011-09-24 13:20 ` Stas Sergeev
2011-09-24 15:09 ` Mauro Carvalho Chehab
2011-09-24 15:51 ` Stas Sergeev
2011-12-03 20:40 ` Stas Sergeev
2011-09-24 12:05 ` Mauro Carvalho Chehab
2011-09-24 12:33 ` Stas Sergeev
2011-09-24 12:46 ` Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E26B0F5.8080300@redhat.com \
--to=mchehab@redhat.com \
--cc=alsa-devel@alsa-project.org \
--cc=dheitmueller@kernellabs.com \
--cc=linux-media@vger.kernel.org \
--cc=lpoetter@redhat.com \
--cc=nshmyrev@yandex.ru \
--cc=stsp@list.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).