Commit abea9c62c32fabb9f712f01cbf12ce24694eca88

Authored by Reyad Attiyat
Committed by Jonathan Cameron
1 parent 2a96540a5c

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>

Showing 1 changed file with 52 additions and 1 deletions Side-by-side Diff

drivers/iio/magnetometer/hid-sensor-magn-3d.c
... ... @@ -35,6 +35,10 @@
35 35 CHANNEL_SCAN_INDEX_X,
36 36 CHANNEL_SCAN_INDEX_Y,
37 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 42 MAGN_3D_CHANNEL_MAX,
39 43 };
40 44  
... ... @@ -57,7 +61,11 @@
57 61 static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = {
58 62 HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS,
59 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 71 /* Channel definitions */
... ... @@ -89,6 +97,42 @@
89 97 BIT(IIO_CHAN_INFO_SCALE) |
90 98 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
91 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  
... ... @@ -247,6 +291,13 @@
247 291 case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS:
248 292 offset = (usage_id - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS)
249 293 + CHANNEL_SCAN_INDEX_X;
  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;
250 301 break;
251 302 default:
252 303 return -EINVAL;