Re: [RFC PATCH v2] ARM: dts: Add TS-7553-V2 support

From: Krzysztof Kozlowski
Date: Fri Jul 15 2022 - 02:42:42 EST


On 14/07/2022 23:26, Kris Bahnsen wrote:
> On Thu, 2022-07-14 at 10:34 +0200, Krzysztof Kozlowski wrote:
>> On 14/07/2022 00:12, Kris Bahnsen wrote:
>>> Add initial support of the i.MX6UL based TS-7553-V2 platform.
>>
>> Use subject prefix matching the subsystem. git log --oneline --
>
> Can you please elaborate? The subject prefix is "ARM: dts:", I'm not
> sure what is missing. Should it be something like
> "ARM: dts: imx6ul-ts7553v2:" in this case?

Run the command, you will see.

>
>>
>>>
>>> Signed-off-by: Kris Bahnsen <kris@xxxxxxxxxxxxxx>
>>> ---
>>>
>>> V1->V2: Implement changes recommended by Rob Herring and dtbs_check
>>>
>>> RFC only, not yet ready to merge, more testing needed and we're working on
>>> SPI LCD support for this platform.
>>>
>>> Specifically, I have a few questions on some paradigms and dtbs_check output:
>>>
>>> imx6ul-ts7553v2.dtb: /: i2c-gpio: {'compatible': ... \
>>> 'magnetometer@c': {'compatible': ['asahi-kasei,ak8975'], 'reg': [[12]]}}}} \
>>> is not of type 'array'
>>> I'm not sure what this error is referring to as I've copied the example in
>>> invensense,mpu6050.yaml almost verbatim. Is this an issue with our patch
>>> or a false positive from dtbs_check?
>>
>> You would need to paste entire error, maybe with checker flags -v.
>
> Here is the verbose output. I'm not familiar enough yet with the schema and its
> validation code to catch what is wrong and would appreciate any insight.
>
> Check: arch/arm/boot/dts/imx6ul-ts7553v2.dtb
> /work/arch/arm/boot/dts/imx6ul-ts7553v2.dtb: /: i2c-gpio: {'compatible': ['i2c-gpio'], \
> '#address-cells': [[1]], '#size-cells': [[0]], 'pinctrl-names': ['default'], \
> 'pinctrl-0': [[58]], 'sda-gpios': [[11, 5, 6]], 'scl-gpios': [[11, 4, 6]], \
> 'imu@68': {'compatible': ['invensense,mpu9250'], 'reg': [[104]], \
> 'interrupt-parent': [[55]], 'interrupts': [[1, 1]], 'i2c-gate': {'#address-cells': [[1]], \
> '#size-cells': [[0]], 'magnetometer@c': {'compatible': ['asahi-kasei,ak8975'], \
> 'reg': [[12]]}}}} is not of type 'array'
>
> Failed validating 'type' in schema['patternProperties']['(?<!,nr)-gpios?$']:
> {'items': {'additionalItems': {'$ref': '#/definitions/cell'},
> 'items': [{'oneOf': [{'maximum': 4294967295,
> 'minimum': 1,
> 'phandle': True,
> 'type': 'integer'},
> {'const': 0, 'type': 'integer'}]}],
> 'minItems': 1,
> 'type': 'array'},
> 'minItems': 1,
> 'type': 'array'}
>
> On instance['i2c-gpio']:

Because you use "i2c-gpio", it seems... Fix it and check if error goes away.

> {'#address-cells': [[1]],
> '#size-cells': [[0]],
> 'compatible': ['i2c-gpio'],
> 'imu@68': {'compatible': ['invensense,mpu9250'],
> 'i2c-gate': {'#address-cells': [[1]],
> '#size-cells': [[0]],
> 'magnetometer@c': {'compatible': ['asahi-kasei,ak8975'],
> 'reg': [[12]]}},
> 'interrupt-parent': [[55]],
> 'interrupts': [[1, 1]],
> 'reg': [[104]]},
> 'pinctrl-0': [[58]],
> 'pinctrl-names': ['default'],
> 'scl-gpios': [[11, 4, 6]],
> 'sda-gpios': [[11, 5, 6]]}
> From schema: /usr/local/lib/python3.9/dist-packages/dtschema/schemas/gpio/gpio-consumer.yaml
>
>>
>>>
>>>
>>> imx6ul-ts7553v2.dtb: spi@2010000: spidev@1: 'compatible' is a required property
>>> Many of our devices have open-ended I2C and SPI ports that may or may not be
>>> used in customer applications. With "spidev" compatible string no longer
>>> supported, there is no easy way we know of to leave a placeholder or
>>> indication that the interface is present, usable, and either needs specific
>>> support enabled in kernel or userspace access via /dev/. We would love
>>> feedback on how to handle this situation when submitting platforms upstream.
>>
>> No empty devices, especially for spidev in DTS. There is really no
>> single need to add fake spidev... really, why? The customer cannot read
>> hardware manual and cannot see the header on the board? You can give him
>> a tutorial/howto guide, but don't embed dead or non-real code in DTS.
>
> We ship devices as bootable out of the box. A number of our customers end up
> attaching SPI devices that do not have existing kernel drivers and talk to them
> from userspace without having to touch a kernel build. The loss of spidev
> directly has increased support requests we receive on the matter.

Unfortunately this is an argument like - our customers always wanted
dead code in DTS, so we embed here such. Feel free to add a comment
about placeholder etc, but empty node not. Another issue is that empty
node without compatible also does not help your customers...

>
(...)

>
>>
>>> +
>>> + gpio-keys {
>>> + compatible = "gpio-keys";
>>> + pinctrl-names = "default";
>>> + pinctrl-0 = <&pinctrl_gpio_keys>;
>>> +
>>> + left {
>>
>> This fails on dtbs_check. Generic node names, so "key-0" or "key-left"
>
> For reference, as of commit b047602d579b4fb028128a525f056bbdc890e7f0, there
> are no errors/warnings from dtbs_check or checkpatch.pl regarding node
> names being "key-..." and the example in gpio-keys.yaml uses "up" "left" etc.

I know, I changed it. It's in linux-next.

>
> I've also changed the node name to just "keys" per devicetree specifications
> doc.
>
>>
>>> + i2c_gpio: i2c-gpio {
>>
>> Generic node name, so "i2c"
>
> Understood.
>
> Are there any guidelines/restrictions on label use/schema 
> throughout a dts file? The devicetree-specification document only defines
> valid characters for a label and I've been unable to find any other docs.

For label - use underscores and that's it. Only the node names should be
generic.

>

Best regards,
Krzysztof