Skip to content

Commit 627fdd6

Browse files
hmhalvorsengalak
authored andcommitted
drivers: sensor: ADXL362 data conversion fix
The ADXL362 sensor data is converted to the expected output, m/s^2. Signed-off-by: Henrik Malvik Halvorsen <[email protected]>
1 parent 83aa7ce commit 627fdd6

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

drivers/sensor/adxl362/adxl362.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -433,9 +433,9 @@ static int adxl362_sample_fetch(struct device *dev, enum sensor_channel chan)
433433

434434
z = (buf[1] << 8) + buf[0];
435435

436-
data->acc_x = (s32_t)x * (adxl362_data.selected_range / 2);
437-
data->acc_y = (s32_t)y * (adxl362_data.selected_range / 2);
438-
data->acc_z = (s32_t)z * (adxl362_data.selected_range / 2);
436+
data->acc_x = (s32_t)x * (adxl362_data.selected_range);
437+
data->acc_y = (s32_t)y * (adxl362_data.selected_range);
438+
data->acc_z = (s32_t)z * (adxl362_data.selected_range);
439439

440440
ret = adxl362_read_temperature(dev, &data->temp);
441441
if (ret) {
@@ -445,6 +445,14 @@ static int adxl362_sample_fetch(struct device *dev, enum sensor_channel chan)
445445
return 0;
446446
}
447447

448+
static void adxl362_accel_convert(struct sensor_value *val, s16_t value)
449+
{
450+
s32_t micro_ms2 = value * (SENSOR_G / (16 * 1000));
451+
452+
val->val1 = micro_ms2 / 100000;
453+
val->val2 = micro_ms2 % 100000;
454+
}
455+
448456
static int adxl362_channel_get(struct device *dev,
449457
enum sensor_channel chan,
450458
struct sensor_value *val)
@@ -453,16 +461,13 @@ static int adxl362_channel_get(struct device *dev,
453461

454462
switch (chan) {
455463
case SENSOR_CHAN_ACCEL_X: /* Acceleration on the X axis, in m/s^2. */
456-
val->val1 = data->acc_x / 1000;
457-
val->val2 = (data->acc_x % 1000) * 1000;
464+
adxl362_accel_convert(val, data->acc_x);
458465
break;
459466
case SENSOR_CHAN_ACCEL_Y: /* Acceleration on the Y axis, in m/s^2. */
460-
val->val1 = data->acc_y / 1000;
461-
val->val2 = (data->acc_y % 1000) * 1000;
467+
adxl362_accel_convert(val, data->acc_y);
462468
break;
463469
case SENSOR_CHAN_ACCEL_Z: /* Acceleration on the Z axis, in m/s^2. */
464-
val->val1 = data->acc_z / 1000;
465-
val->val2 = (data->acc_z % 1000) * 1000;
470+
adxl362_accel_convert(val, data->acc_z);
466471
break;
467472
case SENSOR_CHAN_DIE_TEMP: /* Temperature in degrees Celsius. */
468473
val->val1 = data->temp / 1000;

0 commit comments

Comments
 (0)