diff --git a/drivers/sensors/sensor.c b/drivers/sensors/sensor.c index 45b67b011a3..4d61eb2c9bb 100644 --- a/drivers/sensors/sensor.c +++ b/drivers/sensors/sensor.c @@ -177,6 +177,18 @@ static const struct file_operations g_sensor_fops = * Private Functions ****************************************************************************/ +static void sensor_lock(FAR void *priv) +{ + FAR struct sensor_upperhalf_s *upper = priv; + nxrmutex_lock(&upper->lock); +} + +static void sensor_unlock(FAR void *priv) +{ + FAR struct sensor_upperhalf_s *upper = priv; + nxrmutex_unlock(&upper->lock); +} + static bool sensor_in_range(unsigned long left, unsigned long value, unsigned long right) { @@ -1017,7 +1029,9 @@ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower, /* Bind the lower half data structure member */ - lower->priv = upper; + lower->priv = upper; + lower->sensor_lock = sensor_lock; + lower->sensor_unlock = sensor_unlock; if (!lower->ops->fetch) { diff --git a/include/nuttx/sensors/sensor.h b/include/nuttx/sensors/sensor.h index 35172a60806..8af4eca43f1 100644 --- a/include/nuttx/sensors/sensor.h +++ b/include/nuttx/sensors/sensor.h @@ -937,6 +937,19 @@ struct sensor_lowerhalf_s sensor_notify_event_t notify_event; }; +/**************************************************************************** + * Name: sensor_lock/sensor_unlock + * + * Description: + * Lower half driver can lock/unlock upper half driver by this interface. + * + * Input Parameters: + * priv - Upper half driver handle + ****************************************************************************/ + + void (*sensor_lock)(void * priv); + void (*sensor_unlock)(void * priv); + /* The private opaque pointer to be passed to upper-layer during callback */ FAR void *priv;