diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2026-07-06 20:14:02 -0700 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2026-07-24 19:07:42 +0200 |
| commit | d26a0f79ee965be133b562fd71c197bd2bb59fa6 (patch) | |
| tree | 0141cd3124672e467b3b91afb55a537ebe86d038 /arch/arm | |
| parent | ea07a154791e7e95525f843beaa72402a4fcf88a (diff) | |
| download | linux-next-d26a0f79ee965be133b562fd71c197bd2bb59fa6.tar.gz linux-next-d26a0f79ee965be133b562fd71c197bd2bb59fa6.zip | |
ARM: sa1100: collie: convert gpio-keys to use software nodes
Convert the legacy gpio-keys platform device on the StrongARM SA-1100
Collie (Sharp Zaurus SL-5500) board to use software nodes and device
properties. This helps progress the removal of platform data support
from the gpio-keys driver.
Define static software nodes for the gpio-keys device and the power and
sync button child nodes at file scope, referencing the SA-1100 GPIO
controller node directly and specifying EV_PWR input type. In
collie_init(), register the software node group and use
platform_device_register_full() to register the gpio-keys device.
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20260706-sa1100-swnode-v1-3-332759bbd930@gmail.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm')
| -rw-r--r-- | arch/arm/mach-sa1100/collie.c | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c index af9c68b2093e..d1931f51c900 100644 --- a/arch/arm/mach-sa1100/collie.c +++ b/arch/arm/mach-sa1100/collie.c @@ -27,10 +27,11 @@ #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/timer.h> -#include <linux/gpio_keys.h> +#include <linux/gpio/property.h> #include <linux/input.h> #include <linux/gpio/legacy.h> #include <linux/gpio/machine.h> +#include <linux/property.h> #include <linux/power/gpio-charger.h> #include <video/sa1100fb.h> @@ -228,43 +229,57 @@ struct platform_device collie_locomo_device = { .resource = locomo_resources, }; -static struct gpio_keys_button collie_gpio_keys[] = { - { - .type = EV_PWR, - .code = KEY_RESERVED, - .gpio = COLLIE_GPIO_ON_KEY, - .desc = "On key", - .wakeup = 1, - .active_low = 1, - }, - { - .type = EV_PWR, - .code = KEY_WAKEUP, - .gpio = COLLIE_GPIO_WAKEUP, - .desc = "Sync", - .wakeup = 1, - .active_low = 1, - }, +static const struct software_node collie_gpio_keys_node = { + .name = "collie-gpio-keys", }; -static struct gpio_keys_platform_data collie_gpio_keys_data = { - .buttons = collie_gpio_keys, - .nbuttons = ARRAY_SIZE(collie_gpio_keys), +static const struct property_entry collie_on_key_props[] = { + PROPERTY_ENTRY_U32("linux,code", KEY_RESERVED), + PROPERTY_ENTRY_GPIO("gpios", &sa1100_gpiochip_node, + COLLIE_GPIO_ON_KEY, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_STRING("label", "On key"), + PROPERTY_ENTRY_U32("linux,input-type", EV_PWR), + PROPERTY_ENTRY_BOOL("wakeup-source"), + { } }; -static struct platform_device collie_gpio_keys_device = { - .name = "gpio-keys", - .id = -1, - .dev = { - .platform_data = &collie_gpio_keys_data, - }, +static const struct software_node collie_on_key_node = { + .parent = &collie_gpio_keys_node, + .properties = collie_on_key_props, +}; + +static const struct property_entry collie_wakeup_key_props[] = { + PROPERTY_ENTRY_U32("linux,code", KEY_WAKEUP), + PROPERTY_ENTRY_GPIO("gpios", &sa1100_gpiochip_node, + COLLIE_GPIO_WAKEUP, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_STRING("label", "Sync"), + PROPERTY_ENTRY_U32("linux,input-type", EV_PWR), + PROPERTY_ENTRY_BOOL("wakeup-source"), + { } +}; + +static const struct software_node collie_wakeup_key_node = { + .parent = &collie_gpio_keys_node, + .properties = collie_wakeup_key_props, +}; + +static const struct software_node * const collie_gpio_keys_swnodes[] __initconst = { + &collie_gpio_keys_node, + &collie_on_key_node, + &collie_wakeup_key_node, + NULL +}; + +static const struct platform_device_info collie_gpio_keys_dev_info __initconst = { + .name = "gpio-keys", + .id = PLATFORM_DEVID_NONE, + .swnode = &collie_gpio_keys_node, }; static struct platform_device *devices[] __initdata = { &collie_locomo_device, &colliescoop_device, &collie_power_device, - &collie_gpio_keys_device, }; static struct mtd_partition collie_partitions[] = { @@ -384,6 +399,9 @@ static void __init collie_init(void) printk(KERN_WARNING "collie: Unable to register LoCoMo device\n"); } + software_node_register_node_group(collie_gpio_keys_swnodes); + platform_device_register_full(&collie_gpio_keys_dev_info); + sa11x0_register_lcd(&collie_lcd_info); sa11x0_register_mtd(&collie_flash_data, collie_flash_resources, ARRAY_SIZE(collie_flash_resources)); |
