aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>2014-04-18 19:22:00 -0400
committerJonathan Cameron <jic23@kernel.org>2014-05-05 05:59:47 -0400
commit92463fdab5d8e5f97d96478383c3d3e5385e867b (patch)
tree3f124e75e87c681c173df897c9b79831491cc1dc /drivers/iio
parent36783d09f1a5c0fdfe9c0d177b5491f0ed0509ce (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.c17
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
47static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { 51static 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,