浏览代码

ARM: OMAP: Add bitbank SPI driver for Innovator 1510 touchscreen

Add bitbang SPI driver for Innovator 1510 touchscreen, using the new
framework.  Compile-tested only.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Tony Lindgren <tony@atomide.com>
David Brownell 19 年之前
父节点
当前提交
c15e5d10b1
共有 1 个文件被更改,包括 36 次插入0 次删除
  1. 36 0
      arch/arm/mach-omap1/board-innovator.c

+ 36 - 0
arch/arm/mach-omap1/board-innovator.c

@@ -177,6 +177,10 @@ static struct platform_device innovator_kp_device = {
 
 
 #ifdef CONFIG_ARCH_OMAP15XX
 #ifdef CONFIG_ARCH_OMAP15XX
 
 
+#include <linux/spi/spi.h>
+#include <linux/spi/ads7846.h>
+
+
 /* Only FPGA needs to be mapped here. All others are done with ioremap */
 /* Only FPGA needs to be mapped here. All others are done with ioremap */
 static struct map_desc innovator1510_io_desc[] __initdata = {
 static struct map_desc innovator1510_io_desc[] __initdata = {
 	{
 	{
@@ -212,14 +216,44 @@ static struct platform_device innovator1510_lcd_device = {
 	.id		= -1,
 	.id		= -1,
 };
 };
 
 
+static struct platform_device innovator1510_spi_device = {
+	.name		= "spi_inn1510",
+	.id		= -1,
+};
+
 static struct platform_device *innovator1510_devices[] __initdata = {
 static struct platform_device *innovator1510_devices[] __initdata = {
 	&innovator_flash_device,
 	&innovator_flash_device,
 	&innovator1510_smc91x_device,
 	&innovator1510_smc91x_device,
 	&innovator_mcbsp1_device,
 	&innovator_mcbsp1_device,
 	&innovator_kp_device,
 	&innovator_kp_device,
 	&innovator1510_lcd_device,
 	&innovator1510_lcd_device,
+	&innovator1510_spi_device,
 };
 };
 
 
+static int innovator_get_pendown_state(void)
+{
+	return !(fpga_read(OMAP1510_FPGA_TOUCHSCREEN) & (1 << 5));
+}
+
+static const struct ads7846_platform_data innovator1510_ts_info = {
+	.model			= 7846,
+	.vref_delay_usecs	= 100,	/* internal, no capacitor */
+	.x_plate_ohms		= 419,
+	.y_plate_ohms		= 486,
+	.get_pendown_state	= innovator_get_pendown_state,
+};
+
+static struct spi_board_info __initdata innovator1510_boardinfo[] = { {
+	/* FPGA (bus "10") CS0 has an ads7846e */
+	.modalias		= "ads7846",
+	.platform_data		= &innovator1510_ts_info,
+	.irq			= OMAP1510_INT_FPGA_TS,
+	.max_speed_hz		= 120000 /* max sample rate at 3V */
+					* 26 /* command + data + overhead */,
+	.bus_num		= 10,
+	.chip_select		= 0,
+} };
+
 #endif /* CONFIG_ARCH_OMAP15XX */
 #endif /* CONFIG_ARCH_OMAP15XX */
 
 
 #ifdef CONFIG_ARCH_OMAP16XX
 #ifdef CONFIG_ARCH_OMAP16XX
@@ -350,6 +384,8 @@ static void __init innovator_init(void)
 #ifdef CONFIG_ARCH_OMAP15XX
 #ifdef CONFIG_ARCH_OMAP15XX
 	if (cpu_is_omap1510()) {
 	if (cpu_is_omap1510()) {
 		platform_add_devices(innovator1510_devices, ARRAY_SIZE(innovator1510_devices));
 		platform_add_devices(innovator1510_devices, ARRAY_SIZE(innovator1510_devices));
+		spi_register_board_info(innovator1510_boardinfo,
+				ARRAY_SIZE(innovator1510_boardinfo));
 	}
 	}
 #endif
 #endif
 #ifdef CONFIG_ARCH_OMAP16XX
 #ifdef CONFIG_ARCH_OMAP16XX