diff options
author | Reyad Attiyat <reyad.attiyat@gmail.com> | 2014-07-17 14:18:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-07-20 08:39:35 -0400 |
commit | abea9c62c32fabb9f712f01cbf12ce24694eca88 (patch) | |
tree | 0c72b9bdbf9a35cc66f4ff105cbfd056609ff2c5 /drivers/iio/magnetometer | |
parent | 2a96540a5c0d136c3c412ec650fad301aaf12bf7 (diff) |
iio: hid-sensor-magn-3d: Add support for rotation from north
Add the HID usage attribute ID's and IIO channel info for rotation
from north support.
Signed-off-by: Reyad Attiyat <reyad.attiyat@gmail.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio/magnetometer')
-rw-r--r-- | drivers/iio/magnetometer/hid-sensor-magn-3d.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c index c0a659cc6715..ad83cf293b15 100644 --- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c +++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c | |||
@@ -35,6 +35,10 @@ enum magn_3d_channel { | |||
35 | CHANNEL_SCAN_INDEX_X, | 35 | CHANNEL_SCAN_INDEX_X, |
36 | CHANNEL_SCAN_INDEX_Y, | 36 | CHANNEL_SCAN_INDEX_Y, |
37 | CHANNEL_SCAN_INDEX_Z, | 37 | CHANNEL_SCAN_INDEX_Z, |
38 | CHANNEL_SCAN_INDEX_NORTH_MAGN_TILT_COMP, | ||
39 | CHANNEL_SCAN_INDEX_NORTH_TRUE_TILT_COMP, | ||
40 | CHANNEL_SCAN_INDEX_NORTH_MAGN, | ||
41 | CHANNEL_SCAN_INDEX_NORTH_TRUE, | ||
38 | MAGN_3D_CHANNEL_MAX, | 42 | MAGN_3D_CHANNEL_MAX, |
39 | }; | 43 | }; |
40 | 44 | ||
@@ -57,7 +61,11 @@ struct magn_3d_state { | |||
57 | static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { | 61 | static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { |
58 | HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS, | 62 | HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS, |
59 | HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Y_AXIS, | 63 | HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Y_AXIS, |
60 | HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS | 64 | HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS, |
65 | HID_USAGE_SENSOR_ORIENT_COMP_MAGN_NORTH, | ||
66 | HID_USAGE_SENSOR_ORIENT_COMP_TRUE_NORTH, | ||
67 | HID_USAGE_SENSOR_ORIENT_MAGN_NORTH, | ||
68 | HID_USAGE_SENSOR_ORIENT_TRUE_NORTH, | ||
61 | }; | 69 | }; |
62 | 70 | ||
63 | /* Channel definitions */ | 71 | /* Channel definitions */ |
@@ -89,6 +97,42 @@ static const struct iio_chan_spec magn_3d_channels[] = { | |||
89 | BIT(IIO_CHAN_INFO_SCALE) | | 97 | BIT(IIO_CHAN_INFO_SCALE) | |
90 | BIT(IIO_CHAN_INFO_SAMP_FREQ) | | 98 | BIT(IIO_CHAN_INFO_SAMP_FREQ) | |
91 | BIT(IIO_CHAN_INFO_HYSTERESIS), | 99 | BIT(IIO_CHAN_INFO_HYSTERESIS), |
100 | }, { | ||
101 | .type = IIO_ROT, | ||
102 | .modified = 1, | ||
103 | .channel2 = IIO_MOD_NORTH_MAGN_TILT_COMP, | ||
104 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
105 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | | ||
106 | BIT(IIO_CHAN_INFO_SCALE) | | ||
107 | BIT(IIO_CHAN_INFO_SAMP_FREQ) | | ||
108 | BIT(IIO_CHAN_INFO_HYSTERESIS), | ||
109 | }, { | ||
110 | .type = IIO_ROT, | ||
111 | .modified = 1, | ||
112 | .channel2 = IIO_MOD_NORTH_TRUE_TILT_COMP, | ||
113 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
114 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | | ||
115 | BIT(IIO_CHAN_INFO_SCALE) | | ||
116 | BIT(IIO_CHAN_INFO_SAMP_FREQ) | | ||
117 | BIT(IIO_CHAN_INFO_HYSTERESIS), | ||
118 | }, { | ||
119 | .type = IIO_ROT, | ||
120 | .modified = 1, | ||
121 | .channel2 = IIO_MOD_NORTH_MAGN, | ||
122 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
123 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | | ||
124 | BIT(IIO_CHAN_INFO_SCALE) | | ||
125 | BIT(IIO_CHAN_INFO_SAMP_FREQ) | | ||
126 | BIT(IIO_CHAN_INFO_HYSTERESIS), | ||
127 | }, { | ||
128 | .type = IIO_ROT, | ||
129 | .modified = 1, | ||
130 | .channel2 = IIO_MOD_NORTH_TRUE, | ||
131 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
132 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | | ||
133 | BIT(IIO_CHAN_INFO_SCALE) | | ||
134 | BIT(IIO_CHAN_INFO_SAMP_FREQ) | | ||
135 | BIT(IIO_CHAN_INFO_HYSTERESIS), | ||
92 | } | 136 | } |
93 | }; | 137 | }; |
94 | 138 | ||
@@ -248,6 +292,13 @@ static int magn_3d_capture_sample(struct hid_sensor_hub_device *hsdev, | |||
248 | offset = (usage_id - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS) | 292 | offset = (usage_id - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS) |
249 | + CHANNEL_SCAN_INDEX_X; | 293 | + CHANNEL_SCAN_INDEX_X; |
250 | break; | 294 | break; |
295 | case HID_USAGE_SENSOR_ORIENT_COMP_MAGN_NORTH: | ||
296 | case HID_USAGE_SENSOR_ORIENT_COMP_TRUE_NORTH: | ||
297 | case HID_USAGE_SENSOR_ORIENT_MAGN_NORTH: | ||
298 | case HID_USAGE_SENSOR_ORIENT_TRUE_NORTH: | ||
299 | offset = (usage_id - HID_USAGE_SENSOR_ORIENT_COMP_MAGN_NORTH) | ||
300 | + CHANNEL_SCAN_INDEX_NORTH_MAGN_TILT_COMP; | ||
301 | break; | ||
251 | default: | 302 | default: |
252 | return -EINVAL; | 303 | return -EINVAL; |
253 | } | 304 | } |