forked from luck/tmp_suning_uos_patched
Input: s6sy761 - fix coordinate read bit shift
commit 30b3f68715595dee7fe4d9bd91a2252c3becdf0a upstream.
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: 0145a7141e
("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
955da2b5cd
commit
8b978750dc
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user