From: Peter Ujfalusi <peter.ujfalusi@ti.com>
To: Janusz Krzysztofik <jmkrzyszt@gmail.com>,
Mark Brown <broonie@kernel.org>,
Liam Girdwood <lgirdwood@gmail.com>
Cc: Tony Lindgren <tony@atomide.com>,
alsa-devel@alsa-project.org, linux-omap@vger.kernel.org,
Aaro Koskinen <aaro.koskinen@iki.fi>
Subject: Re: [alsa-devel] [RFC PATCH] ASoC: ams-delta: Take control over audio mute GPIO pins
Date: Mon, 9 Sep 2019 10:56:09 +0300 [thread overview]
Message-ID: <1a93e50f-b9da-a473-e60a-90fa490586ad@ti.com> (raw)
In-Reply-To: <20190907111650.15440-1-jmkrzyszt@gmail.com>
On 07/09/2019 14.16, Janusz Krzysztofik wrote:
> Since commit 1137ceee76ba ("ARM: OMAP1: ams-delta: Don't request unused
> GPIOs"), on-board audio has appeared muted. It has been discovered that
> believed to be unused GPIO pins "hookflash1" and "hookflash2" need to be
> set low for audible sound in handsfree and handset mode respectively.
>
> According to Amstrad E3 wiki, the purpose of both pins hasn't been
> clearly identified. Original Amstrad software used to produce a high
> pulse on them when the phone was taken off hook or recall was pressed.
> With the current findings, we can assume the pins provide a kind of
> audio mute function, separately for handset and handsfree operation
> modes.
>
> Commit 2afdb4c41d78 ("ARM: OMAP1: ams-delta: Fix audio permanently
> muted") attempted to fix the issue temporarily by hogging the GPIO pin
> "hookflash1" renamed to "audio_mute", however the fix occurred
> incomplete as it restored audible sound only for handsfree mode.
>
> Stop hogging that pin, rename the pins to "handsfree_mute" and
> "handset_mute" respectively and implement appropriate DAPM event
> callbacks for "Speaker" and "Earpiece" DAPM widgets.
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> Fixes: 1137ceee76ba ("ARM: OMAP1: ams-delta: Don't request unused GPIOs")
> Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com>
> ---
> arch/arm/mach-omap1/board-ams-delta.c | 10 +++++----
> sound/soc/ti/ams-delta.c | 31 +++++++++++++++++++++++++--
> 2 files changed, 35 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
> index e47a6fbcfd6e..a2aa7a12b374 100644
> --- a/arch/arm/mach-omap1/board-ams-delta.c
> +++ b/arch/arm/mach-omap1/board-ams-delta.c
> @@ -246,8 +246,8 @@ static struct platform_device latch2_gpio_device = {
> #define LATCH2_PIN_SCARD_CMDVCC 11
> #define LATCH2_PIN_MODEM_NRESET 12
> #define LATCH2_PIN_MODEM_CODEC 13
> -#define LATCH2_PIN_AUDIO_MUTE 14
> -#define LATCH2_PIN_HOOKFLASH 15
> +#define LATCH2_PIN_HANDSFREE_MUTE 14
> +#define LATCH2_PIN_HANDSET_MUTE 15
>
> static struct regulator_consumer_supply modem_nreset_consumers[] = {
> REGULATOR_SUPPLY("RESET#", "serial8250.1"),
> @@ -476,6 +476,10 @@ static struct gpiod_lookup_table ams_delta_audio_gpio_table = {
> "hook_switch", 0),
> GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_MODEM_CODEC,
> "modem_codec", 0),
> + GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_HANDSFREE_MUTE,
> + "handsfree_mute", 0),
> + GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_HANDSET_MUTE,
> + "handset_mute", 0),
> { },
> },
> };
> @@ -590,8 +594,6 @@ static int gpiochip_match_by_label(struct gpio_chip *chip, void *data)
> static struct gpiod_hog ams_delta_gpio_hogs[] = {
> GPIO_HOG(LATCH2_LABEL, LATCH2_PIN_KEYBRD_DATAOUT, "keybrd_dataout",
> GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW),
> - GPIO_HOG(LATCH2_LABEL, LATCH2_PIN_AUDIO_MUTE, "audio_mute",
> - GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW),
> {},
> };
>
> diff --git a/sound/soc/ti/ams-delta.c b/sound/soc/ti/ams-delta.c
> index dee8fc70a64f..8e2fb81ad05c 100644
> --- a/sound/soc/ti/ams-delta.c
> +++ b/sound/soc/ti/ams-delta.c
> @@ -23,14 +23,31 @@
> #include "omap-mcbsp.h"
> #include "../codecs/cx20442.h"
>
> +static struct gpio_desc *handset_mute;
> +static struct gpio_desc *handsfree_mute;
> +
> +static int ams_delta_event_handset(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *k, int event)
> +{
> + gpiod_set_value_cansleep(handset_mute, !SND_SOC_DAPM_EVENT_ON(event));
> + return 0;
> +}
> +
> +static int ams_delta_event_handsfree(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *k, int event)
> +{
> + gpiod_set_value_cansleep(handsfree_mute, !SND_SOC_DAPM_EVENT_ON(event));
> + return 0;
> +}
> +
> /* Board specific DAPM widgets */
> static const struct snd_soc_dapm_widget ams_delta_dapm_widgets[] = {
> /* Handset */
> SND_SOC_DAPM_MIC("Mouthpiece", NULL),
> - SND_SOC_DAPM_HP("Earpiece", NULL),
> + SND_SOC_DAPM_HP("Earpiece", ams_delta_event_handset),
> /* Handsfree/Speakerphone */
> SND_SOC_DAPM_MIC("Microphone", NULL),
> - SND_SOC_DAPM_SPK("Speaker", NULL),
> + SND_SOC_DAPM_SPK("Speaker", ams_delta_event_handsfree),
> };
>
> /* How they are connected to codec pins */
> @@ -542,6 +559,16 @@ static int ams_delta_probe(struct platform_device *pdev)
>
> card->dev = &pdev->dev;
>
> + handset_mute = devm_gpiod_get(card->dev, "handset_mute",
> + GPIOD_OUT_HIGH);
> + if (IS_ERR(handset_mute))
> + return PTR_ERR(handset_mute);
> +
> + handsfree_mute = devm_gpiod_get(card->dev, "handsfree_mute",
> + GPIOD_OUT_HIGH);
> + if (IS_ERR(handsfree_mute))
> + return PTR_ERR(handsfree_mute);
> +
> ret = snd_soc_register_card(card);
> if (ret) {
> dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
>
- Péter
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2019-09-09 7:56 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-07 11:16 [alsa-devel] [RFC PATCH] ASoC: ams-delta: Take control over audio mute GPIO pins Janusz Krzysztofik
2019-09-09 7:56 ` Peter Ujfalusi [this message]
2019-09-09 10:07 ` [alsa-devel] Applied "ASoC: ams-delta: Take control over audio mute GPIO pins" to the asoc tree Mark Brown
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=1a93e50f-b9da-a473-e60a-90fa490586ad@ti.com \
--to=peter.ujfalusi@ti.com \
--cc=aaro.koskinen@iki.fi \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=jmkrzyszt@gmail.com \
--cc=lgirdwood@gmail.com \
--cc=linux-omap@vger.kernel.org \
--cc=tony@atomide.com \
/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).