@@ -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-
903872static 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
0 commit comments