[PATCH] Input: ads7846 - correct the value get from SPI

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux