Commit 83c6590c authored by David Brownell's avatar David Brownell Committed by Linus Torvalds

gpio interface loosens call restrictions

Loosen gpio_{request,free}() and gpio_direction_{in,out}put() call context
restrictions slightly, so a common idiom is no longer an error: board init
code setting up spinlock-safe GPIOs before tasking is enabled.

The issue was caught by some paranoid code with might_sleep() checks.  The
legacy platform-specific GPIO interfaces stick to spinlock-safe GPIOs, so this
change reflects current implementations and won't break anything.
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 621e59a7
...@@ -111,7 +111,9 @@ setting up a platform_device using the GPIO, is mark its direction: ...@@ -111,7 +111,9 @@ setting up a platform_device using the GPIO, is mark its direction:
The return value is zero for success, else a negative errno. It should The return value is zero for success, else a negative errno. It should
be checked, since the get/set calls don't have error returns and since be checked, since the get/set calls don't have error returns and since
misconfiguration is possible. (These calls could sleep.) misconfiguration is possible. You should normally issue these calls from
a task context. However, for spinlock-safe GPIOs it's OK to use them
before tasking is enabled, as part of early board setup.
For output GPIOs, the value provided becomes the initial output value. For output GPIOs, the value provided becomes the initial output value.
This helps avoid signal glitching during system startup. This helps avoid signal glitching during system startup.
...@@ -197,7 +199,9 @@ However, many platforms don't currently support this mechanism. ...@@ -197,7 +199,9 @@ However, many platforms don't currently support this mechanism.
Passing invalid GPIO numbers to gpio_request() will fail, as will requesting Passing invalid GPIO numbers to gpio_request() will fail, as will requesting
GPIOs that have already been claimed with that call. The return value of GPIOs that have already been claimed with that call. The return value of
gpio_request() must be checked. (These calls could sleep.) gpio_request() must be checked. You should normally issue these calls from
a task context. However, for spinlock-safe GPIOs it's OK to request GPIOs
before tasking is enabled, as part of early board setup.
These calls serve two basic purposes. One is marking the signals which These calls serve two basic purposes. One is marking the signals which
are actually in use as GPIOs, for better diagnostics; systems may have are actually in use as GPIOs, for better diagnostics; systems may have
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment