aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/magnetometer
diff options
context:
space:
mode:
authorReyad Attiyat <reyad.attiyat@gmail.com>2014-07-17 14:18:00 -0400
committerJonathan Cameron <jic23@kernel.org>2014-07-20 08:39:35 -0400
commitabea9c62c32fabb9f712f01cbf12ce24694eca88 (patch)
tree0c72b9bdbf9a35cc66f4ff105cbfd056609ff2c5 /drivers/iio/magnetometer
parent2a96540a5c0d136c3c412ec650fad301aaf12bf7 (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.c53
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 {
57static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { 61static 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 }