According to the touch controller SPEC, SPI return a 16 bit value, only 12 bits are valid, they are bit[14-3]. The value of MISO and MOSI can be configed when SPI in idle mode. Currently this touch driver consider the SPI bus set the MOSI and MISO in low level when SPI bus in idle mode. So the bit[15] of the value get from SPI bus is always 0. But when SPI bus congfig the MOSI and MISO in high level when SPI in idle mode, the bit[15] of the value get from SPI is always 1, if not mask this bit[15], we may get the wrong value. This patch mask the invalid bit, and make sure to return the correct value nomatter how SPI bus configed. Signed-off-by: Haibo Chen <haibo.chen@xxxxxxxxxxxxx> --- drivers/input/touchscreen/ads7846.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c index e4eb8a6..91b335f 100644 --- a/drivers/input/touchscreen/ads7846.c +++ b/drivers/input/touchscreen/ads7846.c @@ -678,7 +678,7 @@ static int ads7846_get_value(struct ads7846 *ts, struct spi_message *m) * adjust: on-wire is a must-ignore bit, a BE12 value, then * padding; built from two 8 bit values written msb-first. */ - return be16_to_cpup((__be16 *)t->rx_buf) >> 3; + return (be16_to_cpup((__be16 *)t->rx_buf) & 0x7ff8) >> 3; } } -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html