Re: GPIO bindings guidelines (Was: Re: [PATCH v5 10/12] gpio: Support for unified device properties interface)

From: Alexandre Courbot
Date: Thu Oct 23 2014 - 02:03:15 EST


On Tue, Oct 21, 2014 at 4:54 PM, Arnd Bergmann <arnd@xxxxxxxx> wrote:
> On Tuesday 21 October 2014 14:14:02 Alexandre Courbot wrote:
>> >
>> > We have enforced naming things for the dmaengine binding, which has
>> > just led to everyone calling things "rx" and "tx". My fear is that
>> > if we start to enforce giving a name, we'd end up with lots of
>> > drivers that use a "gpio-gpios" property or something silly.
>>
>> Checking the bindings is also part of the review process. Things
>> like "gpio-gpios" should simply not be accepted to begin with.
>>
>> This sounds like a good chance to finally land some guidelines
>> regarding GPIO bindings. Let's summarize the situation:
>> - GPIO bindings can be defined using both DT and ACPI (both interfaces
>> nicely abstracted by the interface introduced by this series)
>> - Both firmware interfaces support indexed GPIOs
>> - Both firmware interfaces support named GPIO properties, with an
>> optional index (can we absolutely take this for granted on ACPI now?)
>
> The developers working on it have said that they definitely want to
> be compatible with the existing bindings, so the answer to your question
> is yes.
>
>> - For DT bindings, both foo-gpio and foo-gpios are valid properties
>> for the GPIO "foo".
>
> I would like to see the documentation recommend one over the other for
> new bindings. Most other subsystems use the plural form even for
> properties that only have one entry, so I'd like to see "foo-gpios"
> become the canonical form for named gpio lines.

Sounds good.

> Drivers that use
> existing bindings with the "foo-gpio" form (or worse, "foo-somethingelse"
> can use the same internal interface as the drivers that use name plus
> index. Do you see a problem using what I suggested for the combined
> API:
>
> __gpiod_get(dev, propname, index); // use property name plus index
> gpiod_get(dev, index); // use "gpios" plus index
> gpiod_get_named(dev, "name"); use "name-gpios" with index 0

Apart from the loosy naming practices which we sometimes see (and
which should be caught during review), do you have something against
requiring a name for all new GPIO bindings, i.e. for ensuring that all
new properties are "name-gpio" and forbidding "gpios"?

Requiring a proper name for all GPIOs makes a lot of sense IMHO, it
makes drivers easier to understand and is less error-prone than long
arrays of GPIOs. The API would then be basically what we have today:

gpiod_get(dev, name) // use "name-gpios" with index 0
gpiod_get_index(dev, name, index) // for the rare case where several
GPIOs serve the same function. Not to be used lightly.

... with stronger guidelines for the definition of new bindings, and a
big warning in the kerneldoc of gpiod_get_index().

ACPI drivers that may use tables without _DSD should then use a way to
bind GPIO names to indexes as a fallback for older hardware.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/