mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Grant Likely <grant.likely@secretlab.ca>
To: Jamie Iles <jamie@jamieiles.com>
Cc: linux-kernel@vger.kernel.org, linux@arm.linux.org.uk,
	tglx@linutronix.de, cbouatmailru@gmail.com, arnd@arndb.de,
	nico@fluxnic.net
Subject: Re: [PATCHv3 0/7] gpio: extend basic_mmio_gpio for different controllers
Date: Tue, 3 May 2011 15:09:51 -0600	[thread overview]
Message-ID: <20110503210950.GA2866@ponder.secretlab.ca> (raw)
In-Reply-To: <1302520914-22816-1-git-send-email-jamie@jamieiles.com>

On Mon, Apr 11, 2011 at 12:21:47PM +0100, Jamie Iles wrote:
> Updated from v2 with change to use the set/dat registers for input/output
> register pair devices and removed some rebasing breakage.
> 
> Jamie Iles (7):
>   basic_mmio_gpio: remove runtime width/endianness evaluation
>   basic_mmio_gpio: convert to platform_{get,set}_drvdata()
>   basic_mmio_gpio: allow overriding number of gpio
>   basic_mmio_gpio: request register regions
>   basic_mmio_gpio: detect output method at probe time
>   basic_mmio_gpio: support different input/output registers
>   basic_mmio_gpio: support direction registers
> 
>  drivers/gpio/basic_mmio_gpio.c  |  390 +++++++++++++++++++++++++++++++--------
>  include/linux/basic_mmio_gpio.h |    1 +
>  2 files changed, 311 insertions(+), 80 deletions(-)

Hey Jamie,

Thanks a lot for putting this series together.

While on the topic of a generic mmio gpio driver, I've been thinking a
lot about things that Alan, Anton, and others have been doing, and I
took a good look at the irq_chip_generic work[1] that tglx (cc'd) put
together.

There are two things that stood out.  Alan pointed out (IIRC) that a
generic gpio driver should not require each bank to be encapsulated in
a separate struct platform_device, and after mulling over it a while I
agree.  It was also pointed out by Anton that often GPIO controllers
are embedded into other devices register addresses intertwined with
other gpio banks, or even other functions.

In parallel, tglx posted the irq_chip_generic patch[1] which has to
deal with pretty much the same set of issues.  I took a close look at
how he handled it for interrupt controllers, and I think it is
entirely appropriate to use the same pattern for creating a
gpio_mmio_generic library.

[1] http://comments.gmane.org/gmane.linux.ports.arm.kernel/113697

So, the direction I would like to go is to split the basic_mmio_gpio
drivers into two parts;
  - a platform_driver, and
  - a gpio_mmio_generic library.

The platform driver would be responsible for parsing pdata and/or
device tree node data, but would call into the gpio_mmio_generic
library for actually registering the gpio banks.

I envision the gpio_mmio_generic library would look something like
this:

First, a structure for storing the register offsets froma  base
address:

struct gpio_mmio_regs {
};

Next, a structure for each generic mmio gpio instance:

struct gpio_mmio_generic {
	spinlock_t	lock;

	/* initialized by user */
	unsigned long	reg_data;
	unsigned long	reg_set;
	unsigned long	reg_clr;
	unsigned long	reg_dir;

	void __iomem	*reg_base;

	/* Runtime register value caches; may be initialized by user */
	u32		data_cache;
	u32		dir_cache;

	/* Embedded gpio_chip.  Helpers functions set up accessors, but user
	 * can override before calling gpio_mmio_generic_add() */
	struct gpio_chip chip;
};

And then some helpers for initializing/adding/removing the embedded gpio_chip:

void gpio_mmio_generic_setup(struct gpio_mmio_generic *gmg, int register_width);
int gpio_mmio_generic_add(struct gpio_mmio_generic *gmg);
void gpio_mmio_generic_remove(struct gpio_mmio_generic *gmg);

gpio_mmio_generic_setup() sets up the common callback ops in the
embedded gpio_chip, but the decisions it makes could be overridden by
the user before calling gpio_mmio_generic_add().

I've not had time to prototype this yet, but I wanted to get it
written down and out onto the list for feedback since I probably won't
have any chance to get to it until after UDS.  Bonus points to anyone
who wants to take the initiative to hack it together before I get to
it.  Extra bonus points to anyone who also converts some of the other
gpio controllers to use it.  :-D

Thoughts?
g.

  parent reply	other threads:[~2011-05-03 21:09 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-11 11:21 Jamie Iles
2011-04-11 11:21 ` [PATCHv3 1/7] basic_mmio_gpio: remove runtime width/endianness evaluation Jamie Iles
2011-05-03 19:41   ` Grant Likely
2011-04-11 11:21 ` [PATCHv3 2/7] basic_mmio_gpio: convert to platform_{get,set}_drvdata() Jamie Iles
2011-05-03 19:41   ` Grant Likely
2011-04-11 11:21 ` [PATCHv3 3/7] basic_mmio_gpio: allow overriding number of gpio Jamie Iles
2011-05-03 19:41   ` Grant Likely
2011-04-11 11:21 ` [PATCHv3 4/7] basic_mmio_gpio: request register regions Jamie Iles
2011-05-03 19:41   ` Grant Likely
2011-04-11 11:21 ` [PATCHv3 5/7] basic_mmio_gpio: detect output method at probe time Jamie Iles
2011-04-11 12:05   ` Anton Vorontsov
2011-05-03 19:42   ` Grant Likely
2011-04-11 11:21 ` [PATCHv3 6/7] basic_mmio_gpio: support different input/output registers Jamie Iles
2011-04-11 12:06   ` Anton Vorontsov
2011-05-03 19:42   ` Grant Likely
2011-04-11 11:21 ` [PATCHv3 7/7] basic_mmio_gpio: support direction registers Jamie Iles
2011-05-03 19:42   ` Grant Likely
2011-05-03 21:09 ` Grant Likely [this message]
2011-05-03 21:13   ` [PATCHv3 0/7] gpio: extend basic_mmio_gpio for different controllers Grant Likely
2011-05-03 21:36     ` Grant Likely
2011-05-03 21:52     ` Anton Vorontsov
2011-05-03 22:04       ` Jamie Iles
2011-05-03 22:34         ` Anton Vorontsov
2011-05-04  0:00           ` Grant Likely
2011-05-04 10:36             ` Anton Vorontsov
2011-05-04 11:09           ` Jamie Iles
2011-05-04 11:31             ` Anton Vorontsov
2011-05-04 14:37               ` Jamie Iles
2011-05-04 14:43                 ` Grant Likely
2011-05-04 14:44                 ` Alan Cox
2011-05-04 14:57                   ` Jamie Iles
2011-05-04 15:02                 ` Anton Vorontsov
2011-05-04 15:04                   ` Jamie Iles
2011-05-13 19:37                   ` Anton Vorontsov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110503210950.GA2866@ponder.secretlab.ca \
    --to=grant.likely@secretlab.ca \
    --cc=arnd@arndb.de \
    --cc=cbouatmailru@gmail.com \
    --cc=jamie@jamieiles.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=nico@fluxnic.net \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®