diff options
Diffstat (limited to 'drivers/iio/chemical/ccs811.c')
| -rw-r--r-- | drivers/iio/chemical/ccs811.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/drivers/iio/chemical/ccs811.c b/drivers/iio/chemical/ccs811.c index 2b007e7568b2..60dd87e96f5f 100644 --- a/drivers/iio/chemical/ccs811.c +++ b/drivers/iio/chemical/ccs811.c @@ -78,6 +78,11 @@ struct ccs811_data {  	struct iio_trigger *drdy_trig;  	struct gpio_desc *wakeup_gpio;  	bool drdy_trig_on; +	/* Ensures correct alignment of timestamp if present */ +	struct { +		s16 channels[2]; +		s64 ts __aligned(8); +	} scan;  };  static const struct iio_chan_spec ccs811_channels[] = { @@ -327,17 +332,17 @@ static irqreturn_t ccs811_trigger_handler(int irq, void *p)  	struct iio_dev *indio_dev = pf->indio_dev;  	struct ccs811_data *data = iio_priv(indio_dev);  	struct i2c_client *client = data->client; -	s16 buf[8]; /* s16 eCO2 + s16 TVOC + padding + 8 byte timestamp */  	int ret; -	ret = i2c_smbus_read_i2c_block_data(client, CCS811_ALG_RESULT_DATA, 4, -					    (u8 *)&buf); +	ret = i2c_smbus_read_i2c_block_data(client, CCS811_ALG_RESULT_DATA, +					    sizeof(data->scan.channels), +					    (u8 *)data->scan.channels);  	if (ret != 4) {  		dev_err(&client->dev, "cannot read sensor data\n");  		goto err;  	} -	iio_push_to_buffers_with_timestamp(indio_dev, buf, +	iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,  					   iio_get_time_ns(indio_dev));  err: |