2022-08-15 06:16:33

by Marcus Folkesson

[permalink] [raw]
Subject: [PATCH v6 4/9] iio: adc: mcp3911: use resource-managed version of iio_device_register

Keep using managed resources as much as possible.

Signed-off-by: Marcus Folkesson <[email protected]>
Reviewed-by: Andy Shevchenko <[email protected]>
---
drivers/iio/adc/mcp3911.c | 53 ++++++++++++---------------------------
1 file changed, 16 insertions(+), 37 deletions(-)

diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c
index 890af7dca62d..7e2efe702e57 100644
--- a/drivers/iio/adc/mcp3911.c
+++ b/drivers/iio/adc/mcp3911.c
@@ -258,6 +258,13 @@ static int mcp3911_config(struct mcp3911 *adc)
return mcp3911_write(adc, MCP3911_REG_CONFIG, configreg, 2);
}

+static void mcp3911_cleanup_regulator(void *_adc)
+{
+ struct mcp3911 *adc = _adc;
+
+ regulator_disable(adc->vref);
+}
+
static int mcp3911_probe(struct spi_device *spi)
{
struct iio_dev *indio_dev;
@@ -286,9 +293,14 @@ static int mcp3911_probe(struct spi_device *spi)
ret = regulator_enable(adc->vref);
if (ret)
return ret;
+
+ ret = devm_add_action_or_reset(&spi->dev,
+ mcp3911_cleanup_regulator, adc);
+ if (ret)
+ return ret;
}

- adc->clki = devm_clk_get(&adc->spi->dev, NULL);
+ adc->clki = devm_clk_get_enabled(&adc->spi->dev, NULL);
if (IS_ERR(adc->clki)) {
if (PTR_ERR(adc->clki) == -ENOENT) {
adc->clki = NULL;
@@ -296,21 +308,13 @@ static int mcp3911_probe(struct spi_device *spi)
dev_err(&adc->spi->dev,
"failed to get adc clk (%ld)\n",
PTR_ERR(adc->clki));
- ret = PTR_ERR(adc->clki);
- goto reg_disable;
- }
- } else {
- ret = clk_prepare_enable(adc->clki);
- if (ret < 0) {
- dev_err(&adc->spi->dev,
- "Failed to enable clki: %d\n", ret);
- goto reg_disable;
+ return PTR_ERR(adc->clki);
}
}

ret = mcp3911_config(adc);
if (ret)
- goto clk_disable;
+ return ret;

indio_dev->name = spi_get_device_id(spi)->name;
indio_dev->modes = INDIO_DIRECT_MODE;
@@ -322,31 +326,7 @@ static int mcp3911_probe(struct spi_device *spi)

mutex_init(&adc->lock);

- ret = iio_device_register(indio_dev);
- if (ret)
- goto clk_disable;
-
- return ret;
-
-clk_disable:
- clk_disable_unprepare(adc->clki);
-reg_disable:
- if (adc->vref)
- regulator_disable(adc->vref);
-
- return ret;
-}
-
-static void mcp3911_remove(struct spi_device *spi)
-{
- struct iio_dev *indio_dev = spi_get_drvdata(spi);
- struct mcp3911 *adc = iio_priv(indio_dev);
-
- iio_device_unregister(indio_dev);
-
- clk_disable_unprepare(adc->clki);
- if (adc->vref)
- regulator_disable(adc->vref);
+ return devm_iio_device_register(&adc->spi->dev, indio_dev);
}

static const struct of_device_id mcp3911_dt_ids[] = {
@@ -367,7 +347,6 @@ static struct spi_driver mcp3911_driver = {
.of_match_table = mcp3911_dt_ids,
},
.probe = mcp3911_probe,
- .remove = mcp3911_remove,
.id_table = mcp3911_id,
};
module_spi_driver(mcp3911_driver);
--
2.37.1


2022-08-20 13:58:14

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH v6 4/9] iio: adc: mcp3911: use resource-managed version of iio_device_register

On Mon, 15 Aug 2022 08:16:20 +0200
Marcus Folkesson <[email protected]> wrote:

> Keep using managed resources as much as possible.
>
> Signed-off-by: Marcus Folkesson <[email protected]>
> Reviewed-by: Andy Shevchenko <[email protected]>
> ---
> drivers/iio/adc/mcp3911.c | 53 ++++++++++++---------------------------
> 1 file changed, 16 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c
> index 890af7dca62d..7e2efe702e57 100644
> --- a/drivers/iio/adc/mcp3911.c
> +++ b/drivers/iio/adc/mcp3911.c
> @@ -258,6 +258,13 @@ static int mcp3911_config(struct mcp3911 *adc)
> return mcp3911_write(adc, MCP3911_REG_CONFIG, configreg, 2);
> }
>
> +static void mcp3911_cleanup_regulator(void *_adc)

Missed this on previous versions, but why not pass
the regulator pointer in as the parameter for the callback?

static void mcp391_cleanup_regulator(void *reg)
{
regulator_disable(adc->vref);
}

Note this can't use the new devm_regulator_get_enable()
because we need access to the regulator within the driver.

I can tidy this up whilst applying (or given it's really minor I might
not bother :)

Note we are stalled at the moment with this series on getting the
fixes upstream. I'll probably send that pull request shortly.

> +{
> + struct mcp3911 *adc = _adc;
> +
> + regulator_disable(adc->vref);
> +}
> +
> static int mcp3911_probe(struct spi_device *spi)
> {
> struct iio_dev *indio_dev;
> @@ -286,9 +293,14 @@ static int mcp3911_probe(struct spi_device *spi)
> ret = regulator_enable(adc->vref);
> if (ret)
> return ret;
> +
> + ret = devm_add_action_or_reset(&spi->dev,
> + mcp3911_cleanup_regulator, adc);
> + if (ret)
> + return ret;
> }
>
> - adc->clki = devm_clk_get(&adc->spi->dev, NULL);
> + adc->clki = devm_clk_get_enabled(&adc->spi->dev, NULL);
> if (IS_ERR(adc->clki)) {
> if (PTR_ERR(adc->clki) == -ENOENT) {
> adc->clki = NULL;
> @@ -296,21 +308,13 @@ static int mcp3911_probe(struct spi_device *spi)
> dev_err(&adc->spi->dev,
> "failed to get adc clk (%ld)\n",
> PTR_ERR(adc->clki));
> - ret = PTR_ERR(adc->clki);
> - goto reg_disable;
> - }
> - } else {
> - ret = clk_prepare_enable(adc->clki);
> - if (ret < 0) {
> - dev_err(&adc->spi->dev,
> - "Failed to enable clki: %d\n", ret);
> - goto reg_disable;
> + return PTR_ERR(adc->clki);
> }
> }
>
> ret = mcp3911_config(adc);
> if (ret)
> - goto clk_disable;
> + return ret;
>
> indio_dev->name = spi_get_device_id(spi)->name;
> indio_dev->modes = INDIO_DIRECT_MODE;
> @@ -322,31 +326,7 @@ static int mcp3911_probe(struct spi_device *spi)
>
> mutex_init(&adc->lock);
>
> - ret = iio_device_register(indio_dev);
> - if (ret)
> - goto clk_disable;
> -
> - return ret;
> -
> -clk_disable:
> - clk_disable_unprepare(adc->clki);
> -reg_disable:
> - if (adc->vref)
> - regulator_disable(adc->vref);
> -
> - return ret;
> -}
> -
> -static void mcp3911_remove(struct spi_device *spi)
> -{
> - struct iio_dev *indio_dev = spi_get_drvdata(spi);
> - struct mcp3911 *adc = iio_priv(indio_dev);
> -
> - iio_device_unregister(indio_dev);
> -
> - clk_disable_unprepare(adc->clki);
> - if (adc->vref)
> - regulator_disable(adc->vref);
> + return devm_iio_device_register(&adc->spi->dev, indio_dev);
> }
>
> static const struct of_device_id mcp3911_dt_ids[] = {
> @@ -367,7 +347,6 @@ static struct spi_driver mcp3911_driver = {
> .of_match_table = mcp3911_dt_ids,
> },
> .probe = mcp3911_probe,
> - .remove = mcp3911_remove,
> .id_table = mcp3911_id,
> };
> module_spi_driver(mcp3911_driver);

2022-09-12 11:33:21

by Marcus Folkesson

[permalink] [raw]
Subject: Re: [PATCH v6 4/9] iio: adc: mcp3911: use resource-managed version of iio_device_register

Hi,

On Sat, Aug 20, 2022 at 01:41:50PM +0100, Jonathan Cameron wrote:
> On Mon, 15 Aug 2022 08:16:20 +0200
> Marcus Folkesson <[email protected]> wrote:
>
> > Keep using managed resources as much as possible.
> >
> > Signed-off-by: Marcus Folkesson <[email protected]>
> > Reviewed-by: Andy Shevchenko <[email protected]>
> > ---
> > drivers/iio/adc/mcp3911.c | 53 ++++++++++++---------------------------
> > 1 file changed, 16 insertions(+), 37 deletions(-)
> >
> > diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c
> > index 890af7dca62d..7e2efe702e57 100644
> > --- a/drivers/iio/adc/mcp3911.c
> > +++ b/drivers/iio/adc/mcp3911.c
> > @@ -258,6 +258,13 @@ static int mcp3911_config(struct mcp3911 *adc)
> > return mcp3911_write(adc, MCP3911_REG_CONFIG, configreg, 2);
> > }
> >
> > +static void mcp3911_cleanup_regulator(void *_adc)
>
> Missed this on previous versions, but why not pass
> the regulator pointer in as the parameter for the callback?
>
> static void mcp391_cleanup_regulator(void *reg)
> {
> regulator_disable(adc->vref);
> }
>
> Note this can't use the new devm_regulator_get_enable()
> because we need access to the regulator within the driver.
>
> I can tidy this up whilst applying (or given it's really minor I might
> not bother :)
>
> Note we are stalled at the moment with this series on getting the
> fixes upstream. I'll probably send that pull request shortly.

Just a friendly reminder to not forget to pick up this series.

Thanks,

/Marcus

2022-09-19 16:00:50

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH v6 4/9] iio: adc: mcp3911: use resource-managed version of iio_device_register

On Mon, 12 Sep 2022 13:02:19 +0200
Marcus Folkesson <[email protected]> wrote:

> Hi,
>
> On Sat, Aug 20, 2022 at 01:41:50PM +0100, Jonathan Cameron wrote:
> > On Mon, 15 Aug 2022 08:16:20 +0200
> > Marcus Folkesson <[email protected]> wrote:
> >
> > > Keep using managed resources as much as possible.
> > >
> > > Signed-off-by: Marcus Folkesson <[email protected]>
> > > Reviewed-by: Andy Shevchenko <[email protected]>
> > > ---
> > > drivers/iio/adc/mcp3911.c | 53 ++++++++++++---------------------------
> > > 1 file changed, 16 insertions(+), 37 deletions(-)
> > >
> > > diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c
> > > index 890af7dca62d..7e2efe702e57 100644
> > > --- a/drivers/iio/adc/mcp3911.c
> > > +++ b/drivers/iio/adc/mcp3911.c
> > > @@ -258,6 +258,13 @@ static int mcp3911_config(struct mcp3911 *adc)
> > > return mcp3911_write(adc, MCP3911_REG_CONFIG, configreg, 2);
> > > }
> > >
> > > +static void mcp3911_cleanup_regulator(void *_adc)
> >
> > Missed this on previous versions, but why not pass
> > the regulator pointer in as the parameter for the callback?
> >
> > static void mcp391_cleanup_regulator(void *reg)
> > {
> > regulator_disable(adc->vref);
> > }
> >
> > Note this can't use the new devm_regulator_get_enable()
> > because we need access to the regulator within the driver.
> >
> > I can tidy this up whilst applying (or given it's really minor I might
> > not bother :)
> >
> > Note we are stalled at the moment with this series on getting the
> > fixes upstream. I'll probably send that pull request shortly.
>
> Just a friendly reminder to not forget to pick up this series.

If things go according to plan, Greg will take the pull request
I sent the other day and I can fast forward the tree such that
the first 3 patches are in my upstream, then do a second pull
request with these applied. They aim here being to keep the
history reasonably clean rather than spaghetti merges.
Fingers crossed on timing working out. This all got delayed
because I sat on the pull request for a week due to travel and
dodgy airport wifi etc.

Jonathan

>
> Thanks,
>
> /Marcus

2022-09-21 20:16:23

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH v6 4/9] iio: adc: mcp3911: use resource-managed version of iio_device_register

On Mon, 19 Sep 2022 16:36:00 +0100
Jonathan Cameron <[email protected]> wrote:

> On Mon, 12 Sep 2022 13:02:19 +0200
> Marcus Folkesson <[email protected]> wrote:
>
> > Hi,
> >
> > On Sat, Aug 20, 2022 at 01:41:50PM +0100, Jonathan Cameron wrote:
> > > On Mon, 15 Aug 2022 08:16:20 +0200
> > > Marcus Folkesson <[email protected]> wrote:
> > >
> > > > Keep using managed resources as much as possible.
> > > >
> > > > Signed-off-by: Marcus Folkesson <[email protected]>
> > > > Reviewed-by: Andy Shevchenko <[email protected]>
> > > > ---
> > > > drivers/iio/adc/mcp3911.c | 53 ++++++++++++---------------------------
> > > > 1 file changed, 16 insertions(+), 37 deletions(-)
> > > >
> > > > diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c
> > > > index 890af7dca62d..7e2efe702e57 100644
> > > > --- a/drivers/iio/adc/mcp3911.c
> > > > +++ b/drivers/iio/adc/mcp3911.c
> > > > @@ -258,6 +258,13 @@ static int mcp3911_config(struct mcp3911 *adc)
> > > > return mcp3911_write(adc, MCP3911_REG_CONFIG, configreg, 2);
> > > > }
> > > >
> > > > +static void mcp3911_cleanup_regulator(void *_adc)
> > >
> > > Missed this on previous versions, but why not pass
> > > the regulator pointer in as the parameter for the callback?
> > >
> > > static void mcp391_cleanup_regulator(void *reg)
> > > {
> > > regulator_disable(adc->vref);
> > > }
> > >
> > > Note this can't use the new devm_regulator_get_enable()
> > > because we need access to the regulator within the driver.
> > >
> > > I can tidy this up whilst applying (or given it's really minor I might
> > > not bother :)
> > >
> > > Note we are stalled at the moment with this series on getting the
> > > fixes upstream. I'll probably send that pull request shortly.
> >
> > Just a friendly reminder to not forget to pick up this series.
>
> If things go according to plan, Greg will take the pull request
> I sent the other day and I can fast forward the tree such that
> the first 3 patches are in my upstream, then do a second pull
> request with these applied. They aim here being to keep the
> history reasonably clean rather than spaghetti merges.
> Fingers crossed on timing working out. This all got delayed
> because I sat on the pull request for a week due to travel and
> dodgy airport wifi etc.
>

Now applied to the togreg branch of iio.git.
Pushed out as testing for some brief testing by 0day etc.

Jonathan

> Jonathan
>
> >
> > Thanks,
> >
> > /Marcus
>