From: Waqar Hameed <waqar.hameed@axis.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: "David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
kernel@axis.com, linux-kernel@vger.kernel.org,
linux-iio@vger.kernel.org
Subject: Re: [PATCH v3 3/3] iio: Add driver for Nicera D3-323-AA PIR sensor
Date: Mon, 7 Jul 2025 10:46:09 +0200 [thread overview]
Message-ID: <pnd7c0ks81a.fsf@axis.com> (raw)
In-Reply-To: <20250706121117.75665bb0@jic23-huawei> (Jonathan Cameron's message of "Sun, 6 Jul 2025 12:11:17 +0100")
On Sun, Jul 06, 2025 at 12:11 +0100 Jonathan Cameron <jic23@kernel.org> wrote:
[...]
> One suggestion inline on providing more information on the 'why' behind
> the regulator handling.
>
> I want to leave this on list anyway to give more time for other reviews,
> but if nothing else comes up and you are happy with my description I can
> tweak this whilst applying.
Sure, we can let it breathe for a bit. I'm fine with you editing it
while applying it (maybe also the minor format comment in the
dt-bindings patch then?). Either way, if there is anything else you want
me to do do, just tell! Thanks again Jonathan!
>
> Jonathan
>
>> ---
>> drivers/iio/proximity/Kconfig | 9 +
>> drivers/iio/proximity/Makefile | 1 +
>> drivers/iio/proximity/d3323aa.c | 814 ++++++++++++++++++++++++++++++++
>> 3 files changed, 824 insertions(+)
>> create mode 100644 drivers/iio/proximity/d3323aa.c
>>
>> diff --git a/drivers/iio/proximity/Kconfig b/drivers/iio/proximity/Kconfig
>> index a562a78b7d0d..6070974c2c85 100644
>> --- a/drivers/iio/proximity/Kconfig
>> +++ b/drivers/iio/proximity/Kconfig
>> @@ -32,6 +32,15 @@ config CROS_EC_MKBP_PROXIMITY
>> To compile this driver as a module, choose M here: the
>> module will be called cros_ec_mkbp_proximity.
>>
>> +config D3323AA
>> + tristate "Nicera (Nippon Ceramic Co.) D3-323-AA PIR sensor"
>> + depends on GPIOLIB
>> + help
>> + Say Y here to build a driver for the Nicera D3-323-AA PIR sensor.
>> +
>> + To compile this driver as a module, choose M here: the module will be
>> + called d3323aa.
>> +
>> config HX9023S
>> tristate "TYHX HX9023S SAR sensor"
>> select IIO_BUFFER
>> diff --git a/drivers/iio/proximity/Makefile b/drivers/iio/proximity/Makefile
>> index c5e76995764a..152034d38c49 100644
>> --- a/drivers/iio/proximity/Makefile
>> +++ b/drivers/iio/proximity/Makefile
>> @@ -6,6 +6,7 @@
>> # When adding new entries keep the list in alphabetical order
>> obj-$(CONFIG_AS3935) += as3935.o
>> obj-$(CONFIG_CROS_EC_MKBP_PROXIMITY) += cros_ec_mkbp_proximity.o
>> +obj-$(CONFIG_D3323AA) += d3323aa.o
>> obj-$(CONFIG_HX9023S) += hx9023s.o
>> obj-$(CONFIG_IRSD200) += irsd200.o
>> obj-$(CONFIG_ISL29501) += isl29501.o
>> diff --git a/drivers/iio/proximity/d3323aa.c b/drivers/iio/proximity/d3323aa.c
>> new file mode 100644
>> index 000000000000..b1bc3204c0c0
>> --- /dev/null
>> +++ b/drivers/iio/proximity/d3323aa.c
>> @@ -0,0 +1,814 @@
>
>
>> +static void d3323aa_disable_regulator(void *indata)
>> +{
>> + struct d3323aa_data *data = indata;
>> + int ret;
>> +
>> + /*
>> + * During probe() the regulator may be disabled. It is enabled during
>> + * device setup (in d3323aa_reset(), where it is also briefly disabled).
>> + * The check is therefore needed in order to have balanced
>> + * regulator_enable/disable() calls.
>> + */
>> + if (!regulator_is_enabled(data->regulator_vdd))
>> + return;
>> +
>> + ret = regulator_disable(data->regulator_vdd);
>> + if (ret)
>> + dev_err(data->dev, "Could not disable regulator (%d)\n", ret);
>> +}
>> +
>> +static int d3323aa_probe(struct platform_device *pdev)
>> +{
>> + struct device *dev = &pdev->dev;
>> + struct d3323aa_data *data;
>> + struct iio_dev *indio_dev;
>> + int ret;
>> +
>> + indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
>> + if (!indio_dev)
>> + return dev_err_probe(dev, -ENOMEM,
>> + "Could not allocate iio device\n");
>> +
>> + data = iio_priv(indio_dev);
>> + data->dev = dev;
>> +
>> + init_completion(&data->reset_completion);
>> +
>> + ret = devm_mutex_init(dev, &data->statevar_lock);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Could not initialize mutex\n");
>> +
>> + data->regulator_vdd = devm_regulator_get_exclusive(dev, "vdd");
>> + if (IS_ERR(data->regulator_vdd))
>> + return dev_err_probe(dev, PTR_ERR(data->regulator_vdd),
>> + "Could not get regulator\n");
>> +
>> + /*
>> + * The regulator will be enabled during the device setup below (in
>> + * d3323aa_reset()). Note that d3323aa_disable_regulator() also checks
>> + * for the regulator state.
>
> This comment doesn't explain why you do this here as opposed to after
> reset. Key is that there are complex paths in which the regulator is disabled
> that are unrelated to probe()/remove() Talk about those rather than why
> this 'works'. It's the why that matters in a comment more than the how.
>
> If nothing else comes up in review, I can chagne this to something like
>
> * The regulator will be enabled for the first time during the
> * device setup below (in d3323aa_reset()). However parameter changes
> * from userspace can require a temporary disable of the regulator.
> * To avoid complex handling of state, use a callback that will disable
> * the regulator if it happens to be enabled at time of devm unwind.
> */
Ah, I see that I misunderstood you the first time! The comment looks
fine to me.
>
>> + ret = d3323aa_setup(indio_dev, D3323AA_LP_FILTER_FREQ_DEFAULT_IDX,
>> + D3323AA_FILTER_GAIN_DEFAULT_IDX,
>> + D3323AA_THRESH_DEFAULT_VAL);
>> + if (ret)
>> + return ret;
next prev parent reply other threads:[~2025-07-07 8:46 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-04 16:14 [PATCH v3 0/3] Add driver for Nicera D3-323-AA PIR sensor Waqar Hameed
2025-07-04 16:14 ` [PATCH v3 1/3] dt-bindings: vendor-prefixes: Add Nicera Waqar Hameed
2025-07-04 16:14 ` [PATCH v3 3/3] iio: Add driver for Nicera D3-323-AA PIR sensor Waqar Hameed
2025-07-06 11:11 ` Jonathan Cameron
2025-07-07 8:46 ` Waqar Hameed [this message]
2025-07-13 16:20 ` Jonathan Cameron
2025-07-04 16:14 ` [PATCH v3 2/3] dt-bindings: iio: proximity: Add " Waqar Hameed
2025-07-06 10:53 ` Jonathan Cameron
2025-07-07 6:44 ` Krzysztof Kozlowski
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=pnd7c0ks81a.fsf@axis.com \
--to=waqar.hameed@axis.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=kernel@axis.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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;
as well as URLs for NNTP newsgroup(s).