Skip to content

Commit 99f9ef3

Browse files
MaureenHelmcarlescufi
authored andcommitted
drivers: sensor: iis2iclx: Store sensor trigger as a pointer
Fixes the iis2iclx 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 <[email protected]>
1 parent 7b4ea85 commit 99f9ef3

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

drivers/sensor/iis2iclx/iis2iclx.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ struct iis2iclx_data {
8686
#ifdef CONFIG_IIS2ICLX_TRIGGER
8787
struct gpio_callback gpio_cb;
8888
sensor_trigger_handler_t handler_drdy_acc;
89+
const struct sensor_trigger *trig_drdy_acc;
8990
sensor_trigger_handler_t handler_drdy_temp;
91+
const struct sensor_trigger *trig_drdy_temp;
9092

9193
#if defined(CONFIG_IIS2ICLX_TRIGGER_OWN_THREAD)
9294
K_KERNEL_STACK_MEMBER(thread_stack, CONFIG_IIS2ICLX_THREAD_STACK_SIZE);

drivers/sensor/iis2iclx/iis2iclx_trigger.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ int iis2iclx_trigger_set(const struct device *dev,
101101

102102
if (trig->chan == SENSOR_CHAN_ACCEL_XYZ) {
103103
iis2iclx->handler_drdy_acc = handler;
104+
iis2iclx->trig_drdy_acc = trig;
104105
if (handler) {
105106
return iis2iclx_enable_xl_int(dev, IIS2ICLX_EN_BIT);
106107
} else {
@@ -110,6 +111,7 @@ int iis2iclx_trigger_set(const struct device *dev,
110111
#if defined(CONFIG_IIS2ICLX_ENABLE_TEMP)
111112
else if (trig->chan == SENSOR_CHAN_DIE_TEMP) {
112113
iis2iclx->handler_drdy_temp = handler;
114+
iis2iclx->trig_drdy_temp = trig;
113115
if (handler) {
114116
return iis2iclx_enable_t_int(dev, IIS2ICLX_EN_BIT);
115117
} else {
@@ -128,9 +130,6 @@ int iis2iclx_trigger_set(const struct device *dev,
128130
static void iis2iclx_handle_interrupt(const struct device *dev)
129131
{
130132
struct iis2iclx_data *iis2iclx = dev->data;
131-
struct sensor_trigger drdy_trigger = {
132-
.type = SENSOR_TRIG_DATA_READY,
133-
};
134133
const struct iis2iclx_config *cfg = dev->config;
135134
iis2iclx_status_reg_t status;
136135

@@ -150,12 +149,12 @@ static void iis2iclx_handle_interrupt(const struct device *dev)
150149
}
151150

152151
if ((status.xlda) && (iis2iclx->handler_drdy_acc != NULL)) {
153-
iis2iclx->handler_drdy_acc(dev, &drdy_trigger);
152+
iis2iclx->handler_drdy_acc(dev, iis2iclx->trig_drdy_acc);
154153
}
155154

156155
#if defined(CONFIG_IIS2ICLX_ENABLE_TEMP)
157156
if ((status.tda) && (iis2iclx->handler_drdy_temp != NULL)) {
158-
iis2iclx->handler_drdy_temp(dev, &drdy_trigger);
157+
iis2iclx->handler_drdy_temp(dev, iis2iclx->trig_drdy_temp);
159158
}
160159
#endif
161160
}

0 commit comments

Comments
 (0)