lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 124/315] iio: accel: kxcjk-1013: Fix buffer alignment in iio_push_to_buffers_with_timestamp()
    Date
    From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

    [ Upstream commit 3ab3aa2e7bd57497f9a7c6275c00dce237d2c9ba ]

    To make code more readable, use a structure to express the channel
    layout and ensure the timestamp is 8 byte aligned.

    Found during an audit of all calls of this function.

    Fixes: 1a4fbf6a9286 ("iio: accel: kxcjk1013 3-axis accelerometer driver")
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Link: https://lore.kernel.org/r/20210501170121.512209-5-jic23@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/iio/accel/kxcjk-1013.c | 24 ++++++++++++++----------
    1 file changed, 14 insertions(+), 10 deletions(-)

    diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
    index 92a73ada8e4a..296fd00f0e97 100644
    --- a/drivers/iio/accel/kxcjk-1013.c
    +++ b/drivers/iio/accel/kxcjk-1013.c
    @@ -97,12 +97,23 @@ enum kx_acpi_type {
    ACPI_KIOX010A,
    };

    +enum kxcjk1013_axis {
    + AXIS_X,
    + AXIS_Y,
    + AXIS_Z,
    + AXIS_MAX
    +};
    +
    struct kxcjk1013_data {
    struct i2c_client *client;
    struct iio_trigger *dready_trig;
    struct iio_trigger *motion_trig;
    struct mutex mutex;
    - s16 buffer[8];
    + /* Ensure timestamp naturally aligned */
    + struct {
    + s16 chans[AXIS_MAX];
    + s64 timestamp __aligned(8);
    + } scan;
    u8 odr_bits;
    u8 range;
    int wake_thres;
    @@ -116,13 +127,6 @@ struct kxcjk1013_data {
    enum kx_acpi_type acpi_type;
    };

    -enum kxcjk1013_axis {
    - AXIS_X,
    - AXIS_Y,
    - AXIS_Z,
    - AXIS_MAX,
    -};
    -
    enum kxcjk1013_mode {
    STANDBY,
    OPERATION,
    @@ -1005,12 +1009,12 @@ static irqreturn_t kxcjk1013_trigger_handler(int irq, void *p)
    ret = i2c_smbus_read_i2c_block_data_or_emulated(data->client,
    KXCJK1013_REG_XOUT_L,
    AXIS_MAX * 2,
    - (u8 *)data->buffer);
    + (u8 *)data->scan.chans);
    mutex_unlock(&data->mutex);
    if (ret < 0)
    goto err;

    - iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
    + iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
    data->timestamp);
    err:
    iio_trigger_notify_done(indio_dev->trig);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-19 17:39    [W:4.450 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site