| From a05e8e85678d654d2d52838173c54b721417c9b1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 11 Nov 2020 17:17:11 -0800 |
| Subject: Input: ads7846 - fix unaligned access on 7845 |
| |
| From: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| |
| [ Upstream commit 03e2c9c782f721b661a0e42b1b58f394b5298544 ] |
| |
| req->sample[1] is not naturally aligned at word boundary, and therefore we |
| should use get_unaligned_be16() when accessing it. |
| |
| Fixes: 3eac5c7e44f3 ("Input: ads7846 - extend the driver for ads7845 controller support") |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/input/touchscreen/ads7846.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c |
| index 78ed285c27ae3..ff97897feaf2a 100644 |
| --- a/drivers/input/touchscreen/ads7846.c |
| +++ b/drivers/input/touchscreen/ads7846.c |
| @@ -33,6 +33,7 @@ |
| #include <linux/regulator/consumer.h> |
| #include <linux/module.h> |
| #include <asm/irq.h> |
| +#include <asm/unaligned.h> |
| |
| /* |
| * This code has been heavily tested on a Nokia 770, and lightly |
| @@ -435,7 +436,7 @@ static int ads7845_read12_ser(struct device *dev, unsigned command) |
| |
| if (status == 0) { |
| /* BE12 value, then padding */ |
| - status = be16_to_cpu(*((u16 *)&req->sample[1])); |
| + status = get_unaligned_be16(&req->sample[1]); |
| status = status >> 3; |
| status &= 0x0fff; |
| } |
| -- |
| 2.27.0 |
| |