diff options
Diffstat (limited to 'drivers/iio/adc/meson_saradc.c')
| -rw-r--r-- | drivers/iio/adc/meson_saradc.c | 23 | 
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c index af6bfcc19075..eb78a6f17fd0 100644 --- a/drivers/iio/adc/meson_saradc.c +++ b/drivers/iio/adc/meson_saradc.c @@ -916,12 +916,6 @@ static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev)  		goto err_vref;  	} -	ret = clk_prepare_enable(priv->core_clk); -	if (ret) { -		dev_err(dev, "failed to enable core clk\n"); -		goto err_core_clk; -	} -  	regval = FIELD_PREP(MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK, 1);  	regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0,  			   MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK, regval); @@ -948,8 +942,6 @@ err_adc_clk:  	regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3,  			   MESON_SAR_ADC_REG3_ADC_EN, 0);  	meson_sar_adc_set_bandgap(indio_dev, false); -	clk_disable_unprepare(priv->core_clk); -err_core_clk:  	regulator_disable(priv->vref);  err_vref:  	meson_sar_adc_unlock(indio_dev); @@ -977,8 +969,6 @@ static void meson_sar_adc_hw_disable(struct iio_dev *indio_dev)  	meson_sar_adc_set_bandgap(indio_dev, false); -	clk_disable_unprepare(priv->core_clk); -  	regulator_disable(priv->vref);  	if (!ret) @@ -1211,7 +1201,7 @@ static int meson_sar_adc_probe(struct platform_device *pdev)  	if (IS_ERR(priv->clkin))  		return dev_err_probe(dev, PTR_ERR(priv->clkin), "failed to get clkin\n"); -	priv->core_clk = devm_clk_get(dev, "core"); +	priv->core_clk = devm_clk_get_enabled(dev, "core");  	if (IS_ERR(priv->core_clk))  		return dev_err_probe(dev, PTR_ERR(priv->core_clk), "failed to get core clk\n"); @@ -1294,15 +1284,26 @@ static int meson_sar_adc_remove(struct platform_device *pdev)  static int meson_sar_adc_suspend(struct device *dev)  {  	struct iio_dev *indio_dev = dev_get_drvdata(dev); +	struct meson_sar_adc_priv *priv = iio_priv(indio_dev);  	meson_sar_adc_hw_disable(indio_dev); +	clk_disable_unprepare(priv->core_clk); +  	return 0;  }  static int meson_sar_adc_resume(struct device *dev)  {  	struct iio_dev *indio_dev = dev_get_drvdata(dev); +	struct meson_sar_adc_priv *priv = iio_priv(indio_dev); +	int ret; + +	ret = clk_prepare_enable(priv->core_clk); +	if (ret) { +		dev_err(dev, "failed to enable core clk\n"); +		return ret; +	}  	return meson_sar_adc_hw_enable(indio_dev);  }  | 
