summaryrefslogtreecommitdiff
path: root/arch/sh
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-10-01 13:48:57 +0100
committerMark Brown <broonie@kernel.org>2026-10-01 13:48:57 +0100
commit720604b7d471b6822c2d30a305e7d3676f202c8e (patch)
tree5484a2d142cc52b6c21c64badea7627219baeb9e /arch/sh
parent6f55798d94436d04163be123974965cb743fff49 (diff)
parentbe5a19d95030ffa7a37d2981d0ab4eac8a6c89fa (diff)
downloadlinux-next-720604b7d471b6822c2d30a305e7d3676f202c8e.tar.gz
linux-next-720604b7d471b6822c2d30a305e7d3676f202c8e.zip
Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/glaubitz/sh-linux.git
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/boards/mach-ecovec24/setup.c38
-rw-r--r--arch/sh/boards/mach-x3proto/gpio.c15
-rw-r--r--arch/sh/boards/mach-x3proto/setup.c165
-rw-r--r--arch/sh/include/mach-x3proto/mach/hardware.h2
4 files changed, 105 insertions, 115 deletions
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c
index ca4b4dd1ddef..f662a296a54c 100644
--- a/arch/sh/boards/mach-ecovec24/setup.c
+++ b/arch/sh/boards/mach-ecovec24/setup.c
@@ -26,6 +26,7 @@
#include <linux/platform_data/tmio.h>
#include <linux/platform_data/tsc2007.h>
#include <linux/platform_device.h>
+#include <linux/property.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <linux/sh_eth.h>
@@ -589,39 +590,21 @@ static struct platform_device keysc_device = {
/* TouchScreen */
#define IRQ0 evt2irq(0x600)
-static int ts_get_pendown_state(struct device *dev)
-{
- int val = 0;
- gpio_free(GPIO_FN_INTC_IRQ0);
- gpio_request(GPIO_PTZ0, NULL);
- gpio_direction_input(GPIO_PTZ0);
-
- val = gpio_get_value(GPIO_PTZ0);
-
- gpio_free(GPIO_PTZ0);
- gpio_request(GPIO_FN_INTC_IRQ0, NULL);
-
- return val ? 0 : 1;
-}
-
-static int ts_init(void)
-{
- gpio_request(GPIO_FN_INTC_IRQ0, NULL);
- return 0;
-}
+static const struct property_entry tsc2007_properties[] = {
+ PROPERTY_ENTRY_U32("ti,x-plate-ohms", 180),
+ { }
+};
-static struct tsc2007_platform_data tsc2007_info = {
- .model = 2007,
- .x_plate_ohms = 180,
- .get_pendown_state = ts_get_pendown_state,
- .init_platform_hw = ts_init,
+static const struct software_node tsc2007_swnode = {
+ .name = "tsc2007",
+ .properties = tsc2007_properties,
};
static struct i2c_board_info ts_i2c_clients = {
I2C_BOARD_INFO("tsc2007", 0x48),
.type = "tsc2007",
- .platform_data = &tsc2007_info,
.irq = IRQ0,
+ .swnode = &tsc2007_swnode,
};
static struct regulator_consumer_supply cn12_power_consumers[] =
@@ -1242,8 +1225,9 @@ static int __init arch_setup(void)
gpio_direction_output(GPIO_PTF4, 1);
/* enable TouchScreen */
- i2c_register_board_info(0, &ts_i2c_clients, 1);
+ gpio_request(GPIO_FN_INTC_IRQ0, NULL);
irq_set_irq_type(IRQ0, IRQ_TYPE_LEVEL_LOW);
+ i2c_register_board_info(0, &ts_i2c_clients, 1);
}
/* enable CEU0 */
diff --git a/arch/sh/boards/mach-x3proto/gpio.c b/arch/sh/boards/mach-x3proto/gpio.c
index c13d51b29702..a09cafc782b4 100644
--- a/arch/sh/boards/mach-x3proto/gpio.c
+++ b/arch/sh/boards/mach-x3proto/gpio.c
@@ -18,6 +18,7 @@
#include <linux/io.h>
#include <mach/ilsel.h>
#include <mach/hardware.h>
+#include <linux/property.h>
#define KEYCTLR 0xb81c0000
#define KEYOUTR 0xb81c0002
@@ -73,6 +74,10 @@ static void x3proto_gpio_irq_handler(struct irq_desc *desc)
chip->irq_unmask(data);
}
+const struct software_node x3proto_gpiochip_node = {
+ .name = "x3proto-gpio",
+};
+
struct gpio_chip x3proto_gpio_chip = {
.label = "x3proto-gpio",
.direction_input = x3proto_gpio_direction_input,
@@ -104,9 +109,15 @@ int __init x3proto_gpio_setup(void)
if (unlikely(ilsel < 0))
return ilsel;
+ ret = software_node_register(&x3proto_gpiochip_node);
+ if (ret)
+ goto err_gpio;
+
+ x3proto_gpio_chip.fwnode = software_node_fwnode(&x3proto_gpiochip_node);
+
ret = gpiochip_add_data(&x3proto_gpio_chip, NULL);
if (unlikely(ret))
- goto err_gpio;
+ goto err_swnode;
x3proto_irq_domain = irq_domain_create_linear(NULL, NR_BASEBOARD_GPIOS,
&x3proto_gpio_irq_ops, NULL);
@@ -127,6 +138,8 @@ int __init x3proto_gpio_setup(void)
err_irq:
gpiochip_remove(&x3proto_gpio_chip);
ret = 0;
+err_swnode:
+ software_node_unregister(&x3proto_gpiochip_node);
err_gpio:
synchronize_irq(ilsel);
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);
diff --git a/arch/sh/include/mach-x3proto/mach/hardware.h b/arch/sh/include/mach-x3proto/mach/hardware.h
index 57ea4a5cca35..1ee5a404973c 100644
--- a/arch/sh/include/mach-x3proto/mach/hardware.h
+++ b/arch/sh/include/mach-x3proto/mach/hardware.h
@@ -3,10 +3,12 @@
#define __MACH_X3PROTO_HARDWARE_H
struct gpio_chip;
+struct software_node;
/* arch/sh/boards/mach-x3proto/gpio.c */
int x3proto_gpio_setup(void);
extern struct gpio_chip x3proto_gpio_chip;
+extern const struct software_node x3proto_gpiochip_node;
#define NR_BASEBOARD_GPIOS 16