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:
parent
958b7abd26
commit
6ae88621d2
1 changed files with 14 additions and 11 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue