Commit c247e0d8 authored by Jonathan Cameron's avatar Jonathan Cameron

iio: adc: cc10001: Use devm_clk_get_enabled() to avoid boilerplate.

As this driver just enables clock in probe() and disables in remove()
we can use this new function to replace boilerplate and simplify
error paths.
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: default avatarNuno Sá <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20221016170950.387751-4-jic23@kernel.org
parent dc0ba516
...@@ -352,23 +352,16 @@ static int cc10001_adc_probe(struct platform_device *pdev) ...@@ -352,23 +352,16 @@ static int cc10001_adc_probe(struct platform_device *pdev)
if (IS_ERR(adc_dev->reg_base)) if (IS_ERR(adc_dev->reg_base))
return PTR_ERR(adc_dev->reg_base); return PTR_ERR(adc_dev->reg_base);
adc_dev->adc_clk = devm_clk_get(dev, "adc"); adc_dev->adc_clk = devm_clk_get_enabled(dev, "adc");
if (IS_ERR(adc_dev->adc_clk)) { if (IS_ERR(adc_dev->adc_clk)) {
dev_err(dev, "failed to get the clock\n"); dev_err(dev, "failed to get/enable the clock\n");
return PTR_ERR(adc_dev->adc_clk); return PTR_ERR(adc_dev->adc_clk);
} }
ret = clk_prepare_enable(adc_dev->adc_clk);
if (ret) {
dev_err(dev, "failed to enable the clock\n");
return ret;
}
adc_clk_rate = clk_get_rate(adc_dev->adc_clk); adc_clk_rate = clk_get_rate(adc_dev->adc_clk);
if (!adc_clk_rate) { if (!adc_clk_rate) {
ret = -EINVAL;
dev_err(dev, "null clock rate!\n"); dev_err(dev, "null clock rate!\n");
goto err_disable_clk; return -EINVAL;
} }
adc_dev->eoc_delay_ns = NSEC_PER_SEC / adc_clk_rate; adc_dev->eoc_delay_ns = NSEC_PER_SEC / adc_clk_rate;
...@@ -385,14 +378,14 @@ static int cc10001_adc_probe(struct platform_device *pdev) ...@@ -385,14 +378,14 @@ static int cc10001_adc_probe(struct platform_device *pdev)
/* Setup the ADC channels available on the device */ /* Setup the ADC channels available on the device */
ret = cc10001_adc_channel_init(indio_dev, channel_map); ret = cc10001_adc_channel_init(indio_dev, channel_map);
if (ret < 0) if (ret < 0)
goto err_disable_clk; return ret;
mutex_init(&adc_dev->lock); mutex_init(&adc_dev->lock);
ret = iio_triggered_buffer_setup(indio_dev, NULL, ret = iio_triggered_buffer_setup(indio_dev, NULL,
&cc10001_adc_trigger_h, NULL); &cc10001_adc_trigger_h, NULL);
if (ret < 0) if (ret < 0)
goto err_disable_clk; return ret;
ret = iio_device_register(indio_dev); ret = iio_device_register(indio_dev);
if (ret < 0) if (ret < 0)
...@@ -404,8 +397,6 @@ static int cc10001_adc_probe(struct platform_device *pdev) ...@@ -404,8 +397,6 @@ static int cc10001_adc_probe(struct platform_device *pdev)
err_cleanup_buffer: err_cleanup_buffer:
iio_triggered_buffer_cleanup(indio_dev); iio_triggered_buffer_cleanup(indio_dev);
err_disable_clk:
clk_disable_unprepare(adc_dev->adc_clk);
return ret; return ret;
} }
...@@ -417,7 +408,6 @@ static int cc10001_adc_remove(struct platform_device *pdev) ...@@ -417,7 +408,6 @@ static int cc10001_adc_remove(struct platform_device *pdev)
cc10001_adc_power_down(adc_dev); cc10001_adc_power_down(adc_dev);
iio_device_unregister(indio_dev); iio_device_unregister(indio_dev);
iio_triggered_buffer_cleanup(indio_dev); iio_triggered_buffer_cleanup(indio_dev);
clk_disable_unprepare(adc_dev->adc_clk);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment