lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <28b9dda3-6fb6-49b5-90bd-716eb35a3104@gmail.com>
Date: Mon, 17 Feb 2025 09:08:51 +0200
From: Matti Vaittinen <mazziesaccount@...il.com>
To: Jonathan Cameron <jic23@...nel.org>
Cc: Matti Vaittinen <matti.vaittinen@...rohmeurope.com>,
 Lars-Peter Clausen <lars@...afoo.de>, Rob Herring <robh@...nel.org>,
 Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley
 <conor+dt@...nel.org>, Nuno Sa <nuno.sa@...log.com>,
 David Lechner <dlechner@...libre.com>, linux-iio@...r.kernel.org,
 devicetree@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 2/5] iio: adc: add helpers for parsing ADC nodes

On 11/02/2025 21:07, Jonathan Cameron wrote:
> On Tue, 11 Feb 2025 10:52:51 +0200
> Matti Vaittinen <mazziesaccount@...il.com> wrote:
> 
>> Hi Jonathan,
>>
>> Thanks for the review and all the comments!
>>
>> Just a note that I am currently spending some quality time with
>> rebuilding the floor of my house. Leaking floor drain can cause a bit of
>> a work... :rolleyes: So, my time with upstream work is a bit limited -
>> although writing an occasional bug or two can help one to keep the
>> balance ;)

The good thing when doing manual labour is that one can run thinking 
processes at the background - and has no time to reply instantly. XD So, 
I've been thinking about this quite a bit while installing new floor...

...

>>
>> Right, thanks.
>>
>>>> +			u32 ch;
>>>> +
>>>> +			ret = fwnode_property_read_u32(child, "reg", &ch);
>>>> +			if (ret)
>>>> +				return ret;
>>>
>>> In general the association between reg and channel is more complex.
>>> We need to deal with a reasonable subset of cases (single-channel, diff-channels
>>> etc) where it isn't the case that chan == chan->channel.
>>
>> I guess this is right. I, however, lacked of knowledge on how the
>> differential channels etc. are handled :) Hence I just implemented what
>> I believe is "the most common" approach, while leaving the rest to be
>> implemented by those who need it.
>>
>> Still, I agree that a generic looking API which silently produces bad
>> results for a few of the use-cases is not nice. By the very minimum we
>> should check if single-channel, diff-channels properties are present,
>> and then error out with a warning print. That should give a good hint
>> for those driver writers who are trying to use API for something
>> unsupported.
>>
>> Also, restrictions should be mentioned in the documentation.
>>
>> Do you think we should use some more specific function naming, like
>> "_simple" - suffix?
> 
> No to _simple. I think this needs to handle those cases before we
> take it at all  They should all have enough docs in adc.yaml to
> work out what happens.
> 

I am thinking it would be conceptually better to provide small helper 
(like the *_simpe() ) - which handled only specific properties. We can 
additionally provide '*_differential()' helper and potentially some 
'*_full()' helper which covers both cases.

Rationale is that:
  - writing _simple() helper is simpler. So is understanding it.
  - Devices may not support differential inputs. Drivers for those
   devices would want to call helper which does not accept the
   'differential' channel config. Parsing the differential channel
   information successfully and filling it in iio_chan_spec would be an
   error for those drivers.

> The most complex cases are all Analog Devices parts and those
> folk are very active on linux-iio so it should be easy to get
> them to review a series using it.
> 
> I don't think it is going to be particularly hard to generalise
> this.
> 
> We may end up with a variant that takes a 'per channel' callback
> to fill in more data + a private pointer of some type as often
> those are putting data in a parallel array of extra info about
> the channels.  Let's see what it looks like.

I was playing with this thought for a bit. I do love the regulator 
framework's '.of_parse_cp' which the driver can fill in the regulator 
desc. It's a pointer to function which is called by a regulator core 
after it locates the regulator node so the driver can handle regulator 
specific properties and do relevant configs in the registers.

I some sense the use case is similar - PMICs usually contain multiple 
regulators, each having own node. Being able to 'offload' locating the 
node to the regulator-core is often very handy for drivers.

I thought we could maybe add .fwnode_parse_chan_cp field in the iio_info 
structure. Idea being that it'd be a function which would be called for 
each channel - and it would probably be useful on other areas in IIO 
besides the ADCs.

Problem is that the number of channels may not be known prior parsing 
the device-tree. So, here is kind of a chicken-egg problem with 
populating the iio_chan_spec. Furthermore, locating the channel node in 
device-tree may not be 'standard enough' throughout all the different 
IIO areas.

What comes to a devicetree parsing helper which takes a pointer to a 
device specific configuration function as argument - my initial feeling 
is that it might get a bit overly complex to be user-friendly.

Hence, I'd keep this simple and provided small-but-usefull _simple() ;)

Well, if others aren't convinced by the usefulness of these helpers - 
then I'll probably just squash it into bd79124 driver and be done with 
this :) Later if I work for another ADC variant I might export it as 
'rohm_adc_helper' with an internal to IIO header :)

Thanks for the opinions / discussion!

Yours,
  -- Matti


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ