[PATCH v2] ASoC: codecs: wcd937x: Add conditional regulator control for wcd937x

karthik.s
2026-04-02T07:23:11Z

Add has_always_on_supplies for managing regulators. Indicates that the
codec power supplies are provided by the board as always-on rails and
are not switchable by the codec or its associated regulators. This implies
that the codec supply regulators are always enabled by the system and
must not be requested or enabled by the codec driver.

Signed-off-by: karthik.s <karthik.s@oss.qualcomm.com>
---
.../devicetree/bindings/sound/qcom,wcd937x.yaml | 8 ++++++++
sound/soc/codecs/wcd937x.c | 13 +++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/qcom,wcd937x.yaml b/Documentation/devicetree/bindings/sound/qcom,wcd937x.yaml
index f94203798f24..38b3452788e9 100644
--- a/Documentation/devicetree/bindings/sound/qcom,wcd937x.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,wcd937x.yaml
@@ -28,6 +28,14 @@ properties:
vdd-px-supply:
description: A reference to the 1.8V I/O supply

+ qcom,always-on-supply:
+ type: boolean
+ description: Indicates that the codec power supplies are provided by the board
+ as always-on rails and are not switchable by the codec or its
+ associated regulators. This implies that the codec supply regulators
+ are always enabled by the system and must not be requested or enabled
+ by the codec driver.
+
required:
- compatible
- vdd-px-supply
diff --git a/sound/soc/codecs/wcd937x.c b/sound/soc/codecs/wcd937x.c
index 10a2d598caa7..1514ceb7d790 100644
--- a/sound/soc/codecs/wcd937x.c
+++ b/sound/soc/codecs/wcd937x.c
@@ -100,6 +100,7 @@ struct wcd937x_priv {
int aux_pdm_wd_int;
bool comp1_enable;
bool comp2_enable;
+ bool has_always_on_supplies;

struct gpio_desc *us_euro_gpio;
struct gpio_desc *reset_gpio;
@@ -2907,10 +2908,14 @@ static int wcd937x_probe(struct platform_device *pdev)
cfg = &wcd937x->mbhc_cfg;
cfg->swap_gnd_mic = wcd937x_swap_gnd_mic;

- ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(wcd937x_supplies),
- wcd937x_supplies);
- if (ret)
- return dev_err_probe(dev, ret, "Failed to get and enable supplies\n");
+ wcd937x->has_always_on_supplies = of_property_read_bool(dev->of_node,
+ "qcom,always-on-supply");
+ if (!wcd937x->has_always_on_supplies) {
+ ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(wcd937x_supplies),
+ wcd937x_supplies);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to get and enable supplies\n");
+ }

ret = wcd_dt_parse_micbias_info(&wcd937x->common);
if (ret)
--
2.34.1