Re: [PATCH v2] ARM: zynq: Add #io-channel-cells to (x)adc node for iio-hwmon

From: Lars-Peter Clausen
Date: Thu Mar 16 2017 - 17:21:23 EST


On 03/16/2017 07:06 PM, Michal Simek wrote:
> On 16.3.2017 17:51, Lars-Peter Clausen wrote:
>> On 03/16/2017 05:45 PM, Michal Simek wrote:
>>> On 16.3.2017 17:39, Moritz Fischer wrote:
>>>> On Thu, Mar 16, 2017 at 9:16 AM, Michal Simek <michal.simek@xxxxxxxxxx> wrote:
>>>>> Hi,
>>>>>
>>>>> On 8.3.2017 21:11, Moritz Fischer wrote:
>>>>>> Fix
>>>>>>
>>>>>> OF: /iio_hwmon: could not get #io-channel-cells for
>>>>>> /amba/adc@f8007100
>>>>>> OF: /iio_hwmon: could not get #io-channel-cells for
>>>>>> /amba/adc@f8007100
>>>>>> OF: /iio_hwmon: could not get #io-channel-cells for
>>>>>> /amba/adc@f8007100
>>>>>>
>>>>>> by adding the #io-channel-cells property.
>>>>>>
>>>>>> Signed-off-by: Moritz Fischer <mdf@xxxxxxxxxx>
>>>>>> Cc: Michal Simek <michal.simek@xxxxxxxxxx>
>>>>>> Cc: SÃren Brinkmann <soren.brinkmann@xxxxxxxxxx>
>>>>>> Cc: Julia Cartwright <julia@xxxxxx>
>>>>>> Cc: linux-kernel@xxxxxxxxxxxxxxx
>>>>>> Cc: devicetree@xxxxxxxxxxxxxxx
>>>>>> ---
>>>>>>
>>>>>> Changes from v1:
>>>>>> - fix messed up commit message
>>>>>> ---
>>>>>> arch/arm/boot/dts/zynq-7000.dtsi | 1 +
>>>>>> 1 file changed, 1 insertion(+)
>>>>>>
>>>>>> diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi
>>>>>> index f3ac9bf..98233a8 100644
>>>>>> --- a/arch/arm/boot/dts/zynq-7000.dtsi
>>>>>> +++ b/arch/arm/boot/dts/zynq-7000.dtsi
>>>>>> @@ -72,6 +72,7 @@
>>>>>> interrupts = <0 7 4>;
>>>>>> interrupt-parent = <&intc>;
>>>>>> clocks = <&clkc 12>;
>>>>>> + #io-channel-cells = <1>;
>>>>>> };
>>>>>>
>>>>>> can0: can@e0008000 {
>>>>>>
>>>>>
>>>>> I think it will be good to the next step too.
>>>>> It means also add iio-hwmon node too.
>>>>>
>>>>> What do you think?
>>>>
>>>> I hadn't put it in there since dts is supposed to describe hw,
>>>> but obviously putting the actual hwmon in there makes it more useful.
>>>
>>> I had one discussion about this with Grant in past and it is common
>>> mistake. It is simplification of purpose of dts.
>>>
>>
>> If the iio-hwmon binding had gone through review it would have been rejected.
>
> Isn't it a time to deprecate it?

Well, it's ABI now and has to stay forever. Deprecating it makes only sense
if there is a replacement, which there is not. The iio-hwmon bridge has its
usecases it's just instantiating it via devicetree which is not so nice.

>
>>
>>>>
>>>> I can resubmit with the hwmon node in there.
>>>
>>> If you grep kernel tree you will see that others are using it too.
>>> Also there is accepted binding for that that's why I can't see big
>>> problem with it.
>>
>> Since this is an application specific binding I wouldn't put it in the
>> generic DT include file. It's a bit like adding a gpio-key binding for each
>> of the GPIOs just in case somebody wants to use it.
>
> psci is system specific too.
>
> IIRC this driver for zynq was written by ADI or with ADI help that's why
> you know much better than I what's the correct configuration.
>
> This targets PS IP which should be present in the hw all the time.
> Not sure if for all configuration but I expect at least the part of it
> is there all them time.
>
> If binding is incorrect then please remove it with removing from all
> dts/dtsi files which have this. The same is for of probe function in the
> driver itself.
> If this is not done then this is just +1 case.
>
> If you still insist that we shouldn't do it then please at least extend
> commit message and put there example how to wire it on zynq.

There is a IIO driver for the XADC, this driver has a userspace interface
that exposes the measurements provided by the hardware. Using the hwmon
bridge will expose the same information just through a hwmon interface.

One reason for using the iio-hwmon bridge is because you have a legacy
application that expects the a hwmon interface. But new applications that
want to access the XADC should really use the IIO interface if possible.

In my opinion instantiating the hwmon bridge by default will only cause
confusion. There are now redundant interfaces and users will wonder what is
the difference between the two. Is it the same data, is it different data?
Which is the preferred interface? Which one is 'better'?