diff options
| -rw-r--r-- | drivers/hid/hid-sensor-custom.c | 2 | ||||
| -rw-r--r-- | drivers/hid/hid-sensor-hub.c | 13 | ||||
| -rw-r--r-- | drivers/iio/accel/hid-sensor-accel-3d.c | 5 | ||||
| -rw-r--r-- | drivers/iio/gyro/hid-sensor-gyro-3d.c | 5 | ||||
| -rw-r--r-- | drivers/iio/humidity/hid-sensor-humidity.c | 3 | ||||
| -rw-r--r-- | drivers/iio/light/hid-sensor-als.c | 8 | ||||
| -rw-r--r-- | drivers/iio/light/hid-sensor-prox.c | 8 | ||||
| -rw-r--r-- | drivers/iio/magnetometer/hid-sensor-magn-3d.c | 8 | ||||
| -rw-r--r-- | drivers/iio/magnetometer/st_magn_buffer.c | 12 | ||||
| -rw-r--r-- | drivers/iio/orientation/hid-sensor-incl-3d.c | 8 | ||||
| -rw-r--r-- | drivers/iio/pressure/hid-sensor-press.c | 8 | ||||
| -rw-r--r-- | drivers/iio/temperature/hid-sensor-temperature.c | 3 | ||||
| -rw-r--r-- | drivers/rtc/rtc-hid-sensor-time.c | 2 | ||||
| -rw-r--r-- | include/linux/hid-sensor-hub.h | 4 |
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); | |||
| 299 | int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, | 299 | int 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 | ||
| 33 | static int st_magn_buffer_preenable(struct iio_dev *indio_dev) | ||
| 34 | { | ||
| 35 | return st_sensors_set_enable(indio_dev, true); | ||
| 36 | } | ||
| 37 | |||
| 38 | static int st_magn_buffer_postenable(struct iio_dev *indio_dev) | 33 | static 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 | ||
| 55 | st_magn_buffer_postenable_error: | 50 | st_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 | ||
| 72 | st_magn_buffer_predisable_error: | 67 | st_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 | ||
| 77 | static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = { | 72 | static 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 { | |||
| 190 | int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, | 191 | int 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 | /** |
