Re: [PATCH V2] iio: adc: Add Renesas GyroADC driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/10/2017 08:06 PM, Geert Uytterhoeven wrote:
> Hi Marek,
> 
> On Tue, Jan 10, 2017 at 7:52 PM, Marek Vasut <marek.vasut@xxxxxxxxx> wrote:
>> On 01/10/2017 07:41 PM, Geert Uytterhoeven wrote:
>>> On Tue, Jan 10, 2017 at 7:35 PM, Marek Vasut <marek.vasut@xxxxxxxxx> wrote:
>>>>> On Mon, Jan 9, 2017 at 10:55 PM, Marek Vasut <marek.vasut@xxxxxxxxx> wrote:
>>>>>> On 01/09/2017 10:02 PM, Lars-Peter Clausen wrote:
>>>>>>> On 01/09/2017 09:56 PM, Marek Vasut wrote:
>>>>>>>> On 01/09/2017 09:07 PM, Lars-Peter Clausen wrote:
>>>>>>>>> On 01/09/2017 02:47 PM, Marek Vasut wrote:
>>>>>>>>>> On 01/09/2017 02:45 PM, Lars-Peter Clausen wrote:
>>>>>>>>>>> On 01/09/2017 01:03 AM, Marek Vasut wrote:
>>>>>>>>>>> [...]
>>>>>>>>>>>> +- renesas,gyroadc-mode: GyroADC mode of operation, must be either of:
>>>>>>>>>>>> +                        1 - MB88101A mode, 12bit sampling, 4 channels
>>>>>>>>>>>> +                        2 - ADCS7476 mode, 15bit sampling, 8 channels
>>>>>>>>>>>> +                        3 - MAX1162 mode,  16bit sampling, 8 channels
>>>>>>>>>>>
>>>>>>>>>>> So is this a ADC, or is this just a specialized SPI controller that
>>>>>>>>>>> interfaces to an external ADC?
>>>>>>>>>>
>>>>>>>>>> It's a special SPI controller, except one cannot access the SPI bus
>>>>>>>>>> directly. It sends out clock and reads in the data from the ADC .
>>>>>>>>>
>>>>>>>>> OK, thanks for the clarification. The commit message does not mention this
>>>>>>>>> at the moment and makes it sound like this is a built-in ADC.
>>>>>>>>>
>>>>>>>>> Also the renesas,gyroadc-mode property is more of a driver configuration
>>>>>>>>> setting rather than a description of the hardware, at least it is not very
>>>>>>>>> DT-ish.
>>>>>>>>>
>>>>>>>>> I'd go with something like
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     &adc {
>>>>>>>>>             compatible = "renesas,r8a7791-gyroadc";
>>>>>>>>>             ...
>>>>>>>>>
>>>>>>>>>             adc@0 {
>>>>>>>>>                     reg = <0>;
>>>>>>>>>                     compatible = "maxim,max1162";
>>>>>>>>
>>>>>>>> But then the max1162 ADC driver* will try to bind to this, right ?
>>>>>>>> And since the MAX1162 is an SPI device, it will fail to work as the
>>>>>>>> ADC driver does not provide any sort of SPI interface. Or is that
>>>>>>>> actually OK ?
>>>>>>>
>>>>>>> Only if you call of_register_spi_devices().
>>>>>>>
>>>>>>> We for example have devices that can either work in SPI or I2C mode and both
>>>>>>> use the same compatible string. Depending on whether the device is a subnode
>>>>>>> of a SPI or I2S controller it is registered as a SPI or I2C device.
>>>>>>>
>>>>>>> This situation is not that different.
>>>>>>
>>>>>> So in this case, the gyroadc driver would instead iterate over the
>>>>>> subnodes, check the compatible string and configure the channel mode
>>>>>> according to the subnode compatible string?
>>>>>
>>>>> That's correct.
>>>>>
>>>>>> But then, the gyroadc only has one configuration register which applies
>>>>>> to all channels, which selects how many bits to read from the connected
>>>>>> SPI-ADC device(s) (sample width). This is not per-channel configurable.
>>>>>> The driver would then have to check if all the compatible properties in
>>>>>> the ADC subnodes select the same ADC or at least ADC which has the same
>>>>>
>>>>> Correct again.
>>>>>
>>>>>> sample width. This looks like a duplication to me. Thoughts ?
>>>>>
>>>>> While the protocols have to be the same for each channel, you can connect
>>>>> different devices. If you have e.g. a thermometer or barimeter that speaks
>>>>> the same protocol as a max1162 (i.e. it responds with 2 zero bytes and 2
>>>>> bytes of data), you can mix and match that with max1162 devices, once
>>>>> you have added support for the thermometer or barimeter to your driver.
>>>>
>>>> Which driver, the gyroadc driver ? That's only an ADC driver, it
>>>
>>> The gyroadc driver.
>>>
>>>> shouldn't be aware of any temperature/pressure sampling or any such
>>>> stuff IMO. What you suggest would result in overbloating the gyroadc
>>>> driver with support for all sorts of ADCs connected to it's channels
>>>> and providing all sorts of information, which I think would violate
>>>> the functional separation in the driver model.
>>>
>>> If the need ever arises, it can be turned into a "gyroadc" framework,
>>> and the actual sensor drivers can be enhanced to support the gyroadc
>>> driver, in addition to regular SPI master drivers?
>>
>> So basically we'd have a gyroadc bus type etc ?
> 
> Yep.
> 
>>> Something for the far future, of course ;-)
>>> For now we can limit it to the 3 types of devices officially supported by
>>> the GyroADC hardware.
>>
>> I'm fine with this, but this doesn't answer my question about
>> duplication. The gyroadc driver would have to check whether all
>> channels are configured to the same device type then ? Doesn't
>> seem quite right.
> 
> Yes, describing the real topology in DT means the driver has to verify that
> all existing child nodes contain the same sensor type.

Now that you put it this way, it does make sense. Thanks.

V4 is out btw.

-- 
Best regards,
Marek Vasut
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux