NOTICE: The Processors Wiki will End-of-Life on January 15, 2021. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.
TI81XX PSP TouchScreen Driver Guide
TI81XX refers to TI816X, TI814X and TI813X.
Contents
DM814X Touch Screen
[edit]
Atmel mXT224 Touch Screen is used in the DM814X evm.
Overview of mXT224
[edit]
The mXT224 (AT42QT602240) uses a unique charge-transfer acquisition engine to implement the QMatrixTM capacitive sensing method patented by Atmel®. This allows the measurement of up to 224 mutual capacitance nodes in under 1 ms. Coupled with a state-of-the-art XMEGATM CPU, the entire touchscreen sensing solution can measure, classify and track a single finger touch every 4 ms if required.
Touch Screen Features
[edit]
- 12-bit multi-touch with independent XY tracking for up to 10 concurrent touches in real time with touch size reporting
- Up to 4.3 inch diagonal screen size supported with 10 mm “pinch” separation
- Up to 224 channels (subject to other configuration limitations)
- Maximum single touch >250Hz, subject to configuration
- Initial latency <10 ms for first touch from idle, subject to configuration
- I2C-compatible slave mode 400 kHz
INTERFACE DETAILS[edit]
LCD BackLight POWER
- LCD_PWR_DOWN
LCD Backlight Power is controlled through IO Expander Module PORT0 (PCF8575) on the i2c0 bus.
I2C Interface
- CENT_I2C0_SDA
- CENT_I2C0_SCLK
Transfers to/from the ATMEL controller take place on the I2C0 Interface
GPIO Interrupt
- GPIO0_31 (GPIO module 0, 31th pin)
Atmel Controller notifies the processor using the GPIO line.
Basic Operation:
[edit]
Whenever there is a pen touch, the ATMEL controller would pull down the GPIO (GPIO0 31) line. The controller then has to acknowledge by reading the data(I2C) from the Controller. Once the data has been read, the GPIO would again go to high.
TouchScreen Device Information[edit]
- LCD Power Setup
Add the IO Expander device in the I2C board info structure (arch/arm/mach-omap2/board-ti8148evm.c) .
static struct i2c_board_info __initdata ti814x_i2c_boardinfo[] = { { ................ ............. I2C_BOARD_INFO("pcf8575", 0x21), .platform_data = &io_expander_data, } };
Set the GPIO base for Expander module and provide a call back function to do platform specific IO Expander module Setup
static struct pcf857x_platform_data io_expander_data = { .gpio_base = 4 * 32, .setup = setup_gpio_ioexp, };
Enable the LCD power by making it low.
static int __init setup_gpio_ioexp(struct i2c_client *client, int gpio, unsigned ngpio, void *context) { int ret = 0; ret = gpio_request(gpio, "lcd_power"); if (ret) { printk(KERN_ERR "%s: failed to request GPIO for LCD Power" ": %d\n", __func__, ret); return ret; } gpio_export(gpio, true); gpio_direction_output(gpio, 0); return 0; }
- Touch Screen GPIO Setup
Add the Touch Screen driver in the I2C board info structure
static struct i2c_board_info __initdata ti814x_i2c_boardinfo[] = { ............... ................ { I2C_BOARD_INFO("qt602240_ts", 0x4A), .platform_data = &ts_platform_data, }, };
Configure the GPIO0 31 as an input
static void __init ti814x_evm_i2c_init(void) { ...................... ....................... ti814x_tsc_init(); }
static void __init ti814x_tsc_init(void) { int +error; omap_mux_init_signal("mlb_clk.gpio0_31", TI814X_PULL_DIS | (1 << 18)); error = gpio_request(GPIO_TSC, "ts_irq"); if (error < 0) { printk(KERN_ERR "%s: failed to request GPIO for TSC IRQ" ": %d\n", __func__, error); return; } gpio_direction_input(GPIO_TSC); ti814x_i2c_boardinfo[5].irq = gpio_to_irq(GPIO_TSC); gpio_export(31, true); }