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

Fixes the mcux_acmp 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-04-07 15:39:58 -05:00 committed by Carles Cufí
commit 6ae88621d2

View file

@ -63,8 +63,10 @@ struct mcux_acmp_data {
#endif
#ifdef CONFIG_MCUX_ACMP_TRIGGER
const struct device *dev;
sensor_trigger_handler_t rising;
sensor_trigger_handler_t falling;
sensor_trigger_handler_t rising_handler;
const struct sensor_trigger *rising_trigger;
sensor_trigger_handler_t falling_handler;
const struct sensor_trigger *falling_trigger;
struct k_work work;
volatile uint32_t status;
#endif /* CONFIG_MCUX_ACMP_TRIGGER */
@ -379,10 +381,12 @@ static int mcux_acmp_trigger_set(const struct device *dev,
switch ((int16_t)trig->type) {
case SENSOR_TRIG_MCUX_ACMP_OUTPUT_RISING:
data->rising = handler;
data->rising_handler = handler;
data->rising_trigger = trig;
break;
case SENSOR_TRIG_MCUX_ACMP_OUTPUT_FALLING:
data->falling = handler;
data->falling_handler = handler;
data->falling_trigger = trig;
break;
default:
return -ENOTSUP;
@ -393,22 +397,21 @@ static int mcux_acmp_trigger_set(const struct device *dev,
static void mcux_acmp_trigger_work_handler(struct k_work *item)
{
static struct sensor_trigger trigger;
const struct sensor_trigger *trigger;
struct mcux_acmp_data *data =
CONTAINER_OF(item, struct mcux_acmp_data, work);
sensor_trigger_handler_t handler = NULL;
if (data->status & kACMP_OutputRisingEventFlag) {
trigger.type = SENSOR_TRIG_MCUX_ACMP_OUTPUT_RISING;
handler = data->rising;
handler = data->rising_handler;
trigger = data->rising_trigger;
} else if (data->status & kACMP_OutputFallingEventFlag) {
trigger.type = SENSOR_TRIG_MCUX_ACMP_OUTPUT_FALLING;
handler = data->falling;
handler = data->falling_handler;
trigger = data->falling_trigger;
}
if (handler) {
trigger.chan = SENSOR_CHAN_MCUX_ACMP_OUTPUT;
handler(data->dev, &trigger);
handler(data->dev, trigger);
}
}