Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 70a3550b authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'spi/topic/atmel', 'spi/topic/bcm-qspi',...

Merge remote-tracking branches 'spi/topic/atmel', 'spi/topic/bcm-qspi', 'spi/topic/bcm2835aux', 'spi/topic/dw' and 'spi/topic/gpio' into spi-next
Loading
Loading
Loading
Loading
+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 {
@@ -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>;

+17 −4
Original line number Diff line number Diff line
@@ -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>
@@ -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,
};

@@ -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,
};
@@ -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,
	},
};
@@ -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
+20 −6
Original line number Diff line number Diff line
@@ -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,
};

@@ -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 |
@@ -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	\
@@ -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),	\
}
@@ -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 = {
@@ -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);
}
+32 −23
Original line number Diff line number Diff line
@@ -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>
@@ -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[] = {
@@ -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),
	},
};

@@ -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. */

@@ -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));
}

+19 −7
Original line number Diff line number Diff line
@@ -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>
@@ -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 = {
@@ -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