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:
parent
466c5501bc
commit
1ea5bb32f3
3 changed files with 11 additions and 11 deletions
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue