iio: hid-sensor-prox: Fix scale not correct issue

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: 39a3a0138f ("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>
This commit is contained in:
Ye Xiang 2021-01-30 18:25:30 +08:00 committed by Jonathan Cameron
parent 7d200b283a
commit d68c592e02

View File

@ -23,6 +23,9 @@ struct prox_state {
struct hid_sensor_common common_attributes; struct hid_sensor_common common_attributes;
struct hid_sensor_hub_attribute_info prox_attr; struct hid_sensor_hub_attribute_info prox_attr;
u32 human_presence; u32 human_presence;
int scale_pre_decml;
int scale_post_decml;
int scale_precision;
}; };
/* Channel definitions */ /* Channel definitions */
@ -93,8 +96,9 @@ static int prox_read_raw(struct iio_dev *indio_dev,
ret_type = IIO_VAL_INT; ret_type = IIO_VAL_INT;
break; break;
case IIO_CHAN_INFO_SCALE: case IIO_CHAN_INFO_SCALE:
*val = prox_state->prox_attr.units; *val = prox_state->scale_pre_decml;
ret_type = IIO_VAL_INT; *val2 = prox_state->scale_post_decml;
ret_type = prox_state->scale_precision;
break; break;
case IIO_CHAN_INFO_OFFSET: case IIO_CHAN_INFO_OFFSET:
*val = hid_sensor_convert_exponent( *val = hid_sensor_convert_exponent(
@ -234,6 +238,11 @@ static int prox_parse_report(struct platform_device *pdev,
HID_USAGE_SENSOR_HUMAN_PRESENCE, HID_USAGE_SENSOR_HUMAN_PRESENCE,
&st->common_attributes.sensitivity); &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; return ret;
} }