[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110405024838.GA29522@ponder.secretlab.ca>
Date: Mon, 4 Apr 2011 20:48:38 -0600
From: Grant Likely <grant.likely@...retlab.ca>
To: Jamie Iles <jamie@...ieiles.com>
Cc: Anton Vorontsov <cbouatmailru@...il.com>,
Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
Russell King <linux@....linux.org.uk>,
Arnd Bergmann <arnd@...db.de>, Nicolas Pitre <nico@...xnic.net>
Subject: Re: [PATCH] gpio: support for Synopsys DesignWare APB GPIO
On Sun, Apr 03, 2011 at 04:22:44PM +0100, Jamie Iles wrote:
> Hi Grant,
>
> On Sun, Apr 03, 2011 at 08:47:25AM -0600, Grant Likely wrote:
> > On Sun, Apr 3, 2011 at 8:07 AM, Jamie Iles <jamie@...ieiles.com> wrote:
> > > My first idea would be to have something like:
> > >
> > > struct mmio_gpio_bank {
> > > unsigned int ngpio;
> > > unsigned long set_offs;
> > > unsigned long clr_offs;
> > > unsigned long dout_offs;
> > > unsigned long din_offs;
> > > unsigned long dir_offs;
> > > };
> > >
> > > struct mmio_gpio_pdata {
> > > size_t bus_width_bits;
> > > int gpio_base;
> > > unsigned int nr_banks;
> > > struct mmio_gpio_bank banks[];
> > > };
> >
> > As discussed earlier in the thread, you probably don't need to support
> > multiple banks with this driver. Instead, create a separate device
> > instance for each bank.
>
> The reason I proposed this was for controllers where the registers
> aren't grouped together for each bank. For example, the Synopsys block
> has:
>
> 0x00-0x08 bank A control registers
> 0x0c-0x14 bank B control registers
> ...
> 0x50 bank A input register
> 0x54 bank B input register.
>
> So when you mentioned before using a single register resource with
> offsets I understood it to be something like what I've proposed
> otherwise multiple banks would have overlapping resources (or the
> resource would just be used to indicate the start address rather than
> start + end).
That may be a problem for request_mem_region() which would indeed
prevent the driver from specifying the full register range with
offsets inside it. I suspect that the platform_bus_type will inhibit
two platform_devices with overlapping regions from getting registered.
Fair enough, that is a pretty strong argument for Anton's model. I
don't think it would be a good idea to try and work around it by
making the resource only include the start address.
It does mean some gymnastics for a device tree binding to figure out
which registers are present, but the appropriate behaviour could be
selected by a set of compatible values for each kind of register
interface.
>
> Also, it's not clear here but this would create one gpio_chip per bank.
And that's bad why? :-)
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