diff --git a/arch/arm/mach-s3c/devs.c b/arch/arm/mach-s3c/devs.c
index 0237307b9238..d1125316043b 100644
--- a/arch/arm/mach-s3c/devs.c
+++ b/arch/arm/mach-s3c/devs.c
@@ -335,38 +335,3 @@ void __init dwc2_hsotg_set_platdata(struct dwc2_hsotg_plat *pd)
npd->phy_exit = s3c_usb_phy_exit;
}
#endif /* CONFIG_S3C_DEV_USB_HSOTG */
-
-#ifdef CONFIG_S3C64XX_DEV_SPI0
-static struct resource s3c64xx_spi0_resource[] = {
- [0] = DEFINE_RES_MEM(S3C_PA_SPI0, SZ_256),
- [1] = DEFINE_RES_IRQ(IRQ_SPI0),
-};
-
-struct platform_device s3c64xx_device_spi0 = {
- .name = "s3c6410-spi",
- .id = 0,
- .num_resources = ARRAY_SIZE(s3c64xx_spi0_resource),
- .resource = s3c64xx_spi0_resource,
- .dev = {
- .dma_mask = &samsung_device_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
-};
-
-void __init s3c64xx_spi0_set_platdata(int src_clk_nr, int num_cs)
-{
- struct s3c64xx_spi_info pd;
-
- /* Reject invalid configuration */
- if (!num_cs || src_clk_nr < 0) {
- pr_err("%s: Invalid SPI configuration\n", __func__);
- return;
- }
-
- pd.num_cs = num_cs;
- pd.src_clk_nr = src_clk_nr;
- pd.cfg_gpio = s3c64xx_spi0_cfg_gpio;
-
- s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi0);
-}
-#endif /* CONFIG_S3C64XX_DEV_SPI0 */diff --git a/arch/arm/mach-s3c/devs.h b/arch/arm/mach-s3c/devs.h
index 2737990063b1..90a86ade3570 100644
--- a/arch/arm/mach-s3c/devs.h
+++ b/arch/arm/mach-s3c/devs.h
@@ -27,7 +27,6 @@ extern struct platform_device *s3c24xx_uart_src[];
extern struct platform_device s3c64xx_device_iis0;
extern struct platform_device s3c64xx_device_iis1;
-extern struct platform_device s3c64xx_device_spi0;
extern struct platform_device s3c_device_fb;
extern struct platform_device s3c_device_hsmmc0;
diff --git a/arch/arm/mach-s3c/mach-crag6410.c b/arch/arm/mach-s3c/mach-crag6410.c
index 4c9b8c1fb08e..03a97a20e38c 100644
--- a/arch/arm/mach-s3c/mach-crag6410.c
+++ b/arch/arm/mach-s3c/mach-crag6410.c
@@ -438,7 +438,6 @@ static struct platform_device *crag6410_devs0[] __initdata = {
static struct platform_device *crag6410_devs1[] __initdata = {
&crag6410_dm9k_device,
- &s3c64xx_device_spi0,
&crag6410_lcd_powerdev,
&crag6410_backlight_device,
&speyside_device,@@ -771,17 +770,22 @@ static struct wm831x_pdata glenfarclas_pmic_pdata = {
.disable_touch = true,
};
-static struct gpiod_lookup_table crag_wm1250_ev1_gpiod_table = {
- /* The WM1250-EV1 is device 0027 on I2C bus 1 */
- .dev_id = "1-0027",
- .table = {
- GPIO_LOOKUP("GPION", 12, "clk-ena", GPIO_ACTIVE_HIGH),
- GPIO_LOOKUP("GPIOL", 12, "clk-sel0", GPIO_ACTIVE_HIGH),
- GPIO_LOOKUP("GPIOL", 13, "clk-sel1", GPIO_ACTIVE_HIGH),
- GPIO_LOOKUP("GPIOL", 14, "osr", GPIO_ACTIVE_HIGH),
- GPIO_LOOKUP("GPIOL", 8, "master", GPIO_ACTIVE_HIGH),
- { },
- },
+static const struct property_entry crag_wm1250_ev1_properties[] = {
+ PROPERTY_ENTRY_GPIO("clk-ena-gpios",
+ SAMSUNG_GPIO_NODE('N'), 12, GPIO_ACTIVE_HIGH),
+ PROPERTY_ENTRY_GPIO("clk-sel0-gpios",
+ SAMSUNG_GPIO_NODE('L'), 12, GPIO_ACTIVE_HIGH),
+ PROPERTY_ENTRY_GPIO("clk-sel1-gpios",
+ SAMSUNG_GPIO_NODE('L'), 13, GPIO_ACTIVE_HIGH),
+ PROPERTY_ENTRY_GPIO("osr-gpios",
+ SAMSUNG_GPIO_NODE('L'), 14, GPIO_ACTIVE_HIGH),
+ PROPERTY_ENTRY_GPIO("master-gpios",
+ SAMSUNG_GPIO_NODE('L'), 8, GPIO_ACTIVE_HIGH),
+ { }
+};
+
+static const struct software_node crag_wm1250_ev1_swnode = {
+ .properties = crag_wm1250_ev1_properties,
};
static struct i2c_board_info i2c_devs1[] = {@@ -794,7 +798,8 @@ static struct i2c_board_info i2c_devs1[] = {
{ I2C_BOARD_INFO("wlf-gf-module", 0x24) },
{ I2C_BOARD_INFO("wlf-gf-module", 0x25) },
{ I2C_BOARD_INFO("wlf-gf-module", 0x26) },
- { I2C_BOARD_INFO("wm1250-ev1", 0x27), },
+ { I2C_BOARD_INFO("wm1250-ev1", 0x27),
+ .swnode = &crag_wm1250_ev1_swnode, },
};
static struct s3c2410_platform_i2c i2c1_pdata = {@@ -891,15 +896,48 @@ static const struct gpio_led_platform_data gpio_leds_pdata = {
static struct dwc2_hsotg_plat crag6410_hsotg_pdata;
-static struct gpiod_lookup_table crag_spi0_gpiod_table = {
- .dev_id = "s3c6410-spi.0",
- .table = {
- GPIO_LOOKUP_IDX("GPIOC", 3, "cs", 0, GPIO_ACTIVE_LOW),
- GPIO_LOOKUP_IDX("GPION", 5, "cs", 1, GPIO_ACTIVE_LOW),
- { },
- },
+static const struct software_node_ref_args crag6410_spi0_gpio_refs[] = {
+ SOFTWARE_NODE_REFERENCE(SAMSUNG_GPIO_NODE('C'), 3, GPIO_ACTIVE_LOW),
+ SOFTWARE_NODE_REFERENCE(SAMSUNG_GPIO_NODE('N'), 5, GPIO_ACTIVE_LOW),
+};
+
+static const struct property_entry crag6410_spi0_properties[] __initconst = {
+ PROPERTY_ENTRY_REF_ARRAY("cs-gpios", crag6410_spi0_gpio_refs),
+ { }
+};
+
+static const struct resource crag6410_spi0_resource[] __initconst = {
+ [0] = DEFINE_RES_MEM(S3C_PA_SPI0, SZ_256),
+ [1] = DEFINE_RES_IRQ(IRQ_SPI0),
};
+static const struct s3c64xx_spi_info crag6410_spi0_platform_data __initconst = {
+ .num_cs = 2,
+ .cfg_gpio = s3c64xx_spi0_cfg_gpio,
+};
+
+static const struct platform_device_info crag6410_spi0_info __initconst = {
+ .name = "s3c6410-spi",
+ .id = 0,
+ .res = crag6410_spi0_resource,
+ .num_res = ARRAY_SIZE(crag6410_spi0_resource),
+ .data = &crag6410_spi0_platform_data,
+ .size_data = sizeof(crag6410_spi0_platform_data),
+ .dma_mask = DMA_BIT_MASK(32),
+ .properties = crag6410_spi0_properties,
+};
+
+static void __init crag6410_setup_spi0(void)
+{
+ struct platform_device *pd;
+ int err;
+
+ pd = platform_device_register_full(&crag6410_spi0_info);
+ err = PTR_ERR_OR_ZERO(pd);
+ if (err)
+ pr_err("failed to create spi0 device: %d\n", err);
+}
+
static void __init crag6410_machine_init(void)
{
/* Open drain IRQs need pullups */@@ -928,12 +966,8 @@ static void __init crag6410_machine_init(void)
software_node_register(&crag_dcdc1_swnode);
i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
- gpiod_add_lookup_table(&crag_wm1250_ev1_gpiod_table);
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
- 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_devs0, ARRAY_SIZE(crag6410_devs0));
platform_device_register_full(&crag6410_mmgpio_devinfo);
@@ -941,6 +975,7 @@ static void __init crag6410_machine_init(void)
gpiod_add_lookup_table(&crag_leds_table);
crag6410_setup_keypad();
crag6410_setup_gpio_keys();
+ crag6410_setup_spi0();
platform_add_devices(crag6410_devs1, ARRAY_SIZE(crag6410_devs1));
gpio_led_register_device(-1, &gpio_leds_pdata);
--
2.55.0.795.g602f6c329a-goog