ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
Subsystems (3)
PATCH 1/1 ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing PROPERTY_ENTRY_GPIO() instead of a lookup table.
---
Compiled only, no real hardware to test.
arch/arm/mach-tegra/board-paz00.c | 50 ++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 18 deletions(-)
arch/arm/mach-tegra/board-paz00.c +32 -18
@@ -8,35 +8,49 @@* Copyright (C) 2010 Google, Inc. */ -#include <linux/property.h> +#include <linux/err.h> #include <linux/gpio/machine.h> +#include <linux/gpio/property.h> #include <linux/platform_device.h> +#include <linux/printk.h> +#include <linux/property.h> #include "board.h" -static struct property_entry wifi_rfkill_prop[]__initdata = { -PROPERTY_ENTRY_STRING ("name" ,"wifi_rfkill" ), -PROPERTY_ENTRY_STRING ("type" ,"wlan" ), - { }, +static const struct software_node tegra_gpiochip_node = { + .name ="tegra-gpio" , }; -static struct platform_device wifi_rfkill_device = { - .name ="rfkill_gpio" , - .id =-1 , +static const struct property_entry wifi_rfkill_prop[]__initconst = { +PROPERTY_ENTRY_STRING ("name" ,"wifi_rfkill" ), +PROPERTY_ENTRY_STRING ("type" ,"wlan" ), +PROPERTY_ENTRY_GPIO ("reset-gpios" , + &tegra_gpiochip_node,25 ,GPIO_ACTIVE_HIGH ), +PROPERTY_ENTRY_GPIO ("shutdown-gpios" , + &tegra_gpiochip_node,85 ,GPIO_ACTIVE_HIGH ), + { } }; -static struct gpiod_lookup_table wifi_gpio_lookup = { - .dev_id ="rfkill_gpio" , - .table = { -GPIO_LOOKUP ("tegra-gpio" ,25 ,"reset" ,0 ), -GPIO_LOOKUP ("tegra-gpio" ,85 ,"shutdown" ,0 ), - { }, - }, +static const struct platform_device_info wifi_rfkill_info__initconst = { + .name ="rfkill_gpio" , + .id =PLATFORM_DEVID_NONE , + .properties = wifi_rfkill_prop, };void __init tegra_paz00_wifikill_init (void ) { -device_create_managed_software_node (&wifi_rfkill_device.dev, wifi_rfkill_prop,NULL ); -gpiod_add_lookup_table (&wifi_gpio_lookup); -platform_device_register (&wifi_rfkill_device); +struct platform_device *pd; +int err; + + err =software_node_register (&tegra_gpiochip_node); +if (err) { +pr_err ("failed to register %s node: %d\n" , + tegra_gpiochip_node.name, err); +return ; + } + + pd =platform_device_register_full (&wifi_rfkill_info); + err =PTR_ERR_OR_ZERO (pd); +if (err) +pr_err ("failed to register WiFi rfkill device: %d\n" , err); }
Signature · 5 lines
2.45.2.741.gdbec12cfda-goog -- Dmitry
Thierry Reding
AppliedFrom: Thierry Reding <[email protected]>
Quoted 5 lines · Dmitry Torokhov
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing
PROPERTY_ENTRY_GPIO()instead of a lookup table.
Applied, thanks!
[1/1] ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
commit: 47ac458bb229f8c4864081d173adbcfc55c34880
Best regards,
Signature · 1 line
Thierry Reding <[email protected]>
Hi Thierry,
Quoted 10 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Quoted 5 lines · Dmitry Torokhov
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing
PROPERTY_ENTRY_GPIO()instead of a lookup table.
Quoted 4 lines
Applied, thanks!
[1/1] ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
commit: 47ac458bb229f8c4864081d173adbcfc55c34880
Do you know by any chance why paz00 does not simply configure rfkill switch via device tree? The driver (rfkill-gpio) seem to support device tree...
Thanks.
Signature · 1 line
Dmitry
Hi Dimitry,
Quoted 13 lines · Dmitry Torokhov
Hi Thierry,
Quoted 10 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Quoted 5 lines · Dmitry Torokhov
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing
PROPERTY_ENTRY_GPIO()instead of a lookup table.
Quoted 8 lines
Quoted 4 lines
Applied, thanks!
[1/1] ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
commit: 47ac458bb229f8c4864081d173adbcfc55c34880Do you know by any chance why paz00 does not simply configure rfkill switch via device tree? The driver (rfkill-gpio) seem to support device tree...
last time I tried this was rejected because the wifi chip is on the usb bus and "rfkill" should be a sub-function of this chip [1], but that was some time ago...
Looking hard the schematics, the wifi chip does not have a gpio input as first thought. Rather it seems that the first gpio toggles a regulator which supplies the wifi module (m2 card) with power and the second gpio is just connected to the wifi LED.
Not sure how to transfer this into dt, but I guess this would be the better solution.
Marc
Quoted 31 lines · Marc Dietrich
Hi Dimitry,
Quoted 13 lines · Dmitry Torokhov
Hi Thierry,
Quoted 10 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Quoted 5 lines · Dmitry Torokhov
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing
PROPERTY_ENTRY_GPIO()instead of a lookup table.Quoted 8 lines
Quoted 4 lines
Applied, thanks!
[1/1] ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
commit: 47ac458bb229f8c4864081d173adbcfc55c34880Do you know by any chance why paz00 does not simply configure rfkill switch via device tree? The driver (rfkill-gpio) seem to support device tree...
last time I tried this was rejected because the wifi chip is on the usb bus and "rfkill" should be a sub-function of this chip [1], but that was some time ago...
Quoted 7 lines
Looking hard the schematics, the wifi chip does not have a gpio input as first thought. Rather it seems that the first gpio toggles a regulator which supplies the wifi module (m2 card) with power and the second gpio is just connected to the wifi LED.
Not sure how to transfer this into dt, but I guess this would be the better solution.
Then the first GPIO should probably just be described as a fixed regulator feeding the USB controller that the M.2 module is connected to.
There's also a WIP M.2 E-key binding and driver, but AFAIK that doesn't actually implement USB support.
The second one could be just a GPIO-driver LED with a netdev trigger?
ChenYu
Hallo Chen-Yu,
Quoted 37 lines · Chen-Yu Tsai
Quoted 36 lines · Marc Dietrich
Hi Dimitry,
Quoted 13 lines · Dmitry Torokhov
Hi Thierry,
Quoted 10 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Quoted 5 lines · Dmitry Torokhov
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing
PROPERTY_ENTRY_GPIO()instead of a lookup table.Quoted 8 lines
Quoted 4 lines
Applied, thanks!
[1/1] ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
commit: 47ac458bb229f8c4864081d173adbcfc55c34880Do you know by any chance why paz00 does not simply configure rfkill switch via device tree? The driver (rfkill-gpio) seem to support device tree...
last time I tried this was rejected because the wifi chip is on the usb bus and "rfkill" should be a sub-function of this chip [1], but that was some time ago...
Looking hard the schematics, the wifi chip does not have a gpio input as first thought. Rather it seems that the first gpio toggles a regulator which supplies the wifi module (m2 card) with power and the second gpio is just connected to the wifi LED.
Quoted 5 lines
Quoted 2 lines
Not sure how to transfer this into dt, but I guess this would be the better solution.
Then the first GPIO should probably just be described as a fixed regulator feeding the USB controller that the M.2 module is connected to.
I think that is what rfkill-gpio is for, so the proposal of Dimitry looks fine, execpt for the reset-gpio, aka LED which is already included in the dt (but maybe with the wrong gpio).
I will give it a try on real HW and report back.
Thanks!
Marc
Quoted 45 lines · Marc Dietrich
Hallo Chen-Yu,
Quoted 40 lines · Chen-Yu Tsai
Quoted 38 lines · Marc Dietrich
Hi Dimitry,
Quoted 13 lines · Dmitry Torokhov
Hi Thierry,
Quoted 10 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Quoted 5 lines · Dmitry Torokhov
Complete conversion of the WiFi rfkill device to use device properties/software nodes by utilizing
PROPERTY_ENTRY_GPIO()instead of a lookup table.Quoted 8 lines
Quoted 4 lines
Applied, thanks!
[1/1] ARM: tegra: paz00: use software nodes to describe GPIOs for WiFi rfkill
commit: 47ac458bb229f8c4864081d173adbcfc55c34880Do you know by any chance why paz00 does not simply configure rfkill switch via device tree? The driver (rfkill-gpio) seem to support device tree...
last time I tried this was rejected because the wifi chip is on the usb bus and "rfkill" should be a sub-function of this chip [1], but that was some time ago...
Looking hard the schematics, the wifi chip does not have a gpio input as first thought. Rather it seems that the first gpio toggles a regulator which supplies the wifi module (m2 card) with power and the second gpio is just connected to the wifi LED.
Not sure how to transfer this into dt, but I guess this would be the better solution.
Quoted 6 lines
Quoted 2 lines
Then the first GPIO should probably just be described as a fixed regulator feeding the USB controller that the M.2 module is connected to.
I think that is what rfkill-gpio is for, so the proposal of Dimitry looks fine, execpt for the reset-gpio, aka LED which is already included in the dt (but maybe with the wrong gpio).
I did that some years ago and was rejected. It was for SDIO, not USB though.
Note that if the wireless driver also registers an rfkill device, you would end up with two rfkill devices in the system, and with slightly different behavior.
One would just disable the radio portion of the WiFi device, while the other would cause the WiFi device to disappear.
ChenYu
Quoted 5 lines
I will give it a try on real HW and report back.
Thanks!
Marc