diff mbox

GPIO issue with RT5670

Message ID s5ha82svcod.wl-tiwai@suse.de (mailing list archive)
State Accepted
Commit 804e73adf5cf4b3aea3b6ce058f4dc0191143821
Headers show

Commit Message

Takashi Iwai Aug. 21, 2017, 9:22 p.m. UTC
On Mon, 21 Aug 2017 23:18:45 +0200,
Pierre-Louis Bossart wrote:
> 
> the commit f10e4bf6632b5be11cea875b66ba959833a69258
>     gpio: acpi: Even more tighten up ACPI GPIO lookups
> 
> now generates the following issue
> 
> [    9.694204] rt5670 i2c-10EC5672:00: ASoC: Cannot get gpio at index 0: -2
> [    9.694293] rt5670 i2c-10EC5672:00: Adding jack GPIO failed
> 
> This is the 3rd occurrence of an audio issue with this commit [1][2],
> what is the recommended fix here since this codec is not only used in
> ACPI-based devices and do we need to check for more issues in audio
> drivers?

Likely you need to give the proper mapping in the machine driver, and
correct the hp_gpio.name to the corresponding one.

It's cht_bsw_rt5672?  If so, the required change would be something
like below.


Takashi

---

Comments

Pierre-Louis Bossart Aug. 21, 2017, 10:02 p.m. UTC | #1
On 08/21/2017 04:22 PM, Takashi Iwai wrote:
> On Mon, 21 Aug 2017 23:18:45 +0200,
> Pierre-Louis Bossart wrote:
>> the commit f10e4bf6632b5be11cea875b66ba959833a69258
>>      gpio: acpi: Even more tighten up ACPI GPIO lookups
>>
>> now generates the following issue
>>
>> [    9.694204] rt5670 i2c-10EC5672:00: ASoC: Cannot get gpio at index 0: -2
>> [    9.694293] rt5670 i2c-10EC5672:00: Adding jack GPIO failed
>>
>> This is the 3rd occurrence of an audio issue with this commit [1][2],
>> what is the recommended fix here since this codec is not only used in
>> ACPI-based devices and do we need to check for more issues in audio
>> drivers?
> Likely you need to give the proper mapping in the machine driver, and
> correct the hp_gpio.name to the corresponding one.
>
> It's cht_bsw_rt5672?  If so, the required change would be something
> like below.

yep, this works, thanks Takashi. With an additional DMI fix i'll submit 
later I get sound on the Dell 5585.

Tested-by: Pierre Bossart <pierre-louis.bossart@linux.intel.com>
>
>
> Takashi
>
> ---
> diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c
> index 0ec7985ed306..054b613cb0d0 100644
> --- a/sound/soc/codecs/rt5670.c
> +++ b/sound/soc/codecs/rt5670.c
> @@ -567,7 +567,7 @@ int rt5670_set_jack_detect(struct snd_soc_codec *codec,
>   
>   	rt5670->jack = jack;
>   	rt5670->hp_gpio.gpiod_dev = codec->dev;
> -	rt5670->hp_gpio.name = "headphone detect";
> +	rt5670->hp_gpio.name = "headset";
>   	rt5670->hp_gpio.report = SND_JACK_HEADSET |
>   		SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2;
>   	rt5670->hp_gpio.debounce_time = 150;
> diff --git a/sound/soc/intel/boards/cht_bsw_rt5672.c b/sound/soc/intel/boards/cht_bsw_rt5672.c
> index bc2a52de06a3..f597d5582223 100644
> --- a/sound/soc/intel/boards/cht_bsw_rt5672.c
> +++ b/sound/soc/intel/boards/cht_bsw_rt5672.c
> @@ -184,6 +184,13 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
>   	return 0;
>   }
>   
> +static const struct acpi_gpio_params headset_gpios = { 0, 0, false };
> +
> +static const struct acpi_gpio_mapping cht_rt5672_gpios[] = {
> +	{ "headset-gpios", &headset_gpios, 1 },
> +	{},
> +};
> +
>   static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
>   {
>   	int ret;
> @@ -191,6 +198,9 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
>   	struct snd_soc_codec *codec = codec_dai->codec;
>   	struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
>   
> +	if (devm_acpi_dev_add_driver_gpios(codec->dev, cht_rt5672_gpios))
> +		dev_warn(runtime->dev, "Unable to add GPIO mapping table\n");
> +
>   	/* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
>   	ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24);
>   	if (ret < 0) {
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
diff mbox

Patch

diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c
index 0ec7985ed306..054b613cb0d0 100644
--- a/sound/soc/codecs/rt5670.c
+++ b/sound/soc/codecs/rt5670.c
@@ -567,7 +567,7 @@  int rt5670_set_jack_detect(struct snd_soc_codec *codec,
 
 	rt5670->jack = jack;
 	rt5670->hp_gpio.gpiod_dev = codec->dev;
-	rt5670->hp_gpio.name = "headphone detect";
+	rt5670->hp_gpio.name = "headset";
 	rt5670->hp_gpio.report = SND_JACK_HEADSET |
 		SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2;
 	rt5670->hp_gpio.debounce_time = 150;
diff --git a/sound/soc/intel/boards/cht_bsw_rt5672.c b/sound/soc/intel/boards/cht_bsw_rt5672.c
index bc2a52de06a3..f597d5582223 100644
--- a/sound/soc/intel/boards/cht_bsw_rt5672.c
+++ b/sound/soc/intel/boards/cht_bsw_rt5672.c
@@ -184,6 +184,13 @@  static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
 	return 0;
 }
 
+static const struct acpi_gpio_params headset_gpios = { 0, 0, false };
+
+static const struct acpi_gpio_mapping cht_rt5672_gpios[] = {
+	{ "headset-gpios", &headset_gpios, 1 },
+	{},
+};
+
 static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
 {
 	int ret;
@@ -191,6 +198,9 @@  static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
 	struct snd_soc_codec *codec = codec_dai->codec;
 	struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
 
+	if (devm_acpi_dev_add_driver_gpios(codec->dev, cht_rt5672_gpios))
+		dev_warn(runtime->dev, "Unable to add GPIO mapping table\n");
+
 	/* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
 	ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24);
 	if (ret < 0) {