Here is the description about the touchscreen issue:
Platform: Android Gingerbread
OMAP3EVM: RowBoat
OMAP4PANDA: Linaro 11.10
SPI Port: 3.0
SPI Configuration: EVM Default
Controller: TSC2046 (ADS7846)
Touch Screen: 10.1" Resistive
ADS7846 driver code (driver/input/touchscreen/ads7846.c)
I use single interface PCB is used for OMAP3EVM and OMAP4PANDA. In OMAP3EVM, we are able to see the interrupt activity immediately after touching the touchscreen. But 70% of the values from ADS7846 are getting dropped in driver due to the inconsistency by de-bouncing filter(). In OMAP4PANDA, the response to the interrupt is very fast. But the percentage of values getting ignored/dropped is close to 95%. Only a few reaches the user space.
I reduced the SPI Speed from 1.5MHz to 100KHz in step of 100. But no improvement in the values.
There are 2 printk are added in the code:
1. Idx and V are printed from the ads7846_rx_val()
Idx[0] V[4095]
Idx[0] V[2771]
Idx[0] V[3716]
Idx[0] V[3510]
Idx[0] V[1574]
Idx[0] V[3267]
Idx[0] V[3313]
Idx[0] V[2971]
Idx[0] V[2037]
Idx[0] V[3003]
Idx[0] V[3222]
2. X,Y & Rt are printed from the ads7846_rx(), After the Rt calculations.
X(0) Y(26663) P(0)
X(0) Y(16463) P(0)
X(0) Y(51280) P(0)
X(0) Y(14375) P(0)
X(0) Y(36904) P(0)
X(0) Y(41015) P(0)
X(0) Y(34895) P(0)
X(0) Y(55375) P(0)
X(0) Y(51237) P(0)
X(0) Y(61480) P(0)
X(0) Y(16465) P(0)
X(0) Y(32850) P(0)
In the debugging, I found the following:
1. The value from SPI is seems to be in 12Bit range, but before pushing to input layer, the values changed to beyond 12bit range (Like 20000,30000).
2. Sometime Pressure value also goes beyond 255
My Doubts:
1. How to solve the inconsistent in co-ordinate values?
2. Is ADS7846 suitable for big screen (like 10") ?
3. Will it be a hardware issue? Any clue?