This patch adds struct alignment information and adds comments to ensure all access of finger data is two-byte aligned. Signed-off-by: Henrik Rydberg <rydberg@xxxxxxxxxxx> --- drivers/input/mouse/bcm5974.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c index 874ae11..37f2341 100644 --- a/drivers/input/mouse/bcm5974.c +++ b/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 bcm5974 *dev, int size) 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; -- 1.5.6.3 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html