summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYe Xiang <xiang.ye@intel.com>2021-01-30 18:25:30 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-03-24 11:05:04 +0100
commit4a418afad258f348e8fcc31f8c463e47f4391adb (patch)
tree9fb49fb9d5fd6343b8fdfd507af2e60105c77ee7
parent8e97b9cae1e64b36707acc8bd4bc96f26f940b21 (diff)
downloadlinux-stable-4a418afad258f348e8fcc31f8c463e47f4391adb.tar.gz
linux-stable-4a418afad258f348e8fcc31f8c463e47f4391adb.tar.bz2
linux-stable-4a418afad258f348e8fcc31f8c463e47f4391adb.zip
iio: hid-sensor-prox: Fix scale not correct issue
commit d68c592e02f6f49a88e705f13dfc1883432cf300 upstream. Currently, the proxy sensor scale is zero because it just return the exponent directly. To fix this issue, this patch use hid_sensor_format_scale to process the scale first then return the output. Fixes: 39a3a0138f61 ("iio: hid-sensors: Added Proximity Sensor Driver") Signed-off-by: Ye Xiang <xiang.ye@intel.com> Link: https://lore.kernel.org/r/20210130102530.31064-1-xiang.ye@intel.com Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/iio/light/hid-sensor-prox.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
index 8c017abc4ee2..29ebcd0c252c 100644
--- a/drivers/iio/light/hid-sensor-prox.c
+++ b/drivers/iio/light/hid-sensor-prox.c
@@ -37,6 +37,9 @@ struct prox_state {
struct hid_sensor_common common_attributes;
struct hid_sensor_hub_attribute_info prox_attr;
u32 human_presence;
+ int scale_pre_decml;
+ int scale_post_decml;
+ int scale_precision;
};
/* Channel definitions */
@@ -107,8 +110,9 @@ static int prox_read_raw(struct iio_dev *indio_dev,
ret_type = IIO_VAL_INT;
break;
case IIO_CHAN_INFO_SCALE:
- *val = prox_state->prox_attr.units;
- ret_type = IIO_VAL_INT;
+ *val = prox_state->scale_pre_decml;
+ *val2 = prox_state->scale_post_decml;
+ ret_type = prox_state->scale_precision;
break;
case IIO_CHAN_INFO_OFFSET:
*val = hid_sensor_convert_exponent(
@@ -249,6 +253,11 @@ static int prox_parse_report(struct platform_device *pdev,
HID_USAGE_SENSOR_HUMAN_PRESENCE,
&st->common_attributes.sensitivity);
+ st->scale_precision = hid_sensor_format_scale(
+ hsdev->usage,
+ &st->prox_attr,
+ &st->scale_pre_decml, &st->scale_post_decml);
+
return ret;
}