diff options
author | Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> | 2014-04-18 19:22:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-05-05 05:59:47 -0400 |
commit | 92463fdab5d8e5f97d96478383c3d3e5385e867b (patch) | |
tree | 3f124e75e87c681c173df897c9b79831491cc1dc /drivers/iio | |
parent | 36783d09f1a5c0fdfe9c0d177b5491f0ed0509ce (diff) |
iio: hid-sensors: Compass 3D: adjust scale and offset
Using units and unit exponent to calculate scale which is compliant
to IIO ABI.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/magnetometer/hid-sensor-magn-3d.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c index 6d162b7e7af5..131ced0dcb1c 100644 --- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c +++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c | |||
@@ -42,6 +42,10 @@ struct magn_3d_state { | |||
42 | struct hid_sensor_common common_attributes; | 42 | struct hid_sensor_common common_attributes; |
43 | struct hid_sensor_hub_attribute_info magn[MAGN_3D_CHANNEL_MAX]; | 43 | struct hid_sensor_hub_attribute_info magn[MAGN_3D_CHANNEL_MAX]; |
44 | u32 magn_val[MAGN_3D_CHANNEL_MAX]; | 44 | u32 magn_val[MAGN_3D_CHANNEL_MAX]; |
45 | int scale_pre_decml; | ||
46 | int scale_post_decml; | ||
47 | int scale_precision; | ||
48 | int value_offset; | ||
45 | }; | 49 | }; |
46 | 50 | ||
47 | static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { | 51 | static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { |
@@ -124,12 +128,12 @@ static int magn_3d_read_raw(struct iio_dev *indio_dev, | |||
124 | ret_type = IIO_VAL_INT; | 128 | ret_type = IIO_VAL_INT; |
125 | break; | 129 | break; |
126 | case IIO_CHAN_INFO_SCALE: | 130 | case IIO_CHAN_INFO_SCALE: |
127 | *val = magn_state->magn[CHANNEL_SCAN_INDEX_X].units; | 131 | *val = magn_state->scale_pre_decml; |
128 | ret_type = IIO_VAL_INT; | 132 | *val2 = magn_state->scale_post_decml; |
133 | ret_type = magn_state->scale_precision; | ||
129 | break; | 134 | break; |
130 | case IIO_CHAN_INFO_OFFSET: | 135 | case IIO_CHAN_INFO_OFFSET: |
131 | *val = hid_sensor_convert_exponent( | 136 | *val = magn_state->value_offset; |
132 | magn_state->magn[CHANNEL_SCAN_INDEX_X].unit_expo); | ||
133 | ret_type = IIO_VAL_INT; | 137 | ret_type = IIO_VAL_INT; |
134 | break; | 138 | break; |
135 | case IIO_CHAN_INFO_SAMP_FREQ: | 139 | case IIO_CHAN_INFO_SAMP_FREQ: |
@@ -263,6 +267,11 @@ static int magn_3d_parse_report(struct platform_device *pdev, | |||
263 | st->magn[1].index, st->magn[1].report_id, | 267 | st->magn[1].index, st->magn[1].report_id, |
264 | st->magn[2].index, st->magn[2].report_id); | 268 | st->magn[2].index, st->magn[2].report_id); |
265 | 269 | ||
270 | st->scale_precision = hid_sensor_format_scale( | ||
271 | HID_USAGE_SENSOR_COMPASS_3D, | ||
272 | &st->magn[CHANNEL_SCAN_INDEX_X], | ||
273 | &st->scale_pre_decml, &st->scale_post_decml); | ||
274 | |||
266 | /* Set Sensitivity field ids, when there is no individual modifier */ | 275 | /* Set Sensitivity field ids, when there is no individual modifier */ |
267 | if (st->common_attributes.sensitivity.index < 0) { | 276 | if (st->common_attributes.sensitivity.index < 0) { |
268 | sensor_hub_input_get_attribute_info(hsdev, | 277 | sensor_hub_input_get_attribute_info(hsdev, |