On Wed, 20 Jan 2021 15:47:05 +0800
Ye Xiang <[email protected]> wrote:

> Some hid sensors may use relative sensitivity such as als sensor.
> This patch add relative sensitivity check for all hid-sensors.
> 
> Signed-off-by: Ye Xiang <[email protected]>
> ---
>  .../iio/common/hid-sensors/hid-sensor-attributes.c    | 11 ++++++++++-
>  include/linux/hid-sensor-ids.h                        |  1 +
>  2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c 
> b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
> index d349ace2e33f..b685c292a179 100644
> --- a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
> +++ b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
> @@ -480,7 +480,7 @@ int hid_sensor_parse_common_attributes(struct 
> hid_sensor_hub_device *hsdev,
>  
>       /*
>        * Set Sensitivity field ids, when there is no individual modifier, will
> -      * check absolute sensitivity of data field
> +      * check absolute sensitivity and relative sensitivity of data field
>        */
>       for (i = 0; i < sensitivity_addresses_len && st->sensitivity.index < 0; 
> i++) {
>               sensor_hub_input_get_attribute_info(hsdev,
> @@ -488,6 +488,15 @@ int hid_sensor_parse_common_attributes(struct 
> hid_sensor_hub_device *hsdev,
>                               
> HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS |
>                                       sensitivity_addresses[i],
>                               &st->sensitivity);
> +
> +             if (st->sensitivity.index >= 0)
> +                     break;
> +
> +             sensor_hub_input_get_attribute_info(hsdev,
> +                             HID_FEATURE_REPORT, usage_id,
> +                             
> HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_REL_PCT |
> +                                     sensitivity_addresses[i],
> +                             &st->sensitivity);

We can't provide the value to userspace without reflecting the difference 
between
the two ways of expressing it.

It seems there are 3 ways sensitivity is expressed.
1. Raw value in same units as the measurement (easy one and what is currently 
reported)
2. Percentage of range - also relatively easy to transform into the same as 1.
3. Percentage of prior reading..  This one doesn't fit in any existing ABI, so
   unfortunately we'll have to invent something new along the lines of
   *_hysteresis_relative 

Jonathan



>       }
>  
>       st->raw_hystersis = -1;
> diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h
> index 3bbdbccc5805..ac631159403a 100644
> --- a/include/linux/hid-sensor-ids.h
> +++ b/include/linux/hid-sensor-ids.h
> @@ -149,6 +149,7 @@
>  /* Per data field properties */
>  #define HID_USAGE_SENSOR_DATA_MOD_NONE                                       
> 0x00
>  #define HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS             0x1000
> +#define HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_REL_PCT            
> 0xE000
>  
>  /* Power state enumerations */
>  #define HID_USAGE_SENSOR_PROP_POWER_STATE_UNDEFINED_ENUM     0x200850

Reply via email to