ASoC: cs35l56: Don't rely on GPIOD_OUT_LOW to set RESET initially low
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Tue, 8 Aug 2023 16:46:59 +0000 (17:46 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 8 Aug 2023 21:34:01 +0000 (22:34 +0100)
The ACPI setting for a GPIO default state has higher priority than the
flag passed to devm_gpiod_get_optional() so ACPI can override the
GPIOD_OUT_LOW. Explicitly set the GPIO low when hard resetting.

Although GPIOD_OUT_LOW can't be relied on this doesn't seem like a
reason to stop passing it to devm_gpiod_get_optional(). So we still pass
it to state our intent, but can deal with it having no effect.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20230808164702.21272-3-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs35l56.c

index be400208205ac6c6aaed1cefd70689c5273b52ab..9560059c867b443e6caeadcc4bab95c7347ef3cf 100644 (file)
@@ -1069,6 +1069,8 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56)
                return dev_err_probe(cs35l56->base.dev, ret, "Failed to enable supplies\n");
 
        if (cs35l56->base.reset_gpio) {
+               /* ACPI can override GPIOD_OUT_LOW flag so force it to start low */
+               gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 0);
                cs35l56_wait_min_reset_pulse();
                gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 1);
        }