On Fri, Jun 7, 2019 at 1:10 PM Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote: > On Fri, 7 Jun 2019 at 10:29, Lee Jones <lee.jones@xxxxxxxxxx> wrote: > > > > When booting MSM based platforms with Device Tree or some ACPI > > implementations, it is possible to provide a list of reserved pins > > via the 'gpio-reserved-ranges' and 'gpios' properties respectively. > > However some ACPI tables are not populated with this information, > > thus it has to come from a knowledgable device driver instead. > > > > Here we provide the MSM common driver with additional support to > > parse this informtion and correctly populate the widely used > > 'valid_mask'. > > > > Signed-off-by: Lee Jones <lee.jones@xxxxxxxxxx> > > I'm not sure if this is the correct approach. Presumably, on ACPI > systems, all the pinctl stuff is already set up by the firmware, and > so we shouldn't touch *any* pins unless they have been requested > explicitly. Is there any way we can support this in the current > framework? I don't suppose anything but the GPIO portions of the pinctrl driver is ever used under ACPI. I guess in an ideal ACPI world noone (like userspace) would ever use a GPIO because ACPI would have all GPIOs assigned a particular purpose, so accessing any of them would lead to a crash. But in practice it seems a lot of GPIOs are available and used for example by userspace hacks, so just blacklisting the ones that cannot be accessed by the GPIO subsystem seems like a viable compromise. Then we have the ACPI paradigm of pin control being controlled by ACPI: this is also great in theory, but it seems like the ACPI firmware has in cases forgot or omitted to implement some of it and people need to access it anyways. The people writing the default firmware cannot think out or test all usecases, so some will be left open-ended to non-firmware authoring users. This is why drivers/pinctrl/intel/* exists despite being for exclusively ACPI platforms. Being able to control pins also from the kernel has become a viable compromise. Yours, Linus Walleij