ARM: tegra: cardhu: Enable Atmel touchscreen
[linux-2.6.git] / arch / arm / mach-tegra / board-cardhu.c
index b28712e..e1b0624 100644 (file)
@@ -34,6 +34,8 @@
 #include <linux/input.h>
 #include <linux/platform_data/tegra_usb.h>
 #include <linux/spi/spi.h>
+#include <linux/i2c/atmel_mxt_ts.h>
+
 #include <mach/clk.h>
 #include <mach/iomap.h>
 #include <mach/irqs.h>
@@ -318,8 +320,71 @@ static struct platform_device *cardhu_devices[] __initdata = {
 #endif
 };
 
+#define MXT_CONFIG_CRC  0xD62DE8
+static const u8 config[] = {
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x32, 0x0A, 0x00, 0x14, 0x14, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x00,
+       0x1B, 0x2A, 0x00, 0x20, 0x3C, 0x04, 0x05, 0x00,
+       0x02, 0x01, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0xFF,
+       0x02, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23,
+       0x00, 0x00, 0x00, 0x05, 0x0A, 0x15, 0x1E, 0x00,
+       0x00, 0x04, 0xFF, 0x03, 0x3F, 0x64, 0x64, 0x01,
+       0x0A, 0x14, 0x28, 0x4B, 0x00, 0x02, 0x00, 0x64,
+       0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x08, 0x10, 0x3C, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static struct mxt_platform_data atmel_mxt_info = {
+       .x_line         = 27,
+       .y_line         = 42,
+       .x_size         = 768,
+       .y_size         = 1366,
+       .blen           = 0x20,
+       .threshold      = 0x3C,
+       .voltage        = 3300000,              /* 3.3V */
+       .orient         = 5,
+       .config         = config,
+       .config_length  = 157,
+       .config_crc     = MXT_CONFIG_CRC,
+       .irqflags       = IRQF_TRIGGER_FALLING,
+/*     .read_chg       = &read_chg, */
+       .read_chg       = NULL,
+};
+
+static struct i2c_board_info __initdata atmel_i2c_info[] = {
+       {
+               I2C_BOARD_INFO("atmel_mxt_ts", 0x5A),
+               .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PH4),
+               .platform_data = &atmel_mxt_info,
+       }
+};
+
 static int __init cardhu_touch_init(void)
 {
+       tegra_gpio_enable(TEGRA_GPIO_PH4);
+       tegra_gpio_enable(TEGRA_GPIO_PH6);
+
+       gpio_request(TEGRA_GPIO_PH4, "atmel-irq");
+       gpio_direction_input(TEGRA_GPIO_PH4);
+
+       gpio_request(TEGRA_GPIO_PH6, "atmel-reset");
+       gpio_direction_output(TEGRA_GPIO_PH6, 0);
+       msleep(1);
+       gpio_set_value(TEGRA_GPIO_PH6, 1);
+       msleep(100);
+
+       i2c_register_board_info(1, atmel_i2c_info, 1);
+
        return 0;
 }