-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Mika Westerberg
authored and
Rafael J. Wysocki
committed
Nov 4, 2014
1 parent
f60e707
commit 0d9a693
Showing
4 changed files
with
146 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
_DSD Device Properties Related to GPIO | ||
-------------------------------------- | ||
|
||
With the release of ACPI 5.1 and the _DSD configuration objecte names | ||
can finally be given to GPIOs (and other things as well) returned by | ||
_CRS. Previously, we were only able to use an integer index to find | ||
the corresponding GPIO, which is pretty error prone (it depends on | ||
the _CRS output ordering, for example). | ||
|
||
With _DSD we can now query GPIOs using a name instead of an integer | ||
index, like the ASL example below 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 a 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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters