Thread (5 messages) 5 messages, 2 authors, 2015-07-23

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

From: Chen Bough <hidden>
Date: 2015-07-23 08:28:24

Hi Igor,

The patch you attached is okay for me. But I suggest to explain this issue more clearly.
Actually it is not a no clear reason. i.MX6 platform SPI driver set MOSI and MISO in high 
level. You can refer to my patch log.

Best Regards
Haibo Chen

-----Original Message-----
From: Igor Grinberg [mailto:grinberg@compulab.co.il]
Sent: Tuesday, July 21, 2015 7:53 PM
To: Chen Haibo-B51421; dmitry.torokhov@gmail.com
Cc: jg1.han@samsung.com; pramod.gurav@smartplayin.com; linux-
input@vger.kernel.org
Subject: Re: [PATCH] Input: ads7846 - correct the value get from SPI

Hi,

On 05/22/15 10:02, Haibo Chen wrote:
quoted
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 <redacted>
---
 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)
quoted
 		 * 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;
IIRC, 7845 is the same in regard to SPI bus, so may be we should also
adjust the value in if statement, not just the else part.

We have the attached patch locally, so may you would like to consider it
or a mixture of both...


--
Regards,
Igor.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help