[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110214193502.101759d0@lxorguk.ukuu.org.uk>
Date: Mon, 14 Feb 2011 19:35:02 +0000
From: Alan Cox <alan@...rguk.ukuu.org.uk>
To: Grant Likely <grant.likely@...retlab.ca>
Cc: Peter Tyser <ptyser@...-inc.com>, linux-kernel@...r.kernel.org,
Alek Du <alek.du@...el.com>,
Samuel Ortiz <sameo@...ux.intel.com>,
David Brownell <dbrownell@...rs.sourceforge.net>,
Eric Miao <eric.y.miao@...il.com>,
"Uwe Kleine-K?nig" <u.kleine-koenig@...gutronix.de>,
Mark Brown <broonie@...nsource.wolfsonmicro.com>,
Joe Perches <joe@...ches.com>
Subject: Re: [PATCH 1/3] gpiolib: Add ability to get GPIO pin direction
> What is the use-case for alt_func? From the point of view of a GPIO
> driver, I don't think it cares if the pin has been dedicated to
Currently it doesn't.
However the moment it starts setting input and output itself on requests
then it does because it may kick the pin out of alt_func mode when you
merely want to request it so you know which pin to stick into alt_func
mode, or to find a mapping. The current situation is an "ignorance is
bliss" one, but making it smarter backfires. We have the same problem
with unknown state - if I have a set of pins some of whose state is known
at boot time then I can't now provide a get_direction interface because
of the lack of states. At the very least we need input/output/godknows
where the latter means the gpio_request code keeps its nose out.
reconfigure_resource();
see_if_we_own_it()
is simply the wrong order for a resource.
The second problem is that in many cases you need to call gpio_request to
know you have the pin yourself before you can set the direction. That
means forcing the direction in gpio_request is daft - you force an
undefined value that cannot yet safely be set in all cases.
At the moment the lack of alt_func also has some strange effects and you
end up with code like
foo_firmware_update()
{
/* Reserve the line for alt_func use for the moment */
gpio_request(GPIO_FOO, "blah");
random_gpio_driver_specific_altfunc_foo();
do stuff();
random_gpio_driver_specific_altfunc_foo();
gpio_free(GPIO_FOO);
/* Now available again for its normal GPIO use */
}
and that means you can't generalise dynamic access to a shared GPIO pin
without extra hardcoded knowledge.
In the case of a fixed pin its easy as you can either a) not register it
or b) just gpio_request it at boot and whack it in arch code, but if you
want to go beyond that it gets interesting.
Alan
--
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