alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
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

  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).