From: Matti Vaittinen <mazziesaccount@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: David Lechner <dlechner@baylibre.com>,
Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>,
Lars-Peter Clausen <lars@metafoo.de>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
Chen-Yu Tsai <wens@csie.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
Hugo Villeneuve <hvilleneuve@dimonoff.com>,
Nuno Sa <nuno.sa@analog.com>,
Javier Carrasco <javier.carrasco.cruz@gmail.com>,
Guillaume Stols <gstols@baylibre.com>,
Dumitru Ceclan <mitrutzceclan@gmail.com>,
Trevor Gamblin <tgamblin@baylibre.com>,
Matteo Martelli <matteomartelli3@gmail.com>,
Alisa-Dariana Roman <alisadariana@gmail.com>,
Ramona Alexandra Nechita <ramona.nechita@analog.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-renesas-soc@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-sunxi@lists.linux.dev
Subject: Re: [PATCH v5 03/10] iio: adc: add helpers for parsing ADC nodes
Date: Mon, 10 Mar 2025 09:41:00 +0200 [thread overview]
Message-ID: <4d5212b3-3801-408c-9a5d-c6111189793c@gmail.com> (raw)
In-Reply-To: <20250308162928.72bd1d1b@jic23-huawei>
On 08/03/2025 18:29, Jonathan Cameron wrote:
> On Wed, 5 Mar 2025 12:54:33 +0200
> Matti Vaittinen <mazziesaccount@gmail.com> wrote:
>
>> Thanks for the review David.
>>
>> On 04/03/2025 11:25, David Lechner wrote:
>>> On Mon, Mar 3, 2025 at 12:32 PM Matti Vaittinen
>>> <mazziesaccount@gmail.com> wrote:
>>>>
>>>> There are ADC ICs which may have some of the AIN pins usable for other
>>>> functions. These ICs may have some of the AIN pins wired so that they
>>>> should not be used for ADC.
>>>>
>>>> (Preferred?) way for marking pins which can be used as ADC inputs is to
>>>> add corresponding channels@N nodes in the device tree as described in
>>>> the ADC binding yaml.
>>>>
>>>> Add couple of helper functions which can be used to retrieve the channel
>>>> information from the device node.
>>>>
>>>> Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
>>>>
>>>> ---
>>
>>>> + *
>>>> + * Return: Number of found channels on succes. Negative value to indicate
>>>
>>> s/succes/success/
>>
>> Thanks!
>>
>>>> +int devm_iio_adc_device_alloc_chaninfo_se(struct device *dev,
>>>> + const struct iio_chan_spec *template,
>>>> + int max_chan_id,
>>>> + struct iio_chan_spec **cs)
>>>> +{
>>>> + struct iio_chan_spec *chan_array, *chan;
>>>> + int num_chan = 0, ret;
>>>> +
>>>> + num_chan = iio_adc_device_num_channels(dev);
>>>> + if (num_chan < 1)
>>>> + return num_chan;
>>>> +
>>>> + chan_array = devm_kcalloc(dev, num_chan, sizeof(*chan_array),
>>>> + GFP_KERNEL);
>>>> + if (!chan_array)
>>>> + return -ENOMEM;
>>>> +
>>>> + chan = &chan_array[0];
>>>> +
>>>> + device_for_each_child_node_scoped(dev, child) {
>>>> + u32 ch;
>>>> +
>>>> + if (!fwnode_name_eq(child, "channel"))
>>>> + continue;
>>>> +
>>>> + ret = fwnode_property_read_u32(child, "reg", &ch);
>>>> + if (ret)
>>>> + return ret;
>>>> +
>>>> + if (max_chan_id != -1 && ch > max_chan_id)
>>>> + return -ERANGE;
>>>> +
>>>
>>> Should we use return dev_err_probe() on these to help with debugging a bad dtb?
>>>
>>
>> I am not fan of using dev_err_probe() in a 'library code'. This is
>> because we never know if there'll be some odd use-case where this is not
>> called from the probe.
>>
>> All in all, I'd leave adding most of the debugs to the callers -
>> especially because we do not expect to have bad device-trees after the
>> initial 'development stage' of a board. The board 'development stage'
>> should really reveal bugs which prevent the channels from being
>> registered - and after the DT is correct, these debug prints become
>> unnecessary (albeit minor) binary bloat.
>>
>>>> + *chan = *template;
>>>> + chan->channel = ch;
>>>> + chan++;
>>>> + }
>>>> +
>>>> + *cs = chan_array;
>>>> +
>>>> + return num_chan;
>>>> +}
>>>> +EXPORT_SYMBOL_NS_GPL(devm_iio_adc_device_alloc_chaninfo_se, "IIO_DRIVER");
>>>
>>> We can make this less verbose by setting #define
>>> DEFAULT_SYMBOL_NAMESPACE at the start of the file. Then we can just do
>>> EXPORT_SYMBOL_GPL() throughout the rest of the file.
>>
>> I am not sure what to think of this. I use the good old 'ctrl + ]' in my
>> editor when I need to check how a function was supposed to be used. That
>> jumps to the spot of code where the function is. I'd like to see the
>> namespace mentioned there in order to not accidentally miss the fact the
>> function belongs to one.
>>
>> OTOH, I do like simplifications. Yet, the added simplification might not
>> warrant the namespace not being visible in the function definition.
>>
>>> Also, I would prefer if the namespace matched config name (IIO_ADC_HELPER).
>>
>> I had some lengthy discussion about this with Andy and Jonathan during
>> earlier review versions. In short, I don't like the idea of very
>> fragmented namespaces in IIO, which will just complicate the drivers
>> without providing any obvious benefit.
>>
>> https://lore.kernel.org/all/20250222174842.57c091c5@jic23-huawei/
>>
>>>> +
>>>> +int devm_iio_adc_device_alloc_chaninfo_se(struct device *dev,
>>>> + const struct iio_chan_spec *template,
>>>> + int max_chan_id,
>>>> + struct iio_chan_spec **cs);
>>>> +
>>>
>>> There are some different opinions on this, but on the last patch I did
>>> introducing a new namespace, the consensus seems to be that putting
>>> the MODULE_IMPORT_NS() in the header file was convenient so that users
>>> of the API don't have to remember to both include the header and add
>>> the import macro.
>>>
>>
>> I do like this suggestion, and I believe this would be the balance
>> between getting the benefit of hiding part of the symbols - while not
>> unnecessarily complicating the callers. I know some people are opposing
>> it though. My personal opinion is that having the MODULE_IMPORT_NS() in
>> a header would be neatly simplifying the calling code with very little
>> harm, especially here where including the header hardly has use-cases
>> outside the IIO ADC.
>>
>> Unfortunately, the "safety" seems to often be a synonym for just "making
>> it intentionally hard". As Finnish people say: "Kärsi, kärsi,
>> kirkkaamman kruunun saat". :)
>> (Roughly translated as "Suffer, suffer, you will get a brighter crown").
>>
>> Let's hear what Jonathan thinks of your suggestion.
>
> For this particular case my intent was that all the IIO exports that
> are suitable for use in simple IIO drives will be in this namespace,
> we just haven't started that conversion yet.
>
> As such, having it defined from a header for this helper isn't a good
> thing to do.
Hmm. I agree.
> Generally I prefer to see in driver code what namespaces
> are involved but do understand the other viewpoint. In this case I
> definitely don't think it is appropriate unless we go for a specific namespace
> for just this helper.
I suppose having the MODULE_IMPORT_NS() in the header would actually
make the more fine-grained namespaces (like IIO_ADC_HELPERS, IIO_GTS,
...) much more usable. That'd relieved the drivers from explicitly
listing multiple namespaces while nicely limiting the visibility.
If IIO was my territory, I might want to ask people to go with that
approach - but I am quite happy being a freeloade.. errm, I mean,
bystander ;)
Thanks!
Yours,
-- Matti
next prev parent reply other threads:[~2025-03-10 7:41 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-03 11:30 [PATCH v5 00/10] Support ROHM BD79124 ADC Matti Vaittinen
2025-03-03 11:31 ` [PATCH v5 02/10] property: Add functions to count named child nodes Matti Vaittinen
2025-03-03 11:50 ` Heikki Krogerus
2025-03-03 12:00 ` Andy Shevchenko
2025-03-03 11:59 ` Andy Shevchenko
2025-03-10 6:23 ` Matti Vaittinen
2025-03-10 8:23 ` Andy Shevchenko
2025-03-03 11:32 ` [PATCH v5 03/10] iio: adc: add helpers for parsing ADC nodes Matti Vaittinen
2025-03-04 9:25 ` David Lechner
2025-03-04 12:07 ` Andy Shevchenko
2025-03-05 10:54 ` Matti Vaittinen
2025-03-08 16:29 ` Jonathan Cameron
2025-03-10 7:41 ` Matti Vaittinen [this message]
2025-03-10 19:25 ` Jonathan Cameron
2025-03-03 11:34 ` [PATCH v5 08/10] MAINTAINERS: Add IIO ADC helpers Matti Vaittinen
2025-03-03 11:34 ` [PATCH RFC net-next v5 10/10] net: gianfar: Use device_get_child_node_count_named() Matti Vaittinen
2025-03-03 11:51 ` Andy Shevchenko
2025-03-03 12:13 ` Matti Vaittinen
2025-03-03 12:24 ` Andy Shevchenko
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=4d5212b3-3801-408c-9a5d-c6111189793c@gmail.com \
--to=mazziesaccount@gmail.com \
--cc=alisadariana@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=gstols@baylibre.com \
--cc=hvilleneuve@dimonoff.com \
--cc=javier.carrasco.cruz@gmail.com \
--cc=jernej.skrabec@gmail.com \
--cc=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=matteomartelli3@gmail.com \
--cc=matti.vaittinen@fi.rohmeurope.com \
--cc=mitrutzceclan@gmail.com \
--cc=nuno.sa@analog.com \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=ramona.nechita@analog.com \
--cc=samuel@sholland.org \
--cc=tgamblin@baylibre.com \
--cc=wens@csie.org \
/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