drivers: sensor: icm42605: Store sensor trigger as a pointer

Fixes the icm42605 sensor driver to store the user-supplied sensor
trigger as a pointer rather than a copy. This enables the trigger
handler to use CONTAINER_OF to retrieve a context pointer when the
trigger is embedded in a larger struct.

Signed-off-by: Maureen Helm <maureen.helm@intel.com>
This commit is contained in:
Maureen Helm 2023-03-08 15:48:52 -06:00 committed by Carles Cufí
commit 1ea5bb32f3
3 changed files with 11 additions and 11 deletions

View file

@ -134,23 +134,23 @@ int icm42605_tap_fetch(const struct device *dev)
result = inv_spi_read(&cfg->spi, REG_APEX_DATA4,
drv_data->fifo_data, 1);
if (drv_data->fifo_data[0] & APEX_TAP) {
if (drv_data->tap_trigger.type ==
if (drv_data->tap_trigger->type ==
SENSOR_TRIG_TAP) {
if (drv_data->tap_handler) {
LOG_DBG("Single Tap detected");
drv_data->tap_handler(dev
, &drv_data->tap_trigger);
, drv_data->tap_trigger);
}
} else {
LOG_ERR("Trigger type is mismatched");
}
} else if (drv_data->fifo_data[0] & APEX_DOUBLE_TAP) {
if (drv_data->double_tap_trigger.type ==
if (drv_data->double_tap_trigger->type ==
SENSOR_TRIG_DOUBLE_TAP) {
if (drv_data->double_tap_handler) {
LOG_DBG("Double Tap detected");
drv_data->double_tap_handler(dev
, &drv_data->tap_trigger);
, drv_data->tap_trigger);
}
} else {
LOG_ERR("Trigger type is mismatched");

View file

@ -47,13 +47,13 @@ struct icm42605_data {
const struct device *dev;
struct gpio_callback gpio_cb;
struct sensor_trigger data_ready_trigger;
const struct sensor_trigger *data_ready_trigger;
sensor_trigger_handler_t data_ready_handler;
struct sensor_trigger tap_trigger;
const struct sensor_trigger *tap_trigger;
sensor_trigger_handler_t tap_handler;
struct sensor_trigger double_tap_trigger;
const struct sensor_trigger *double_tap_trigger;
sensor_trigger_handler_t double_tap_handler;
#ifdef CONFIG_ICM42605_TRIGGER

View file

@ -37,14 +37,14 @@ int icm42605_trigger_set(const struct device *dev,
if (trig->type == SENSOR_TRIG_DATA_READY) {
drv_data->data_ready_handler = handler;
drv_data->data_ready_trigger = *trig;
drv_data->data_ready_trigger = trig;
} else if (trig->type == SENSOR_TRIG_TAP) {
drv_data->tap_handler = handler;
drv_data->tap_trigger = *trig;
drv_data->tap_trigger = trig;
drv_data->tap_en = true;
} else if (trig->type == SENSOR_TRIG_DOUBLE_TAP) {
drv_data->double_tap_handler = handler;
drv_data->double_tap_trigger = *trig;
drv_data->double_tap_trigger = trig;
drv_data->tap_en = true;
} else {
return -ENOTSUP;
@ -78,7 +78,7 @@ static void icm42605_thread_cb(const struct device *dev)
if (drv_data->data_ready_handler != NULL) {
drv_data->data_ready_handler(dev,
&drv_data->data_ready_trigger);
drv_data->data_ready_trigger);
}
if (drv_data->tap_handler != NULL ||