lkml.org 
[lkml]   [2022]   [Aug]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 4/9] iio: adc: mcp3911: use resource-managed version of iio_device_register
    Date
    Keep using managed resources as much as possible.

    Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    ---
    drivers/iio/adc/mcp3911.c | 56 ++++++++++++++++++---------------------
    1 file changed, 26 insertions(+), 30 deletions(-)

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

    +static void mcp3911_cleanup_clock(void *_adc)
    +{
    + struct mcp3911 *adc = _adc;
    + clk_disable_unprepare(adc->clki);
    +}
    +
    +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,6 +298,11 @@ 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);
    @@ -296,21 +313,25 @@ 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;
    + return PTR_ERR(adc->clki);
    }
    } 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 ret;
    }
    +
    + ret = devm_add_action_or_reset(&spi->dev,
    + mcp3911_cleanup_clock, adc);
    + if (ret)
    + return ret;
    }

    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 +343,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 +364,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
    \
     
     \ /
      Last update: 2022-08-09 09:33    [W:4.195 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site