From: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Rich Felker <dalias@libc.org>
Cc: Linus Walleij <linusw@kernel.org>,
Bartosz Golaszewski <brgl@kernel.org>,
Arnd Bergmann <arnd@arndb.de>,
linux-sh@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] sh: mach-x3proto: convert gpio-keys to software nodes
Date: Thu, 17 Sep 2026 20:49:15 +0200 [thread overview]
Message-ID: <d3a2875ba34bf10ddae3626b77da071cd4624348.camel@physik.fu-berlin.de> (raw)
In-Reply-To: <20260704-sh-x3proto-swnode-v1-2-0c039549dc46@gmail.com>
Hi Dmitry,
On Sat, 2026-07-04 at 22:04 -0700, Dmitry Torokhov wrote:
> Convert the legacy gpio-keys platform device on the SH-X3 Prototype
> board to use software nodes/properties. This allows us to describe
> the GPIO keys and their GPIO bindings using software nodes, so that
> support for platform data can eventually be removed from the
> gpio-keys driver.
>
> Assisted-by: Antigravity:gemini-3.5-flash
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
> arch/sh/boards/mach-x3proto/setup.c | 165 +++++++++++++++++-------------------
> 1 file changed, 78 insertions(+), 87 deletions(-)
>
> diff --git a/arch/sh/boards/mach-x3proto/setup.c b/arch/sh/boards/mach-x3proto/setup.c
> index ca2802d30565..0d9d5982cf0c 100644
> --- a/arch/sh/boards/mach-x3proto/setup.c
> +++ b/arch/sh/boards/mach-x3proto/setup.c
> @@ -16,8 +16,8 @@
> #include <linux/input.h>
> #include <linux/usb/r8a66597.h>
> #include <linux/usb/m66592.h>
> -#include <linux/gpio/driver.h>
> -#include <linux/gpio_keys.h>
> +#include <linux/gpio/machine.h>
> +#include <linux/gpio/property.h>
> #include <mach/ilsel.h>
> #include <mach/hardware.h>
> #include <asm/smp-ops.h>
> @@ -123,87 +123,74 @@ static struct platform_device m66592_usb_peripheral_device = {
> .resource = m66592_usb_peripheral_resources,
> };
>
> -static struct gpio_keys_button baseboard_buttons[NR_BASEBOARD_GPIOS] = {
> - {
> - .desc = "key44",
> - .code = KEY_POWER,
> - .active_low = 1,
> - .wakeup = 1,
> - }, {
> - .desc = "key43",
> - .code = KEY_SUSPEND,
> - .active_low = 1,
> - .wakeup = 1,
> - }, {
> - .desc = "key42",
> - .code = KEY_KATAKANAHIRAGANA,
> - .active_low = 1,
> - }, {
> - .desc = "key41",
> - .code = KEY_SWITCHVIDEOMODE,
> - .active_low = 1,
> - }, {
> - .desc = "key34",
> - .code = KEY_F12,
> - .active_low = 1,
> - }, {
> - .desc = "key33",
> - .code = KEY_F11,
> - .active_low = 1,
> - }, {
> - .desc = "key32",
> - .code = KEY_F10,
> - .active_low = 1,
> - }, {
> - .desc = "key31",
> - .code = KEY_F9,
> - .active_low = 1,
> - }, {
> - .desc = "key24",
> - .code = KEY_F8,
> - .active_low = 1,
> - }, {
> - .desc = "key23",
> - .code = KEY_F7,
> - .active_low = 1,
> - }, {
> - .desc = "key22",
> - .code = KEY_F6,
> - .active_low = 1,
> - }, {
> - .desc = "key21",
> - .code = KEY_F5,
> - .active_low = 1,
> - }, {
> - .desc = "key14",
> - .code = KEY_F4,
> - .active_low = 1,
> - }, {
> - .desc = "key13",
> - .code = KEY_F3,
> - .active_low = 1,
> - }, {
> - .desc = "key12",
> - .code = KEY_F2,
> - .active_low = 1,
> - }, {
> - .desc = "key11",
> - .code = KEY_F1,
> - .active_low = 1,
> - },
> +static const struct software_node x3proto_gpio_keys_node = {
> + .name = "x3proto-gpio-keys",
> };
>
> -static struct gpio_keys_platform_data baseboard_buttons_data = {
> - .buttons = baseboard_buttons,
> - .nbuttons = ARRAY_SIZE(baseboard_buttons),
> +#define __X3PROTO_KEY(_id, _code, _gpio, ...) \
> +static const struct property_entry x3proto_key##_id##_props[] = { \
> + PROPERTY_ENTRY_STRING("label", "key" #_id), \
> + PROPERTY_ENTRY_U32("linux,code", _code), \
> + PROPERTY_ENTRY_GPIO("gpios", &x3proto_gpiochip_node, \
> + _gpio, GPIO_ACTIVE_LOW), \
> + __VA_ARGS__ \
> + { } \
> +}; \
> +static const struct software_node x3proto_key##_id##_node = { \
> + .parent = &x3proto_gpio_keys_node, \
> + .properties = x3proto_key##_id##_props, \
> +}
> +
> +#define X3PROTO_KEY(_id, _code, _gpio) \
> + __X3PROTO_KEY(_id, _code, _gpio)
> +
> +#define X3PROTO_KEY_WAKEUP(_id, _code, _gpio) \
> + __X3PROTO_KEY(_id, _code, _gpio, \
> + PROPERTY_ENTRY_BOOL("wakeup-source"), \
> + )
> +
> +X3PROTO_KEY_WAKEUP(44, KEY_POWER, 0);
> +X3PROTO_KEY_WAKEUP(43, KEY_SUSPEND, 1);
> +X3PROTO_KEY(42, KEY_KATAKANAHIRAGANA, 2);
> +X3PROTO_KEY(41, KEY_SWITCHVIDEOMODE, 3);
> +X3PROTO_KEY(34, KEY_F12, 4);
> +X3PROTO_KEY(33, KEY_F11, 5);
> +X3PROTO_KEY(32, KEY_F10, 6);
> +X3PROTO_KEY(31, KEY_F9, 7);
> +X3PROTO_KEY(24, KEY_F8, 8);
> +X3PROTO_KEY(23, KEY_F7, 9);
> +X3PROTO_KEY(22, KEY_F6, 10);
> +X3PROTO_KEY(21, KEY_F5, 11);
> +X3PROTO_KEY(14, KEY_F4, 12);
> +X3PROTO_KEY(13, KEY_F3, 13);
> +X3PROTO_KEY(12, KEY_F2, 14);
> +X3PROTO_KEY(11, KEY_F1, 15);
> +
> +static const struct software_node *const x3proto_swnodes[] __initconst = {
> + &x3proto_gpio_keys_node,
> + &x3proto_key44_node,
> + &x3proto_key43_node,
> + &x3proto_key42_node,
> + &x3proto_key41_node,
> + &x3proto_key34_node,
> + &x3proto_key33_node,
> + &x3proto_key32_node,
> + &x3proto_key31_node,
> + &x3proto_key24_node,
> + &x3proto_key23_node,
> + &x3proto_key22_node,
> + &x3proto_key21_node,
> + &x3proto_key14_node,
> + &x3proto_key13_node,
> + &x3proto_key12_node,
> + &x3proto_key11_node,
> + NULL
> };
>
> -static struct platform_device baseboard_buttons_device = {
> +static const struct platform_device_info x3proto_gpio_keys_device_info __initconst = {
> .name = "gpio-keys",
> - .id = -1,
> - .dev = {
> - .platform_data = &baseboard_buttons_data,
> - },
> + .id = PLATFORM_DEVID_NONE,
> + .swnode = &x3proto_gpio_keys_node,
> };
>
> static struct platform_device *x3proto_devices[] __initdata = {
> @@ -211,7 +198,6 @@ static struct platform_device *x3proto_devices[] __initdata = {
> &smc91x_device,
> &r8a66597_usb_host_device,
> &m66592_usb_peripheral_device,
> - &baseboard_buttons_device,
> };
>
> static void __init x3proto_init_irq(void)
> @@ -224,7 +210,8 @@ static void __init x3proto_init_irq(void)
>
> static int __init x3proto_devices_setup(void)
> {
> - int ret, i;
> + struct platform_device *pd;
> + int ret;
>
> /*
> * IRLs are only needed for ILSEL mappings, so flip over the INTC
> @@ -239,11 +226,11 @@ static int __init x3proto_devices_setup(void)
> if (unlikely(ret))
> return ret;
>
> - /*
> - * Propagate dynamic GPIOs for the baseboard button device.
> - */
> - for (i = 0; i < ARRAY_SIZE(baseboard_buttons); i++)
> - baseboard_buttons[i].gpio = x3proto_gpio_chip.base + i;
> + ret = software_node_register_node_group(x3proto_swnodes);
> + if (ret) {
> + pr_err("Failed to register software nodes: %d\n", ret);
> + return ret;
> + }
>
> r8a66597_usb_host_resources[1].start =
> r8a66597_usb_host_resources[1].end = ilsel_enable(ILSEL_USBH_I);
> @@ -254,8 +241,12 @@ static int __init x3proto_devices_setup(void)
> smc91x_resources[1].start =
> smc91x_resources[1].end = ilsel_enable(ILSEL_LAN);
>
> - return platform_add_devices(x3proto_devices,
> - ARRAY_SIZE(x3proto_devices));
> + ret = platform_add_devices(x3proto_devices, ARRAY_SIZE(x3proto_devices));
> + if (ret)
> + return ret;
> +
> + pd = platform_device_register_full(&x3proto_gpio_keys_device_info);
> + return PTR_ERR_OR_ZERO(pd);
> }
> device_initcall(x3proto_devices_setup);
>
It took me some time to fully grasp the rewrite, but I think this should work as expected.
Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Adrian
--
.''`. John Paul Adrian Glaubitz
: :' : Debian Developer
`. `' Physicist
`- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
next prev parent reply other threads:[~2026-09-17 18:49 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-05 5:04 [PATCH 0/2] " Dmitry Torokhov
2026-07-05 5:04 ` [PATCH 1/2] sh: mach-x3proto: add software node for GPIO controller Dmitry Torokhov
2026-09-17 12:28 ` John Paul Adrian Glaubitz
2026-07-05 5:04 ` [PATCH 2/2] sh: mach-x3proto: convert gpio-keys to software nodes Dmitry Torokhov
2026-09-17 18:49 ` John Paul Adrian Glaubitz [this message]
2026-09-28 5:28 ` Dmitry Torokhov
2026-09-28 5:56 ` John Paul Adrian Glaubitz
2026-09-29 7:31 ` John Paul Adrian Glaubitz
2026-09-30 5:03 ` Dmitry Torokhov
2026-09-30 5:34 ` John Paul Adrian Glaubitz
2026-07-06 9:47 ` [PATCH 0/2] " Bartosz Golaszewski
2026-07-10 18:50 ` Linus Walleij
2026-09-09 17:00 ` Dmitry Torokhov
2026-09-09 18:06 ` John Paul Adrian Glaubitz
2026-09-12 11:14 ` John Paul Adrian Glaubitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d3a2875ba34bf10ddae3626b77da071cd4624348.camel@physik.fu-berlin.de \
--to=glaubitz@physik.fu-berlin.de \
--cc=arnd@arndb.de \
--cc=brgl@kernel.org \
--cc=dalias@libc.org \
--cc=dmitry.torokhov@gmail.com \
--cc=linusw@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=ysato@users.sourceforge.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®