Message ID | 20200722072201.64127-1-alexandru.ardelean@analog.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] iio: frequency: ad9523: convert rest of driver to device managed functions | expand |
On Wed, 22 Jul 2020 10:22:01 +0300 Alexandru Ardelean <alexandru.ardelean@analog.com> wrote: > The driver pretty much uses device managed functions. The only left-over is > the iio_device_register() function, which also requires an action-or-reset > hook to disable the regulator on the remove and error path. > > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Applied. Thanks, Jonathan > --- > > Changelog v1 -> v2: > * removed 'probed' message at the end of probe; mostly log spam > > drivers/iio/frequency/ad9523.c | 60 ++++++++++++---------------------- > 1 file changed, 20 insertions(+), 40 deletions(-) > > diff --git a/drivers/iio/frequency/ad9523.c b/drivers/iio/frequency/ad9523.c > index 334e1d779d6d..bdb0bc3b12dd 100644 > --- a/drivers/iio/frequency/ad9523.c > +++ b/drivers/iio/frequency/ad9523.c > @@ -969,6 +969,13 @@ static int ad9523_setup(struct iio_dev *indio_dev) > return 0; > } > > +static void ad9523_reg_disable(void *data) > +{ > + struct regulator *reg = data; > + > + regulator_disable(reg); > +} > + > static int ad9523_probe(struct spi_device *spi) > { > struct ad9523_platform_data *pdata = spi->dev.platform_data; > @@ -994,21 +1001,22 @@ static int ad9523_probe(struct spi_device *spi) > ret = regulator_enable(st->reg); > if (ret) > return ret; > + > + ret = devm_add_action_or_reset(&spi->dev, ad9523_reg_disable, > + st->reg); > + if (ret) > + return ret; > } > > st->pwrdown_gpio = devm_gpiod_get_optional(&spi->dev, "powerdown", > GPIOD_OUT_HIGH); > - if (IS_ERR(st->pwrdown_gpio)) { > - ret = PTR_ERR(st->pwrdown_gpio); > - goto error_disable_reg; > - } > + if (IS_ERR(st->pwrdown_gpio)) > + return PTR_ERR(st->pwrdown_gpio); > > st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", > GPIOD_OUT_LOW); > - if (IS_ERR(st->reset_gpio)) { > - ret = PTR_ERR(st->reset_gpio); > - goto error_disable_reg; > - } > + if (IS_ERR(st->reset_gpio)) > + return PTR_ERR(st->reset_gpio); > > if (st->reset_gpio) { > udelay(1); > @@ -1017,10 +1025,8 @@ static int ad9523_probe(struct spi_device *spi) > > st->sync_gpio = devm_gpiod_get_optional(&spi->dev, "sync", > GPIOD_OUT_HIGH); > - if (IS_ERR(st->sync_gpio)) { > - ret = PTR_ERR(st->sync_gpio); > - goto error_disable_reg; > - } > + if (IS_ERR(st->sync_gpio)) > + return PTR_ERR(st->sync_gpio); > > spi_set_drvdata(spi, indio_dev); > st->spi = spi; > @@ -1035,34 +1041,9 @@ static int ad9523_probe(struct spi_device *spi) > > ret = ad9523_setup(indio_dev); > if (ret < 0) > - goto error_disable_reg; > - > - ret = iio_device_register(indio_dev); > - if (ret) > - goto error_disable_reg; > - > - dev_info(&spi->dev, "probed %s\n", indio_dev->name); > - > - return 0; > - > -error_disable_reg: > - if (!IS_ERR(st->reg)) > - regulator_disable(st->reg); > - > - return ret; > -} > - > -static int ad9523_remove(struct spi_device *spi) > -{ > - struct iio_dev *indio_dev = spi_get_drvdata(spi); > - struct ad9523_state *st = iio_priv(indio_dev); > - > - iio_device_unregister(indio_dev); > - > - if (!IS_ERR(st->reg)) > - regulator_disable(st->reg); > + return ret; > > - return 0; > + return devm_iio_device_register(&spi->dev, indio_dev); > } > > static const struct spi_device_id ad9523_id[] = { > @@ -1076,7 +1057,6 @@ static struct spi_driver ad9523_driver = { > .name = "ad9523", > }, > .probe = ad9523_probe, > - .remove = ad9523_remove, > .id_table = ad9523_id, > }; > module_spi_driver(ad9523_driver);
diff --git a/drivers/iio/frequency/ad9523.c b/drivers/iio/frequency/ad9523.c index 334e1d779d6d..bdb0bc3b12dd 100644 --- a/drivers/iio/frequency/ad9523.c +++ b/drivers/iio/frequency/ad9523.c @@ -969,6 +969,13 @@ static int ad9523_setup(struct iio_dev *indio_dev) return 0; } +static void ad9523_reg_disable(void *data) +{ + struct regulator *reg = data; + + regulator_disable(reg); +} + static int ad9523_probe(struct spi_device *spi) { struct ad9523_platform_data *pdata = spi->dev.platform_data; @@ -994,21 +1001,22 @@ static int ad9523_probe(struct spi_device *spi) ret = regulator_enable(st->reg); if (ret) return ret; + + ret = devm_add_action_or_reset(&spi->dev, ad9523_reg_disable, + st->reg); + if (ret) + return ret; } st->pwrdown_gpio = devm_gpiod_get_optional(&spi->dev, "powerdown", GPIOD_OUT_HIGH); - if (IS_ERR(st->pwrdown_gpio)) { - ret = PTR_ERR(st->pwrdown_gpio); - goto error_disable_reg; - } + if (IS_ERR(st->pwrdown_gpio)) + return PTR_ERR(st->pwrdown_gpio); st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", GPIOD_OUT_LOW); - if (IS_ERR(st->reset_gpio)) { - ret = PTR_ERR(st->reset_gpio); - goto error_disable_reg; - } + if (IS_ERR(st->reset_gpio)) + return PTR_ERR(st->reset_gpio); if (st->reset_gpio) { udelay(1); @@ -1017,10 +1025,8 @@ static int ad9523_probe(struct spi_device *spi) st->sync_gpio = devm_gpiod_get_optional(&spi->dev, "sync", GPIOD_OUT_HIGH); - if (IS_ERR(st->sync_gpio)) { - ret = PTR_ERR(st->sync_gpio); - goto error_disable_reg; - } + if (IS_ERR(st->sync_gpio)) + return PTR_ERR(st->sync_gpio); spi_set_drvdata(spi, indio_dev); st->spi = spi; @@ -1035,34 +1041,9 @@ static int ad9523_probe(struct spi_device *spi) ret = ad9523_setup(indio_dev); if (ret < 0) - goto error_disable_reg; - - ret = iio_device_register(indio_dev); - if (ret) - goto error_disable_reg; - - dev_info(&spi->dev, "probed %s\n", indio_dev->name); - - return 0; - -error_disable_reg: - if (!IS_ERR(st->reg)) - regulator_disable(st->reg); - - return ret; -} - -static int ad9523_remove(struct spi_device *spi) -{ - struct iio_dev *indio_dev = spi_get_drvdata(spi); - struct ad9523_state *st = iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - - if (!IS_ERR(st->reg)) - regulator_disable(st->reg); + return ret; - return 0; + return devm_iio_device_register(&spi->dev, indio_dev); } static const struct spi_device_id ad9523_id[] = { @@ -1076,7 +1057,6 @@ static struct spi_driver ad9523_driver = { .name = "ad9523", }, .probe = ad9523_probe, - .remove = ad9523_remove, .id_table = ad9523_id, }; module_spi_driver(ad9523_driver);
The driver pretty much uses device managed functions. The only left-over is the iio_device_register() function, which also requires an action-or-reset hook to disable the regulator on the remove and error path. Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> --- Changelog v1 -> v2: * removed 'probed' message at the end of probe; mostly log spam drivers/iio/frequency/ad9523.c | 60 ++++++++++++---------------------- 1 file changed, 20 insertions(+), 40 deletions(-)