Loading drivers/iio/imu/st_asm330lhh/st_asm330lhh.h +4 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ #include <linux/slab.h> #define ST_ASM330LHH_REVISION "2.0.1" #define ST_ASM330LHH_PATCH "1" #define ST_ASM330LHH_PATCH "2" #define ST_ASM330LHH_VERSION "v" \ ST_ASM330LHH_REVISION \ Loading Loading @@ -220,7 +220,10 @@ struct st_asm330lhh_hw { u8 enable_mask; s64 ts_offset; u32 hw_val; u32 hw_val_old; s64 hw_ts; s64 hw_ts_high; s64 delta_ts; s64 ts; s64 tsample; Loading drivers/iio/imu/st_asm330lhh/st_asm330lhh_buffer.c +12 −5 Original line number Diff line number Diff line Loading @@ -84,6 +84,8 @@ static inline int st_asm330lhh_reset_hwts(struct st_asm330lhh_hw *hw) hw->ts_offset = hw->ts; hw->hw_ts_old = 0ull; hw->tsample = 0ull; hw->hw_ts_high = 0ull; hw->hw_val_old = 0ull; return hw->tf->write(hw->dev, ST_ASM330LHH_REG_TS2_ADDR, sizeof(data), &data); Loading Loading @@ -277,14 +279,12 @@ static int st_asm330lhh_read_fifo(struct st_asm330lhh_hw *hw) struct iio_dev *iio_dev; __le16 fifo_status; u16 fifo_depth; u32 val; int ts_processed = 0; s64 hw_ts = 0ull, delta_hw_ts, cpu_timestamp; ts_irq = hw->ts - hw->delta_ts; do { do { err = hw->tf->read(hw->dev, ST_ASM330LHH_REG_FIFO_DIFFL_ADDR, sizeof(fifo_status), (u8 *)&fifo_status); if (err < 0) Loading @@ -309,8 +309,14 @@ static int st_asm330lhh_read_fifo(struct st_asm330lhh_hw *hw) tag = buf[i] >> 3; if (tag == ST_ASM330LHH_TS_TAG) { val = get_unaligned_le32(ptr); hw->hw_ts = val * ST_ASM330LHH_TS_DELTA_NS; hw->hw_val = get_unaligned_le32(ptr); /* check for timer rollover */ if (hw->hw_val < hw->hw_val_old) hw->hw_ts_high++; hw->hw_ts = (hw->hw_val + (hw->hw_ts_high << 32)) * ST_ASM330LHH_TS_DELTA_NS; ts_delta_hw_ts = hw->hw_ts - hw->hw_ts_old; hw_ts += ts_delta_hw_ts; ts_delta_offs = Loading @@ -321,6 +327,7 @@ static int st_asm330lhh_read_fifo(struct st_asm330lhh_hw *hw) ts_irq += (hw->hw_ts + ts_delta_offs); hw->hw_ts_old = hw->hw_ts; hw->hw_val_old = hw->hw_val; ts_processed++; if (!hw->tsample) Loading drivers/iio/imu/st_asm330lhh/st_asm330lhh_i2c.c +6 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ static int st_asm330lhh_i2c_read(struct device *dev, u8 addr, int len, u8 *data) buf[0] = addr; ret = i2c_transfer(client->adapter, msg, 2); memcpy(data, buf + 1, len); kfree(buf); return ret; } Loading @@ -49,6 +50,7 @@ static int st_asm330lhh_i2c_write(struct device *dev, u8 addr, int len, u8 *data struct i2c_client *client = to_i2c_client(dev); struct i2c_msg msg; uint8_t *send; int ret = 0; send = kmalloc(len + 1, GFP_KERNEL); if (!send) Loading @@ -62,7 +64,10 @@ static int st_asm330lhh_i2c_write(struct device *dev, u8 addr, int len, u8 *data msg.len = len + 1; msg.buf = send; return i2c_transfer(client->adapter, &msg, 1); ret = i2c_transfer(client->adapter, &msg, 1); kfree(send); return ret; } static const struct st_asm330lhh_transfer_function st_asm330lhh_transfer_fn = { Loading Loading
drivers/iio/imu/st_asm330lhh/st_asm330lhh.h +4 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ #include <linux/slab.h> #define ST_ASM330LHH_REVISION "2.0.1" #define ST_ASM330LHH_PATCH "1" #define ST_ASM330LHH_PATCH "2" #define ST_ASM330LHH_VERSION "v" \ ST_ASM330LHH_REVISION \ Loading Loading @@ -220,7 +220,10 @@ struct st_asm330lhh_hw { u8 enable_mask; s64 ts_offset; u32 hw_val; u32 hw_val_old; s64 hw_ts; s64 hw_ts_high; s64 delta_ts; s64 ts; s64 tsample; Loading
drivers/iio/imu/st_asm330lhh/st_asm330lhh_buffer.c +12 −5 Original line number Diff line number Diff line Loading @@ -84,6 +84,8 @@ static inline int st_asm330lhh_reset_hwts(struct st_asm330lhh_hw *hw) hw->ts_offset = hw->ts; hw->hw_ts_old = 0ull; hw->tsample = 0ull; hw->hw_ts_high = 0ull; hw->hw_val_old = 0ull; return hw->tf->write(hw->dev, ST_ASM330LHH_REG_TS2_ADDR, sizeof(data), &data); Loading Loading @@ -277,14 +279,12 @@ static int st_asm330lhh_read_fifo(struct st_asm330lhh_hw *hw) struct iio_dev *iio_dev; __le16 fifo_status; u16 fifo_depth; u32 val; int ts_processed = 0; s64 hw_ts = 0ull, delta_hw_ts, cpu_timestamp; ts_irq = hw->ts - hw->delta_ts; do { do { err = hw->tf->read(hw->dev, ST_ASM330LHH_REG_FIFO_DIFFL_ADDR, sizeof(fifo_status), (u8 *)&fifo_status); if (err < 0) Loading @@ -309,8 +309,14 @@ static int st_asm330lhh_read_fifo(struct st_asm330lhh_hw *hw) tag = buf[i] >> 3; if (tag == ST_ASM330LHH_TS_TAG) { val = get_unaligned_le32(ptr); hw->hw_ts = val * ST_ASM330LHH_TS_DELTA_NS; hw->hw_val = get_unaligned_le32(ptr); /* check for timer rollover */ if (hw->hw_val < hw->hw_val_old) hw->hw_ts_high++; hw->hw_ts = (hw->hw_val + (hw->hw_ts_high << 32)) * ST_ASM330LHH_TS_DELTA_NS; ts_delta_hw_ts = hw->hw_ts - hw->hw_ts_old; hw_ts += ts_delta_hw_ts; ts_delta_offs = Loading @@ -321,6 +327,7 @@ static int st_asm330lhh_read_fifo(struct st_asm330lhh_hw *hw) ts_irq += (hw->hw_ts + ts_delta_offs); hw->hw_ts_old = hw->hw_ts; hw->hw_val_old = hw->hw_val; ts_processed++; if (!hw->tsample) Loading
drivers/iio/imu/st_asm330lhh/st_asm330lhh_i2c.c +6 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ static int st_asm330lhh_i2c_read(struct device *dev, u8 addr, int len, u8 *data) buf[0] = addr; ret = i2c_transfer(client->adapter, msg, 2); memcpy(data, buf + 1, len); kfree(buf); return ret; } Loading @@ -49,6 +50,7 @@ static int st_asm330lhh_i2c_write(struct device *dev, u8 addr, int len, u8 *data struct i2c_client *client = to_i2c_client(dev); struct i2c_msg msg; uint8_t *send; int ret = 0; send = kmalloc(len + 1, GFP_KERNEL); if (!send) Loading @@ -62,7 +64,10 @@ static int st_asm330lhh_i2c_write(struct device *dev, u8 addr, int len, u8 *data msg.len = len + 1; msg.buf = send; return i2c_transfer(client->adapter, &msg, 1); ret = i2c_transfer(client->adapter, &msg, 1); kfree(send); return ret; } static const struct st_asm330lhh_transfer_function st_asm330lhh_transfer_fn = { Loading