* [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes
@ 2020-10-29 19:32 Andy Shevchenko
2020-10-29 19:32 ` [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo() Andy Shevchenko
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Andy Shevchenko @ 2020-10-29 19:32 UTC (permalink / raw)
To: Mika Westerberg, linux-acpi, Rafael J. Wysocki, linux-gpio
Cc: Andy Shevchenko
Fix factual mistakes and style issues in GPIO properties document.
This converts IoRestriction from InputOnly to OutputOnly as pins
in the example are used as outputs.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2: elaborated the mistakes the change fixes (Mika)
.../firmware-guide/acpi/gpio-properties.rst | 29 ++++++++++---------
1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/Documentation/firmware-guide/acpi/gpio-properties.rst b/Documentation/firmware-guide/acpi/gpio-properties.rst
index bb6d74f23ee0..e6e65ceb2ca1 100644
--- a/Documentation/firmware-guide/acpi/gpio-properties.rst
+++ b/Documentation/firmware-guide/acpi/gpio-properties.rst
@@ -20,9 +20,9 @@ index, like the ASL example below shows::
Name (_CRS, ResourceTemplate ()
{
- GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
+ GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
"\\_SB.GPO0", 0, ResourceConsumer) {15}
- GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
+ GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
"\\_SB.GPO0", 0, ResourceConsumer) {27, 31}
})
@@ -49,7 +49,7 @@ index
pin
Pin in the GpioIo()/GpioInt() resource. Typically this is zero.
active_low
- If 1 the GPIO is marked as 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
@@ -112,8 +112,8 @@ Example::
Package () {
"gpio-line-names",
Package () {
- "SPI0_CS_N", "EXP2_INT", "MUX6_IO", "UART0_RXD", "MUX7_IO",
- "LVL_C_A1", "MUX0_IO", "SPI1_MISO"
+ "SPI0_CS_N", "EXP2_INT", "MUX6_IO", "UART0_RXD",
+ "MUX7_IO", "LVL_C_A1", "MUX0_IO", "SPI1_MISO",
}
}
@@ -137,7 +137,7 @@ to the GPIO lines it is going to use and provide the GPIO subsystem with a
mapping between those names and the ACPI GPIO resources corresponding to them.
To do that, the driver needs to define a mapping table as a NULL-terminated
-array of struct acpi_gpio_mapping objects that each contain a name, a pointer
+array of struct acpi_gpio_mapping objects that each contains a name, a pointer
to an array of line data (struct acpi_gpio_params) objects and the size of that
array. Each struct acpi_gpio_params object consists of three fields,
crs_entry_index, line_index, active_low, representing the index of the target
@@ -154,13 +154,14 @@ question would look like this::
static const struct acpi_gpio_mapping bluetooth_acpi_gpios[] = {
{ "reset-gpios", &reset_gpio, 1 },
{ "shutdown-gpios", &shutdown_gpio, 1 },
- { },
+ { }
};
Next, the mapping table needs to be passed as the second argument to
-acpi_dev_add_driver_gpios() that will register it with the ACPI device object
-pointed to by its first argument. That should be done in the driver's .probe()
-routine. On removal, the driver should unregister its GPIO mapping table by
+acpi_dev_add_driver_gpios() or its managed analogue that will
+register it with the ACPI device object pointed to by its first
+argument. That should be done in the driver's .probe() routine.
+On removal, the driver should unregister its GPIO mapping table by
calling acpi_dev_remove_driver_gpios() on the ACPI device object where that
table was previously registered.
@@ -191,12 +192,12 @@ The driver might expect to get the right GPIO when it does::
but since there is no way to know the mapping between "reset" and
the GpioIo() in _CRS desc will hold ERR_PTR(-ENOENT).
-The driver author can solve this by passing the mapping explictly
-(the recommended way and documented in the above chapter).
+The driver author can solve this by passing the mapping explicitly
+(this is the recommended way and it's documented in the above chapter).
The ACPI GPIO mapping tables should not contaminate drivers that are not
knowing about which exact device they are servicing on. It implies that
-the ACPI GPIO mapping tables are hardly linked to ACPI ID and certain
+the ACPI GPIO mapping tables are hardly linked to an ACPI ID and certain
objects, as listed in the above chapter, of the device in question.
Getting GPIO descriptor
@@ -229,5 +230,5 @@ Case 2 explicitly tells GPIO core to look for resources in _CRS.
Be aware that gpiod_get_index() in cases 1 and 2, assuming that there
are two versions of ACPI device description provided and no mapping is
present in the driver, will return different resources. That's why a
-certain driver has to handle them carefully as explained in previous
+certain driver has to handle them carefully as explained in the previous
chapter.
--
2.28.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo()
2020-10-29 19:32 [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Andy Shevchenko
@ 2020-10-29 19:32 ` Andy Shevchenko
2020-10-29 19:59 ` Ricardo Ribalda
2020-10-29 19:32 ` [PATCH v2 3/3] Documentation: firmware-guide: gpio-properties: Clarify initial output state Andy Shevchenko
2020-11-09 18:04 ` [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Rafael J. Wysocki
2 siblings, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2020-10-29 19:32 UTC (permalink / raw)
To: Mika Westerberg, linux-acpi, Rafael J. Wysocki, linux-gpio
Cc: Andy Shevchenko, Ricardo Ribalda
It appears that people may misinterpret active_low field in _DSD
for GpioInt() resource. Add a paragraph to clarify this.
Reported-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
v2: added Rb tag (Mika)
Documentation/firmware-guide/acpi/gpio-properties.rst | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/firmware-guide/acpi/gpio-properties.rst b/Documentation/firmware-guide/acpi/gpio-properties.rst
index e6e65ceb2ca1..370fe46c6af9 100644
--- a/Documentation/firmware-guide/acpi/gpio-properties.rst
+++ b/Documentation/firmware-guide/acpi/gpio-properties.rst
@@ -55,6 +55,9 @@ 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.
+Note, active_low in _DSD does not make sense for GpioInt() resource and
+must be 0. GpioInt() resource has its own means of defining it.
+
In our Bluetooth example the "reset-gpios" refers to the second GpioIo()
resource, second pin in that resource with the GPIO number of 31.
--
2.28.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 3/3] Documentation: firmware-guide: gpio-properties: Clarify initial output state
2020-10-29 19:32 [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Andy Shevchenko
2020-10-29 19:32 ` [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo() Andy Shevchenko
@ 2020-10-29 19:32 ` Andy Shevchenko
2020-11-09 18:04 ` [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Rafael J. Wysocki
2 siblings, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2020-10-29 19:32 UTC (permalink / raw)
To: Mika Westerberg, linux-acpi, Rafael J. Wysocki, linux-gpio
Cc: Andy Shevchenko
GpioIo() doesn't provide an explicit state for an output pin.
Linux tries to be smart and uses a common sense based on other
parameters. Document how it looks like in the code.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
v2: added Rb tag (Mika)
.../firmware-guide/acpi/gpio-properties.rst | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/Documentation/firmware-guide/acpi/gpio-properties.rst b/Documentation/firmware-guide/acpi/gpio-properties.rst
index 370fe46c6af9..59aad6138b6e 100644
--- a/Documentation/firmware-guide/acpi/gpio-properties.rst
+++ b/Documentation/firmware-guide/acpi/gpio-properties.rst
@@ -61,6 +61,29 @@ must be 0. GpioInt() resource has its own means of defining it.
In our Bluetooth example the "reset-gpios" refers to the second GpioIo()
resource, second pin in that resource with the GPIO number of 31.
+The GpioIo() resource unfortunately doesn't explicitly provide an initial
+state of the output pin which driver should use during its initialization.
+
+Linux tries to use common sense here and derives the state from the bias
+and polarity settings. The table below shows the expectations:
+
+========= ============= ==============
+Pull Bias Polarity Requested...
+========= ============= ==============
+Implicit x AS IS (assumed firmware configured for us)
+Explicit x (no _DSD) as Pull Bias (Up == High, Down == Low),
+ assuming non-active (Polarity = !Pull Bias)
+Down Low as low, assuming active
+Down High as low, assuming non-active
+Up Low as high, assuming non-active
+Up High as high, assuming active
+========= ============= ==============
+
+That said, for our above example the both GPIOs, since the bias setting
+is explicit and _DSD is present, will be treated as active with a high
+polarity and Linux will configure the pins in this state until a driver
+reprograms them differently.
+
It is possible to leave holes in the array of GPIOs. This is useful in
cases like with SPI host controllers where some chip selects may be
implemented as GPIOs and some as native signals. For example a SPI host
--
2.28.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo()
2020-10-29 19:32 ` [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo() Andy Shevchenko
@ 2020-10-29 19:59 ` Ricardo Ribalda
0 siblings, 0 replies; 5+ messages in thread
From: Ricardo Ribalda @ 2020-10-29 19:59 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Mika Westerberg, ACPI Devel Maling List, Rafael J. Wysocki,
open list:GPIO SUBSYSTEM
On Thu, Oct 29, 2020 at 8:32 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> It appears that people may misinterpret active_low field in _DSD
> for GpioInt() resource. Add a paragraph to clarify this.
>
> Reported-by: Ricardo Ribalda <ribalda@chromium.org>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
> v2: added Rb tag (Mika)
> Documentation/firmware-guide/acpi/gpio-properties.rst | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Documentation/firmware-guide/acpi/gpio-properties.rst b/Documentation/firmware-guide/acpi/gpio-properties.rst
> index e6e65ceb2ca1..370fe46c6af9 100644
> --- a/Documentation/firmware-guide/acpi/gpio-properties.rst
> +++ b/Documentation/firmware-guide/acpi/gpio-properties.rst
> @@ -55,6 +55,9 @@ 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.
>
> +Note, active_low in _DSD does not make sense for GpioInt() resource and
> +must be 0. GpioInt() resource has its own means of defining it.
> +
> In our Bluetooth example the "reset-gpios" refers to the second GpioIo()
> resource, second pin in that resource with the GPIO number of 31.
>
> --
> 2.28.0
>
--
Ricardo Ribalda
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes
2020-10-29 19:32 [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Andy Shevchenko
2020-10-29 19:32 ` [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo() Andy Shevchenko
2020-10-29 19:32 ` [PATCH v2 3/3] Documentation: firmware-guide: gpio-properties: Clarify initial output state Andy Shevchenko
@ 2020-11-09 18:04 ` Rafael J. Wysocki
2 siblings, 0 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2020-11-09 18:04 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Mika Westerberg, ACPI Devel Maling List, Rafael J. Wysocki,
linux-gpio
On Thu, Oct 29, 2020 at 8:32 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> Fix factual mistakes and style issues in GPIO properties document.
> This converts IoRestriction from InputOnly to OutputOnly as pins
> in the example are used as outputs.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v2: elaborated the mistakes the change fixes (Mika)
Whole series applied as 5.10-rc material, thanks!
> .../firmware-guide/acpi/gpio-properties.rst | 29 ++++++++++---------
> 1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/Documentation/firmware-guide/acpi/gpio-properties.rst b/Documentation/firmware-guide/acpi/gpio-properties.rst
> index bb6d74f23ee0..e6e65ceb2ca1 100644
> --- a/Documentation/firmware-guide/acpi/gpio-properties.rst
> +++ b/Documentation/firmware-guide/acpi/gpio-properties.rst
> @@ -20,9 +20,9 @@ index, like the ASL example below shows::
>
> Name (_CRS, ResourceTemplate ()
> {
> - GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
> + GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
> "\\_SB.GPO0", 0, ResourceConsumer) {15}
> - GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
> + GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
> "\\_SB.GPO0", 0, ResourceConsumer) {27, 31}
> })
>
> @@ -49,7 +49,7 @@ index
> pin
> Pin in the GpioIo()/GpioInt() resource. Typically this is zero.
> active_low
> - If 1 the GPIO is marked as 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
> @@ -112,8 +112,8 @@ Example::
> Package () {
> "gpio-line-names",
> Package () {
> - "SPI0_CS_N", "EXP2_INT", "MUX6_IO", "UART0_RXD", "MUX7_IO",
> - "LVL_C_A1", "MUX0_IO", "SPI1_MISO"
> + "SPI0_CS_N", "EXP2_INT", "MUX6_IO", "UART0_RXD",
> + "MUX7_IO", "LVL_C_A1", "MUX0_IO", "SPI1_MISO",
> }
> }
>
> @@ -137,7 +137,7 @@ to the GPIO lines it is going to use and provide the GPIO subsystem with a
> mapping between those names and the ACPI GPIO resources corresponding to them.
>
> To do that, the driver needs to define a mapping table as a NULL-terminated
> -array of struct acpi_gpio_mapping objects that each contain a name, a pointer
> +array of struct acpi_gpio_mapping objects that each contains a name, a pointer
> to an array of line data (struct acpi_gpio_params) objects and the size of that
> array. Each struct acpi_gpio_params object consists of three fields,
> crs_entry_index, line_index, active_low, representing the index of the target
> @@ -154,13 +154,14 @@ question would look like this::
> static const struct acpi_gpio_mapping bluetooth_acpi_gpios[] = {
> { "reset-gpios", &reset_gpio, 1 },
> { "shutdown-gpios", &shutdown_gpio, 1 },
> - { },
> + { }
> };
>
> Next, the mapping table needs to be passed as the second argument to
> -acpi_dev_add_driver_gpios() that will register it with the ACPI device object
> -pointed to by its first argument. That should be done in the driver's .probe()
> -routine. On removal, the driver should unregister its GPIO mapping table by
> +acpi_dev_add_driver_gpios() or its managed analogue that will
> +register it with the ACPI device object pointed to by its first
> +argument. That should be done in the driver's .probe() routine.
> +On removal, the driver should unregister its GPIO mapping table by
> calling acpi_dev_remove_driver_gpios() on the ACPI device object where that
> table was previously registered.
>
> @@ -191,12 +192,12 @@ The driver might expect to get the right GPIO when it does::
> but since there is no way to know the mapping between "reset" and
> the GpioIo() in _CRS desc will hold ERR_PTR(-ENOENT).
>
> -The driver author can solve this by passing the mapping explictly
> -(the recommended way and documented in the above chapter).
> +The driver author can solve this by passing the mapping explicitly
> +(this is the recommended way and it's documented in the above chapter).
>
> The ACPI GPIO mapping tables should not contaminate drivers that are not
> knowing about which exact device they are servicing on. It implies that
> -the ACPI GPIO mapping tables are hardly linked to ACPI ID and certain
> +the ACPI GPIO mapping tables are hardly linked to an ACPI ID and certain
> objects, as listed in the above chapter, of the device in question.
>
> Getting GPIO descriptor
> @@ -229,5 +230,5 @@ Case 2 explicitly tells GPIO core to look for resources in _CRS.
> Be aware that gpiod_get_index() in cases 1 and 2, assuming that there
> are two versions of ACPI device description provided and no mapping is
> present in the driver, will return different resources. That's why a
> -certain driver has to handle them carefully as explained in previous
> +certain driver has to handle them carefully as explained in the previous
> chapter.
> --
> 2.28.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-11-09 18:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-29 19:32 [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Andy Shevchenko
2020-10-29 19:32 ` [PATCH v2 2/3] Documentation: firmware-guide: gpio-properties: active_low only for GpioIo() Andy Shevchenko
2020-10-29 19:59 ` Ricardo Ribalda
2020-10-29 19:32 ` [PATCH v2 3/3] Documentation: firmware-guide: gpio-properties: Clarify initial output state Andy Shevchenko
2020-11-09 18:04 ` [PATCH v2 1/3] Documentation: firmware-guide: gpio-properties: Fix factual mistakes Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).