iio: adc: berlin2-adc: convert probe to device-managed only
authorAlexandru Ardelean <aardelean@deviqon.com>
Sun, 26 Sep 2021 19:26:41 +0000 (22:26 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 19 Oct 2021 07:27:35 +0000 (08:27 +0100)
This driver requires only a devm_add_action_or_reset() hook for the
power-down of the device, and then devm_iio_device_register() can be used
directly.

Signed-off-by: Alexandru Ardelean <aardelean@deviqon.com>
Link: https://lore.kernel.org/r/20210926192642.4051329-1-aardelean@deviqon.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/berlin2-adc.c

index 8b04b95..03987d7 100644 (file)
@@ -280,6 +280,13 @@ static const struct iio_info berlin2_adc_info = {
        .read_raw       = berlin2_adc_read_raw,
 };
 
+static void berlin2_adc_powerdown(void *regmap)
+{
+       regmap_update_bits(regmap, BERLIN2_SM_CTRL,
+                          BERLIN2_SM_CTRL_ADC_POWER, 0);
+
+}
+
 static int berlin2_adc_probe(struct platform_device *pdev)
 {
        struct iio_dev *indio_dev;
@@ -293,7 +300,6 @@ static int berlin2_adc_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        priv = iio_priv(indio_dev);
-       platform_set_drvdata(pdev, indio_dev);
 
        priv->regmap = syscon_node_to_regmap(parent_np);
        of_node_put(parent_np);
@@ -333,29 +339,12 @@ static int berlin2_adc_probe(struct platform_device *pdev)
                           BERLIN2_SM_CTRL_ADC_POWER,
                           BERLIN2_SM_CTRL_ADC_POWER);
 
-       ret = iio_device_register(indio_dev);
-       if (ret) {
-               /* Power down the ADC */
-               regmap_update_bits(priv->regmap, BERLIN2_SM_CTRL,
-                                  BERLIN2_SM_CTRL_ADC_POWER, 0);
+       ret = devm_add_action_or_reset(&pdev->dev, berlin2_adc_powerdown,
+                                      priv->regmap);
+       if (ret)
                return ret;
-       }
-
-       return 0;
-}
-
-static int berlin2_adc_remove(struct platform_device *pdev)
-{
-       struct iio_dev *indio_dev = platform_get_drvdata(pdev);
-       struct berlin2_adc_priv *priv = iio_priv(indio_dev);
-
-       iio_device_unregister(indio_dev);
-
-       /* Power down the ADC */
-       regmap_update_bits(priv->regmap, BERLIN2_SM_CTRL,
-                          BERLIN2_SM_CTRL_ADC_POWER, 0);
 
-       return 0;
+       return devm_iio_device_register(&pdev->dev, indio_dev);
 }
 
 static const struct of_device_id berlin2_adc_match[] = {
@@ -370,7 +359,6 @@ static struct platform_driver berlin2_adc_driver = {
                .of_match_table = berlin2_adc_match,
        },
        .probe  = berlin2_adc_probe,
-       .remove = berlin2_adc_remove,
 };
 module_platform_driver(berlin2_adc_driver);