Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: codecs: wcd937x: Simplify with devm_regulator_bulk_get_enable()

Drop separate regulator get and enable in probe() path with
devm_regulator_bulk_get_enable(), which simplifies cleanup paths and
device remove().

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://patch.msgid.link/20250526-b4-asoc-wcd9395-vdd-px-v1-1-64d3cb60313b@linaro.org
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Krzysztof Kozlowski and committed by
Mark Brown
10cf8f6b 19272b37

+9 -23
+9 -22
sound/soc/codecs/wcd937x.c
··· 90 90 struct irq_domain *virq; 91 91 struct regmap_irq_chip *wcd_regmap_irq_chip; 92 92 struct regmap_irq_chip_data *irq_chip; 93 - struct regulator_bulk_data supplies[WCD937X_MAX_BULK_SUPPLY]; 94 93 struct snd_soc_jack *jack; 95 94 unsigned long status_mask; 96 95 s32 micb_ref[WCD937X_MAX_MICBIAS]; ··· 110 111 111 112 atomic_t rx_clk_cnt; 112 113 atomic_t ana_clk_count; 114 + }; 115 + 116 + static const char * const wcd937x_supplies[] = { 117 + "vdd-rxtx", "vdd-px", "vdd-mic-bias", "vdd-buck", 113 118 }; 114 119 115 120 static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(ear_pa_gain, 600, -1800); ··· 2937 2934 cfg = &wcd937x->mbhc_cfg; 2938 2935 cfg->swap_gnd_mic = wcd937x_swap_gnd_mic; 2939 2936 2940 - wcd937x->supplies[0].supply = "vdd-rxtx"; 2941 - wcd937x->supplies[1].supply = "vdd-px"; 2942 - wcd937x->supplies[2].supply = "vdd-mic-bias"; 2943 - wcd937x->supplies[3].supply = "vdd-buck"; 2944 - 2945 - ret = devm_regulator_bulk_get(dev, WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2937 + ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(wcd937x_supplies), 2938 + wcd937x_supplies); 2946 2939 if (ret) 2947 - return dev_err_probe(dev, ret, "Failed to get supplies\n"); 2948 - 2949 - ret = regulator_bulk_enable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2950 - if (ret) 2951 - return dev_err_probe(dev, ret, "Failed to enable supplies\n"); 2940 + return dev_err_probe(dev, ret, "Failed to get and enable supplies\n"); 2952 2941 2953 2942 wcd937x_dt_parse_micbias_info(dev, wcd937x); 2954 2943 ··· 2957 2962 2958 2963 ret = wcd937x_add_slave_components(wcd937x, dev, &match); 2959 2964 if (ret) 2960 - goto err_disable_regulators; 2965 + return ret; 2961 2966 2962 2967 wcd937x_reset(wcd937x); 2963 2968 2964 2969 ret = component_master_add_with_match(dev, &wcd937x_comp_ops, match); 2965 2970 if (ret) 2966 - goto err_disable_regulators; 2971 + return ret; 2967 2972 2968 2973 pm_runtime_set_autosuspend_delay(dev, 1000); 2969 2974 pm_runtime_use_autosuspend(dev); ··· 2973 2978 pm_runtime_idle(dev); 2974 2979 2975 2980 return 0; 2976 - 2977 - err_disable_regulators: 2978 - regulator_bulk_disable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2979 - 2980 - return ret; 2981 2981 } 2982 2982 2983 2983 static void wcd937x_remove(struct platform_device *pdev) 2984 2984 { 2985 2985 struct device *dev = &pdev->dev; 2986 - struct wcd937x_priv *wcd937x = dev_get_drvdata(dev); 2987 2986 2988 2987 component_master_del(&pdev->dev, &wcd937x_comp_ops); 2989 2988 2990 2989 pm_runtime_disable(dev); 2991 2990 pm_runtime_set_suspended(dev); 2992 2991 pm_runtime_dont_use_autosuspend(dev); 2993 - 2994 - regulator_bulk_disable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2995 2992 } 2996 2993 2997 2994 #if defined(CONFIG_OF)
-1
sound/soc/codecs/wcd937x.h
··· 487 487 #define WCD937X_MAX_REGISTER (WCD937X_DIGITAL_EFUSE_REG_31) 488 488 489 489 #define WCD937X_MAX_MICBIAS 3 490 - #define WCD937X_MAX_BULK_SUPPLY 4 491 490 #define WCD937X_MAX_SWR_CH_IDS 15 492 491 #define WCD937X_SWRM_CH_MASK(ch_idx) BIT(ch_idx - 1) 493 492