* [PATCH RESEND] net: rfkill: gpio: Add ACPI default GPIO driver mappings
@ 2014-10-28 10:03 Mika Westerberg
2014-10-28 22:18 ` Rafael J. Wysocki
0 siblings, 1 reply; 2+ messages in thread
From: Mika Westerberg @ 2014-10-28 10:03 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: Johannes Berg, John W. Linville, Alexandre Courbot,
Linus Walleij, Arnd Bergmann, Grant Likely, Heikki Krogerus,
Mika Westerberg, linux-wireless, linux-kernel, linux-acpi
The driver uses devm_gpiod_get_index(..., index) so that the index refers
directly to the GpioIo resource under the ACPI device. The problem with
this is that if the ordering changes we get wrong GPIOs.
With ACPI 5.1 _DSD we can now use names instead to reference GPIOs
analogous to Device Tree. However, we still have systems out there that do
not provide _DSD at all. These systems must be supported as well.
Luckily we now have acpi_dev_add_driver_gpios() that can be used to provide
mappings for systems where _DSD is not provided and still take advantage of
_DSD if it exists.
This patch converts the rfkill-gpio.c driver to create default GPIO
mappings to the two GPIOs in case we are running on ACPI system.
While there we can drop the indices completely.
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: John W. Linville <linville@tuxdriver.com>
---
Resending with linux-acpi included. I also added ACKs from Johannes and
John. The patch itself is intact.
net/rfkill/rfkill-gpio.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c
index 0f62326c0f5e..2a4717967502 100644
--- a/net/rfkill/rfkill-gpio.c
+++ b/net/rfkill/rfkill-gpio.c
@@ -63,6 +63,15 @@ static const struct rfkill_ops rfkill_gpio_ops = {
.set_block = rfkill_gpio_set_power,
};
+static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
+static const struct acpi_gpio_params shutdown_gpios = { 1, 0, false };
+
+static const struct acpi_gpio_mapping acpi_rfkill_default_gpios[] = {
+ { "reset-gpios", &reset_gpios, 1 },
+ { "shutdown-gpios", &shutdown_gpios, 1 },
+ { },
+};
+
static int rfkill_gpio_acpi_probe(struct device *dev,
struct rfkill_gpio_data *rfkill)
{
@@ -75,7 +84,8 @@ static int rfkill_gpio_acpi_probe(struct device *dev,
rfkill->name = dev_name(dev);
rfkill->type = (unsigned)id->driver_data;
- return 0;
+ return acpi_dev_add_driver_gpios(ACPI_COMPANION(dev),
+ acpi_rfkill_default_gpios);
}
static int rfkill_gpio_probe(struct platform_device *pdev)
@@ -102,7 +112,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
rfkill->clk = devm_clk_get(&pdev->dev, NULL);
- gpio = devm_gpiod_get_index(&pdev->dev, "reset", 0);
+ gpio = devm_gpiod_get(&pdev->dev, "reset");
if (!IS_ERR(gpio)) {
ret = gpiod_direction_output(gpio, 0);
if (ret)
@@ -110,7 +120,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
rfkill->reset_gpio = gpio;
}
- gpio = devm_gpiod_get_index(&pdev->dev, "shutdown", 1);
+ gpio = devm_gpiod_get(&pdev->dev, "shutdown");
if (!IS_ERR(gpio)) {
ret = gpiod_direction_output(gpio, 0);
if (ret)
@@ -150,6 +160,8 @@ static int rfkill_gpio_remove(struct platform_device *pdev)
rfkill_unregister(rfkill->rfkill_dev);
rfkill_destroy(rfkill->rfkill_dev);
+ acpi_dev_remove_driver_gpios(ACPI_COMPANION(&pdev->dev));
+
return 0;
}
--
2.1.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH RESEND] net: rfkill: gpio: Add ACPI default GPIO driver mappings
2014-10-28 10:03 [PATCH RESEND] net: rfkill: gpio: Add ACPI default GPIO driver mappings Mika Westerberg
@ 2014-10-28 22:18 ` Rafael J. Wysocki
0 siblings, 0 replies; 2+ messages in thread
From: Rafael J. Wysocki @ 2014-10-28 22:18 UTC (permalink / raw)
To: Mika Westerberg
Cc: Johannes Berg, John W. Linville, Alexandre Courbot,
Linus Walleij, Arnd Bergmann, Grant Likely, Heikki Krogerus,
linux-wireless, linux-kernel, linux-acpi
On Tuesday, October 28, 2014 12:03:48 PM Mika Westerberg wrote:
> The driver uses devm_gpiod_get_index(..., index) so that the index refers
> directly to the GpioIo resource under the ACPI device. The problem with
> this is that if the ordering changes we get wrong GPIOs.
>
> With ACPI 5.1 _DSD we can now use names instead to reference GPIOs
> analogous to Device Tree. However, we still have systems out there that do
> not provide _DSD at all. These systems must be supported as well.
>
> Luckily we now have acpi_dev_add_driver_gpios() that can be used to provide
> mappings for systems where _DSD is not provided and still take advantage of
> _DSD if it exists.
>
> This patch converts the rfkill-gpio.c driver to create default GPIO
> mappings to the two GPIOs in case we are running on ACPI system.
>
> While there we can drop the indices completely.
>
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
> Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
> Acked-by: Johannes Berg <johannes@sipsolutions.net>
> Acked-by: John W. Linville <linville@tuxdriver.com>
Applied, thanks!
> ---
> Resending with linux-acpi included. I also added ACKs from Johannes and
> John. The patch itself is intact.
>
> net/rfkill/rfkill-gpio.c | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c
> index 0f62326c0f5e..2a4717967502 100644
> --- a/net/rfkill/rfkill-gpio.c
> +++ b/net/rfkill/rfkill-gpio.c
> @@ -63,6 +63,15 @@ static const struct rfkill_ops rfkill_gpio_ops = {
> .set_block = rfkill_gpio_set_power,
> };
>
> +static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
> +static const struct acpi_gpio_params shutdown_gpios = { 1, 0, false };
> +
> +static const struct acpi_gpio_mapping acpi_rfkill_default_gpios[] = {
> + { "reset-gpios", &reset_gpios, 1 },
> + { "shutdown-gpios", &shutdown_gpios, 1 },
> + { },
> +};
> +
> static int rfkill_gpio_acpi_probe(struct device *dev,
> struct rfkill_gpio_data *rfkill)
> {
> @@ -75,7 +84,8 @@ static int rfkill_gpio_acpi_probe(struct device *dev,
> rfkill->name = dev_name(dev);
> rfkill->type = (unsigned)id->driver_data;
>
> - return 0;
> + return acpi_dev_add_driver_gpios(ACPI_COMPANION(dev),
> + acpi_rfkill_default_gpios);
> }
>
> static int rfkill_gpio_probe(struct platform_device *pdev)
> @@ -102,7 +112,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
>
> rfkill->clk = devm_clk_get(&pdev->dev, NULL);
>
> - gpio = devm_gpiod_get_index(&pdev->dev, "reset", 0);
> + gpio = devm_gpiod_get(&pdev->dev, "reset");
> if (!IS_ERR(gpio)) {
> ret = gpiod_direction_output(gpio, 0);
> if (ret)
> @@ -110,7 +120,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
> rfkill->reset_gpio = gpio;
> }
>
> - gpio = devm_gpiod_get_index(&pdev->dev, "shutdown", 1);
> + gpio = devm_gpiod_get(&pdev->dev, "shutdown");
> if (!IS_ERR(gpio)) {
> ret = gpiod_direction_output(gpio, 0);
> if (ret)
> @@ -150,6 +160,8 @@ static int rfkill_gpio_remove(struct platform_device *pdev)
> rfkill_unregister(rfkill->rfkill_dev);
> rfkill_destroy(rfkill->rfkill_dev);
>
> + acpi_dev_remove_driver_gpios(ACPI_COMPANION(&pdev->dev));
> +
> return 0;
> }
>
>
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-10-28 21:58 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-28 10:03 [PATCH RESEND] net: rfkill: gpio: Add ACPI default GPIO driver mappings Mika Westerberg
2014-10-28 22:18 ` 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).