On Thu, 26 Aug 2021 20:36:22 +0200
Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> wrote:
Turn 'adc128_probe()' into a full resource managed function to simplify theLooks good to me, but as mentioned this will need to wait for the
code.
This way, the .remove function can be removed.
Doing so, the only 'spi_get_drvdata()' call is removed and the
corresponding 'spi_set_drvdata()' can be removed as well.
Suggested-by: Alexandru Ardelean <ardeleanalex@xxxxxxxxx>
Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx>
Reviewed-by: Alexandru Ardelean <ardeleanalex@xxxxxxxxx>
fix to go upstream.
Give me a poke if I seem to have lost it once that's true.
Thanks,
Jonathan
---
Compile tested only.
When reviewing, pay special attention to the 'spi_set_drvdata()' call
removal. I recently introduced a regression with a too aggressive cleanup
like that.
This patch should be applied after
https://lore.kernel.org/linux-iio/f33069f0-601b-4bbb-3766-026f7a161912-39ZsbGIQGT5GWvitb5QawA@xxxxxxxxxxxxxxxx/T/#meb792dcd6540f87d9ae041660ca4738a776e924a
v1 --> v2: just garbage --> ignore
v1 --> v3: Simplify 'adc128_disable_regulator()'
---
drivers/iio/adc/ti-adc128s052.c | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
index 3143f35a6509..ce0cfe40b219 100644
--- a/drivers/iio/adc/ti-adc128s052.c
+++ b/drivers/iio/adc/ti-adc128s052.c
@@ -132,6 +132,11 @@ static const struct iio_info adc128_info = {
.read_raw = adc128_read_raw,
};
+static void adc128_disable_regulator(void *reg)
+{
+ regulator_disable(reg);
+}
+
static int adc128_probe(struct spi_device *spi)
{
struct iio_dev *indio_dev;
@@ -151,8 +156,6 @@ static int adc128_probe(struct spi_device *spi)
adc = iio_priv(indio_dev);
adc->spi = spi;
- spi_set_drvdata(spi, indio_dev);
-
indio_dev->name = spi_get_device_id(spi)->name;
indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->info = &adc128_info;
@@ -167,23 +170,13 @@ static int adc128_probe(struct spi_device *spi)
ret = regulator_enable(adc->reg);
if (ret < 0)
return ret;
+ ret = devm_add_action_or_reset(&spi->dev, adc128_disable_regulator, adc->reg);
+ if (ret)
+ return ret;
mutex_init(&adc->lock);
- ret = iio_device_register(indio_dev);
-
- return ret;
-}
-
-static int adc128_remove(struct spi_device *spi)
-{
- struct iio_dev *indio_dev = spi_get_drvdata(spi);
- struct adc128 *adc = iio_priv(indio_dev);
-
- iio_device_unregister(indio_dev);
- regulator_disable(adc->reg);
-
- return 0;
+ return devm_iio_device_register(&spi->dev, indio_dev);
}
static const struct of_device_id adc128_of_match[] = {
@@ -225,7 +218,6 @@ static struct spi_driver adc128_driver = {
.acpi_match_table = ACPI_PTR(adc128_acpi_match),
},
.probe = adc128_probe,
- .remove = adc128_remove,
.id_table = adc128_id,
};
module_spi_driver(adc128_driver);