diff options
author | Mika Westerberg <mika.westerberg@linux.intel.com> | 2014-10-29 10:41:01 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-11-04 15:58:22 -0500 |
commit | 0d9a693cc8619b28f0eeb689a554647d42848fde (patch) | |
tree | a5df01e1767f6a537531ad5bfc69cb9b2097bdf6 /Documentation/acpi/gpio-properties.txt | |
parent | f60e7074902a66d9a132a971ecda63ee5b8bc154 (diff) |
gpio / ACPI: Add support for _DSD device properties
With release of ACPI 5.1 and _DSD method we can finally name GPIOs (and
other things as well) returned by _CRS. Previously we were only able to
use integer index to find the corresponding GPIO, which is pretty error
prone if the order changes.
With _DSD we can now query GPIOs using name instead of an integer index,
like the below example shows:
// Bluetooth device with reset and shutdown GPIOs
Device (BTH)
{
Name (_HID, ...)
Name (_CRS, ResourceTemplate ()
{
GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
"\\_SB.GPO0", 0, ResourceConsumer) {15}
GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
"\\_SB.GPO0", 0, ResourceConsumer) {27, 31}
})
Name (_DSD, Package ()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () {"reset-gpio", Package() {^BTH, 1, 1, 0 }},
Package () {"shutdown-gpio", Package() {^BTH, 0, 0, 0 }},
}
})
}
The format of the supported GPIO property is:
Package () { "name", Package () { ref, index, pin, active_low }}
ref - The device that has _CRS containing GpioIo()/GpioInt() resources,
typically this is the device itself (BTH in our case).
index - Index of the GpioIo()/GpioInt() resource in _CRS starting from zero.
pin - Pin in the GpioIo()/GpioInt() resource. Typically this is zero.
active_low - If 1 the GPIO is marked as active_low.
Since ACPI GpioIo() resource does not have field saying whether it is
active low or high, the "active_low" argument can be used here. Setting
it to 1 marks the GPIO as active low.
In our Bluetooth example the "reset-gpio" refers to the second GpioIo()
resource, second pin in that resource with the GPIO number of 31.
This patch implements necessary support to gpiolib for extracting GPIOs
using _DSD device properties.
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'Documentation/acpi/gpio-properties.txt')
-rw-r--r-- | Documentation/acpi/gpio-properties.txt | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Documentation/acpi/gpio-properties.txt b/Documentation/acpi/gpio-properties.txt new file mode 100644 index 000000000000..3e45b8b7e4f2 --- /dev/null +++ b/Documentation/acpi/gpio-properties.txt | |||
@@ -0,0 +1,52 @@ | |||
1 | _DSD Device Properties Related to GPIO | ||
2 | -------------------------------------- | ||
3 | |||
4 | With the release of ACPI 5.1 and the _DSD configuration objecte names | ||
5 | can finally be given to GPIOs (and other things as well) returned by | ||
6 | _CRS. Previously, we were only able to use an integer index to find | ||
7 | the corresponding GPIO, which is pretty error prone (it depends on | ||
8 | the _CRS output ordering, for example). | ||
9 | |||
10 | With _DSD we can now query GPIOs using a name instead of an integer | ||
11 | index, like the ASL example below shows: | ||
12 | |||
13 | // Bluetooth device with reset and shutdown GPIOs | ||
14 | Device (BTH) | ||
15 | { | ||
16 | Name (_HID, ...) | ||
17 | |||
18 | Name (_CRS, ResourceTemplate () | ||
19 | { | ||
20 | GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly, | ||
21 | "\\_SB.GPO0", 0, ResourceConsumer) {15} | ||
22 | GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly, | ||
23 | "\\_SB.GPO0", 0, ResourceConsumer) {27, 31} | ||
24 | }) | ||
25 | |||
26 | Name (_DSD, Package () | ||
27 | { | ||
28 | ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), | ||
29 | Package () | ||
30 | { | ||
31 | Package () {"reset-gpio", Package() {^BTH, 1, 1, 0 }}, | ||
32 | Package () {"shutdown-gpio", Package() {^BTH, 0, 0, 0 }}, | ||
33 | } | ||
34 | }) | ||
35 | } | ||
36 | |||
37 | The format of the supported GPIO property is: | ||
38 | |||
39 | Package () { "name", Package () { ref, index, pin, active_low }} | ||
40 | |||
41 | ref - The device that has _CRS containing GpioIo()/GpioInt() resources, | ||
42 | typically this is the device itself (BTH in our case). | ||
43 | index - Index of the GpioIo()/GpioInt() resource in _CRS starting from zero. | ||
44 | pin - Pin in the GpioIo()/GpioInt() resource. Typically this is zero. | ||
45 | active_low - If 1 the GPIO is marked as active_low. | ||
46 | |||
47 | Since ACPI GpioIo() resource does not have a field saying whether it is | ||
48 | active low or high, the "active_low" argument can be used here. Setting | ||
49 | it to 1 marks the GPIO as active low. | ||
50 | |||
51 | In our Bluetooth example the "reset-gpio" refers to the second GpioIo() | ||
52 | resource, second pin in that resource with the GPIO number of 31. | ||