| From 6f316bc88f43d2ce81c343fe861526838cab3ebf 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 9fa7ae12df80a..b77a2178fdec4 100644 |
| --- a/drivers/input/touchscreen/ads7846.c |
| +++ b/drivers/input/touchscreen/ads7846.c |
| @@ -35,6 +35,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 |
| @@ -410,7 +411,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 |
| |