[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CACxGe6uBqSZfHTDPAr3xTXTjOYrrn-AAM5kRkZ=nfVPGCT6z=Q@mail.gmail.com>
Date: Fri, 9 Nov 2012 15:46:58 +0000
From: Grant Likely <grant.likely@...retlab.ca>
To: Mathias Nyman <mathias.nyman@...ux.intel.com>
Cc: Mika Westerberg <mika.westerberg@...ux.intel.com>,
linux-kernel@...r.kernel.org, lenb@...nel.org,
rafael.j.wysocki@...el.com, broonie@...nsource.wolfsonmicro.com,
linus.walleij@...aro.org, khali@...ux-fr.org, ben-linux@...ff.org,
w.sang@...gutronix.de, linux-acpi@...r.kernel.org
Subject: Re: [PATCH 1/3] gpio / ACPI: add ACPI support
On Fri, Nov 9, 2012 at 3:05 PM, Mathias Nyman
<mathias.nyman@...ux.intel.com> wrote:
> On 11/09/2012 04:18 PM, Grant Likely wrote:
>>
>> On Fri, Nov 9, 2012 at 2:11 PM, Mathias Nyman
>> <mathias.nyman@...ux.intel.com> 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.
>>
>
> Ok, now I get it.
>
> Yes, in case a driver uses several gpiochips internally for different banks
> of a controller then all would have the same acpi_handle.
> acpi_get_gpio() would use the gpiobase of the first gpiochip that matches
> the handle, even if it's the wrong one.
>
> I guess It's possible to write a driver like that.
> The only acpi enumerated driver with the acpi_handle set (soon coming to
> upstream) is not done like that.
>
> Do you think this is a case that should be solved now? or just expect acpi
> gpio device driver to not use several gpiochips in one driver?
Look at what the DT code does. It is actually pretty easy to solve. I
would do it now, but I won't block the changes if you do not.
g.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists