Linux IIO development
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Joshua Crofts via B4 Relay <devnull+joshua.crofts1.gmail.com@kernel.org>
Cc: joshua.crofts1@gmail.com, "David Lechner" <dlechner@baylibre.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	"Alexander Koch" <mail@alexanderkoch.net>,
	"Michael Hornung" <mhornung.linux@gmail.com>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 09/10] iio: light: opt3001: switch driver to managed resources
Date: Tue, 12 May 2026 15:26:00 +0100	[thread overview]
Message-ID: <20260512152600.764ff7c7@jic23-huawei> (raw)
In-Reply-To: <20260512-opt3001-cleanup-v2-9-8018cf3a8a0a@gmail.com>

On Tue, 12 May 2026 12:57:29 +0200
Joshua Crofts via B4 Relay <devnull+joshua.crofts1.gmail.com@kernel.org> wrote:

> From: Joshua Crofts <joshua.crofts1@gmail.com>
> 
> Move the driver to use devm_* functions to automate resource
> management and simplify error handling. This also allows removal
> of the opt3001_remove() function.
> 
> Signed-off-by: Joshua Crofts <joshua.crofts1@gmail.com>
Some trivial stuff inline.  I'll probably wait for sashiko to catch up with
it's backlog and get to this one.  If nothing comes up there or in other reviews
I'm fine tweaking the stuff below whilst applying the series.

Jonathan

> ---
>  drivers/iio/light/opt3001.c | 75 +++++++++++++++++++++++----------------------
>  1 file changed, 39 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/iio/light/opt3001.c b/drivers/iio/light/opt3001.c
> index 39ea60c0af2c1ec7473d49b73778cac1f9bb6086..1319e5941b66bd82e4dc2badf5ea27cacbcfd54a 100644
> --- a/drivers/iio/light/opt3001.c
> +++ b/drivers/iio/light/opt3001.c
> @@ -702,6 +702,31 @@ static int opt3001_read_id(struct opt3001 *opt)
>  	return 0;
>  }
>  
> +static void opt3001_power_off(void *data)
> +{
> +	struct opt3001 *opt = data;
> +	struct i2c_client *client = opt->client;
> +	struct device *dev = opt->dev;
> +
Really trivial but why the blank line here?  If nothing else comes up
I might bother dropping it whilst picking up the series.

> +	int ret;
> +	u16 reg;
Obviously not a change you made - but none the less reg is a bad name.
It is often used for register address rather than value.  So better as
regval.  Again maybe I'll tweak this if nothing comes up but if you
do another version for other reasons nice to change it.

> +
> +	ret = i2c_smbus_read_word_swapped(client, OPT3001_CONFIGURATION);
> +	if (ret < 0) {
> +		dev_err(dev, "failed to read register %02x\n",
> +			OPT3001_CONFIGURATION);
> +		return;
> +	}
> +
> +	reg = ret;
> +	opt3001_set_mode(opt, &reg, OPT3001_CONFIGURATION_M_SHUTDOWN);
> +
> +	ret = i2c_smbus_write_word_swapped(client, OPT3001_CONFIGURATION, reg);
> +	if (ret < 0)
> +		dev_err(dev, "failed to write to register %02x\n",
> +			OPT3001_CONFIGURATION);
> +}
> +
>  static int opt3001_configure(struct opt3001 *opt)
>  {
>  	struct i2c_client *client = opt->client;
> @@ -740,6 +765,11 @@ static int opt3001_configure(struct opt3001 *opt)
>  		return dev_err_probe(dev, ret, "failed to write register %02x\n",
>  				     OPT3001_CONFIGURATION);
>  
> +	ret = devm_add_action_or_reset(dev, opt3001_power_off, opt);
> +	if (ret)
> +		return dev_err_probe(dev, ret,
> +				     "failed to register power off function\n");
> +
>  	ret = i2c_smbus_read_word_swapped(client, OPT3001_LOW_LIMIT);
>  	if (ret < 0)
>  		return dev_err_probe(dev, ret, "failed to read register %02x\n",
> @@ -834,7 +864,10 @@ static int opt3001_probe(struct i2c_client *client)
>  	opt->dev = dev;
>  	opt->chip_info = i2c_get_match_data(client);
>  
> -	mutex_init(&opt->lock);
> +	ret = devm_mutex_init(dev, &opt->lock);
> +	if (ret)
> +		return ret;
> +
>  	init_waitqueue_head(&opt->result_ready_queue);
>  	i2c_set_clientdata(client, iio);
>  
> @@ -856,13 +889,12 @@ static int opt3001_probe(struct i2c_client *client)
>  
>  	/* Make use of INT pin only if valid IRQ no. is given */
>  	if (irq > 0) {
> -		ret = request_threaded_irq(irq, NULL, opt3001_irq,
> -					   IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> -					   "opt3001", iio);
> +		ret = devm_request_threaded_irq(dev, irq, NULL, opt3001_irq,
> +						IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> +						"opt3001", iio);
>  		if (ret)
> -			return dev_err_probe(dev, ret,
> -					     "failed to request IRQ #%d\n",
> -					     irq);
> +			return ret;
> +
>  		opt->use_irq = true;
>  	} else {
>  		dev_dbg(dev, "enabling interrupt-less operation\n");
> @@ -876,34 +908,6 @@ static int opt3001_probe(struct i2c_client *client)
>  	return 0;
>  }
>  
> -static void opt3001_remove(struct i2c_client *client)
> -{
> -	struct iio_dev *iio = i2c_get_clientdata(client);
> -	struct opt3001 *opt = iio_priv(iio);
> -	struct device *dev = opt->dev;
> -	int ret;
> -	u16 reg;
> -
> -	if (opt->use_irq)
> -		free_irq(client->irq, iio);
> -
> -	ret = i2c_smbus_read_word_swapped(client, OPT3001_CONFIGURATION);
> -	if (ret < 0) {
> -		dev_err(dev, "failed to read register %02x\n",
> -			OPT3001_CONFIGURATION);
> -		return;
> -	}
> -
> -	reg = ret;
> -	opt3001_set_mode(opt, &reg, OPT3001_CONFIGURATION_M_SHUTDOWN);
> -
> -	ret = i2c_smbus_write_word_swapped(client, OPT3001_CONFIGURATION, reg);
> -	if (ret < 0) {
> -		dev_err(dev, "failed to write register %02x\n",
> -			OPT3001_CONFIGURATION);
> -	}
> -}
> -
>  static const struct opt3001_chip_info opt3001_chip_information = {
>  	.channels = &opt3001_channels,
>  	.chan_type = IIO_LIGHT,
> @@ -942,7 +946,6 @@ MODULE_DEVICE_TABLE(of, opt3001_of_match);
>  
>  static struct i2c_driver opt3001_driver = {
>  	.probe = opt3001_probe,
> -	.remove = opt3001_remove,
>  	.id_table = opt3001_id,
>  
>  	.driver = {
> 


  reply	other threads:[~2026-05-12 14:26 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 10:57 [PATCH v2 00/10] iio: light: opt3001: driver cleanup Joshua Crofts via B4 Relay
2026-05-12 10:57 ` [PATCH v2 01/10] iio: light: opt3001: move device registration to end of probe() Joshua Crofts via B4 Relay
2026-05-12 10:57 ` [PATCH v2 02/10] iio: light: opt3001: make headers conform to iwyu Joshua Crofts via B4 Relay
2026-05-12 10:57 ` [PATCH v2 03/10] iio: light: opt3001: use macros from bits.h header Joshua Crofts via B4 Relay
2026-05-12 10:57 ` [PATCH v2 04/10] iio: light: opt3001: use local struct device and i2c_client variables Joshua Crofts via B4 Relay
2026-05-12 11:09   ` Andy Shevchenko
2026-05-12 11:13     ` Joshua Crofts
2026-05-12 11:27       ` Andy Shevchenko
2026-05-12 10:57 ` [PATCH v2 05/10] iio: light: opt3001: ensure correct parenthesis alignment Joshua Crofts via B4 Relay
2026-05-12 10:57 ` [PATCH v2 06/10] iio: light: opt3001: localize for loop iterator Joshua Crofts via B4 Relay
2026-05-12 15:40   ` Andy Shevchenko
2026-05-12 10:57 ` [PATCH v2 07/10] iio: light: opt3001: prefer dev_err_probe() Joshua Crofts via B4 Relay
2026-05-12 15:43   ` Andy Shevchenko
2026-05-12 10:57 ` [PATCH v2 08/10] iio: light: opt3001: move driver to guard(mutex)() use Joshua Crofts via B4 Relay
2026-05-12 10:57 ` [PATCH v2 09/10] iio: light: opt3001: switch driver to managed resources Joshua Crofts via B4 Relay
2026-05-12 14:26   ` Jonathan Cameron [this message]
2026-05-12 14:32     ` Joshua Crofts
2026-05-12 10:57 ` [PATCH v2 10/10] iio: light: opt3001: add comment to mutex Joshua Crofts via B4 Relay

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260512152600.764ff7c7@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=andy@kernel.org \
    --cc=devnull+joshua.crofts1.gmail.com@kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=joshua.crofts1@gmail.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mail@alexanderkoch.net \
    --cc=mhornung.linux@gmail.com \
    --cc=nuno.sa@analog.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox