diff options
Diffstat (limited to 'drivers/iio/light/hid-sensor-prox.c')
| -rw-r--r-- | drivers/iio/light/hid-sensor-prox.c | 35 | 
1 files changed, 14 insertions, 21 deletions
| diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c index 330cf359e0b8..17d167c3d595 100644 --- a/drivers/iio/light/hid-sensor-prox.c +++ b/drivers/iio/light/hid-sensor-prox.c @@ -23,6 +23,14 @@ 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; +}; + +static const u32 prox_sensitivity_addresses[] = { +	HID_USAGE_SENSOR_HUMAN_PRESENCE, +	HID_USAGE_SENSOR_DATA_PRESENCE,  };  /* Channel definitions */ @@ -93,8 +101,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( @@ -216,24 +225,6 @@ static int prox_parse_report(struct platform_device *pdev,  	dev_dbg(&pdev->dev, "prox %x:%x\n", st->prox_attr.index,  			st->prox_attr.report_id); -	/* Set Sensitivity field ids, when there is no individual modifier */ -	if (st->common_attributes.sensitivity.index < 0) { -		sensor_hub_input_get_attribute_info(hsdev, -			HID_FEATURE_REPORT, usage_id, -			HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS | -			HID_USAGE_SENSOR_DATA_PRESENCE, -			&st->common_attributes.sensitivity); -		dev_dbg(&pdev->dev, "Sensitivity index:report %d:%d\n", -			st->common_attributes.sensitivity.index, -			st->common_attributes.sensitivity.report_id); -	} -	if (st->common_attributes.sensitivity.index < 0) -		sensor_hub_input_get_attribute_info(hsdev, -			HID_FEATURE_REPORT, usage_id, -			HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS | -			HID_USAGE_SENSOR_HUMAN_PRESENCE, -			&st->common_attributes.sensitivity); -  	return ret;  } @@ -257,7 +248,9 @@ static int hid_prox_probe(struct platform_device *pdev)  	prox_state->common_attributes.pdev = pdev;  	ret = hid_sensor_parse_common_attributes(hsdev, HID_USAGE_SENSOR_PROX, -					&prox_state->common_attributes); +					&prox_state->common_attributes, +					prox_sensitivity_addresses, +					ARRAY_SIZE(prox_sensitivity_addresses));  	if (ret) {  		dev_err(&pdev->dev, "failed to setup common attributes\n");  		return ret; | 
