ASoC: rt5670: Fix GPIO headset detection regression
RT5670 codec driver and its machine driver for Intel CHT assume the implicit GPIO mapping on the index 0 while BIOS on most devices don't provide it. The recent commitf10e4bf663
("gpio: acpi: Even more tighten up ACPI GPIO lookups") restricts such cases and it resulted in a regression where the headset jack setup fails like: rt5670 i2c-10EC5672:00: ASoC: Cannot get gpio at index 0: -2 rt5670 i2c-10EC5672:00: Adding jack GPIO failed For fixing this, we need to provide the GPIO mapping explicitly in the machine driver. Also this patch corrects the string to be passed to gpiolib to match with the pre-given mapping, too. Fixes:f10e4bf663
("gpio: acpi: Even more tighten up ACPI GPIO lookups") Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=115531 Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
5771a8c088
commit
804e73adf5
|
@ -567,7 +567,7 @@ int rt5670_set_jack_detect(struct snd_soc_codec *codec,
|
||||||
|
|
||||||
rt5670->jack = jack;
|
rt5670->jack = jack;
|
||||||
rt5670->hp_gpio.gpiod_dev = codec->dev;
|
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 |
|
rt5670->hp_gpio.report = SND_JACK_HEADSET |
|
||||||
SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2;
|
SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2;
|
||||||
rt5670->hp_gpio.debounce_time = 150;
|
rt5670->hp_gpio.debounce_time = 150;
|
||||||
|
|
|
@ -184,6 +184,13 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
|
||||||
return 0;
|
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)
|
static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
|
||||||
{
|
{
|
||||||
int ret;
|
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 snd_soc_codec *codec = codec_dai->codec;
|
||||||
struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
|
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 */
|
/* 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);
|
ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
|
Loading…
Reference in New Issue