[PATCH RFC 4/6] net: rfkill: gpio: add device tree support
From: arnd@arndb.de (Arnd Bergmann)
Date: 2014-01-21 12:35:38
Also in:
linux-devicetree, linux-wireless, lkml, netdev
On Tuesday 21 January 2014, Linus Walleij wrote:
On Tue, Jan 21, 2014 at 4:11 AM, Alexandre Courbot [off-list ref] wrote:quoted
On Sat, Jan 18, 2014 at 8:11 AM, Linus Walleij [off-list ref] wrote: I agree that's how it should be be done with the current API if your driver can obtain GPIOs from both ACPI and DT. This is a potential issue, as drivers are not supposed to make assumptions about who is going to be their GPIO provider. Let's say you started a driver with only DT in mind, and used gpio_get(dev, con_id) to get your GPIOs. DT bindings are thus of the form "con_id-gpio = <phandle>", and set in stone. Then later, someone wants to use your driver with ACPI. How do you handle that gracefully?Short answer is you can't. You have to pour backward-compatibility code into the driver first checking for that property and then falling back to the new binding if it doesn't exist.
With the ACPI named properties extension, it should be possible to have something akin to a "gpio-names" list that can be attached to an indexed array of gpio descriptors. I assume that Intel is going to need this for named irqs, clocks, regulators, dmas as well, so I think it will eventually get there. It's not something that can be done today though, or that is standardized in APCI-5.0. My guess is that named GPIOs are going to make more sense on x86 embedded than on arm64 server.
quoted
I'm starting to wonder, now that ACPI is a first-class GPIO provider, whether we should not start to encourage the deprecation of the "con_id-gpio = <phandle>" binding form in DT and only use a single indexed GPIO property per device.You have a valid point.
Independent of ACPI, I prefer indexed "gpios" properties over "con_id-gpio" properties anyway, because it's more consistent with some of the other subsystems. I don't have an opinion though on whether we should also allow a "gpios"/"gpio-names" pair, or whether we should keep the indexed "gpios" list for the anonymous case.
quoted
The con_id parameter would then only be used as a label, which would also have the nice side-effect that all GPIOs used for a given function will be reported under the same name no matter what the GPIO provider is.As discussed earlier in this thread I'm not sure the con_id is suitable for labelling GPIOs. It'd be better to have a proper name specified in DT/ACPI instead.
+1
quoted
From an aesthetic point of view, I definitely prefer using con_id to identify GPIOs instead of indexes, but I don't see how we can make it play nice with ACPI. Thoughts?Let's ask the DT maintainers... I'm a bit sceptic to the whole ACPI-DT-API-should-be-unified just-one-function-call business, as this was just a very simple example of what can happen to something as simple as devm_gpiod_get[_index]().
I think a unified kernel API makes more sense for some subsystems than others, and it depends a bit on the rate of adoption of APCI for drivers that already have a DT binding (or vice versa, if that happens). GPIO might actually be in the first category since it's commonly used for off-chip components that will get shared across ARM and x86 (as well as everything else), while a common kernel API would be less important for things that are internal to an SoC where Intel is the only company needing ACPI support. Arnd