diff options
Diffstat (limited to 'sound/soc/codecs/lpass-wsa-macro.c')
| -rw-r--r-- | sound/soc/codecs/lpass-wsa-macro.c | 27 | 
1 files changed, 14 insertions, 13 deletions
diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c index 5cfe96f6e430..ba7480f3831e 100644 --- a/sound/soc/codecs/lpass-wsa-macro.c +++ b/sound/soc/codecs/lpass-wsa-macro.c @@ -1856,10 +1856,8 @@ static int wsa_macro_rx_mux_put(struct snd_kcontrol *kcontrol,  	aif_rst = wsa->rx_port_value[widget->shift];  	if (!rx_port_value) { -		if (aif_rst == 0) { -			dev_err(component->dev, "%s: AIF reset already\n", __func__); +		if (aif_rst == 0)  			return 0; -		}  		if (aif_rst >= WSA_MACRO_RX_MAX) {  			dev_err(component->dev, "%s: Invalid AIF reset\n", __func__);  			return 0; @@ -2270,17 +2268,10 @@ static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable)  		}  		wsa_macro_mclk_enable(wsa, true); -		/* reset swr ip */ -		regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, -				   CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_ENABLE); -  		regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,  				   CDC_WSA_SWR_CLK_EN_MASK,  				   CDC_WSA_SWR_CLK_ENABLE); -		/* Bring out of reset */ -		regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, -				   CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_DISABLE);  	} else {  		regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,  				   CDC_WSA_SWR_CLK_EN_MASK, 0); @@ -2451,10 +2442,16 @@ static int wsa_macro_probe(struct platform_device *pdev)  	if (ret)  		goto err_fsgen; -	ret = wsa_macro_register_mclk_output(wsa); -	if (ret) -		goto err_clkout; +	/* reset swr ip */ +	regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, +			   CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_ENABLE); + +	regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, +			   CDC_WSA_SWR_CLK_EN_MASK, CDC_WSA_SWR_CLK_ENABLE); +	/* Bring out of reset */ +	regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, +			   CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_DISABLE);  	ret = devm_snd_soc_register_component(dev, &wsa_macro_component_drv,  					      wsa_macro_dai, @@ -2468,6 +2465,10 @@ static int wsa_macro_probe(struct platform_device *pdev)  	pm_runtime_set_active(dev);  	pm_runtime_enable(dev); +	ret = wsa_macro_register_mclk_output(wsa); +	if (ret) +		goto err_clkout; +  	return 0;  err_clkout:  |