aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaleb Connolly <caleb@connolly.tech>2021-03-07 15:12:22 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2021-03-07 15:14:25 -0800
commit30b3f68715595dee7fe4d9bd91a2252c3becdf0a (patch)
treed1adeb853c8c92e7ae28a2826437b40c1ac592af
parentInput: st1232 - fix NORMAL vs. IDLE state handling (diff)
downloadlinux-dev-30b3f68715595dee7fe4d9bd91a2252c3becdf0a.tar.xz
linux-dev-30b3f68715595dee7fe4d9bd91a2252c3becdf0a.zip
Input: s6sy761 - fix coordinate read bit shift
The touch coordinate register contains the following: byte 3 byte 2 byte 1 +--------+--------+ +-----------------+ +-----------------+ | | | | | | | | X[3:0] | Y[3:0] | | Y[11:4] | | X[11:4] | | | | | | | | +--------+--------+ +-----------------+ +-----------------+ Bytes 2 and 1 need to be shifted left by 4 bits, the least significant nibble of each is stored in byte 3. Currently they are only being shifted by 3 causing the reported coordinates to be incorrect. This matches downstream examples, and has been confirmed on my device (OnePlus 7 Pro). Fixes: 0145a7141e59 ("Input: add support for the Samsung S6SY761 touchscreen") Signed-off-by: Caleb Connolly <caleb@connolly.tech> Reviewed-by: Andi Shyti <andi@etezian.org> Link: https://lore.kernel.org/r/20210305185710.225168-1-caleb@connolly.tech Cc: stable@vger.kernel.org Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/touchscreen/s6sy761.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/input/touchscreen/s6sy761.c b/drivers/input/touchscreen/s6sy761.c
index b63d7fdf0cd2..85a1f465c097 100644
--- a/drivers/input/touchscreen/s6sy761.c
+++ b/drivers/input/touchscreen/s6sy761.c
@@ -145,8 +145,8 @@ static void s6sy761_report_coordinates(struct s6sy761_data *sdata,
u8 major = event[4];
u8 minor = event[5];
u8 z = event[6] & S6SY761_MASK_Z;
- u16 x = (event[1] << 3) | ((event[3] & S6SY761_MASK_X) >> 4);
- u16 y = (event[2] << 3) | (event[3] & S6SY761_MASK_Y);
+ u16 x = (event[1] << 4) | ((event[3] & S6SY761_MASK_X) >> 4);
+ u16 y = (event[2] << 4) | (event[3] & S6SY761_MASK_Y);
input_mt_slot(sdata->input, tid);