On Fri, Nov 9, 2012 at 2:11 PM, Mathias Nyman
<mathias.nyman@xxxxxxxxxxxxxxx> wrote:
On 11/08/2012 09:38 PM, Mika Westerberg wrote:
...
+#include<linux/errno.h>
+#include<linux/gpio.h>
+#include<linux/module.h>
+#include<linux/acpi_gpio.h>
+#include<linux/acpi.h>
+
+static int acpi_gpiochip_find(struct gpio_chip *gc, void *data)
+{
+ acpi_handle handle = data;
+ acpi_handle gc_handle;
+
+ if (!gc->dev)
+ return false;
+
+ gc_handle = gc->dev->acpi_handle;
+ if (!gc_handle)
+ return false;
This test is redundant with the next one... unless 'handle' is also NULL
:-)
Is it at all possible for multiple gpiochips to be used for a single
ACPI gpio controller node? Such as if the gpio controller has multiple
banks that should be controlled separately? If so then this won't be
sufficient. I've got the same issue with DT support where the find
function needs to also check if the pin is provided by that specific
gpiochip.
AFAIK no but I'll let Mathias to answer that as he knows this better.
I'm interpreting it the same way as Mika, max one actual controller per ACPI
device node
The path (called ResourceSource in ACPI5 specs) in GpioIO/GpioInt resources
is a "string which uniquely identifies the GPIO controller referred to by
this descriptor." The pin number is zero based controller relative.
The ACPI device controller node includes all other resources needed by the
controller driver (ioport/mem base, range, interrupt, and Hardware ID used
to pair with a driver)
Checked a board with two identical gpio controllers on it and it had two
separate ACPI device node entries. (with only different io address base and
interrupt resources)
That's not really the situation that I'm thinking about. What I mean
is for a gpio controller that is more convenient for Linux to support
using multiple gpiochips (Linux internal detail), even though there it
is described with a single ACPI node.