[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <201002262302.18890.david-b@pacbell.net>
Date: Fri, 26 Feb 2010 23:02:18 -0800
From: David Brownell <david-b@...bell.net>
To: Ben Gardner <gardner.ben@...il.com>
Cc: linux-kernel@...r.kernel.org,
Andres Salomon <dilinger@...labora.co.uk>,
Andrew Morton <akpm@...ux-foundation.org>,
Jani Nikula <ext-jani.1.nikula@...ia.com>
Subject: Re: [PATCH 1/3] gpiolib: add gpio_set_direction()
On Friday 26 February 2010, Ben Gardner wrote:
> Combine gpio_direction_input() and gpio_direction_output() into
> gpio_set_direction().
NAK.
When we discussed the programming interface originally, having the
direction be part of the function name was explicitly requested as
a way to reduce programming errors.
I recall that a gpio_set_direction() was in the original proposal...
removing that was one of the handful of fixes that went into the final
set of calls in this programming interface.
And in fact ... it *was* very easy to make errors with a few GPIO
interfaces which worked like that. With even fewer parameters to
create confusion than in your proposal.
Let's have no retrograde motion...
> Add 'none' and 'inout' directions to the sysfs interface.
Both of those seem nonsensical:
"none" ... since it's not even a GPIO, why would it show
up through the GPIO subsystem???
"inout" ... is not a direction. But if you want to do this,
you really ought to bite the bullet and come up with a
way the implementation can pass up its capabilities.
Did you read the definition of gpio_get_value()? It says
"When reading the value of an output pin, the value returned
should be what's seen on the pin ... that won't always match
the specified output value, because of issues including
open-drain signaling and output latencies." Also: "note that
not all platforms can read the value of output pins; those that
can't should always return zero."
Another way to say that is that "output" means 'inout" except
when the platform can't do that. So you'd need to address the
case of hardware that's truly output-only ... instead of
ignoring that, as done here. (That is: you'd need to have a
way to reject "inout" mode ... or for that matter, "output-only".)
Doing that well might be a Good Thing ... if for example it
lets the initial mode of a GPIO show up properly ... there's
currently an assumption in sysfs that they start up as "input",
which of course makes sense for any power-sensitive system
(you don't enable output drivers unless that power consumption
is for some reason required).
I've never, for example, seen GPIO hardware that would support
the equivalent of that "open in <bitmask> mode". It's either
unidirectional (rarely), or (normally) the only real option is
whether the output drivers are disabled. So you always get the
"inout" semantics described above, or input-only ones. Asking
for output-only would need to fail. (Or in the less typical
cases, it's asking for "inout" that would need to fail.)
--
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