On Sun, 2021-01-24 at 13:14 +0000, Jonathan Cameron wrote: > On Wed, 20 Jan 2021 15:47:05 +0800 > Ye Xiang <xiang.ye@xxxxxxxxx> 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 <xiang.ye@xxxxxxxxx> > > --- > > .../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_SENSIT > > IVITY_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_SENSIT > > IVITY_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 This is why it was not added before when I developed. But later few years back there was a patch to add this by one of our developer. There was some discussion, I thought it was decided it is OK to add. But I agree, we should add new ABI as you suggested. Now almost every laptop has HID sensors, better to address this. Thanks, Srinivas > 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 0xE > > 000 > > > > /* Power state enumerations */ > > #define HID_USAGE_SENSOR_PROP_POWER_STATE_UNDEFINED_ENUM 0x20085 > > 0