From: David Brownell <david-b@pacbell.net>
To: Paul Mundt <lethal@linux-sh.org>
Cc: Bill Gatliff <bgat@billgatliff.com>,
Linux Kernel list <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@osdl.org>,
Andrew Victor <andrew@sanpeople.com>,
Haavard Skinnemoen <hskinnemoen@atmel.com>,
jamey.hicks@hp.com, Kevin Hilman <khilman@mvista.com>,
Nicolas Pitre <nico@cam.org>, Russell King <rmk@arm.linux.org.uk>,
Tony Lindgren <tony@atomide.com>
Subject: Re: [patch/rfc 2.6.19-rc5] arch-neutral GPIO calls
Date: Mon, 13 Nov 2006 19:21:37 -0800 [thread overview]
Message-ID: <200611131921.37737.david-b@pacbell.net> (raw)
In-Reply-To: <20061113213011.GA20507@linux-sh.org>
On Monday 13 November 2006 1:30 pm, Paul Mundt wrote:
> I think we're talking past each other but effectively in agreement. Bill
> was suggesting that multiple controllers were out of scope for the
> proposal, which is what I was objecting to. If the API is handling a GPIO
> cookie and allows for multiple controllers, I have no objections.
It's out of scope in the sense that it doesn't say "here's how to do it".
But it's in-scope in that what it _does_ say makes sure it can be done;
the example implementation does it.
> > ... pin mux is 100% out of scope for managing/using GPIOs, since pin
> > mux kicks in for pins that aren't even GPIO-capable ...
>
> I disagree. Pin muxing kicks in for pins that aren't GPIO-capable, but
> for many cases GPIO-capable is just another pin state that can be handled
> via muxing.
So? You're still confusing GPIOs with pins/balls. They're quite distinct,
in the general case, though maybe not on SH?
Some balls can be used for multiple GPIOs, some GPIOs can be mapped to one
of several balls... there's no general way to infer mux data from knowing
what GPIOs are needed.
> Pin refcounting is obviously not within the scope of your
> proposed API (nor should it be), but we do need to allow for pin muxing
> to be reconfigured in the GPIO case if nothing else is using the pin in
> question that the GPIO maps to. Most of this will be platform specific
> and layered, though.
Well, especially since it will be platform-specific, it can't really
be part of the GPIO framework. I'll repeat the example of OMAP1,
which lets some GPIOs come out on multiple pins ... pin configuration
and GPIOs really **must** be orthogonal. There is just no way to
infer the right mux setup even given a complete list of GPIOS that
will be used. Ditto pullup/pulldown config, multi-drive options,
and so forth.
But it's straightforward to talk about "use <this GPIO> as an input",
and "set <this output GPIO> to high". That doesn't require any
knowledge of how the pins are configured, and is a model that works
with every GPIO controller ever built.
> > > since it's ultimately up to the system and driver
> > > inserted at the time to grab and configure the pin as necessary, the
> > > board or CPU code is not going to have any notion of the "preferred" pin
> > > state, especially in the heavily muxed case.
> >
> > I don't see this either.
> >
> > In the primary "production board" use case, there is absolutely a "preferred"
> > pin mux config state: each pin is connected to one peripheral in one way.
> > And typically its configuration is never changed; if it is, that's something
> > the pin mux API would need to handle. (One example: using a UART's RXD
> > pin as a wakeup GPIO while the system sleeps. Presumably there are others.)
>
> Your definition of "typical" seems to vary considerably from mine.
Maybe. I'm looking at the type of clearly defined system for which
Linux has good support: one board, or a standard board stack; or
sometimes there's PCI-ish autoconfiguration on an expansion bus.
> The
> typical case more and more is having multiple functions per pin, where a
> GPIO state is just another function.
Sure, but that's exactly what I've been saying and isn't in conflict with it.
> If muxing happens within the board
> setup code, then we've already effectively locked out the other
> functions. This is also not something that can be resolved at build time.
See above; if the system is clearly defined, it _can_ be resolved then.
Or at worst, by some platform-specific autoconfiguration scheme.
> For example, I happen to have a UART RX and an MMC DMA request on the
> same pin (GPIO-configured for certain implementations). Both of these can
> be provided as modules for a "production" board where the pin can then be
> grabbed and toggled depending on which module is inserted, doing any sort
> of pin setup on the board side will not help in this case, it's something
> that needs to happen higher up.
You're bringing in a new problem though: autoconfiguring a board stack.
The classic approach is to formalize the module bus and teach that bus how
to enumerate according to the "hotplug" model (like PCI, PNP, etc) ... for
example, consulting an I2C EEPROM with board IDs, with the EEPROM address
depending on which slot it's plugged in to. At the moment you know what
boards are connected, surely you know how to mux those pins ... and what
devices to register, etc.
That's another set of problems that's nicely distinct from GPIOs. :)
- Dave
next prev parent reply other threads:[~2006-11-14 3:21 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-11 23:41 [patch/rfc 2.6.19-rc5] arch-neutral GPIO calls David Brownell
2006-11-12 1:27 ` H. Peter Anvin
2006-11-12 3:04 ` David Brownell
2006-11-12 3:15 ` H. Peter Anvin
2006-11-13 3:30 ` Bill Gatliff
2006-11-13 17:38 ` Paul Mundt
2006-11-13 17:56 ` Thiago Galesi
2006-11-13 19:25 ` David Brownell
2006-11-13 19:50 ` Bill Gatliff
2006-11-13 18:19 ` Bill Gatliff
2006-11-13 18:38 ` Paul Mundt
2006-11-13 19:29 ` Bill Gatliff
2006-11-13 20:15 ` Paul Mundt
2006-11-20 21:49 ` David Brownell
2006-11-21 3:44 ` Bill Gatliff
2006-11-21 4:45 ` David Brownell
2006-11-21 5:09 ` Bill Gatliff
2006-11-21 5:35 ` David Brownell
2006-11-21 6:09 ` Paul Mundt
2006-11-21 18:13 ` David Brownell
2006-11-22 3:36 ` Bill Gatliff
2006-11-22 3:55 ` Paul Mundt
2006-11-22 4:45 ` [Bulk] " David Brownell
2006-11-22 4:47 ` Bill Gatliff
2006-11-21 15:57 ` Bill Gatliff
2006-11-23 0:40 ` David Brownell
2006-11-30 6:57 ` pHilipp Zabel
2006-11-30 7:29 ` pHilipp Zabel
2006-11-30 22:24 ` David Brownell
2006-11-20 22:15 ` David Brownell
2006-11-21 2:56 ` Bill Gatliff
2006-11-13 20:00 ` David Brownell
2006-11-13 21:30 ` Paul Mundt
2006-11-14 3:21 ` David Brownell [this message]
2006-11-13 19:21 ` David Brownell
2006-11-13 19:43 ` Bill Gatliff
2006-11-13 20:15 ` David Brownell
2006-11-13 20:26 ` Bill Gatliff
2006-11-13 20:53 ` David Brownell
2006-11-13 20:58 ` Bill Gatliff
2006-11-13 20:29 ` Bill Gatliff
2006-11-16 14:54 ` [RFC/PATCH] arch-neutral GPIO calls: AVR32 implementation Haavard Skinnemoen
2006-11-20 21:47 ` David Brownell
2006-11-21 3:11 ` Bill Gatliff
2006-11-21 5:06 ` David Brownell
2006-11-21 5:51 ` Bill Gatliff
2006-11-21 18:19 ` David Brownell
2006-11-21 9:11 ` Haavard Skinnemoen
2006-11-21 19:03 ` David Brownell
2006-11-28 12:36 ` [RFC/PATCH] arch-neutral GPIO calls: AVR32 implementation [take 2] Haavard Skinnemoen
2006-11-30 19:05 ` David Brownell
2006-12-01 9:51 ` Haavard Skinnemoen
2006-12-20 21:04 ` [patch 2.6.20-rc1 0/6] arch-neutral GPIO calls David Brownell
2006-12-20 21:08 ` [patch 2.6.20-rc1 1/6] GPIO core David Brownell
2006-12-27 17:49 ` Pavel Machek
2006-12-28 22:05 ` David Brownell
2006-12-29 0:27 ` Pavel Machek
2006-12-30 1:18 ` David Brownell
2007-01-01 20:55 ` Pavel Machek
2007-01-01 21:27 ` David Brownell
2007-01-02 14:18 ` Pavel Machek
2006-12-20 21:09 ` [patch 2.6.20-rc1 2/6] OMAP GPIO wrappers David Brownell
2006-12-20 21:11 ` [patch 2.6.20-rc1 3/6] AT91 " David Brownell
2006-12-21 6:10 ` Andrew Morton
2006-12-21 6:45 ` David Brownell
2006-12-20 21:12 ` [patch 2.6.20-rc1 4/6] PXA " David Brownell
2006-12-21 6:12 ` Andrew Morton
2006-12-21 6:44 ` David Brownell
2006-12-21 14:27 ` Nicolas Pitre
2006-12-21 15:03 ` pHilipp Zabel
2006-12-21 17:25 ` Nicolas Pitre
2006-12-21 19:32 ` pHilipp Zabel
2006-12-21 20:10 ` Nicolas Pitre
2006-12-21 20:32 ` Bill Gatliff
2006-12-22 6:53 ` pHilipp Zabel
2006-12-28 20:47 ` David Brownell
2006-12-30 2:15 ` Nicolas Pitre
2006-12-30 2:38 ` David Brownell
2007-01-01 19:43 ` David Brownell
2006-12-30 1:13 ` David Brownell
2006-12-21 19:25 ` David Brownell
2006-12-27 17:53 ` Pavel Machek
2006-12-28 20:48 ` David Brownell
2006-12-28 20:50 ` Pavel Machek
2006-12-28 20:53 ` Pavel Machek
2006-12-20 21:13 ` [patch 2.6.20-rc1 5/6] SA1100 " David Brownell
2006-12-21 6:13 ` Andrew Morton
2006-12-22 7:16 ` pHilipp Zabel
2006-12-22 15:05 ` Nicolas Pitre
2006-12-30 2:21 ` David Brownell
2006-12-30 3:15 ` Nicolas Pitre
2006-12-30 6:01 ` David Brownell
2006-12-30 13:59 ` pHilipp Zabel
2006-12-30 15:08 ` Russell King
2006-12-23 11:37 ` Russell King
2006-12-23 20:39 ` David Brownell
2006-12-27 18:24 ` Pavel Machek
2006-12-20 21:14 ` [patch 2.6.20-rc1 6/6] S3C2410 " David Brownell
2006-12-21 10:33 ` Arnaud Patard
2006-12-21 15:29 ` pHilipp Zabel
2006-12-23 11:40 ` Russell King
2006-12-20 23:30 ` [patch 2.6.20-rc1 0/6] arch-neutral GPIO calls Håvard Skinnemoen
2006-12-20 23:46 ` David Brownell
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=200611131921.37737.david-b@pacbell.net \
--to=david-b@pacbell.net \
--cc=akpm@osdl.org \
--cc=andrew@sanpeople.com \
--cc=bgat@billgatliff.com \
--cc=hskinnemoen@atmel.com \
--cc=jamey.hicks@hp.com \
--cc=khilman@mvista.com \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nico@cam.org \
--cc=rmk@arm.linux.org.uk \
--cc=tony@atomide.com \
/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