summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-09-14 15:06:22 +0100
committerMark Brown <broonie@kernel.org>2026-09-14 15:06:22 +0100
commita5c5f773c5c307bd245515587cd98eedfbb0b182 (patch)
tree85ec1d4d1ce1a651921e66c9150ac6fc0b3d4a64 /arch
parent4cabc01a929c894d5aa31d41fb4fe6c43b188d57 (diff)
parent0d5119f276d7d94bd6af088a9b8536f82f894b3d (diff)
downloadlinux-next-a5c5f773c5c307bd245515587cd98eedfbb0b182.tar.gz
linux-next-a5c5f773c5c307bd245515587cd98eedfbb0b182.zip
Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boot/dts/samsung/exynos4210-i9100.dts5
-rw-r--r--arch/arm/boot/dts/samsung/exynos4412-midas.dtsi5
-rw-r--r--arch/arm/mach-exynos/smc.h4
-rw-r--r--arch/arm/mach-s3c/Kconfig5
-rw-r--r--arch/arm/mach-s3c/Kconfig.s3c64xx7
-rw-r--r--arch/arm/mach-s3c/Makefile.s3c64xx1
-rw-r--r--arch/arm/mach-s3c/devs.c27
-rw-r--r--arch/arm/mach-s3c/devs.h1
-rw-r--r--arch/arm/mach-s3c/gpio-core.h3
-rw-r--r--arch/arm/mach-s3c/gpio-samsung-s3c64xx.h5
-rw-r--r--arch/arm/mach-s3c/gpio-samsung.c72
-rw-r--r--arch/arm/mach-s3c/keypad.h27
-rw-r--r--arch/arm/mach-s3c/mach-crag6410.c135
-rw-r--r--arch/arm/mach-s3c/setup-keypad-s3c64xx.c20
14 files changed, 173 insertions, 144 deletions
diff --git a/arch/arm/boot/dts/samsung/exynos4210-i9100.dts b/arch/arm/boot/dts/samsung/exynos4210-i9100.dts
index 8a635bee59fa..067a3264edf3 100644
--- a/arch/arm/boot/dts/samsung/exynos4210-i9100.dts
+++ b/arch/arm/boot/dts/samsung/exynos4210-i9100.dts
@@ -169,11 +169,14 @@
vdda-supply = <&cam_io_en_reg>;
vddreg-supply = <&vt_core_15v_reg>;
vddio-supply = <&vtcam_reg>;
+
clocks = <&camera 0>;
clock-names = "mclk";
+ assigned-clocks = <&camera 0>;
+ assigned-clock-rates = <24000000>;
+
stbyn-gpios = <&gpl2 0 GPIO_ACTIVE_LOW>;
rstn-gpios = <&gpl2 1 GPIO_ACTIVE_LOW>;
- clock-frequency = <24000000>;
port {
s5k5bafx_ep: endpoint {
diff --git a/arch/arm/boot/dts/samsung/exynos4412-midas.dtsi b/arch/arm/boot/dts/samsung/exynos4412-midas.dtsi
index 48245b1665a6..8b6c2e2baed4 100644
--- a/arch/arm/boot/dts/samsung/exynos4412-midas.dtsi
+++ b/arch/arm/boot/dts/samsung/exynos4412-midas.dtsi
@@ -638,10 +638,13 @@
svdda-supply = <&cam_io_reg>;
svddio-supply = <&ldo19_reg>;
afvdd-supply = <&ldo19_reg>;
- clock-frequency = <24000000>;
+
/* CAM_B_CLKOUT */
clocks = <&camera 1>;
clock-names = "extclk";
+ assigned-clocks = <&camera 1>;
+ assigned-clock-rates = <24000000>;
+
gpios = <&gpm1 6 GPIO_ACTIVE_LOW>;
port {
diff --git a/arch/arm/mach-exynos/smc.h b/arch/arm/mach-exynos/smc.h
index 5c30feb8f07d..5c7730f6259f 100644
--- a/arch/arm/mach-exynos/smc.h
+++ b/arch/arm/mach-exynos/smc.h
@@ -32,11 +32,11 @@
#define SMC_REG_CLASS_SFR_W (0x1 << 30)
#define SMC_REG_ID_SFR_W(addr) (SMC_REG_CLASS_SFR_W | ((addr) >> 2))
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
extern void exynos_smc(u32 cmd, u32 arg1, u32 arg2, u32 arg3);
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
/* op type for SMC_CMD_SAVE and SMC_CMD_SHUTDOWN */
#define OP_TYPE_CORE 0x0
diff --git a/arch/arm/mach-s3c/Kconfig b/arch/arm/mach-s3c/Kconfig
index b3656109f1f7..2e77bb4f3a8c 100644
--- a/arch/arm/mach-s3c/Kconfig
+++ b/arch/arm/mach-s3c/Kconfig
@@ -111,11 +111,6 @@ config S3C64XX_DEV_SPI0
Compile in platform device definitions for S3C64XX's type
SPI controller 0
-config SAMSUNG_DEV_KEYPAD
- bool
- help
- Compile in platform device definitions for keypad
-
config SAMSUNG_DEV_PWM
bool
help
diff --git a/arch/arm/mach-s3c/Kconfig.s3c64xx b/arch/arm/mach-s3c/Kconfig.s3c64xx
index cf59147dc9ca..145d04effdfd 100644
--- a/arch/arm/mach-s3c/Kconfig.s3c64xx
+++ b/arch/arm/mach-s3c/Kconfig.s3c64xx
@@ -81,11 +81,6 @@ config S3C64XX_SETUP_FB_24BPP
help
Common setup code for S3C64XX with an 24bpp RGB display helper.
-config S3C64XX_SETUP_KEYPAD
- bool
- help
- Common setup code for S3C64XX KEYPAD GPIO configurations
-
config S3C64XX_SETUP_SDHCI_GPIO
bool
help
@@ -113,7 +108,6 @@ config MACH_WLF_CRAGG_6410
select S3C64XX_DEV_SPI0
select S3C64XX_SETUP_FB_24BPP
select S3C64XX_SETUP_I2C1
- select S3C64XX_SETUP_KEYPAD
select S3C64XX_SETUP_SDHCI
select S3C64XX_SETUP_SPI
select S3C64XX_SETUP_USB_PHY
@@ -124,7 +118,6 @@ config MACH_WLF_CRAGG_6410
select S3C_DEV_I2C1
select S3C_DEV_USB_HOST
select S3C_DEV_USB_HSOTG
- select SAMSUNG_DEV_KEYPAD
select SAMSUNG_DEV_PWM
help
Machine support for the Wolfson Cragganmore S3C6410 variant.
diff --git a/arch/arm/mach-s3c/Makefile.s3c64xx b/arch/arm/mach-s3c/Makefile.s3c64xx
index 61287ad2ea42..1686b1f344f8 100644
--- a/arch/arm/mach-s3c/Makefile.s3c64xx
+++ b/arch/arm/mach-s3c/Makefile.s3c64xx
@@ -32,7 +32,6 @@ obj-y += dev-audio-s3c64xx.o
obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp-s3c64xx.o
obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0-s3c64xx.o
obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1-s3c64xx.o
-obj-$(CONFIG_S3C64XX_SETUP_KEYPAD) += setup-keypad-s3c64xx.o
obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio-s3c64xx.o
obj-$(CONFIG_S3C64XX_SETUP_SPI) += setup-spi-s3c64xx.o
obj-$(CONFIG_S3C64XX_SETUP_USB_PHY) += setup-usb-phy-s3c64xx.o
diff --git a/arch/arm/mach-s3c/devs.c b/arch/arm/mach-s3c/devs.c
index 572b156644bd..35b98a9a9237 100644
--- a/arch/arm/mach-s3c/devs.c
+++ b/arch/arm/mach-s3c/devs.c
@@ -39,7 +39,6 @@
#include "devs.h"
#include "fb.h"
#include <linux/platform_data/i2c-s3c2410.h>
-#include "keypad.h"
#include "pwm-core.h"
#include "sdhci.h"
#include "usb-phy.h"
@@ -265,32 +264,6 @@ void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd)
}
#endif /* CONFIG_S3C_DEV_I2C1 */
-/* KEYPAD */
-
-#ifdef CONFIG_SAMSUNG_DEV_KEYPAD
-static struct resource samsung_keypad_resources[] = {
- [0] = DEFINE_RES_MEM(SAMSUNG_PA_KEYPAD, SZ_32),
- [1] = DEFINE_RES_IRQ(IRQ_KEYPAD),
-};
-
-struct platform_device samsung_device_keypad = {
- .name = "samsung-keypad",
- .id = -1,
- .num_resources = ARRAY_SIZE(samsung_keypad_resources),
- .resource = samsung_keypad_resources,
-};
-
-void __init samsung_keypad_set_platdata(struct samsung_keypad_platdata *pd)
-{
- struct samsung_keypad_platdata *npd;
-
- npd = s3c_set_platdata(pd, sizeof(*npd), &samsung_device_keypad);
-
- if (!npd->cfg_gpio)
- npd->cfg_gpio = samsung_keypad_cfg_gpio;
-}
-#endif /* CONFIG_SAMSUNG_DEV_KEYPAD */
-
/* PWM Timer */
#ifdef CONFIG_SAMSUNG_DEV_PWM
diff --git a/arch/arm/mach-s3c/devs.h b/arch/arm/mach-s3c/devs.h
index 21c00786c264..2737990063b1 100644
--- a/arch/arm/mach-s3c/devs.h
+++ b/arch/arm/mach-s3c/devs.h
@@ -39,7 +39,6 @@ extern struct platform_device s3c_device_i2c1;
extern struct platform_device s3c_device_ohci;
extern struct platform_device s3c_device_usb_hsotg;
-extern struct platform_device samsung_device_keypad;
extern struct platform_device samsung_device_pwm;
/**
diff --git a/arch/arm/mach-s3c/gpio-core.h b/arch/arm/mach-s3c/gpio-core.h
index 6801c85fb9da..464b0d02f102 100644
--- a/arch/arm/mach-s3c/gpio-core.h
+++ b/arch/arm/mach-s3c/gpio-core.h
@@ -14,6 +14,8 @@
#include "gpio-samsung.h"
#include <linux/gpio/driver.h>
+struct software_node;
+
#define GPIOCON_OFF (0x00)
#define GPIODAT_OFF (0x04)
@@ -66,6 +68,7 @@ struct samsung_gpio_cfg;
*/
struct samsung_gpio_chip {
struct gpio_chip chip;
+ const struct software_node *swnode;
struct samsung_gpio_cfg *config;
struct samsung_gpio_pm *pm;
void __iomem *base;
diff --git a/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h b/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h
index 8ed144a0d474..fc21d3f50ce9 100644
--- a/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h
+++ b/arch/arm/mach-s3c/gpio-samsung-s3c64xx.h
@@ -13,6 +13,8 @@
#ifdef CONFIG_GPIO_SAMSUNG
+#include <linux/property.h>
+
/* GPIO bank sizes */
#define S3C64XX_GPIO_A_NR (8)
#define S3C64XX_GPIO_B_NR (7)
@@ -89,6 +91,9 @@ enum s3c_gpio_number {
/* define the number of gpios we need to the one after the GPQ() range */
#define GPIO_BOARD_START (S3C64XX_GPQ(S3C64XX_GPIO_Q_NR) + 1)
+extern const struct software_node samsung_gpiochip_nodes[];
+#define SAMSUNG_GPIO_NODE(node) (&samsung_gpiochip_nodes[(node) - 'A'])
+
#endif /* GPIO_SAMSUNG */
#endif /* GPIO_SAMSUNG_S3C64XX_H */
diff --git a/arch/arm/mach-s3c/gpio-samsung.c b/arch/arm/mach-s3c/gpio-samsung.c
index 81e198e5a6d3..b35cf62a9157 100644
--- a/arch/arm/mach-s3c/gpio-samsung.c
+++ b/arch/arm/mach-s3c/gpio-samsung.c
@@ -37,6 +37,28 @@
#include "gpio-cfg-helpers.h"
#include "pm.h"
+const struct software_node samsung_gpiochip_nodes[] = {
+ SOFTWARE_NODE("GPA", NULL, NULL),
+ SOFTWARE_NODE("GPB", NULL, NULL),
+ SOFTWARE_NODE("GPC", NULL, NULL),
+ SOFTWARE_NODE("GPD", NULL, NULL),
+ SOFTWARE_NODE("GPE", NULL, NULL),
+ SOFTWARE_NODE("GPF", NULL, NULL),
+ SOFTWARE_NODE("GPG", NULL, NULL),
+ SOFTWARE_NODE("GPH", NULL, NULL),
+ SOFTWARE_NODE("GPI", NULL, NULL),
+ SOFTWARE_NODE("GPJ", NULL, NULL),
+ SOFTWARE_NODE("GPK", NULL, NULL),
+ SOFTWARE_NODE("GPL", NULL, NULL),
+ SOFTWARE_NODE("GPM", NULL, NULL),
+ SOFTWARE_NODE("GPN", NULL, NULL),
+ SOFTWARE_NODE("GPO", NULL, NULL),
+ SOFTWARE_NODE("GPP", NULL, NULL),
+ SOFTWARE_NODE("GPQ", NULL, NULL),
+};
+
+#define NUM_SAMSUNG_GPIOCHIPS ARRAY_SIZE(samsung_gpiochip_nodes)
+
static int samsung_gpio_setpull_updown(struct samsung_gpio_chip *chip,
unsigned int off, samsung_gpio_pull_t pull)
{
@@ -491,6 +513,16 @@ static __init void s3c_gpiolib_track(struct samsung_gpio_chip *chip)
}
#endif /* CONFIG_S3C_GPIO_TRACK */
+static void __init samsung_setup_gpiochip_nodes(void)
+{
+ const struct software_node *group[NUM_SAMSUNG_GPIOCHIPS + 1] = { 0 };
+
+ for (unsigned int i = 0; i < NUM_SAMSUNG_GPIOCHIPS; i++)
+ group[i] = &samsung_gpiochip_nodes[i];
+
+ software_node_register_node_group(group);
+}
+
/*
* samsung_gpiolib_add() - add the Samsung gpio_chip.
* @chip: The chip to register
@@ -506,12 +538,16 @@ static void __init samsung_gpiolib_add(struct samsung_gpio_chip *chip)
struct gpio_chip *gc = &chip->chip;
int ret;
+ gc->label = chip->swnode->name;
+
BUG_ON(!chip->base);
BUG_ON(!gc->label);
BUG_ON(!gc->ngpio);
spin_lock_init(&chip->lock);
+ gc->fwnode = software_node_fwnode(chip->swnode);
+
if (!gc->direction_input)
gc->direction_input = samsung_gpiolib_2bit_input;
if (!gc->direction_output)
@@ -659,49 +695,49 @@ static struct samsung_gpio_chip s3c64xx_gpios_4bit[] = {
.chip = {
.base = S3C64XX_GPA(0),
.ngpio = S3C64XX_GPIO_A_NR,
- .label = "GPA",
},
+ .swnode = SAMSUNG_GPIO_NODE('A'),
}, {
.chip = {
.base = S3C64XX_GPB(0),
.ngpio = S3C64XX_GPIO_B_NR,
- .label = "GPB",
},
+ .swnode = SAMSUNG_GPIO_NODE('B'),
}, {
.chip = {
.base = S3C64XX_GPC(0),
.ngpio = S3C64XX_GPIO_C_NR,
- .label = "GPC",
},
+ .swnode = SAMSUNG_GPIO_NODE('C'),
}, {
.chip = {
.base = S3C64XX_GPD(0),
.ngpio = S3C64XX_GPIO_D_NR,
- .label = "GPD",
},
+ .swnode = SAMSUNG_GPIO_NODE('D'),
}, {
.config = &samsung_gpio_cfgs[0],
.chip = {
.base = S3C64XX_GPE(0),
.ngpio = S3C64XX_GPIO_E_NR,
- .label = "GPE",
},
+ .swnode = SAMSUNG_GPIO_NODE('E'),
}, {
.base = S3C64XX_GPG_BASE,
.chip = {
.base = S3C64XX_GPG(0),
.ngpio = S3C64XX_GPIO_G_NR,
- .label = "GPG",
},
+ .swnode = SAMSUNG_GPIO_NODE('G'),
}, {
.base = S3C64XX_GPM_BASE,
.config = &samsung_gpio_cfgs[1],
.chip = {
.base = S3C64XX_GPM(0),
.ngpio = S3C64XX_GPIO_M_NR,
- .label = "GPM",
.to_irq = s3c64xx_gpiolib_mbank_to_irq,
},
+ .swnode = SAMSUNG_GPIO_NODE('M'),
},
};
@@ -711,25 +747,25 @@ static struct samsung_gpio_chip s3c64xx_gpios_4bit2[] = {
.chip = {
.base = S3C64XX_GPH(0),
.ngpio = S3C64XX_GPIO_H_NR,
- .label = "GPH",
},
+ .swnode = SAMSUNG_GPIO_NODE('H'),
}, {
.base = S3C64XX_GPK_BASE + 0x4,
.config = &samsung_gpio_cfgs[0],
.chip = {
.base = S3C64XX_GPK(0),
.ngpio = S3C64XX_GPIO_K_NR,
- .label = "GPK",
},
+ .swnode = SAMSUNG_GPIO_NODE('K'),
}, {
.base = S3C64XX_GPL_BASE + 0x4,
.config = &samsung_gpio_cfgs[1],
.chip = {
.base = S3C64XX_GPL(0),
.ngpio = S3C64XX_GPIO_L_NR,
- .label = "GPL",
.to_irq = s3c64xx_gpiolib_lbank_to_irq,
},
+ .swnode = SAMSUNG_GPIO_NODE('L'),
},
};
@@ -740,43 +776,43 @@ static struct samsung_gpio_chip s3c64xx_gpios_2bit[] = {
.chip = {
.base = S3C64XX_GPF(0),
.ngpio = S3C64XX_GPIO_F_NR,
- .label = "GPF",
},
+ .swnode = SAMSUNG_GPIO_NODE('F'),
}, {
.config = &samsung_gpio_cfgs[7],
.chip = {
.base = S3C64XX_GPI(0),
.ngpio = S3C64XX_GPIO_I_NR,
- .label = "GPI",
},
+ .swnode = SAMSUNG_GPIO_NODE('I'),
}, {
.config = &samsung_gpio_cfgs[7],
.chip = {
.base = S3C64XX_GPJ(0),
.ngpio = S3C64XX_GPIO_J_NR,
- .label = "GPJ",
},
+ .swnode = SAMSUNG_GPIO_NODE('J'),
}, {
.config = &samsung_gpio_cfgs[6],
.chip = {
.base = S3C64XX_GPO(0),
.ngpio = S3C64XX_GPIO_O_NR,
- .label = "GPO",
},
+ .swnode = SAMSUNG_GPIO_NODE('O'),
}, {
.config = &samsung_gpio_cfgs[6],
.chip = {
.base = S3C64XX_GPP(0),
.ngpio = S3C64XX_GPIO_P_NR,
- .label = "GPP",
},
+ .swnode = SAMSUNG_GPIO_NODE('P'),
}, {
.config = &samsung_gpio_cfgs[6],
.chip = {
.base = S3C64XX_GPQ(0),
.ngpio = S3C64XX_GPIO_Q_NR,
- .label = "GPQ",
},
+ .swnode = SAMSUNG_GPIO_NODE('Q'),
}, {
.base = S3C64XX_GPN_BASE,
.irq_base = IRQ_EINT(0),
@@ -784,9 +820,9 @@ static struct samsung_gpio_chip s3c64xx_gpios_2bit[] = {
.chip = {
.base = S3C64XX_GPN(0),
.ngpio = S3C64XX_GPIO_N_NR,
- .label = "GPN",
.to_irq = samsung_gpiolib_to_irq,
},
+ .swnode = SAMSUNG_GPIO_NODE('N'),
},
};
@@ -803,6 +839,8 @@ static __init int samsung_gpiolib_init(void)
return 0;
if (soc_is_s3c64xx()) {
+ samsung_setup_gpiochip_nodes();
+
samsung_gpiolib_set_cfg(samsung_gpio_cfgs,
ARRAY_SIZE(samsung_gpio_cfgs));
samsung_gpiolib_add_2bit_chips(s3c64xx_gpios_2bit,
diff --git a/arch/arm/mach-s3c/keypad.h b/arch/arm/mach-s3c/keypad.h
deleted file mode 100644
index 9754b9a29945..000000000000
--- a/arch/arm/mach-s3c/keypad.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Samsung Platform - Keypad platform data definitions
- *
- * Copyright (C) 2010 Samsung Electronics Co.Ltd
- * Author: Joonyoung Shim <jy0922.shim@samsung.com>
- */
-
-#ifndef __PLAT_SAMSUNG_KEYPAD_H
-#define __PLAT_SAMSUNG_KEYPAD_H
-
-#include <linux/input/samsung-keypad.h>
-
-/**
- * samsung_keypad_set_platdata - Set platform data for Samsung Keypad device.
- * @pd: Platform data to register to device.
- *
- * Register the given platform data for use with Samsung Keypad device.
- * The call will copy the platform data, so the board definitions can
- * make the structure itself __initdata.
- */
-extern void samsung_keypad_set_platdata(struct samsung_keypad_platdata *pd);
-
-/* defined by architecture to configure gpio. */
-extern void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols);
-
-#endif /* __PLAT_SAMSUNG_KEYPAD_H */
diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-crag6410.c
index 57176719d8a6..2264beef6dda 100644
--- a/arch/arm/mach-s3c/mach-crag6410.c
+++ b/arch/arm/mach-s3c/mach-crag6410.c
@@ -15,13 +15,16 @@
#include <linux/io.h>
#include <linux/init.h>
#include <linux/input-event-codes.h>
+#include <linux/input/matrix_keypad.h>
#include <linux/gpio/legacy.h>
#include <linux/gpio/machine.h>
+#include <linux/gpio/property.h>
#include <linux/leds.h>
#include <linux/delay.h>
#include <linux/mmc/host.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
+#include <linux/property.h>
#include <linux/pwm.h>
#include <linux/pwm_backlight.h>
#include <linux/dm9000.h>
@@ -53,7 +56,6 @@
#include "gpio-cfg.h"
#include <linux/platform_data/spi-s3c64xx.h>
-#include "keypad.h"
#include "devs.h"
#include "cpu.h"
#include <linux/platform_data/i2c-s3c2410.h>
@@ -176,7 +178,7 @@ static struct s3c_fb_platdata crag6410_lcd_pdata = {
/* 2x6 keypad */
-static uint32_t crag6410_keymap[] = {
+static const u32 crag6410_keymap[] __initconst = {
/* KEY(row, col, keycode) */
KEY(0, 0, KEY_VOLUMEUP),
KEY(0, 1, KEY_HOME),
@@ -192,43 +194,103 @@ static uint32_t crag6410_keymap[] = {
KEY(1, 5, KEY_CAMERA),
};
-static struct matrix_keymap_data crag6410_keymap_data = {
- .keymap = crag6410_keymap,
- .keymap_size = ARRAY_SIZE(crag6410_keymap),
+static const struct property_entry crag6410_keypad_props[] __initconst = {
+ PROPERTY_ENTRY_U32("keypad,num-columns", 6),
+ PROPERTY_ENTRY_U32("keypad,num-rows", 2),
+ PROPERTY_ENTRY_U32_ARRAY("linux,keymap", crag6410_keymap),
+ { }
};
-static struct samsung_keypad_platdata crag6410_keypad_data = {
- .keymap_data = &crag6410_keymap_data,
- .rows = 2,
- .cols = 6,
+static const struct resource crag6410_keypad_resources[] __initconst = {
+ [0] = DEFINE_RES_MEM(SAMSUNG_PA_KEYPAD, SZ_32),
+ [1] = DEFINE_RES_IRQ(IRQ_KEYPAD),
};
-static struct gpio_keys_button crag6410_gpio_keys[] = {
- [0] = {
- .code = KEY_SUSPEND,
- .gpio = S3C64XX_GPL(10), /* EINT 18 */
- .type = EV_KEY,
- .wakeup = 1,
- .active_low = 1,
- },
- [1] = {
- .code = SW_FRONT_PROXIMITY,
- .gpio = S3C64XX_GPN(11), /* EINT 11 */
- .type = EV_SW,
- },
+static const struct platform_device_info crag6410_keypad_info __initconst = {
+ .name = "samsung-keypad",
+ .id = PLATFORM_DEVID_NONE,
+ .res = crag6410_keypad_resources,
+ .num_res = ARRAY_SIZE(crag6410_keypad_resources),
+ .properties = crag6410_keypad_props,
+};
+
+static void __init crag6410_setup_keypad(void)
+{
+ struct platform_device *pd;
+
+ /* Set all the necessary GPK pins to special-function 3: KP_ROW[x] */
+ s3c_gpio_cfgrange_nopull(S3C64XX_GPK(8), 2, S3C_GPIO_SFN(3));
+
+ /* Set all the necessary GPL pins to special-function 3: KP_COL[x] */
+ s3c_gpio_cfgrange_nopull(S3C64XX_GPL(0), 6, S3C_GPIO_SFN(3));
+
+ pd = platform_device_register_full(&crag6410_keypad_info);
+ if (IS_ERR(pd))
+ pr_err("failed to instantiate keypad device\n");
+}
+
+static const struct software_node crag6410_gpio_keys_node = {
+ .name = "crag6410-gpio-keys",
};
-static struct gpio_keys_platform_data crag6410_gpio_keydata = {
- .buttons = crag6410_gpio_keys,
- .nbuttons = ARRAY_SIZE(crag6410_gpio_keys),
+static const struct property_entry crag6410_suspend_key_props[] = {
+ PROPERTY_ENTRY_U32("linux,code", KEY_SUSPEND),
+ PROPERTY_ENTRY_GPIO("gpios",
+ SAMSUNG_GPIO_NODE('L'), 10, /* EINT 18 */
+ GPIO_ACTIVE_LOW),
+ PROPERTY_ENTRY_BOOL("wakeup-source"),
+ { }
};
-static struct platform_device crag6410_gpio_keydev = {
- .name = "gpio-keys",
- .id = 0,
- .dev.platform_data = &crag6410_gpio_keydata,
+static const struct software_node crag6410_suspend_key_node = {
+ .parent = &crag6410_gpio_keys_node,
+ .properties = crag6410_suspend_key_props,
+};
+
+static const struct property_entry crag6410_prox_sw_props[] = {
+ PROPERTY_ENTRY_U32("linux,input-type", EV_SW),
+ PROPERTY_ENTRY_U32("linux,code", SW_FRONT_PROXIMITY),
+ PROPERTY_ENTRY_GPIO("gpios",
+ SAMSUNG_GPIO_NODE('N'), 11, /* EINT 11 */
+ GPIO_ACTIVE_HIGH),
+ { }
+};
+
+static const struct software_node crag6410_prox_sw_node = {
+ .parent = &crag6410_gpio_keys_node,
+ .properties = crag6410_prox_sw_props,
};
+static const struct software_node *crag6410_gpio_keys_swnodes[] = {
+ &crag6410_gpio_keys_node,
+ &crag6410_suspend_key_node,
+ &crag6410_prox_sw_node,
+ NULL
+};
+
+static void __init crag6410_setup_gpio_keys(void)
+{
+ struct platform_device_info keys_info = {
+ .name = "gpio-keys",
+ .id = 0,
+ };
+ struct platform_device *pd;
+ int err;
+
+ err = software_node_register_node_group(crag6410_gpio_keys_swnodes);
+ if (err) {
+ pr_err("failed to register gpio-keys software nodes: %d\n", err);
+ return;
+ }
+
+ keys_info.fwnode = software_node_fwnode(&crag6410_gpio_keys_node);
+
+ pd = platform_device_register_full(&keys_info);
+ err = PTR_ERR_OR_ZERO(pd);
+ if (err)
+ pr_err("failed to create gpio-keys device: %d\n", err);
+}
+
static struct resource crag6410_dm9k_resource[] = {
[0] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN5, 2),
[1] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN5 + (1 << 8), 2),
@@ -361,7 +423,7 @@ static struct platform_device wallvdd_device = {
},
};
-static struct platform_device *crag6410_devices[] __initdata = {
+static struct platform_device *crag6410_devs0[] __initdata = {
&s3c_device_hsmmc0,
&s3c_device_hsmmc2,
&s3c_device_i2c0,
@@ -372,8 +434,9 @@ static struct platform_device *crag6410_devices[] __initdata = {
&samsung_device_pwm,
&s3c64xx_device_iis0,
&s3c64xx_device_iis1,
- &samsung_device_keypad,
- &crag6410_gpio_keydev,
+};
+
+static struct platform_device *crag6410_devs1[] __initdata = {
&crag6410_dm9k_device,
&s3c64xx_device_spi0,
&crag6410_lcd_powerdev,
@@ -873,16 +936,18 @@ static void __init crag6410_machine_init(void)
gpiod_add_lookup_table(&crag_wm1250_ev1_gpiod_table);
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
- samsung_keypad_set_platdata(&crag6410_keypad_data);
-
gpiod_add_lookup_table(&crag_spi0_gpiod_table);
s3c64xx_spi0_set_platdata(0, 2);
pwm_add_table(crag6410_pwm_lookup, ARRAY_SIZE(crag6410_pwm_lookup));
- platform_add_devices(crag6410_devices, ARRAY_SIZE(crag6410_devices));
+ platform_add_devices(crag6410_devs0, ARRAY_SIZE(crag6410_devs0));
platform_device_register_full(&crag6410_mmgpio_devinfo);
gpiod_add_lookup_table(&crag_leds_table);
+ crag6410_setup_keypad();
+ crag6410_setup_gpio_keys();
+
+ platform_add_devices(crag6410_devs1, ARRAY_SIZE(crag6410_devs1));
gpio_led_register_device(-1, &gpio_leds_pdata);
regulator_has_full_constraints();
diff --git a/arch/arm/mach-s3c/setup-keypad-s3c64xx.c b/arch/arm/mach-s3c/setup-keypad-s3c64xx.c
deleted file mode 100644
index 2e1367878fb1..000000000000
--- a/arch/arm/mach-s3c/setup-keypad-s3c64xx.c
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-//
-// Copyright (c) 2010 Samsung Electronics Co., Ltd.
-// http://www.samsung.com/
-//
-// GPIO configuration for S3C64XX KeyPad device
-
-#include <linux/gpio/consumer.h>
-#include "gpio-cfg.h"
-#include "keypad.h"
-#include "gpio-samsung.h"
-
-void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
-{
- /* Set all the necessary GPK pins to special-function 3: KP_ROW[x] */
- s3c_gpio_cfgrange_nopull(S3C64XX_GPK(8), rows, S3C_GPIO_SFN(3));
-
- /* Set all the necessary GPL pins to special-function 3: KP_COL[x] */
- s3c_gpio_cfgrange_nopull(S3C64XX_GPL(0), cols, S3C_GPIO_SFN(3));
-}