aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/hid-sensor-custom.c2
-rw-r--r--drivers/hid/hid-sensor-hub.c13
-rw-r--r--drivers/iio/accel/hid-sensor-accel-3d.c5
-rw-r--r--drivers/iio/gyro/hid-sensor-gyro-3d.c5
-rw-r--r--drivers/iio/humidity/hid-sensor-humidity.c3
-rw-r--r--drivers/iio/light/hid-sensor-als.c8
-rw-r--r--drivers/iio/light/hid-sensor-prox.c8
-rw-r--r--drivers/iio/magnetometer/hid-sensor-magn-3d.c8
-rw-r--r--drivers/iio/magnetometer/st_magn_buffer.c12
-rw-r--r--drivers/iio/orientation/hid-sensor-incl-3d.c8
-rw-r--r--drivers/iio/pressure/hid-sensor-press.c8
-rw-r--r--drivers/iio/temperature/hid-sensor-temperature.c3
-rw-r--r--drivers/rtc/rtc-hid-sensor-time.c2
-rw-r--r--include/linux/hid-sensor-hub.h4
14 files changed, 55 insertions, 34 deletions
diff --git a/drivers/hid/hid-sensor-custom.c b/drivers/hid/hid-sensor-custom.c
index e8a114157f87..bb012bc032e0 100644
--- a/drivers/hid/hid-sensor-custom.c
+++ b/drivers/hid/hid-sensor-custom.c
@@ -358,7 +358,7 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr,
358 sensor_inst->hsdev, 358 sensor_inst->hsdev,
359 sensor_inst->hsdev->usage, 359 sensor_inst->hsdev->usage,
360 usage, report_id, 360 usage, report_id,
361 SENSOR_HUB_SYNC); 361 SENSOR_HUB_SYNC, false);
362 } else if (!strncmp(name, "units", strlen("units"))) 362 } else if (!strncmp(name, "units", strlen("units")))
363 value = sensor_inst->fields[field_index].attribute.units; 363 value = sensor_inst->fields[field_index].attribute.units;
364 else if (!strncmp(name, "unit-expo", strlen("unit-expo"))) 364 else if (!strncmp(name, "unit-expo", strlen("unit-expo")))
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
index 2b63487057c2..4256fdc5cd6d 100644
--- a/drivers/hid/hid-sensor-hub.c
+++ b/drivers/hid/hid-sensor-hub.c
@@ -299,7 +299,8 @@ EXPORT_SYMBOL_GPL(sensor_hub_get_feature);
299int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, 299int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
300 u32 usage_id, 300 u32 usage_id,
301 u32 attr_usage_id, u32 report_id, 301 u32 attr_usage_id, u32 report_id,
302 enum sensor_hub_read_flags flag) 302 enum sensor_hub_read_flags flag,
303 bool is_signed)
303{ 304{
304 struct sensor_hub_data *data = hid_get_drvdata(hsdev->hdev); 305 struct sensor_hub_data *data = hid_get_drvdata(hsdev->hdev);
305 unsigned long flags; 306 unsigned long flags;
@@ -331,10 +332,16 @@ int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
331 &hsdev->pending.ready, HZ*5); 332 &hsdev->pending.ready, HZ*5);
332 switch (hsdev->pending.raw_size) { 333 switch (hsdev->pending.raw_size) {
333 case 1: 334 case 1:
334 ret_val = *(u8 *)hsdev->pending.raw_data; 335 if (is_signed)
336 ret_val = *(s8 *)hsdev->pending.raw_data;
337 else
338 ret_val = *(u8 *)hsdev->pending.raw_data;
335 break; 339 break;
336 case 2: 340 case 2:
337 ret_val = *(u16 *)hsdev->pending.raw_data; 341 if (is_signed)
342 ret_val = *(s16 *)hsdev->pending.raw_data;
343 else
344 ret_val = *(u16 *)hsdev->pending.raw_data;
338 break; 345 break;
339 case 4: 346 case 4:
340 ret_val = *(u32 *)hsdev->pending.raw_data; 347 ret_val = *(u32 *)hsdev->pending.raw_data;
diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c
index 41d97faf5013..38ff374a3ca4 100644
--- a/drivers/iio/accel/hid-sensor-accel-3d.c
+++ b/drivers/iio/accel/hid-sensor-accel-3d.c
@@ -149,6 +149,7 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev,
149 int report_id = -1; 149 int report_id = -1;
150 u32 address; 150 u32 address;
151 int ret_type; 151 int ret_type;
152 s32 min;
152 struct hid_sensor_hub_device *hsdev = 153 struct hid_sensor_hub_device *hsdev =
153 accel_state->common_attributes.hsdev; 154 accel_state->common_attributes.hsdev;
154 155
@@ -158,12 +159,14 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev,
158 case IIO_CHAN_INFO_RAW: 159 case IIO_CHAN_INFO_RAW:
159 hid_sensor_power_state(&accel_state->common_attributes, true); 160 hid_sensor_power_state(&accel_state->common_attributes, true);
160 report_id = accel_state->accel[chan->scan_index].report_id; 161 report_id = accel_state->accel[chan->scan_index].report_id;
162 min = accel_state->accel[chan->scan_index].logical_minimum;
161 address = accel_3d_addresses[chan->scan_index]; 163 address = accel_3d_addresses[chan->scan_index];
162 if (report_id >= 0) 164 if (report_id >= 0)
163 *val = sensor_hub_input_attr_get_raw_value( 165 *val = sensor_hub_input_attr_get_raw_value(
164 accel_state->common_attributes.hsdev, 166 accel_state->common_attributes.hsdev,
165 hsdev->usage, address, report_id, 167 hsdev->usage, address, report_id,
166 SENSOR_HUB_SYNC); 168 SENSOR_HUB_SYNC,
169 min < 0);
167 else { 170 else {
168 *val = 0; 171 *val = 0;
169 hid_sensor_power_state(&accel_state->common_attributes, 172 hid_sensor_power_state(&accel_state->common_attributes,
diff --git a/drivers/iio/gyro/hid-sensor-gyro-3d.c b/drivers/iio/gyro/hid-sensor-gyro-3d.c
index 36941e69f959..88e857c4baf4 100644
--- a/drivers/iio/gyro/hid-sensor-gyro-3d.c
+++ b/drivers/iio/gyro/hid-sensor-gyro-3d.c
@@ -111,6 +111,7 @@ static int gyro_3d_read_raw(struct iio_dev *indio_dev,
111 int report_id = -1; 111 int report_id = -1;
112 u32 address; 112 u32 address;
113 int ret_type; 113 int ret_type;
114 s32 min;
114 115
115 *val = 0; 116 *val = 0;
116 *val2 = 0; 117 *val2 = 0;
@@ -118,13 +119,15 @@ static int gyro_3d_read_raw(struct iio_dev *indio_dev,
118 case IIO_CHAN_INFO_RAW: 119 case IIO_CHAN_INFO_RAW:
119 hid_sensor_power_state(&gyro_state->common_attributes, true); 120 hid_sensor_power_state(&gyro_state->common_attributes, true);
120 report_id = gyro_state->gyro[chan->scan_index].report_id; 121 report_id = gyro_state->gyro[chan->scan_index].report_id;
122 min = gyro_state->gyro[chan->scan_index].logical_minimum;
121 address = gyro_3d_addresses[chan->scan_index]; 123 address = gyro_3d_addresses[chan->scan_index];
122 if (report_id >= 0) 124 if (report_id >= 0)
123 *val = sensor_hub_input_attr_get_raw_value( 125 *val = sensor_hub_input_attr_get_raw_value(
124 gyro_state->common_attributes.hsdev, 126 gyro_state->common_attributes.hsdev,
125 HID_USAGE_SENSOR_GYRO_3D, address, 127 HID_USAGE_SENSOR_GYRO_3D, address,
126 report_id, 128 report_id,
127 SENSOR_HUB_SYNC); 129 SENSOR_HUB_SYNC,
130 min < 0);
128 else { 131 else {
129 *val = 0; 132 *val = 0;
130 hid_sensor_power_state(&gyro_state->common_attributes, 133 hid_sensor_power_state(&gyro_state->common_attributes,
diff --git a/drivers/iio/humidity/hid-sensor-humidity.c b/drivers/iio/humidity/hid-sensor-humidity.c
index beab6d6fd6e1..4bc95f31c730 100644
--- a/drivers/iio/humidity/hid-sensor-humidity.c
+++ b/drivers/iio/humidity/hid-sensor-humidity.c
@@ -75,7 +75,8 @@ static int humidity_read_raw(struct iio_dev *indio_dev,
75 HID_USAGE_SENSOR_HUMIDITY, 75 HID_USAGE_SENSOR_HUMIDITY,
76 HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY, 76 HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY,
77 humid_st->humidity_attr.report_id, 77 humid_st->humidity_attr.report_id,
78 SENSOR_HUB_SYNC); 78 SENSOR_HUB_SYNC,
79 humid_st->humidity_attr.logical_minimum < 0);
79 hid_sensor_power_state(&humid_st->common_attributes, false); 80 hid_sensor_power_state(&humid_st->common_attributes, false);
80 81
81 return IIO_VAL_INT; 82 return IIO_VAL_INT;
diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
index 406caaee9a3c..94f33250ba5a 100644
--- a/drivers/iio/light/hid-sensor-als.c
+++ b/drivers/iio/light/hid-sensor-als.c
@@ -93,6 +93,7 @@ static int als_read_raw(struct iio_dev *indio_dev,
93 int report_id = -1; 93 int report_id = -1;
94 u32 address; 94 u32 address;
95 int ret_type; 95 int ret_type;
96 s32 min;
96 97
97 *val = 0; 98 *val = 0;
98 *val2 = 0; 99 *val2 = 0;
@@ -102,8 +103,8 @@ static int als_read_raw(struct iio_dev *indio_dev,
102 case CHANNEL_SCAN_INDEX_INTENSITY: 103 case CHANNEL_SCAN_INDEX_INTENSITY:
103 case CHANNEL_SCAN_INDEX_ILLUM: 104 case CHANNEL_SCAN_INDEX_ILLUM:
104 report_id = als_state->als_illum.report_id; 105 report_id = als_state->als_illum.report_id;
105 address = 106 min = als_state->als_illum.logical_minimum;
106 HID_USAGE_SENSOR_LIGHT_ILLUM; 107 address = HID_USAGE_SENSOR_LIGHT_ILLUM;
107 break; 108 break;
108 default: 109 default:
109 report_id = -1; 110 report_id = -1;
@@ -116,7 +117,8 @@ static int als_read_raw(struct iio_dev *indio_dev,
116 als_state->common_attributes.hsdev, 117 als_state->common_attributes.hsdev,
117 HID_USAGE_SENSOR_ALS, address, 118 HID_USAGE_SENSOR_ALS, address,
118 report_id, 119 report_id,
119 SENSOR_HUB_SYNC); 120 SENSOR_HUB_SYNC,
121 min < 0);
120 hid_sensor_power_state(&als_state->common_attributes, 122 hid_sensor_power_state(&als_state->common_attributes,
121 false); 123 false);
122 } else { 124 } else {
diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
index 45107f7537b5..cf5a0c242609 100644
--- a/drivers/iio/light/hid-sensor-prox.c
+++ b/drivers/iio/light/hid-sensor-prox.c
@@ -73,6 +73,7 @@ static int prox_read_raw(struct iio_dev *indio_dev,
73 int report_id = -1; 73 int report_id = -1;
74 u32 address; 74 u32 address;
75 int ret_type; 75 int ret_type;
76 s32 min;
76 77
77 *val = 0; 78 *val = 0;
78 *val2 = 0; 79 *val2 = 0;
@@ -81,8 +82,8 @@ static int prox_read_raw(struct iio_dev *indio_dev,
81 switch (chan->scan_index) { 82 switch (chan->scan_index) {
82 case CHANNEL_SCAN_INDEX_PRESENCE: 83 case CHANNEL_SCAN_INDEX_PRESENCE:
83 report_id = prox_state->prox_attr.report_id; 84 report_id = prox_state->prox_attr.report_id;
84 address = 85 min = prox_state->prox_attr.logical_minimum;
85 HID_USAGE_SENSOR_HUMAN_PRESENCE; 86 address = HID_USAGE_SENSOR_HUMAN_PRESENCE;
86 break; 87 break;
87 default: 88 default:
88 report_id = -1; 89 report_id = -1;
@@ -95,7 +96,8 @@ static int prox_read_raw(struct iio_dev *indio_dev,
95 prox_state->common_attributes.hsdev, 96 prox_state->common_attributes.hsdev,
96 HID_USAGE_SENSOR_PROX, address, 97 HID_USAGE_SENSOR_PROX, address,
97 report_id, 98 report_id,
98 SENSOR_HUB_SYNC); 99 SENSOR_HUB_SYNC,
100 min < 0);
99 hid_sensor_power_state(&prox_state->common_attributes, 101 hid_sensor_power_state(&prox_state->common_attributes,
100 false); 102 false);
101 } else { 103 } else {
diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
index d55c4885211a..f3c0d41e5a8c 100644
--- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c
+++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
@@ -163,21 +163,23 @@ static int magn_3d_read_raw(struct iio_dev *indio_dev,
163 int report_id = -1; 163 int report_id = -1;
164 u32 address; 164 u32 address;
165 int ret_type; 165 int ret_type;
166 s32 min;
166 167
167 *val = 0; 168 *val = 0;
168 *val2 = 0; 169 *val2 = 0;
169 switch (mask) { 170 switch (mask) {
170 case IIO_CHAN_INFO_RAW: 171 case IIO_CHAN_INFO_RAW:
171 hid_sensor_power_state(&magn_state->magn_flux_attributes, true); 172 hid_sensor_power_state(&magn_state->magn_flux_attributes, true);
172 report_id = 173 report_id = magn_state->magn[chan->address].report_id;
173 magn_state->magn[chan->address].report_id; 174 min = magn_state->magn[chan->address].logical_minimum;
174 address = magn_3d_addresses[chan->address]; 175 address = magn_3d_addresses[chan->address];
175 if (report_id >= 0) 176 if (report_id >= 0)
176 *val = sensor_hub_input_attr_get_raw_value( 177 *val = sensor_hub_input_attr_get_raw_value(
177 magn_state->magn_flux_attributes.hsdev, 178 magn_state->magn_flux_attributes.hsdev,
178 HID_USAGE_SENSOR_COMPASS_3D, address, 179 HID_USAGE_SENSOR_COMPASS_3D, address,
179 report_id, 180 report_id,
180 SENSOR_HUB_SYNC); 181 SENSOR_HUB_SYNC,
182 min < 0);
181 else { 183 else {
182 *val = 0; 184 *val = 0;
183 hid_sensor_power_state( 185 hid_sensor_power_state(
diff --git a/drivers/iio/magnetometer/st_magn_buffer.c b/drivers/iio/magnetometer/st_magn_buffer.c
index 0a9e8fadfa9d..37ab30566464 100644
--- a/drivers/iio/magnetometer/st_magn_buffer.c
+++ b/drivers/iio/magnetometer/st_magn_buffer.c
@@ -30,11 +30,6 @@ int st_magn_trig_set_state(struct iio_trigger *trig, bool state)
30 return st_sensors_set_dataready_irq(indio_dev, state); 30 return st_sensors_set_dataready_irq(indio_dev, state);
31} 31}
32 32
33static int st_magn_buffer_preenable(struct iio_dev *indio_dev)
34{
35 return st_sensors_set_enable(indio_dev, true);
36}
37
38static int st_magn_buffer_postenable(struct iio_dev *indio_dev) 33static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
39{ 34{
40 int err; 35 int err;
@@ -50,7 +45,7 @@ static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
50 if (err < 0) 45 if (err < 0)
51 goto st_magn_buffer_postenable_error; 46 goto st_magn_buffer_postenable_error;
52 47
53 return err; 48 return st_sensors_set_enable(indio_dev, true);
54 49
55st_magn_buffer_postenable_error: 50st_magn_buffer_postenable_error:
56 kfree(mdata->buffer_data); 51 kfree(mdata->buffer_data);
@@ -63,11 +58,11 @@ static int st_magn_buffer_predisable(struct iio_dev *indio_dev)
63 int err; 58 int err;
64 struct st_sensor_data *mdata = iio_priv(indio_dev); 59 struct st_sensor_data *mdata = iio_priv(indio_dev);
65 60
66 err = iio_triggered_buffer_predisable(indio_dev); 61 err = st_sensors_set_enable(indio_dev, false);
67 if (err < 0) 62 if (err < 0)
68 goto st_magn_buffer_predisable_error; 63 goto st_magn_buffer_predisable_error;
69 64
70 err = st_sensors_set_enable(indio_dev, false); 65 err = iio_triggered_buffer_predisable(indio_dev);
71 66
72st_magn_buffer_predisable_error: 67st_magn_buffer_predisable_error:
73 kfree(mdata->buffer_data); 68 kfree(mdata->buffer_data);
@@ -75,7 +70,6 @@ st_magn_buffer_predisable_error:
75} 70}
76 71
77static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = { 72static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = {
78 .preenable = &st_magn_buffer_preenable,
79 .postenable = &st_magn_buffer_postenable, 73 .postenable = &st_magn_buffer_postenable,
80 .predisable = &st_magn_buffer_predisable, 74 .predisable = &st_magn_buffer_predisable,
81}; 75};
diff --git a/drivers/iio/orientation/hid-sensor-incl-3d.c b/drivers/iio/orientation/hid-sensor-incl-3d.c
index 1e5451d1ff88..bdc5e4554ee4 100644
--- a/drivers/iio/orientation/hid-sensor-incl-3d.c
+++ b/drivers/iio/orientation/hid-sensor-incl-3d.c
@@ -111,21 +111,23 @@ static int incl_3d_read_raw(struct iio_dev *indio_dev,
111 int report_id = -1; 111 int report_id = -1;
112 u32 address; 112 u32 address;
113 int ret_type; 113 int ret_type;
114 s32 min;
114 115
115 *val = 0; 116 *val = 0;
116 *val2 = 0; 117 *val2 = 0;
117 switch (mask) { 118 switch (mask) {
118 case IIO_CHAN_INFO_RAW: 119 case IIO_CHAN_INFO_RAW:
119 hid_sensor_power_state(&incl_state->common_attributes, true); 120 hid_sensor_power_state(&incl_state->common_attributes, true);
120 report_id = 121 report_id = incl_state->incl[chan->scan_index].report_id;
121 incl_state->incl[chan->scan_index].report_id; 122 min = incl_state->incl[chan->scan_index].logical_minimum;
122 address = incl_3d_addresses[chan->scan_index]; 123 address = incl_3d_addresses[chan->scan_index];
123 if (report_id >= 0) 124 if (report_id >= 0)
124 *val = sensor_hub_input_attr_get_raw_value( 125 *val = sensor_hub_input_attr_get_raw_value(
125 incl_state->common_attributes.hsdev, 126 incl_state->common_attributes.hsdev,
126 HID_USAGE_SENSOR_INCLINOMETER_3D, address, 127 HID_USAGE_SENSOR_INCLINOMETER_3D, address,
127 report_id, 128 report_id,
128 SENSOR_HUB_SYNC); 129 SENSOR_HUB_SYNC,
130 min < 0);
129 else { 131 else {
130 hid_sensor_power_state(&incl_state->common_attributes, 132 hid_sensor_power_state(&incl_state->common_attributes,
131 false); 133 false);
diff --git a/drivers/iio/pressure/hid-sensor-press.c b/drivers/iio/pressure/hid-sensor-press.c
index 4c437918f1d2..d7b1c00ceb4d 100644
--- a/drivers/iio/pressure/hid-sensor-press.c
+++ b/drivers/iio/pressure/hid-sensor-press.c
@@ -77,6 +77,7 @@ static int press_read_raw(struct iio_dev *indio_dev,
77 int report_id = -1; 77 int report_id = -1;
78 u32 address; 78 u32 address;
79 int ret_type; 79 int ret_type;
80 s32 min;
80 81
81 *val = 0; 82 *val = 0;
82 *val2 = 0; 83 *val2 = 0;
@@ -85,8 +86,8 @@ static int press_read_raw(struct iio_dev *indio_dev,
85 switch (chan->scan_index) { 86 switch (chan->scan_index) {
86 case CHANNEL_SCAN_INDEX_PRESSURE: 87 case CHANNEL_SCAN_INDEX_PRESSURE:
87 report_id = press_state->press_attr.report_id; 88 report_id = press_state->press_attr.report_id;
88 address = 89 min = press_state->press_attr.logical_minimum;
89 HID_USAGE_SENSOR_ATMOSPHERIC_PRESSURE; 90 address = HID_USAGE_SENSOR_ATMOSPHERIC_PRESSURE;
90 break; 91 break;
91 default: 92 default:
92 report_id = -1; 93 report_id = -1;
@@ -99,7 +100,8 @@ static int press_read_raw(struct iio_dev *indio_dev,
99 press_state->common_attributes.hsdev, 100 press_state->common_attributes.hsdev,
100 HID_USAGE_SENSOR_PRESSURE, address, 101 HID_USAGE_SENSOR_PRESSURE, address,
101 report_id, 102 report_id,
102 SENSOR_HUB_SYNC); 103 SENSOR_HUB_SYNC,
104 min < 0);
103 hid_sensor_power_state(&press_state->common_attributes, 105 hid_sensor_power_state(&press_state->common_attributes,
104 false); 106 false);
105 } else { 107 } else {
diff --git a/drivers/iio/temperature/hid-sensor-temperature.c b/drivers/iio/temperature/hid-sensor-temperature.c
index beaf6fd3e337..b592fc4f007e 100644
--- a/drivers/iio/temperature/hid-sensor-temperature.c
+++ b/drivers/iio/temperature/hid-sensor-temperature.c
@@ -76,7 +76,8 @@ static int temperature_read_raw(struct iio_dev *indio_dev,
76 HID_USAGE_SENSOR_TEMPERATURE, 76 HID_USAGE_SENSOR_TEMPERATURE,
77 HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE, 77 HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
78 temp_st->temperature_attr.report_id, 78 temp_st->temperature_attr.report_id,
79 SENSOR_HUB_SYNC); 79 SENSOR_HUB_SYNC,
80 temp_st->temperature_attr.logical_minimum < 0);
80 hid_sensor_power_state( 81 hid_sensor_power_state(
81 &temp_st->common_attributes, 82 &temp_st->common_attributes,
82 false); 83 false);
diff --git a/drivers/rtc/rtc-hid-sensor-time.c b/drivers/rtc/rtc-hid-sensor-time.c
index 2751dba850c6..3e1abb455472 100644
--- a/drivers/rtc/rtc-hid-sensor-time.c
+++ b/drivers/rtc/rtc-hid-sensor-time.c
@@ -213,7 +213,7 @@ static int hid_rtc_read_time(struct device *dev, struct rtc_time *tm)
213 /* get a report with all values through requesting one value */ 213 /* get a report with all values through requesting one value */
214 sensor_hub_input_attr_get_raw_value(time_state->common_attributes.hsdev, 214 sensor_hub_input_attr_get_raw_value(time_state->common_attributes.hsdev,
215 HID_USAGE_SENSOR_TIME, hid_time_addresses[0], 215 HID_USAGE_SENSOR_TIME, hid_time_addresses[0],
216 time_state->info[0].report_id, SENSOR_HUB_SYNC); 216 time_state->info[0].report_id, SENSOR_HUB_SYNC, false);
217 /* wait for all values (event) */ 217 /* wait for all values (event) */
218 ret = wait_for_completion_killable_timeout( 218 ret = wait_for_completion_killable_timeout(
219 &time_state->comp_last_time, HZ*6); 219 &time_state->comp_last_time, HZ*6);
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
index 331dc377c275..dc12f5c4b076 100644
--- a/include/linux/hid-sensor-hub.h
+++ b/include/linux/hid-sensor-hub.h
@@ -177,6 +177,7 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
177* @attr_usage_id: Attribute usage id as per spec 177* @attr_usage_id: Attribute usage id as per spec
178* @report_id: Report id to look for 178* @report_id: Report id to look for
179* @flag: Synchronous or asynchronous read 179* @flag: Synchronous or asynchronous read
180* @is_signed: If true then fields < 32 bits will be sign-extended
180* 181*
181* Issues a synchronous or asynchronous read request for an input attribute. 182* Issues a synchronous or asynchronous read request for an input attribute.
182* Returns data upto 32 bits. 183* Returns data upto 32 bits.
@@ -190,7 +191,8 @@ enum sensor_hub_read_flags {
190int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, 191int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
191 u32 usage_id, 192 u32 usage_id,
192 u32 attr_usage_id, u32 report_id, 193 u32 attr_usage_id, u32 report_id,
193 enum sensor_hub_read_flags flag 194 enum sensor_hub_read_flags flag,
195 bool is_signed
194); 196);
195 197
196/** 198/**