Skip to content

Commit 216d041

Browse files
mohsRafibroonie
authored andcommitted
ASoC: codecs: wcd937x: Remove separate handling for vdd-buck supply
Remove separate handling for vdd-buck regulator supply which is not required. The vdd-buck regulator supply enabled using bulk enable. Add the error handling in wcd937x_probe() and disable the regulators in error case. Reported-by: Christophe JAILLET <[email protected]> Closes: https://lore.kernel.org/linux-sound/[email protected]/ Signed-off-by: Mohammad Rafi Shaik <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent a5f727f commit 216d041

File tree

2 files changed

+14
-49
lines changed

2 files changed

+14
-49
lines changed

sound/soc/codecs/wcd937x.c

Lines changed: 13 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -869,37 +869,6 @@ static int wcd937x_enable_rx3(struct snd_soc_dapm_widget *w,
869869
return 0;
870870
}
871871

872-
static int wcd937x_codec_enable_vdd_buck(struct snd_soc_dapm_widget *w,
873-
struct snd_kcontrol *kcontrol,
874-
int event)
875-
{
876-
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
877-
struct wcd937x_priv *wcd937x = snd_soc_component_get_drvdata(component);
878-
int ret = 0;
879-
880-
switch (event) {
881-
case SND_SOC_DAPM_PRE_PMU:
882-
if (test_bit(ALLOW_BUCK_DISABLE, &wcd937x->status_mask)) {
883-
dev_err(component->dev, "buck already in enabled state\n");
884-
clear_bit(ALLOW_BUCK_DISABLE, &wcd937x->status_mask);
885-
return 0;
886-
}
887-
ret = regulator_enable(wcd937x->buck_supply);
888-
if (ret) {
889-
dev_err(component->dev, "VDD_BUCK is not enabled\n");
890-
return ret;
891-
}
892-
clear_bit(ALLOW_BUCK_DISABLE, &wcd937x->status_mask);
893-
usleep_range(200, 250);
894-
break;
895-
case SND_SOC_DAPM_POST_PMD:
896-
set_bit(ALLOW_BUCK_DISABLE, &wcd937x->status_mask);
897-
break;
898-
}
899-
900-
return 0;
901-
}
902-
903872
static int wcd937x_get_micb_vout_ctl_val(u32 micb_mv)
904873
{
905874
if (micb_mv < 1000 || micb_mv > 2850) {
@@ -2226,10 +2195,7 @@ static const struct snd_soc_dapm_widget wcd937x_dapm_widgets[] = {
22262195
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
22272196
SND_SOC_DAPM_POST_PMD),
22282197

2229-
SND_SOC_DAPM_SUPPLY("VDD_BUCK", SND_SOC_NOPM, 0, 0,
2230-
wcd937x_codec_enable_vdd_buck,
2231-
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
2232-
2198+
SND_SOC_DAPM_SUPPLY("VDD_BUCK", SND_SOC_NOPM, 0, 0, NULL, 0),
22332199
SND_SOC_DAPM_SUPPLY_S("CLS_H_PORT", 1, SND_SOC_NOPM, 0, 0, NULL, 0),
22342200

22352201
/* RX widgets */
@@ -2915,24 +2881,17 @@ static int wcd937x_probe(struct platform_device *pdev)
29152881
wcd937x->supplies[0].supply = "vdd-rxtx";
29162882
wcd937x->supplies[1].supply = "vdd-px";
29172883
wcd937x->supplies[2].supply = "vdd-mic-bias";
2884+
wcd937x->supplies[3].supply = "vdd-buck";
29182885

29192886
ret = devm_regulator_bulk_get(dev, WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies);
29202887
if (ret)
29212888
return dev_err_probe(dev, ret, "Failed to get supplies\n");
29222889

29232890
ret = regulator_bulk_enable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies);
2924-
if (ret)
2891+
if (ret) {
2892+
regulator_bulk_free(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies);
29252893
return dev_err_probe(dev, ret, "Failed to enable supplies\n");
2926-
2927-
/* Get the buck separately, as it needs special handling */
2928-
wcd937x->buck_supply = devm_regulator_get(dev, "vdd-buck");
2929-
if (IS_ERR(wcd937x->buck_supply))
2930-
return dev_err_probe(dev, PTR_ERR(wcd937x->buck_supply),
2931-
"Failed to get buck supply\n");
2932-
2933-
ret = regulator_enable(wcd937x->buck_supply);
2934-
if (ret)
2935-
return dev_err_probe(dev, ret, "Failed to enable buck supply\n");
2894+
}
29362895

29372896
wcd937x_dt_parse_micbias_info(dev, wcd937x);
29382897

@@ -2949,13 +2908,13 @@ static int wcd937x_probe(struct platform_device *pdev)
29492908

29502909
ret = wcd937x_add_slave_components(wcd937x, dev, &match);
29512910
if (ret)
2952-
return ret;
2911+
goto err_disable_regulators;
29532912

29542913
wcd937x_reset(wcd937x);
29552914

29562915
ret = component_master_add_with_match(dev, &wcd937x_comp_ops, match);
29572916
if (ret)
2958-
return ret;
2917+
goto err_disable_regulators;
29592918

29602919
pm_runtime_set_autosuspend_delay(dev, 1000);
29612920
pm_runtime_use_autosuspend(dev);
@@ -2964,6 +2923,12 @@ static int wcd937x_probe(struct platform_device *pdev)
29642923
pm_runtime_enable(dev);
29652924
pm_runtime_idle(dev);
29662925

2926+
return 0;
2927+
2928+
err_disable_regulators:
2929+
regulator_bulk_disable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies);
2930+
regulator_bulk_free(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies);
2931+
29672932
return ret;
29682933
}
29692934

sound/soc/codecs/wcd937x.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@
483483
#define WCD937X_MAX_REGISTER (WCD937X_DIGITAL_EFUSE_REG_31)
484484

485485
#define WCD937X_MAX_MICBIAS 3
486-
#define WCD937X_MAX_BULK_SUPPLY 3
486+
#define WCD937X_MAX_BULK_SUPPLY 4
487487
#define WCD937X_MAX_TX_SWR_PORTS 4
488488
#define WCD937X_MAX_SWR_PORTS 5
489489
#define WCD937X_MAX_SWR_CH_IDS 15

0 commit comments

Comments
 (0)