Loading Documentation/devicetree/bindings/spi/spi-gpio.txt +18 −6 Original line number Diff line number Diff line SPI-GPIO devicetree bindings This represents a group of 3-n GPIO lines used for bit-banged SPI on dedicated GPIO lines. Required properties: - compatible: should be set to "spi-gpio" - #address-cells: should be set to <0x1> - ranges - gpio-sck: GPIO spec for the SCK line to use - gpio-miso: GPIO spec for the MISO line to use - gpio-mosi: GPIO spec for the MOSI line to use - sck-gpios: GPIO spec for the SCK line to use - miso-gpios: GPIO spec for the MISO line to use - mosi-gpios: GPIO spec for the MOSI line to use - cs-gpios: GPIOs to use for chipselect lines. Not needed if num-chipselects = <0>. - num-chipselects: Number of chipselect lines. Should be <0> if a single device with no chip select is connected. Deprecated bindings: These legacy GPIO line bindings can alternatively be used to define the GPIO lines used, they should not be used in new device trees. - gpio-sck: GPIO spec for the SCK line to use - gpio-miso: GPIO spec for the MISO line to use - gpio-mosi: GPIO spec for the MOSI line to use Example: spi { Loading @@ -20,9 +32,9 @@ Example: #address-cells = <0x1>; ranges; gpio-sck = <&gpio 95 0>; gpio-miso = <&gpio 98 0>; gpio-mosi = <&gpio 97 0>; sck-gpios = <&gpio 95 0>; miso-gpios = <&gpio 98 0>; mosi-gpios = <&gpio 97 0>; cs-gpios = <&gpio 125 0>; num-chipselects = <1>; Loading arch/arm/mach-pxa/cm-x300.c +17 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <linux/clk.h> #include <linux/gpio.h> #include <linux/gpio/machine.h> #include <linux/dm9000.h> #include <linux/leds.h> #include <linux/platform_data/rtc-v3020.h> Loading Loading @@ -343,9 +344,6 @@ static inline void cm_x300_init_bl(void) {} #define LCD_SPI_BUS_NUM (1) static struct spi_gpio_platform_data cm_x300_spi_gpio_pdata = { .sck = GPIO_LCD_SCL, .mosi = GPIO_LCD_DIN, .miso = GPIO_LCD_DOUT, .num_chipselect = 1, }; Loading @@ -357,6 +355,21 @@ static struct platform_device cm_x300_spi_gpio = { }, }; static struct gpiod_lookup_table cm_x300_spi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("gpio-pxa", GPIO_LCD_SCL, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-pxa", GPIO_LCD_DIN, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-pxa", GPIO_LCD_DOUT, "miso", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-pxa", GPIO_LCD_CS, "cs", GPIO_ACTIVE_HIGH), { }, }, }; static struct tdo24m_platform_data cm_x300_tdo24m_pdata = { .model = TDO35S, }; Loading @@ -367,7 +380,6 @@ static struct spi_board_info cm_x300_spi_devices[] __initdata = { .max_speed_hz = 1000000, .bus_num = LCD_SPI_BUS_NUM, .chip_select = 0, .controller_data = (void *) GPIO_LCD_CS, .platform_data = &cm_x300_tdo24m_pdata, }, }; Loading @@ -376,6 +388,7 @@ static void __init cm_x300_init_spi(void) { spi_register_board_info(cm_x300_spi_devices, ARRAY_SIZE(cm_x300_spi_devices)); gpiod_add_lookup_table(&cm_x300_spi_gpiod_table); platform_device_register(&cm_x300_spi_gpio); } #else Loading arch/arm/mach-pxa/raumfeld.c +20 −6 Original line number Diff line number Diff line Loading @@ -646,9 +646,6 @@ static void __init raumfeld_lcd_init(void) */ static struct spi_gpio_platform_data raumfeld_spi_platform_data = { .sck = GPIO_SPI_CLK, .mosi = GPIO_SPI_MOSI, .miso = GPIO_SPI_MISO, .num_chipselect = 3, }; Loading @@ -660,6 +657,25 @@ static struct platform_device raumfeld_spi_device = { } }; static struct gpiod_lookup_table raumfeld_spi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("gpio-0", GPIO_SPI_CLK, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-0", GPIO_SPI_MOSI, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-0", GPIO_SPI_MISO, "miso", GPIO_ACTIVE_HIGH), GPIO_LOOKUP_IDX("gpio-0", GPIO_SPDIF_CS, "cs", 0, GPIO_ACTIVE_HIGH), GPIO_LOOKUP_IDX("gpio-0", GPIO_ACCEL_CS, "cs", 1, GPIO_ACTIVE_HIGH), GPIO_LOOKUP_IDX("gpio-0", GPIO_MCLK_DAC_CS, "cs", 2, GPIO_ACTIVE_HIGH), { }, }, }; static struct lis3lv02d_platform_data lis3_pdata = { .click_flags = LIS3_CLICK_SINGLE_X | LIS3_CLICK_SINGLE_Y | Loading @@ -680,7 +696,6 @@ static struct lis3lv02d_platform_data lis3_pdata = { .max_speed_hz = 10000, \ .bus_num = 0, \ .chip_select = 0, \ .controller_data = (void *) GPIO_SPDIF_CS, \ } #define SPI_LIS3 \ Loading @@ -689,7 +704,6 @@ static struct lis3lv02d_platform_data lis3_pdata = { .max_speed_hz = 1000000, \ .bus_num = 0, \ .chip_select = 1, \ .controller_data = (void *) GPIO_ACCEL_CS, \ .platform_data = &lis3_pdata, \ .irq = PXA_GPIO_TO_IRQ(GPIO_ACCEL_IRQ), \ } Loading @@ -700,7 +714,6 @@ static struct lis3lv02d_platform_data lis3_pdata = { .max_speed_hz = 1000000, \ .bus_num = 0, \ .chip_select = 2, \ .controller_data = (void *) GPIO_MCLK_DAC_CS, \ } static struct spi_board_info connector_spi_devices[] __initdata = { Loading Loading @@ -1066,6 +1079,7 @@ static void __init raumfeld_common_init(void) else gpio_direction_output(GPIO_SHUTDOWN_SUPPLY, 0); gpiod_add_lookup_table(&raumfeld_spi_gpiod_table); platform_add_devices(ARRAY_AND_SIZE(raumfeld_common_devices)); i2c_register_board_info(1, &raumfeld_pwri2c_board_info, 1); } Loading arch/arm/mach-s3c24xx/mach-jive.c +32 −23 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/timer.h> #include <linux/init.h> #include <linux/gpio.h> #include <linux/gpio/machine.h> #include <linux/syscore_ops.h> #include <linux/serial_core.h> #include <linux/serial_s3c.h> Loading Loading @@ -388,32 +389,53 @@ static struct ili9320_platdata jive_lcm_config = { /* LCD SPI support */ static struct spi_gpio_platform_data jive_lcd_spi = { .sck = S3C2410_GPG(8), .mosi = S3C2410_GPB(8), .miso = SPI_GPIO_NO_MISO, .num_chipselect = 1, }; static struct platform_device jive_device_lcdspi = { .name = "spi-gpio", .name = "spi_gpio", .id = 1, .dev.platform_data = &jive_lcd_spi, }; static struct gpiod_lookup_table jive_lcdspi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("GPIOG", 8, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 8, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 7, "cs", GPIO_ACTIVE_HIGH), { }, }, }; /* WM8750 audio code SPI definition */ static struct spi_gpio_platform_data jive_wm8750_spi = { .sck = S3C2410_GPB(4), .mosi = S3C2410_GPB(9), .miso = SPI_GPIO_NO_MISO, .num_chipselect = 1, }; static struct platform_device jive_device_wm8750 = { .name = "spi-gpio", .name = "spi_gpio", .id = 2, .dev.platform_data = &jive_wm8750_spi, }; static struct gpiod_lookup_table jive_wm8750_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("GPIOB", 4, "gpio-sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 9, "gpio-mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOH", 10, "cs", GPIO_ACTIVE_HIGH), { }, }, }; /* JIVE SPI devices. */ static struct spi_board_info __initdata jive_spi_devs[] = { Loading @@ -424,14 +446,12 @@ static struct spi_board_info __initdata jive_spi_devs[] = { .mode = SPI_MODE_3, /* CPOL=1, CPHA=1 */ .max_speed_hz = 100000, .platform_data = &jive_lcm_config, .controller_data = (void *)S3C2410_GPB(7), }, { .modalias = "WM8750", .bus_num = 2, .chip_select = 0, .mode = SPI_MODE_0, /* CPOL=0, CPHA=0 */ .max_speed_hz = 100000, .controller_data = (void *)S3C2410_GPH(10), }, }; Loading Loading @@ -619,25 +639,12 @@ static void __init jive_machine_init(void) /** TODO - check that this is after the cmdline option! */ s3c_nand_set_platdata(&jive_nand_info); /* initialise the spi */ gpio_request(S3C2410_GPG(13), "lcm reset"); gpio_direction_output(S3C2410_GPG(13), 0); gpio_request(S3C2410_GPB(7), "jive spi"); gpio_direction_output(S3C2410_GPB(7), 1); gpio_request_one(S3C2410_GPB(6), GPIOF_OUT_INIT_LOW, NULL); gpio_free(S3C2410_GPB(6)); gpio_request_one(S3C2410_GPG(8), GPIOF_OUT_INIT_HIGH, NULL); gpio_free(S3C2410_GPG(8)); /* initialise the WM8750 spi */ gpio_request(S3C2410_GPH(10), "jive wm8750 spi"); gpio_direction_output(S3C2410_GPH(10), 1); /* Turn off suspend on both USB ports, and switch the * selectable USB port to USB device mode. */ Loading @@ -655,6 +662,8 @@ static void __init jive_machine_init(void) pm_power_off = jive_power_off; gpiod_add_lookup_table(&jive_lcdspi_gpiod_table); gpiod_add_lookup_table(&jive_wm8750_gpiod_table); platform_add_devices(jive_devices, ARRAY_SIZE(jive_devices)); } Loading arch/arm/mach-s3c24xx/mach-qt2410.c +19 −7 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include <linux/timer.h> #include <linux/init.h> #include <linux/gpio.h> #include <linux/gpio/machine.h> #include <linux/device.h> #include <linux/platform_device.h> #include <linux/serial_core.h> Loading Loading @@ -194,17 +195,30 @@ static struct platform_device qt2410_led = { /* SPI */ static struct spi_gpio_platform_data spi_gpio_cfg = { .sck = S3C2410_GPG(7), .mosi = S3C2410_GPG(6), .miso = S3C2410_GPG(5), .num_chipselect = 1, }; static struct platform_device qt2410_spi = { .name = "spi-gpio", .name = "spi_gpio", .id = 1, .dev.platform_data = &spi_gpio_cfg, }; static struct gpiod_lookup_table qt2410_spi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("GPIOG", 7, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOG", 6, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOG", 5, "miso", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 5, "cs", GPIO_ACTIVE_HIGH), { }, }, }; /* Board devices */ static struct platform_device *qt2410_devices[] __initdata = { Loading Loading @@ -323,9 +337,7 @@ static void __init qt2410_machine_init(void) s3c24xx_udc_set_platdata(&qt2410_udc_cfg); s3c_i2c0_set_platdata(NULL); WARN_ON(gpio_request(S3C2410_GPB(5), "spi cs")); gpio_direction_output(S3C2410_GPB(5), 1); gpiod_add_lookup_table(&qt2410_spi_gpiod_table); platform_add_devices(qt2410_devices, ARRAY_SIZE(qt2410_devices)); s3c_pm_init(); } Loading Loading
Documentation/devicetree/bindings/spi/spi-gpio.txt +18 −6 Original line number Diff line number Diff line SPI-GPIO devicetree bindings This represents a group of 3-n GPIO lines used for bit-banged SPI on dedicated GPIO lines. Required properties: - compatible: should be set to "spi-gpio" - #address-cells: should be set to <0x1> - ranges - gpio-sck: GPIO spec for the SCK line to use - gpio-miso: GPIO spec for the MISO line to use - gpio-mosi: GPIO spec for the MOSI line to use - sck-gpios: GPIO spec for the SCK line to use - miso-gpios: GPIO spec for the MISO line to use - mosi-gpios: GPIO spec for the MOSI line to use - cs-gpios: GPIOs to use for chipselect lines. Not needed if num-chipselects = <0>. - num-chipselects: Number of chipselect lines. Should be <0> if a single device with no chip select is connected. Deprecated bindings: These legacy GPIO line bindings can alternatively be used to define the GPIO lines used, they should not be used in new device trees. - gpio-sck: GPIO spec for the SCK line to use - gpio-miso: GPIO spec for the MISO line to use - gpio-mosi: GPIO spec for the MOSI line to use Example: spi { Loading @@ -20,9 +32,9 @@ Example: #address-cells = <0x1>; ranges; gpio-sck = <&gpio 95 0>; gpio-miso = <&gpio 98 0>; gpio-mosi = <&gpio 97 0>; sck-gpios = <&gpio 95 0>; miso-gpios = <&gpio 98 0>; mosi-gpios = <&gpio 97 0>; cs-gpios = <&gpio 125 0>; num-chipselects = <1>; Loading
arch/arm/mach-pxa/cm-x300.c +17 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <linux/clk.h> #include <linux/gpio.h> #include <linux/gpio/machine.h> #include <linux/dm9000.h> #include <linux/leds.h> #include <linux/platform_data/rtc-v3020.h> Loading Loading @@ -343,9 +344,6 @@ static inline void cm_x300_init_bl(void) {} #define LCD_SPI_BUS_NUM (1) static struct spi_gpio_platform_data cm_x300_spi_gpio_pdata = { .sck = GPIO_LCD_SCL, .mosi = GPIO_LCD_DIN, .miso = GPIO_LCD_DOUT, .num_chipselect = 1, }; Loading @@ -357,6 +355,21 @@ static struct platform_device cm_x300_spi_gpio = { }, }; static struct gpiod_lookup_table cm_x300_spi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("gpio-pxa", GPIO_LCD_SCL, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-pxa", GPIO_LCD_DIN, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-pxa", GPIO_LCD_DOUT, "miso", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-pxa", GPIO_LCD_CS, "cs", GPIO_ACTIVE_HIGH), { }, }, }; static struct tdo24m_platform_data cm_x300_tdo24m_pdata = { .model = TDO35S, }; Loading @@ -367,7 +380,6 @@ static struct spi_board_info cm_x300_spi_devices[] __initdata = { .max_speed_hz = 1000000, .bus_num = LCD_SPI_BUS_NUM, .chip_select = 0, .controller_data = (void *) GPIO_LCD_CS, .platform_data = &cm_x300_tdo24m_pdata, }, }; Loading @@ -376,6 +388,7 @@ static void __init cm_x300_init_spi(void) { spi_register_board_info(cm_x300_spi_devices, ARRAY_SIZE(cm_x300_spi_devices)); gpiod_add_lookup_table(&cm_x300_spi_gpiod_table); platform_device_register(&cm_x300_spi_gpio); } #else Loading
arch/arm/mach-pxa/raumfeld.c +20 −6 Original line number Diff line number Diff line Loading @@ -646,9 +646,6 @@ static void __init raumfeld_lcd_init(void) */ static struct spi_gpio_platform_data raumfeld_spi_platform_data = { .sck = GPIO_SPI_CLK, .mosi = GPIO_SPI_MOSI, .miso = GPIO_SPI_MISO, .num_chipselect = 3, }; Loading @@ -660,6 +657,25 @@ static struct platform_device raumfeld_spi_device = { } }; static struct gpiod_lookup_table raumfeld_spi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("gpio-0", GPIO_SPI_CLK, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-0", GPIO_SPI_MOSI, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("gpio-0", GPIO_SPI_MISO, "miso", GPIO_ACTIVE_HIGH), GPIO_LOOKUP_IDX("gpio-0", GPIO_SPDIF_CS, "cs", 0, GPIO_ACTIVE_HIGH), GPIO_LOOKUP_IDX("gpio-0", GPIO_ACCEL_CS, "cs", 1, GPIO_ACTIVE_HIGH), GPIO_LOOKUP_IDX("gpio-0", GPIO_MCLK_DAC_CS, "cs", 2, GPIO_ACTIVE_HIGH), { }, }, }; static struct lis3lv02d_platform_data lis3_pdata = { .click_flags = LIS3_CLICK_SINGLE_X | LIS3_CLICK_SINGLE_Y | Loading @@ -680,7 +696,6 @@ static struct lis3lv02d_platform_data lis3_pdata = { .max_speed_hz = 10000, \ .bus_num = 0, \ .chip_select = 0, \ .controller_data = (void *) GPIO_SPDIF_CS, \ } #define SPI_LIS3 \ Loading @@ -689,7 +704,6 @@ static struct lis3lv02d_platform_data lis3_pdata = { .max_speed_hz = 1000000, \ .bus_num = 0, \ .chip_select = 1, \ .controller_data = (void *) GPIO_ACCEL_CS, \ .platform_data = &lis3_pdata, \ .irq = PXA_GPIO_TO_IRQ(GPIO_ACCEL_IRQ), \ } Loading @@ -700,7 +714,6 @@ static struct lis3lv02d_platform_data lis3_pdata = { .max_speed_hz = 1000000, \ .bus_num = 0, \ .chip_select = 2, \ .controller_data = (void *) GPIO_MCLK_DAC_CS, \ } static struct spi_board_info connector_spi_devices[] __initdata = { Loading Loading @@ -1066,6 +1079,7 @@ static void __init raumfeld_common_init(void) else gpio_direction_output(GPIO_SHUTDOWN_SUPPLY, 0); gpiod_add_lookup_table(&raumfeld_spi_gpiod_table); platform_add_devices(ARRAY_AND_SIZE(raumfeld_common_devices)); i2c_register_board_info(1, &raumfeld_pwri2c_board_info, 1); } Loading
arch/arm/mach-s3c24xx/mach-jive.c +32 −23 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/timer.h> #include <linux/init.h> #include <linux/gpio.h> #include <linux/gpio/machine.h> #include <linux/syscore_ops.h> #include <linux/serial_core.h> #include <linux/serial_s3c.h> Loading Loading @@ -388,32 +389,53 @@ static struct ili9320_platdata jive_lcm_config = { /* LCD SPI support */ static struct spi_gpio_platform_data jive_lcd_spi = { .sck = S3C2410_GPG(8), .mosi = S3C2410_GPB(8), .miso = SPI_GPIO_NO_MISO, .num_chipselect = 1, }; static struct platform_device jive_device_lcdspi = { .name = "spi-gpio", .name = "spi_gpio", .id = 1, .dev.platform_data = &jive_lcd_spi, }; static struct gpiod_lookup_table jive_lcdspi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("GPIOG", 8, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 8, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 7, "cs", GPIO_ACTIVE_HIGH), { }, }, }; /* WM8750 audio code SPI definition */ static struct spi_gpio_platform_data jive_wm8750_spi = { .sck = S3C2410_GPB(4), .mosi = S3C2410_GPB(9), .miso = SPI_GPIO_NO_MISO, .num_chipselect = 1, }; static struct platform_device jive_device_wm8750 = { .name = "spi-gpio", .name = "spi_gpio", .id = 2, .dev.platform_data = &jive_wm8750_spi, }; static struct gpiod_lookup_table jive_wm8750_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("GPIOB", 4, "gpio-sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 9, "gpio-mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOH", 10, "cs", GPIO_ACTIVE_HIGH), { }, }, }; /* JIVE SPI devices. */ static struct spi_board_info __initdata jive_spi_devs[] = { Loading @@ -424,14 +446,12 @@ static struct spi_board_info __initdata jive_spi_devs[] = { .mode = SPI_MODE_3, /* CPOL=1, CPHA=1 */ .max_speed_hz = 100000, .platform_data = &jive_lcm_config, .controller_data = (void *)S3C2410_GPB(7), }, { .modalias = "WM8750", .bus_num = 2, .chip_select = 0, .mode = SPI_MODE_0, /* CPOL=0, CPHA=0 */ .max_speed_hz = 100000, .controller_data = (void *)S3C2410_GPH(10), }, }; Loading Loading @@ -619,25 +639,12 @@ static void __init jive_machine_init(void) /** TODO - check that this is after the cmdline option! */ s3c_nand_set_platdata(&jive_nand_info); /* initialise the spi */ gpio_request(S3C2410_GPG(13), "lcm reset"); gpio_direction_output(S3C2410_GPG(13), 0); gpio_request(S3C2410_GPB(7), "jive spi"); gpio_direction_output(S3C2410_GPB(7), 1); gpio_request_one(S3C2410_GPB(6), GPIOF_OUT_INIT_LOW, NULL); gpio_free(S3C2410_GPB(6)); gpio_request_one(S3C2410_GPG(8), GPIOF_OUT_INIT_HIGH, NULL); gpio_free(S3C2410_GPG(8)); /* initialise the WM8750 spi */ gpio_request(S3C2410_GPH(10), "jive wm8750 spi"); gpio_direction_output(S3C2410_GPH(10), 1); /* Turn off suspend on both USB ports, and switch the * selectable USB port to USB device mode. */ Loading @@ -655,6 +662,8 @@ static void __init jive_machine_init(void) pm_power_off = jive_power_off; gpiod_add_lookup_table(&jive_lcdspi_gpiod_table); gpiod_add_lookup_table(&jive_wm8750_gpiod_table); platform_add_devices(jive_devices, ARRAY_SIZE(jive_devices)); } Loading
arch/arm/mach-s3c24xx/mach-qt2410.c +19 −7 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include <linux/timer.h> #include <linux/init.h> #include <linux/gpio.h> #include <linux/gpio/machine.h> #include <linux/device.h> #include <linux/platform_device.h> #include <linux/serial_core.h> Loading Loading @@ -194,17 +195,30 @@ static struct platform_device qt2410_led = { /* SPI */ static struct spi_gpio_platform_data spi_gpio_cfg = { .sck = S3C2410_GPG(7), .mosi = S3C2410_GPG(6), .miso = S3C2410_GPG(5), .num_chipselect = 1, }; static struct platform_device qt2410_spi = { .name = "spi-gpio", .name = "spi_gpio", .id = 1, .dev.platform_data = &spi_gpio_cfg, }; static struct gpiod_lookup_table qt2410_spi_gpiod_table = { .dev_id = "spi_gpio", .table = { GPIO_LOOKUP("GPIOG", 7, "sck", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOG", 6, "mosi", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOG", 5, "miso", GPIO_ACTIVE_HIGH), GPIO_LOOKUP("GPIOB", 5, "cs", GPIO_ACTIVE_HIGH), { }, }, }; /* Board devices */ static struct platform_device *qt2410_devices[] __initdata = { Loading Loading @@ -323,9 +337,7 @@ static void __init qt2410_machine_init(void) s3c24xx_udc_set_platdata(&qt2410_udc_cfg); s3c_i2c0_set_platdata(NULL); WARN_ON(gpio_request(S3C2410_GPB(5), "spi cs")); gpio_direction_output(S3C2410_GPB(5), 1); gpiod_add_lookup_table(&qt2410_spi_gpiod_table); platform_add_devices(qt2410_devices, ARRAY_SIZE(qt2410_devices)); s3c_pm_init(); } Loading