From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Peter Tyser <ptyser@xes-inc.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
Grant Likely <grant.likely@secretlab.ca>,
linux-kernel@vger.kernel.org, Alek Du <alek.du@intel.com>,
Samuel Ortiz <sameo@linux.intel.com>,
David Brownell <dbrownell@users.sourceforge.net>,
Eric Miao <eric.y.miao@gmail.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Joe Perches <joe@perches.com>
Subject: Re: [PATCH 1/3] gpiolib: Add ability to get GPIO pin direction
Date: Thu, 17 Feb 2011 09:06:43 +0100 [thread overview]
Message-ID: <20110217080643.GI22310@pengutronix.de> (raw)
In-Reply-To: <1297792151.965.10259.camel@petert>
On Tue, Feb 15, 2011 at 11:49:11AM -0600, Peter Tyser wrote:
> On Tue, 2011-02-15 at 17:19 +0000, Alan Cox wrote:
> > > + if (chip->get_direction) {
> > > + /* chip->get_direction may sleep */
> > > + spin_unlock_irqrestore(&gpio_lock, flags);
> > > + if (chip->get_direction(chip, gpio - chip->base) > 0)
> > > + set_bit(FLAG_IS_OUT, &desc->flags);
> > > + spin_lock_irqsave(&gpio_lock, flags);
> > > + } else {
> > > + set_bit(FLAG_IS_UNKNOWN, &desc->flags);
> > > + }
> > >
> > > This would have the side effect of having nearly all GPIO drivers
> > > default to an "unknown" direction until they implement the new
> > > get_direction() function, which I think is an improvement over the
> >
> > This doesn't solve anything. If the hardware supports alt_func state then
> > it now can't implement get_direction, so that's useless.
>
> I don't follow. If a pin is configured for some alternate function,
> then requesting it for GPIO should fail, thus it doesn't matter if it
> implements get_direction()? Since we can't easily toggle back and forth
> between GPIO and alt_func, I'd think we shouldn't be able to request
> alt_func pins for GPIO - they should be off-limits to the GPIO subsystem
> altogether.
hmm, I'm not sure. Letting gpio_request fail looks good from the POV of
an uninformed driver. But for some platform code, it seems more natural
to do:
gpio_request(mygpio);
myplatform_iomux_setup(pad_for_altfunc);
do_something_special();
/*
* the controler is unable to reset some component, so use
* bitbanging for that
*/
myplatform_iomux_setup(pad_for_gpio);
gpio_direction_output(mygpio, 0);
usleep(100);
myplatform_iomux_setup(pad_for_altfunc);
...
instead of only being able to gpio_request after
myplatform_iomux_setup(pad_for_gpio). (And so in theory take that risk
that another process grabs the gpio between mux-for-gpio and
gpio_request.) So if you ask me, it's gpio_direction_{in,out}put that
should fail, not gpio_request. But I'm not that sure about it to
already know now to keep this opinion until after this discussion is
over.
> My understanding is that currently if some platform wants to toggle pins
> back and forth between alt_func and GPIO, it needs to handle that logic
> itself. If platform code is handling that toggling, I'd think the GPIO
> code should not touch pins configured as alt_func. If the platform is
> no longer using them as alt_func, then it should poke the appropriate
> registers to make them not alt_func so that they can then be used by the
> GPIO subsystem.
.. or at least make the usage via the gpio subsystem fail using it.
OTOH on arm/plat-mxc (at least the newer chips) there is no easy mapping
between pads and gpios. So currently we do: gpio_request and
gpio_direction_{in,out}put yield 0, but it depends on the pin muxing if
the gpio is "visible" anywhere. I don't like that much, but I agree
that it's not worth to setup a huge table to map gpios to pads and back
just to return -ESOMETHING in the gpio functions.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2011-02-17 8:06 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-06 19:54 [PATCH 1/3] gpiolib: Add ability to get GPIO pin direction Peter Tyser
2011-01-06 19:54 ` [PATCH 2/3] gpio: pca953x: Implement get_direction() hook Peter Tyser
2011-01-06 23:16 ` David Brownell
2011-01-06 19:54 ` [PATCH 3/3] gpio: Add support for Intel ICHx/3100/Series[56] GPIO Peter Tyser
2011-01-06 23:12 ` David Brownell
2011-02-14 15:48 ` [PATCH 1/3] gpiolib: Add ability to get GPIO pin direction Peter Tyser
2011-02-14 16:02 ` Grant Likely
2011-02-14 19:14 ` Grant Likely
2011-02-14 20:01 ` Peter Tyser
2011-02-14 17:08 ` Alan Cox
2011-02-14 17:26 ` Grant Likely
2011-02-14 17:39 ` Mark Brown
2011-02-14 17:45 ` Peter Tyser
2011-02-14 18:04 ` Grant Likely
2011-02-14 18:46 ` Peter Tyser
2011-02-14 19:35 ` Alan Cox
2011-02-14 23:35 ` Peter Tyser
2011-02-15 11:42 ` Alan Cox
2011-02-15 17:05 ` Peter Tyser
2011-02-15 17:19 ` Alan Cox
2011-02-15 17:49 ` Peter Tyser
2011-02-15 19:41 ` Alan Cox
2011-02-17 8:06 ` Uwe Kleine-König [this message]
2011-03-06 7:53 ` Grant Likely
2011-02-15 23:55 ` Mark Brown
2011-03-06 7:49 ` Grant Likely
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=20110217080643.GI22310@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=alek.du@intel.com \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=dbrownell@users.sourceforge.net \
--cc=eric.y.miao@gmail.com \
--cc=grant.likely@secretlab.ca \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ptyser@xes-inc.com \
--cc=sameo@linux.intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.