diff options
| author | Mark Brown <broonie@kernel.org> | 2026-10-01 13:48:57 +0100 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-10-01 13:48:57 +0100 |
| commit | 720604b7d471b6822c2d30a305e7d3676f202c8e (patch) | |
| tree | 5484a2d142cc52b6c21c64badea7627219baeb9e /arch/sh | |
| parent | 6f55798d94436d04163be123974965cb743fff49 (diff) | |
| parent | be5a19d95030ffa7a37d2981d0ab4eac8a6c89fa (diff) | |
| download | linux-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.c | 38 | ||||
| -rw-r--r-- | arch/sh/boards/mach-x3proto/gpio.c | 15 | ||||
| -rw-r--r-- | arch/sh/boards/mach-x3proto/setup.c | 165 | ||||
| -rw-r--r-- | arch/sh/include/mach-x3proto/mach/hardware.h | 2 |
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 |
