Commit 0e41fd51 authored by Ye Xiang's avatar Ye Xiang Committed by Jonathan Cameron

iio: hid-sensors: Move get sensitivity attribute to hid-sensor-common

No functional change has been made with this patch. The main intent here
is to reduce code repetition of getting sensitivity attribute.

In the current implementation, sensor_hub_input_get_attribute_info() is
called from multiple drivers to get attribute info for sensitivity
field. Moving this to common place will avoid code repetition.
Signed-off-by: default avatarYe Xiang <xiang.ye@intel.com>
Acked-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20210201054921.18214-2-xiang.ye@intel.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 6bc5ebe8
...@@ -43,6 +43,10 @@ static const u32 accel_3d_addresses[ACCEL_3D_CHANNEL_MAX] = { ...@@ -43,6 +43,10 @@ static const u32 accel_3d_addresses[ACCEL_3D_CHANNEL_MAX] = {
HID_USAGE_SENSOR_ACCEL_Z_AXIS HID_USAGE_SENSOR_ACCEL_Z_AXIS
}; };
static const u32 accel_3d_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ACCELERATION,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec accel_3d_channels[] = { static const struct iio_chan_spec accel_3d_channels[] = {
{ {
...@@ -317,18 +321,6 @@ static int accel_3d_parse_report(struct platform_device *pdev, ...@@ -317,18 +321,6 @@ static int accel_3d_parse_report(struct platform_device *pdev,
&st->accel[CHANNEL_SCAN_INDEX_X], &st->accel[CHANNEL_SCAN_INDEX_X],
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_ACCELERATION,
&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);
}
return ret; return ret;
} }
...@@ -366,8 +358,11 @@ static int hid_accel_3d_probe(struct platform_device *pdev) ...@@ -366,8 +358,11 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
channel_size = sizeof(gravity_channels); channel_size = sizeof(gravity_channels);
indio_dev->num_channels = ARRAY_SIZE(gravity_channels); indio_dev->num_channels = ARRAY_SIZE(gravity_channels);
} }
ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage, ret = hid_sensor_parse_common_attributes(hsdev,
&accel_state->common_attributes); hsdev->usage,
&accel_state->common_attributes,
accel_3d_sensitivity_addresses,
ARRAY_SIZE(accel_3d_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -448,12 +448,15 @@ EXPORT_SYMBOL(hid_sensor_batch_mode_supported); ...@@ -448,12 +448,15 @@ EXPORT_SYMBOL(hid_sensor_batch_mode_supported);
int hid_sensor_parse_common_attributes(struct hid_sensor_hub_device *hsdev, int hid_sensor_parse_common_attributes(struct hid_sensor_hub_device *hsdev,
u32 usage_id, u32 usage_id,
struct hid_sensor_common *st) struct hid_sensor_common *st,
const u32 *sensitivity_addresses,
u32 sensitivity_addresses_len)
{ {
struct hid_sensor_hub_attribute_info timestamp; struct hid_sensor_hub_attribute_info timestamp;
s32 value; s32 value;
int ret; int ret;
int i;
hid_sensor_get_reporting_interval(hsdev, usage_id, st); hid_sensor_get_reporting_interval(hsdev, usage_id, st);
...@@ -475,6 +478,18 @@ int hid_sensor_parse_common_attributes(struct hid_sensor_hub_device *hsdev, ...@@ -475,6 +478,18 @@ int hid_sensor_parse_common_attributes(struct hid_sensor_hub_device *hsdev,
HID_USAGE_SENSOR_PROP_SENSITIVITY_ABS, HID_USAGE_SENSOR_PROP_SENSITIVITY_ABS,
&st->sensitivity); &st->sensitivity);
/*
* Set Sensitivity field ids, when there is no individual modifier, will
* check absolute sensitivity of data field
*/
for (i = 0; i < sensitivity_addresses_len && st->sensitivity.index < 0; i++) {
sensor_hub_input_get_attribute_info(hsdev,
HID_FEATURE_REPORT, usage_id,
HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS |
sensitivity_addresses[i],
&st->sensitivity);
}
st->raw_hystersis = -1; st->raw_hystersis = -1;
sensor_hub_input_get_attribute_info(hsdev, sensor_hub_input_get_attribute_info(hsdev,
......
...@@ -45,6 +45,10 @@ static const u32 gyro_3d_addresses[GYRO_3D_CHANNEL_MAX] = { ...@@ -45,6 +45,10 @@ static const u32 gyro_3d_addresses[GYRO_3D_CHANNEL_MAX] = {
HID_USAGE_SENSOR_ANGL_VELOCITY_Z_AXIS HID_USAGE_SENSOR_ANGL_VELOCITY_Z_AXIS
}; };
static const u32 gryo_3d_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ANGL_VELOCITY,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec gyro_3d_channels[] = { static const struct iio_chan_spec gyro_3d_channels[] = {
{ {
...@@ -271,17 +275,6 @@ static int gyro_3d_parse_report(struct platform_device *pdev, ...@@ -271,17 +275,6 @@ static int gyro_3d_parse_report(struct platform_device *pdev,
&st->gyro[CHANNEL_SCAN_INDEX_X], &st->gyro[CHANNEL_SCAN_INDEX_X],
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_ANGL_VELOCITY,
&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);
}
return ret; return ret;
} }
...@@ -305,7 +298,9 @@ static int hid_gyro_3d_probe(struct platform_device *pdev) ...@@ -305,7 +298,9 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_GYRO_3D, HID_USAGE_SENSOR_GYRO_3D,
&gyro_state->common_attributes); &gyro_state->common_attributes,
gryo_3d_sensitivity_addresses,
ARRAY_SIZE(gryo_3d_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -22,6 +22,10 @@ struct hid_humidity_state { ...@@ -22,6 +22,10 @@ struct hid_humidity_state {
int value_offset; int value_offset;
}; };
static const u32 humidity_sensitivity_addresses[] = {
HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec humidity_channels[] = { static const struct iio_chan_spec humidity_channels[] = {
{ {
...@@ -174,14 +178,6 @@ static int humidity_parse_report(struct platform_device *pdev, ...@@ -174,14 +178,6 @@ static int humidity_parse_report(struct platform_device *pdev,
&st->scale_pre_decml, &st->scale_pre_decml,
&st->scale_post_decml); &st->scale_post_decml);
/* 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_ATMOSPHERIC_HUMIDITY,
&st->common_attributes.sensitivity);
return ret; return ret;
} }
...@@ -210,7 +206,9 @@ static int hid_humidity_probe(struct platform_device *pdev) ...@@ -210,7 +206,9 @@ static int hid_humidity_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_HUMIDITY, HID_USAGE_SENSOR_HUMIDITY,
&humid_st->common_attributes); &humid_st->common_attributes,
humidity_sensitivity_addresses,
ARRAY_SIZE(humidity_sensitivity_addresses));
if (ret) if (ret)
return ret; return ret;
......
...@@ -39,6 +39,10 @@ struct als_state { ...@@ -39,6 +39,10 @@ struct als_state {
s64 timestamp; s64 timestamp;
}; };
static const u32 als_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_LIGHT,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec als_channels[] = { static const struct iio_chan_spec als_channels[] = {
{ {
...@@ -252,17 +256,6 @@ static int als_parse_report(struct platform_device *pdev, ...@@ -252,17 +256,6 @@ static int als_parse_report(struct platform_device *pdev,
&st->als_illum, &st->als_illum,
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_LIGHT,
&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);
}
return ret; return ret;
} }
...@@ -285,7 +278,9 @@ static int hid_als_probe(struct platform_device *pdev) ...@@ -285,7 +278,9 @@ static int hid_als_probe(struct platform_device *pdev)
als_state->common_attributes.pdev = pdev; als_state->common_attributes.pdev = pdev;
ret = hid_sensor_parse_common_attributes(hsdev, HID_USAGE_SENSOR_ALS, ret = hid_sensor_parse_common_attributes(hsdev, HID_USAGE_SENSOR_ALS,
&als_state->common_attributes); &als_state->common_attributes,
als_sensitivity_addresses,
ARRAY_SIZE(als_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -25,6 +25,11 @@ struct prox_state { ...@@ -25,6 +25,11 @@ struct prox_state {
u32 human_presence; u32 human_presence;
}; };
static const u32 prox_sensitivity_addresses[] = {
HID_USAGE_SENSOR_HUMAN_PRESENCE,
HID_USAGE_SENSOR_DATA_PRESENCE,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec prox_channels[] = { static const struct iio_chan_spec prox_channels[] = {
{ {
...@@ -216,24 +221,6 @@ static int prox_parse_report(struct platform_device *pdev, ...@@ -216,24 +221,6 @@ static int prox_parse_report(struct platform_device *pdev,
dev_dbg(&pdev->dev, "prox %x:%x\n", st->prox_attr.index, dev_dbg(&pdev->dev, "prox %x:%x\n", st->prox_attr.index,
st->prox_attr.report_id); 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; return ret;
} }
...@@ -257,7 +244,9 @@ static int hid_prox_probe(struct platform_device *pdev) ...@@ -257,7 +244,9 @@ static int hid_prox_probe(struct platform_device *pdev)
prox_state->common_attributes.pdev = pdev; prox_state->common_attributes.pdev = pdev;
ret = hid_sensor_parse_common_attributes(hsdev, HID_USAGE_SENSOR_PROX, 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) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -62,6 +62,11 @@ static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { ...@@ -62,6 +62,11 @@ static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = {
HID_USAGE_SENSOR_TIME_TIMESTAMP, HID_USAGE_SENSOR_TIME_TIMESTAMP,
}; };
static const u32 magn_3d_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ORIENTATION,
HID_USAGE_SENSOR_ORIENT_MAGN_FLUX,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec magn_3d_channels[] = { static const struct iio_chan_spec magn_3d_channels[] = {
{ {
...@@ -448,27 +453,6 @@ static int magn_3d_parse_report(struct platform_device *pdev, ...@@ -448,27 +453,6 @@ static int magn_3d_parse_report(struct platform_device *pdev,
&st->rot_attr.scale_pre_decml, &st->rot_attr.scale_pre_decml,
&st->rot_attr.scale_post_decml); &st->rot_attr.scale_post_decml);
/* Set Sensitivity field ids, when there is no individual modifier */
if (st->magn_flux_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_ORIENTATION,
&st->magn_flux_attributes.sensitivity);
dev_dbg(&pdev->dev, "Sensitivity index:report %d:%d\n",
st->magn_flux_attributes.sensitivity.index,
st->magn_flux_attributes.sensitivity.report_id);
}
if (st->magn_flux_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_ORIENT_MAGN_FLUX,
&st->magn_flux_attributes.sensitivity);
dev_dbg(&pdev->dev, "Sensitivity index:report %d:%d\n",
st->magn_flux_attributes.sensitivity.index,
st->magn_flux_attributes.sensitivity.report_id);
}
if (st->rot_attributes.sensitivity.index < 0) { if (st->rot_attributes.sensitivity.index < 0) {
sensor_hub_input_get_attribute_info(hsdev, sensor_hub_input_get_attribute_info(hsdev,
HID_FEATURE_REPORT, usage_id, HID_FEATURE_REPORT, usage_id,
...@@ -507,12 +491,16 @@ static int hid_magn_3d_probe(struct platform_device *pdev) ...@@ -507,12 +491,16 @@ static int hid_magn_3d_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_COMPASS_3D, HID_USAGE_SENSOR_COMPASS_3D,
&magn_state->magn_flux_attributes); &magn_state->magn_flux_attributes,
magn_3d_sensitivity_addresses,
ARRAY_SIZE(magn_3d_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
} }
magn_state->rot_attributes = magn_state->magn_flux_attributes; magn_state->rot_attributes = magn_state->magn_flux_attributes;
/* sensitivity of rot_attribute is not the same as magn_flux_attributes */
magn_state->rot_attributes.sensitivity.index = -1;
ret = magn_3d_parse_report(pdev, hsdev, ret = magn_3d_parse_report(pdev, hsdev,
&channels, &chan_count, &channels, &chan_count,
......
...@@ -47,6 +47,10 @@ static const u32 incl_3d_addresses[INCLI_3D_CHANNEL_MAX] = { ...@@ -47,6 +47,10 @@ static const u32 incl_3d_addresses[INCLI_3D_CHANNEL_MAX] = {
HID_USAGE_SENSOR_ORIENT_TILT_Z HID_USAGE_SENSOR_ORIENT_TILT_Z
}; };
static const u32 incl_3d_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ORIENTATION,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec incl_3d_channels[] = { static const struct iio_chan_spec incl_3d_channels[] = {
{ {
...@@ -291,17 +295,6 @@ static int incl_3d_parse_report(struct platform_device *pdev, ...@@ -291,17 +295,6 @@ static int incl_3d_parse_report(struct platform_device *pdev,
&st->incl[CHANNEL_SCAN_INDEX_X], &st->incl[CHANNEL_SCAN_INDEX_X],
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_ORIENTATION,
&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);
}
return ret; return ret;
} }
...@@ -327,7 +320,9 @@ static int hid_incl_3d_probe(struct platform_device *pdev) ...@@ -327,7 +320,9 @@ static int hid_incl_3d_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_INCLINOMETER_3D, HID_USAGE_SENSOR_INCLINOMETER_3D,
&incl_state->common_attributes); &incl_state->common_attributes,
incl_3d_sensitivity_addresses,
ARRAY_SIZE(incl_3d_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -31,6 +31,10 @@ struct dev_rot_state { ...@@ -31,6 +31,10 @@ struct dev_rot_state {
s64 timestamp; s64 timestamp;
}; };
static const u32 rotation_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ORIENTATION,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec dev_rot_channels[] = { static const struct iio_chan_spec dev_rot_channels[] = {
{ {
...@@ -221,18 +225,6 @@ static int dev_rot_parse_report(struct platform_device *pdev, ...@@ -221,18 +225,6 @@ static int dev_rot_parse_report(struct platform_device *pdev,
&st->quaternion, &st->quaternion,
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_ORIENTATION,
&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);
}
return 0; return 0;
} }
...@@ -270,8 +262,11 @@ static int hid_dev_rot_probe(struct platform_device *pdev) ...@@ -270,8 +262,11 @@ static int hid_dev_rot_probe(struct platform_device *pdev)
return -EINVAL; return -EINVAL;
} }
ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage, ret = hid_sensor_parse_common_attributes(hsdev,
&rot_state->common_attributes); hsdev->usage,
&rot_state->common_attributes,
rotation_sensitivity_addresses,
ARRAY_SIZE(rotation_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -47,6 +47,10 @@ struct hinge_state { ...@@ -47,6 +47,10 @@ struct hinge_state {
u64 timestamp; u64 timestamp;
}; };
static const u32 hinge_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_FIELD_CUSTOM_VALUE(1),
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec hinge_channels[] = { static const struct iio_chan_spec hinge_channels[] = {
{ {
...@@ -251,18 +255,6 @@ static int hinge_parse_report(struct platform_device *pdev, ...@@ -251,18 +255,6 @@ static int hinge_parse_report(struct platform_device *pdev,
&st->hinge[CHANNEL_SCAN_INDEX_HINGE_ANGLE], &st->hinge[CHANNEL_SCAN_INDEX_HINGE_ANGLE],
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_FIELD_CUSTOM_VALUE(1),
&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);
}
return ret; return ret;
} }
...@@ -289,7 +281,9 @@ static int hid_hinge_probe(struct platform_device *pdev) ...@@ -289,7 +281,9 @@ static int hid_hinge_probe(struct platform_device *pdev)
st->labels[i] = hinge_labels[i]; st->labels[i] = hinge_labels[i];
ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage, ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage,
&st->common_attributes); &st->common_attributes,
hinge_sensitivity_addresses,
ARRAY_SIZE(hinge_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -29,6 +29,10 @@ struct press_state { ...@@ -29,6 +29,10 @@ struct press_state {
int value_offset; int value_offset;
}; };
static const u32 press_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ATMOSPHERIC_PRESSURE,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec press_channels[] = { static const struct iio_chan_spec press_channels[] = {
{ {
...@@ -225,17 +229,6 @@ static int press_parse_report(struct platform_device *pdev, ...@@ -225,17 +229,6 @@ static int press_parse_report(struct platform_device *pdev,
&st->press_attr, &st->press_attr,
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_ATMOSPHERIC_PRESSURE,
&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);
}
return ret; return ret;
} }
...@@ -260,7 +253,9 @@ static int hid_press_probe(struct platform_device *pdev) ...@@ -260,7 +253,9 @@ static int hid_press_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_PRESSURE, HID_USAGE_SENSOR_PRESSURE,
&press_state->common_attributes); &press_state->common_attributes,
press_sensitivity_addresses,
ARRAY_SIZE(press_sensitivity_addresses));
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes\n"); dev_err(&pdev->dev, "failed to setup common attributes\n");
return ret; return ret;
......
...@@ -22,6 +22,10 @@ struct temperature_state { ...@@ -22,6 +22,10 @@ struct temperature_state {
int value_offset; int value_offset;
}; };
static const u32 temperature_sensitivity_addresses[] = {
HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
};
/* Channel definitions */ /* Channel definitions */
static const struct iio_chan_spec temperature_channels[] = { static const struct iio_chan_spec temperature_channels[] = {
{ {
...@@ -171,14 +175,6 @@ static int temperature_parse_report(struct platform_device *pdev, ...@@ -171,14 +175,6 @@ static int temperature_parse_report(struct platform_device *pdev,
&st->temperature_attr, &st->temperature_attr,
&st->scale_pre_decml, &st->scale_post_decml); &st->scale_pre_decml, &st->scale_post_decml);
/* 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_ENVIRONMENTAL_TEMPERATURE,
&st->common_attributes.sensitivity);
return ret; return ret;
} }
...@@ -207,7 +203,9 @@ static int hid_temperature_probe(struct platform_device *pdev) ...@@ -207,7 +203,9 @@ static int hid_temperature_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_TEMPERATURE, HID_USAGE_SENSOR_TEMPERATURE,
&temp_st->common_attributes); &temp_st->common_attributes,
temperature_sensitivity_addresses,
ARRAY_SIZE(temperature_sensitivity_addresses));
if (ret) if (ret)
return ret; return ret;
......
...@@ -238,7 +238,9 @@ static int hid_time_probe(struct platform_device *pdev) ...@@ -238,7 +238,9 @@ static int hid_time_probe(struct platform_device *pdev)
ret = hid_sensor_parse_common_attributes(hsdev, ret = hid_sensor_parse_common_attributes(hsdev,
HID_USAGE_SENSOR_TIME, HID_USAGE_SENSOR_TIME,
&time_state->common_attributes); &time_state->common_attributes,
NULL,
0);
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to setup common attributes!\n"); dev_err(&pdev->dev, "failed to setup common attributes!\n");
return ret; return ret;
......
...@@ -248,7 +248,9 @@ static inline int hid_sensor_convert_exponent(int unit_expo) ...@@ -248,7 +248,9 @@ static inline int hid_sensor_convert_exponent(int unit_expo)
int hid_sensor_parse_common_attributes(struct hid_sensor_hub_device *hsdev, int hid_sensor_parse_common_attributes(struct hid_sensor_hub_device *hsdev,
u32 usage_id, u32 usage_id,
struct hid_sensor_common *st); struct hid_sensor_common *st,
const u32 *sensitivity_addresses,
u32 sensitivity_addresses_len);
int hid_sensor_write_raw_hyst_value(struct hid_sensor_common *st, int hid_sensor_write_raw_hyst_value(struct hid_sensor_common *st,
int val1, int val2); int val1, int val2);
int hid_sensor_read_raw_hyst_value(struct hid_sensor_common *st, int hid_sensor_read_raw_hyst_value(struct hid_sensor_common *st,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment