mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
ASoC: ab8500: Skip missing DMIC GPIOs on AB8505
GPIO27, GPIO29 and GPIO31 provide the digital microphone clock
outputs on AB8500, but these GPIOs do not exist on AB8505. The shared
codec driver nevertheless accesses their direction register while
setting up every AB8505 codec.
Identify the parent MFD device and leave the nonexistent GPIOs
untouched on AB8505.
Fixes: 679d7abdc7 ("ASoC: codecs: Add AB8500 codec-driver")
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
Link: https://patch.msgid.link/20260831-ab8500-codec-fixes-v1-6-f85024e717e3@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
ec75e653b7
commit
7111787542
|
|
@ -1540,6 +1540,8 @@ static int ab8500_audio_init_audioblock(struct snd_soc_component *component)
|
|||
static int ab8500_audio_setup_mics(struct snd_soc_component *component,
|
||||
struct amic_settings *amics)
|
||||
{
|
||||
struct device *dev = component->dev;
|
||||
struct ab8500 *ab8500 = dev_get_drvdata(dev->parent);
|
||||
struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component);
|
||||
u8 value8;
|
||||
unsigned int value;
|
||||
|
|
@ -1548,20 +1550,21 @@ static int ab8500_audio_setup_mics(struct snd_soc_component *component,
|
|||
|
||||
dev_dbg(component->dev, "%s: Enter.\n", __func__);
|
||||
|
||||
/* Set DMic-clocks to outputs */
|
||||
status = abx500_get_register_interruptible(component->dev, AB8500_MISC,
|
||||
AB8500_GPIO_DIR4_REG,
|
||||
&value8);
|
||||
if (status < 0)
|
||||
return status;
|
||||
value = value8 | GPIO27_DIR_OUTPUT | GPIO29_DIR_OUTPUT |
|
||||
GPIO31_DIR_OUTPUT;
|
||||
status = abx500_set_register_interruptible(component->dev,
|
||||
AB8500_MISC,
|
||||
AB8500_GPIO_DIR4_REG,
|
||||
value);
|
||||
if (status < 0)
|
||||
return status;
|
||||
/* Set DMic-clocks to outputs; these GPIOs do not exist on AB8505. */
|
||||
if (!is_ab8505(ab8500)) {
|
||||
status = abx500_get_register_interruptible(dev, AB8500_MISC,
|
||||
AB8500_GPIO_DIR4_REG,
|
||||
&value8);
|
||||
if (status < 0)
|
||||
return status;
|
||||
value = value8 | GPIO27_DIR_OUTPUT | GPIO29_DIR_OUTPUT |
|
||||
GPIO31_DIR_OUTPUT;
|
||||
status = abx500_set_register_interruptible(dev, AB8500_MISC,
|
||||
AB8500_GPIO_DIR4_REG,
|
||||
value);
|
||||
if (status < 0)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Attach regulators to AMic DAPM-paths */
|
||||
dev_dbg(component->dev, "%s: Mic 1a regulator: %s\n", __func__,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user