From mboxrd@z Thu Jan 1 00:00:00 1970 From: akpm@linux-foundation.org Subject: [patch 12/22] input: bcm5974: declare alignment usage Date: Wed, 04 Mar 2009 11:59:01 -0800 Message-ID: <200903041959.n24Jx2D6028440@imap1.linux-foundation.org> Return-path: Received: from smtp1.linux-foundation.org ([140.211.169.13]:45389 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756068AbZCDT7j (ORCPT ); Wed, 4 Mar 2009 14:59:39 -0500 Sender: linux-input-owner@vger.kernel.org List-Id: linux-input@vger.kernel.org To: dtor@mail.ru Cc: linux-input@vger.kernel.org, akpm@linux-foundation.org, rydberg@euromail.se From: "Henrik Rydberg" Add struct alignment information and add comments to ensure all access of finger data is two-byte aligned. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Henrik Rydberg Cc: Dmitry Torokhov Signed-off-by: Andrew Morton --- drivers/input/mouse/bcm5974.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff -puN drivers/input/mouse/bcm5974.c~input-bcm5974-declare-alignment-usage drivers/input/mouse/bcm5974.c --- a/drivers/input/mouse/bcm5974.c~input-bcm5974-declare-alignment-usage +++ a/drivers/input/mouse/bcm5974.c @@ -110,17 +110,17 @@ enum tp_type { TYPE2 /* button integrated in trackpad */ }; -/* trackpad finger data offsets */ -#define FINGER_TYPE1 26 -#define FINGER_TYPE2 30 +/* trackpad finger data offsets, le16-aligned */ +#define FINGER_TYPE1 (13 * sizeof(__le16)) +#define FINGER_TYPE2 (15 * sizeof(__le16)) -/* trackpad button data offsets */ +/* trackpad button data offsets, u8-aligned */ #define BUTTON_TYPE2 15 /* integrated button capability by configuration */ #define HAS_INTEGRATED_BUTTON(c) (c->tp_type == TYPE2) -/* trackpad finger structure */ +/* trackpad finger structure, le16-aligned */ struct tp_finger { __le16 origin; /* zero when switching track finger */ __le16 abs_x; /* absolute x coodinate */ @@ -134,7 +134,7 @@ struct tp_finger { __le16 force_minor; /* trackpad force, minor axis? */ __le16 unused[3]; /* zeros */ __le16 multi; /* one finger: varies, more fingers: constant */ -}; +} __attribute__((packed, aligned(2))); /* trackpad finger data size, empirically at least ten fingers */ #define SIZEOF_FINGER sizeof(struct tp_finger) @@ -321,6 +321,7 @@ static int report_tp_state(struct bcm597 if (size < c->tp_offset || (size - c->tp_offset) % SIZEOF_FINGER != 0) return -EIO; + /* finger data, le16-aligned */ f = (const struct tp_finger *)(dev->tp_data + c->tp_offset); raw_n = (size - c->tp_offset) / SIZEOF_FINGER; _