* [PATCH 0/3] IIO: hid-sensor-magn-3d: Add support for compass north usage attribute @ 2014-05-28 21:06 Reyad Attiyat 2014-05-28 21:06 ` [PATCH 1/3] IIO: Add iio magn_north ABI documentation Reyad Attiyat ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:06 UTC (permalink / raw) To: linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-iio-u79uwXL29TY76Z2rM5mHXA, jic23-DgEjT+Ai2ygdnm+yROfE0A, srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA, linux-input-u79uwXL29TY76Z2rM5mHXA, jkosina-AlSwsSmVLrQ Cc: Reyad Attiyat Update hid-sensor-magn-3d to dynamically create IIO channels Update IIO to include modifiers for true/magnetic north and tilt compensation compass usages Signed-off-by: Reyad Attiyat <reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Reyad Attiyat (3): IIO: Added iio magn_north ABI documentation IIO: Add iio_chan modifier for True/Magnetic North HID usages IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages Documentation/ABI/testing/sysfs-bus-iio | 76 +++++++ drivers/iio/industrialio-core.c | 4 + drivers/iio/magnetometer/hid-sensor-magn-3d.c | 278 +++++++++++++++++--------- include/linux/iio/types.h | 4 + 4 files changed, 267 insertions(+), 95 deletions(-) -- 1.9.3 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/3] IIO: Add iio magn_north ABI documentation 2014-05-28 21:06 [PATCH 0/3] IIO: hid-sensor-magn-3d: Add support for compass north usage attribute Reyad Attiyat @ 2014-05-28 21:06 ` Reyad Attiyat 2014-05-29 16:46 ` Jonathan Cameron 2014-05-28 21:06 ` [PATCH 2/3] IIO: Add iio_chan modifier for True/Magnetic North HID usages Reyad Attiyat 2014-05-28 21:06 ` [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support " Reyad Attiyat 2 siblings, 1 reply; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:06 UTC (permalink / raw) To: linux-kernel, linux-iio, jic23, srinivas.pandruvada, linux-input, jkosina Cc: Reyad Attiyat Update documentation for HID compass true/magnetic north sensor. Signed-off-by: Reyad Attiyat <reyad.attiyat@gmail.com> --- Documentation/ABI/testing/sysfs-bus-iio | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio index 6e02c50..0341b2f 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -165,6 +165,10 @@ Description: What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_raw What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_raw What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_raw +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_raw +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_raw +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_tilt_comp_raw +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_tilt_comp_raw KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: @@ -249,6 +253,10 @@ What: /sys/bus/iio/devices/iio:deviceX/in_magn_scale What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_scale What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_scale What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_scale +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_scale +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_scale +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_tilt_comp_scale +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_tilt_comp_scale What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_scale What: /sys/bus/iio/devices/iio:deviceX/in_pressure_scale KernelVersion: 2.6.35 @@ -436,6 +444,14 @@ What: /sys/.../iio:deviceX/events/in_magn_y_thresh_rising_en What: /sys/.../iio:deviceX/events/in_magn_y_thresh_falling_en What: /sys/.../iio:deviceX/events/in_magn_z_thresh_rising_en What: /sys/.../iio:deviceX/events/in_magn_z_thresh_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_thresh_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_thresh_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_thresh_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_thresh_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_thresh_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_thresh_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_thresh_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_thresh_falling_en What: /sys/.../iio:deviceX/events/in_voltageY_supply_thresh_rising_en What: /sys/.../iio:deviceX/events/in_voltageY_supply_thresh_falling_en What: /sys/.../iio:deviceX/events/in_voltageY_thresh_rising_en @@ -481,6 +497,14 @@ What: /sys/.../iio:deviceX/events/in_magn_y_roc_rising_en What: /sys/.../iio:deviceX/events/in_magn_y_roc_falling_en What: /sys/.../iio:deviceX/events/in_magn_z_roc_rising_en What: /sys/.../iio:deviceX/events/in_magn_z_roc_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_roc_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_roc_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_roc_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_roc_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_roc_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_roc_falling_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_roc_rising_en +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_roc_falling_en What: /sys/.../iio:deviceX/events/in_voltageY_supply_roc_rising_en What: /sys/.../iio:deviceX/events/in_voltageY_supply_roc_falling_en What: /sys/.../iio:deviceX/events/in_voltageY_roc_rising_en @@ -527,6 +551,14 @@ What: /sys/.../events/in_magn_y_raw_thresh_rising_value What: /sys/.../events/in_magn_y_raw_thresh_falling_value What: /sys/.../events/in_magn_z_raw_thresh_rising_value What: /sys/.../events/in_magn_z_raw_thresh_falling_value +What: /sys/.../events/in_magn_north_raw_thresh_rising_value +What: /sys/.../events/in_magn_north_raw_thresh_falling_value +What: /sys/.../events/in_magn_north_true_raw_thresh_rising_value +What: /sys/.../events/in_magn_north_true_raw_thresh_falling_value +What: /sys/.../events/in_magn_north_tilt_comp_raw_thresh_rising_value +What: /sys/.../events/in_magn_north_tilt_comp_raw_thresh_falling_value +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_thresh_rising_value +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_thresh_falling_value What: /sys/.../events/in_voltageY_supply_raw_thresh_rising_value What: /sys/.../events/in_voltageY_supply_raw_thresh_falling_value What: /sys/.../events/in_voltageY_raw_thresh_rising_value @@ -577,6 +609,18 @@ What: /sys/.../events/in_magn_y_thresh_either_hysteresis What: /sys/.../events/in_magn_z_thresh_rising_hysteresis What: /sys/.../events/in_magn_z_thresh_falling_hysteresis What: /sys/.../events/in_magn_z_thresh_either_hysteresis +What: /sys/.../events/in_magn_north_thresh_rising_hysteresis +What: /sys/.../events/in_magn_north_thresh_falling_hysteresis +What: /sys/.../events/in_magn_north_thresh_either_hysteresis +What: /sys/.../events/in_magn_north_true_thresh_rising_hysteresis +What: /sys/.../events/in_magn_north_true_thresh_falling_hysteresis +What: /sys/.../events/in_magn_north_true_thresh_either_hysteresis +What: /sys/.../events/in_magn_north_tilt_comp_thresh_rising_hysteresis +What: /sys/.../events/in_magn_north_tilt_comp_thresh_falling_hysteresis +What: /sys/.../events/in_magn_north_tilt_comp_thresh_either_hysteresis +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_rising_hysteresis +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_falling_hysteresis +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_either_hysteresis What: /sys/.../events/in_voltageY_thresh_rising_hysteresis What: /sys/.../events/in_voltageY_thresh_falling_hysteresis What: /sys/.../events/in_voltageY_thresh_either_hysteresis @@ -624,6 +668,14 @@ What: /sys/.../events/in_magn_y_raw_roc_rising_value What: /sys/.../events/in_magn_y_raw_roc_falling_value What: /sys/.../events/in_magn_z_raw_roc_rising_value What: /sys/.../events/in_magn_z_raw_roc_falling_value +What: /sys/.../events/in_magn_north_raw_roc_rising_value +What: /sys/.../events/in_magn_north_raw_roc_falling_value +What: /sys/.../events/in_magn_north_true_raw_roc_rising_value +What: /sys/.../events/in_magn_north_true_raw_roc_falling_value +What: /sys/.../events/in_magn_north_tilt_comp_raw_roc_rising_value +What: /sys/.../events/in_magn_north_tilt_comp_raw_roc_falling_value +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_roc_rising_value +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_roc_falling_value What: /sys/.../events/in_voltageY_supply_raw_roc_rising_value What: /sys/.../events/in_voltageY_supply_raw_roc_falling_value What: /sys/.../events/in_voltageY_raw_roc_rising_value @@ -679,6 +731,22 @@ What: /sys/.../events/in_magn_z_thresh_rising_period What: /sys/.../events/in_magn_z_thresh_falling_period What: /sys/.../events/in_magn_z_roc_rising_period What: /sys/.../events/in_magn_z_roc_falling_period +What: /sys/.../events/in_magn_north_thresh_rising_period +What: /sys/.../events/in_magn_north_thresh_falling_period +What: /sys/.../events/in_magn_north_roc_rising_period +What: /sys/.../events/in_magn_north_roc_falling_period +What: /sys/.../events/in_magn_north_true_thresh_rising_period +What: /sys/.../events/in_magn_north_true_thresh_falling_period +What: /sys/.../events/in_magn_north_true_roc_rising_period +What: /sys/.../events/in_magn_north_true_roc_falling_period +What: /sys/.../events/in_magn_north_tilt_comp_thresh_rising_period +What: /sys/.../events/in_magn_north_tilt_comp_thresh_falling_period +What: /sys/.../events/in_magn_north_tilt_comp_roc_rising_period +What: /sys/.../events/in_magn_north_tilt_comp_roc_falling_period +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_rising_period +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_falling_period +What: /sys/.../events/in_magn_north_true_tilt_comp_roc_rising_period +What: /sys/.../events/in_magn_north_true_tilt_comp_roc_falling_period What: /sys/.../events/in_voltageY_supply_thresh_rising_period What: /sys/.../events/in_voltageY_supply_thresh_falling_period What: /sys/.../events/in_voltageY_supply_roc_rising_period @@ -776,6 +844,10 @@ What: /sys/.../iio:deviceX/scan_elements/in_anglvel_z_en What: /sys/.../iio:deviceX/scan_elements/in_magn_x_en What: /sys/.../iio:deviceX/scan_elements/in_magn_y_en What: /sys/.../iio:deviceX/scan_elements/in_magn_z_en +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_en +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_en +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_tilt_comp_en +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_tilt_comp_en What: /sys/.../iio:deviceX/scan_elements/in_timestamp_en What: /sys/.../iio:deviceX/scan_elements/in_voltageY_supply_en What: /sys/.../iio:deviceX/scan_elements/in_voltageY_en @@ -840,6 +912,10 @@ What: /sys/.../iio:deviceX/scan_elements/in_anglvel_z_index What: /sys/.../iio:deviceX/scan_elements/in_magn_x_index What: /sys/.../iio:deviceX/scan_elements/in_magn_y_index What: /sys/.../iio:deviceX/scan_elements/in_magn_z_index +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_index +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_index +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_tilt_comp_index +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_tilt_comp_index What: /sys/.../iio:deviceX/scan_elements/in_incli_x_index What: /sys/.../iio:deviceX/scan_elements/in_incli_y_index What: /sys/.../iio:deviceX/scan_elements/in_timestamp_index -- 1.9.3 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] IIO: Add iio magn_north ABI documentation 2014-05-28 21:06 ` [PATCH 1/3] IIO: Add iio magn_north ABI documentation Reyad Attiyat @ 2014-05-29 16:46 ` Jonathan Cameron [not found] ` <53876477.7000503-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 0 siblings, 1 reply; 13+ messages in thread From: Jonathan Cameron @ 2014-05-29 16:46 UTC (permalink / raw) To: Reyad Attiyat, linux-kernel, linux-iio, srinivas.pandruvada, linux-input, jkosina On 28/05/14 22:06, Reyad Attiyat wrote: > Update documentation for HID compass true/magnetic north sensor. > > Signed-off-by: Reyad Attiyat <reyad.attiyat@gmail.com> > --- > Documentation/ABI/testing/sysfs-bus-iio | 76 +++++++++++++++++++++++++++++++++ > 1 file changed, 76 insertions(+) > > diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio > index 6e02c50..0341b2f 100644 > --- a/Documentation/ABI/testing/sysfs-bus-iio > +++ b/Documentation/ABI/testing/sysfs-bus-iio > @@ -165,6 +165,10 @@ Description: > What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_raw > What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_raw > What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_raw Hmm. The question to my mind is whether people would expect a simple north to give them which direction north is? Also is it actually relevant whether they find north from a magnetometer or some other method? I wonder if we want to make these some sort of north referenced rotation? in_rot_from_true_north_raw in_rot_from_magnetic_north_raw Technically it is possible to get some direction information from some GPS receivers or to to maintain a knowledge of its location with good gyroscopes. Ultimately userspace doesn't care about it. When we were using the axial magnetic functions we were measuring the field magnitude in that direction. As I understand it here it is just an angle? J > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_raw > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_raw > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_tilt_comp_raw > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_tilt_comp_raw > KernelVersion: 2.6.35 > Contact: linux-iio@vger.kernel.org > Description: > @@ -249,6 +253,10 @@ What: /sys/bus/iio/devices/iio:deviceX/in_magn_scale > What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_scale > What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_scale > What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_scale > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_scale > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_scale > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_tilt_comp_scale > +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_tilt_comp_scale > What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_scale > What: /sys/bus/iio/devices/iio:deviceX/in_pressure_scale > KernelVersion: 2.6.35 > @@ -436,6 +444,14 @@ What: /sys/.../iio:deviceX/events/in_magn_y_thresh_rising_en > What: /sys/.../iio:deviceX/events/in_magn_y_thresh_falling_en > What: /sys/.../iio:deviceX/events/in_magn_z_thresh_rising_en > What: /sys/.../iio:deviceX/events/in_magn_z_thresh_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_thresh_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_thresh_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_thresh_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_thresh_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_thresh_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_thresh_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_thresh_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_thresh_falling_en > What: /sys/.../iio:deviceX/events/in_voltageY_supply_thresh_rising_en > What: /sys/.../iio:deviceX/events/in_voltageY_supply_thresh_falling_en > What: /sys/.../iio:deviceX/events/in_voltageY_thresh_rising_en > @@ -481,6 +497,14 @@ What: /sys/.../iio:deviceX/events/in_magn_y_roc_rising_en > What: /sys/.../iio:deviceX/events/in_magn_y_roc_falling_en > What: /sys/.../iio:deviceX/events/in_magn_z_roc_rising_en > What: /sys/.../iio:deviceX/events/in_magn_z_roc_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_roc_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_roc_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_roc_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_roc_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_roc_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_roc_falling_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_roc_rising_en > +What: /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_roc_falling_en > What: /sys/.../iio:deviceX/events/in_voltageY_supply_roc_rising_en > What: /sys/.../iio:deviceX/events/in_voltageY_supply_roc_falling_en > What: /sys/.../iio:deviceX/events/in_voltageY_roc_rising_en > @@ -527,6 +551,14 @@ What: /sys/.../events/in_magn_y_raw_thresh_rising_value > What: /sys/.../events/in_magn_y_raw_thresh_falling_value > What: /sys/.../events/in_magn_z_raw_thresh_rising_value > What: /sys/.../events/in_magn_z_raw_thresh_falling_value > +What: /sys/.../events/in_magn_north_raw_thresh_rising_value > +What: /sys/.../events/in_magn_north_raw_thresh_falling_value > +What: /sys/.../events/in_magn_north_true_raw_thresh_rising_value > +What: /sys/.../events/in_magn_north_true_raw_thresh_falling_value > +What: /sys/.../events/in_magn_north_tilt_comp_raw_thresh_rising_value > +What: /sys/.../events/in_magn_north_tilt_comp_raw_thresh_falling_value > +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_thresh_rising_value > +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_thresh_falling_value > What: /sys/.../events/in_voltageY_supply_raw_thresh_rising_value > What: /sys/.../events/in_voltageY_supply_raw_thresh_falling_value > What: /sys/.../events/in_voltageY_raw_thresh_rising_value > @@ -577,6 +609,18 @@ What: /sys/.../events/in_magn_y_thresh_either_hysteresis > What: /sys/.../events/in_magn_z_thresh_rising_hysteresis > What: /sys/.../events/in_magn_z_thresh_falling_hysteresis > What: /sys/.../events/in_magn_z_thresh_either_hysteresis > +What: /sys/.../events/in_magn_north_thresh_rising_hysteresis > +What: /sys/.../events/in_magn_north_thresh_falling_hysteresis > +What: /sys/.../events/in_magn_north_thresh_either_hysteresis > +What: /sys/.../events/in_magn_north_true_thresh_rising_hysteresis > +What: /sys/.../events/in_magn_north_true_thresh_falling_hysteresis > +What: /sys/.../events/in_magn_north_true_thresh_either_hysteresis > +What: /sys/.../events/in_magn_north_tilt_comp_thresh_rising_hysteresis > +What: /sys/.../events/in_magn_north_tilt_comp_thresh_falling_hysteresis > +What: /sys/.../events/in_magn_north_tilt_comp_thresh_either_hysteresis > +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_rising_hysteresis > +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_falling_hysteresis > +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_either_hysteresis > What: /sys/.../events/in_voltageY_thresh_rising_hysteresis > What: /sys/.../events/in_voltageY_thresh_falling_hysteresis > What: /sys/.../events/in_voltageY_thresh_either_hysteresis > @@ -624,6 +668,14 @@ What: /sys/.../events/in_magn_y_raw_roc_rising_value > What: /sys/.../events/in_magn_y_raw_roc_falling_value > What: /sys/.../events/in_magn_z_raw_roc_rising_value > What: /sys/.../events/in_magn_z_raw_roc_falling_value > +What: /sys/.../events/in_magn_north_raw_roc_rising_value > +What: /sys/.../events/in_magn_north_raw_roc_falling_value > +What: /sys/.../events/in_magn_north_true_raw_roc_rising_value > +What: /sys/.../events/in_magn_north_true_raw_roc_falling_value > +What: /sys/.../events/in_magn_north_tilt_comp_raw_roc_rising_value > +What: /sys/.../events/in_magn_north_tilt_comp_raw_roc_falling_value > +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_roc_rising_value > +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_roc_falling_value > What: /sys/.../events/in_voltageY_supply_raw_roc_rising_value > What: /sys/.../events/in_voltageY_supply_raw_roc_falling_value > What: /sys/.../events/in_voltageY_raw_roc_rising_value > @@ -679,6 +731,22 @@ What: /sys/.../events/in_magn_z_thresh_rising_period > What: /sys/.../events/in_magn_z_thresh_falling_period > What: /sys/.../events/in_magn_z_roc_rising_period > What: /sys/.../events/in_magn_z_roc_falling_period > +What: /sys/.../events/in_magn_north_thresh_rising_period > +What: /sys/.../events/in_magn_north_thresh_falling_period > +What: /sys/.../events/in_magn_north_roc_rising_period > +What: /sys/.../events/in_magn_north_roc_falling_period > +What: /sys/.../events/in_magn_north_true_thresh_rising_period > +What: /sys/.../events/in_magn_north_true_thresh_falling_period > +What: /sys/.../events/in_magn_north_true_roc_rising_period > +What: /sys/.../events/in_magn_north_true_roc_falling_period > +What: /sys/.../events/in_magn_north_tilt_comp_thresh_rising_period > +What: /sys/.../events/in_magn_north_tilt_comp_thresh_falling_period > +What: /sys/.../events/in_magn_north_tilt_comp_roc_rising_period > +What: /sys/.../events/in_magn_north_tilt_comp_roc_falling_period > +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_rising_period > +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_falling_period > +What: /sys/.../events/in_magn_north_true_tilt_comp_roc_rising_period > +What: /sys/.../events/in_magn_north_true_tilt_comp_roc_falling_period > What: /sys/.../events/in_voltageY_supply_thresh_rising_period > What: /sys/.../events/in_voltageY_supply_thresh_falling_period > What: /sys/.../events/in_voltageY_supply_roc_rising_period > @@ -776,6 +844,10 @@ What: /sys/.../iio:deviceX/scan_elements/in_anglvel_z_en > What: /sys/.../iio:deviceX/scan_elements/in_magn_x_en > What: /sys/.../iio:deviceX/scan_elements/in_magn_y_en > What: /sys/.../iio:deviceX/scan_elements/in_magn_z_en > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_en > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_en > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_tilt_comp_en > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_tilt_comp_en > What: /sys/.../iio:deviceX/scan_elements/in_timestamp_en > What: /sys/.../iio:deviceX/scan_elements/in_voltageY_supply_en > What: /sys/.../iio:deviceX/scan_elements/in_voltageY_en > @@ -840,6 +912,10 @@ What: /sys/.../iio:deviceX/scan_elements/in_anglvel_z_index > What: /sys/.../iio:deviceX/scan_elements/in_magn_x_index > What: /sys/.../iio:deviceX/scan_elements/in_magn_y_index > What: /sys/.../iio:deviceX/scan_elements/in_magn_z_index > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_index > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_index > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_tilt_comp_index > +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_tilt_comp_index > What: /sys/.../iio:deviceX/scan_elements/in_incli_x_index > What: /sys/.../iio:deviceX/scan_elements/in_incli_y_index > What: /sys/.../iio:deviceX/scan_elements/in_timestamp_index > ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <53876477.7000503-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH 1/3] IIO: Add iio magn_north ABI documentation [not found] ` <53876477.7000503-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> @ 2014-06-02 15:54 ` Srinivas Pandruvada 0 siblings, 0 replies; 13+ messages in thread From: Srinivas Pandruvada @ 2014-06-02 15:54 UTC (permalink / raw) To: Jonathan Cameron Cc: Reyad Attiyat, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-iio-u79uwXL29TY76Z2rM5mHXA, linux-input-u79uwXL29TY76Z2rM5mHXA, jkosina-AlSwsSmVLrQ On 05/29/2014 09:46 AM, Jonathan Cameron wrote: > On 28/05/14 22:06, Reyad Attiyat wrote: >> Update documentation for HID compass true/magnetic north sensor. >> >> Signed-off-by: Reyad Attiyat <reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> --- >> Documentation/ABI/testing/sysfs-bus-iio | 76 >> +++++++++++++++++++++++++++++++++ >> 1 file changed, 76 insertions(+) >> >> diff --git a/Documentation/ABI/testing/sysfs-bus-iio >> b/Documentation/ABI/testing/sysfs-bus-iio >> index 6e02c50..0341b2f 100644 >> --- a/Documentation/ABI/testing/sysfs-bus-iio >> +++ b/Documentation/ABI/testing/sysfs-bus-iio >> @@ -165,6 +165,10 @@ Description: >> What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_raw > Hmm. The question to my mind is whether people would expect a simple > north to give > them which direction north is? > Also is it actually relevant whether they find north from a > magnetometer or some other method? > I wonder if we want to make these some sort of north referenced rotation? > in_rot_from_true_north_raw > in_rot_from_magnetic_north_raw > > Technically it is possible to get some direction information from some > GPS receivers or to > to maintain a knowledge of its location with good gyroscopes. > > Ultimately userspace doesn't care about it. When we were using the > axial magnetic functions we > were measuring the field magnitude in that direction. As I understand > it here it is just an angle? Yes, they are angles. Default units are degrees, which we should convert to radians as a standard unit for IIO. Thanks, Srinivas > > J >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_raw >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_raw >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_tilt_comp_raw >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_tilt_comp_raw >> KernelVersion: 2.6.35 >> Contact: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> Description: >> @@ -249,6 +253,10 @@ What: >> /sys/bus/iio/devices/iio:deviceX/in_magn_scale >> What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_scale >> What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_scale >> What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_scale >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_scale >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_scale >> +What: /sys/bus/iio/devices/iio:deviceX/in_magn_north_tilt_comp_scale >> +What: >> /sys/bus/iio/devices/iio:deviceX/in_magn_north_true_tilt_comp_scale >> What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_scale >> What: /sys/bus/iio/devices/iio:deviceX/in_pressure_scale >> KernelVersion: 2.6.35 >> @@ -436,6 +444,14 @@ What: >> /sys/.../iio:deviceX/events/in_magn_y_thresh_rising_en >> What: /sys/.../iio:deviceX/events/in_magn_y_thresh_falling_en >> What: /sys/.../iio:deviceX/events/in_magn_z_thresh_rising_en >> What: /sys/.../iio:deviceX/events/in_magn_z_thresh_falling_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_thresh_rising_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_thresh_falling_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_true_thresh_rising_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_true_thresh_falling_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_thresh_rising_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_thresh_falling_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_thresh_rising_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_thresh_falling_en >> What: /sys/.../iio:deviceX/events/in_voltageY_supply_thresh_rising_en >> What: /sys/.../iio:deviceX/events/in_voltageY_supply_thresh_falling_en >> What: /sys/.../iio:deviceX/events/in_voltageY_thresh_rising_en >> @@ -481,6 +497,14 @@ What: >> /sys/.../iio:deviceX/events/in_magn_y_roc_rising_en >> What: /sys/.../iio:deviceX/events/in_magn_y_roc_falling_en >> What: /sys/.../iio:deviceX/events/in_magn_z_roc_rising_en >> What: /sys/.../iio:deviceX/events/in_magn_z_roc_falling_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_roc_rising_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_roc_falling_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_true_roc_rising_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_true_roc_falling_en >> +What: /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_roc_rising_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_tilt_comp_roc_falling_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_roc_rising_en >> +What: >> /sys/.../iio:deviceX/events/in_magn_north_true_tilt_comp_roc_falling_en >> What: /sys/.../iio:deviceX/events/in_voltageY_supply_roc_rising_en >> What: /sys/.../iio:deviceX/events/in_voltageY_supply_roc_falling_en >> What: /sys/.../iio:deviceX/events/in_voltageY_roc_rising_en >> @@ -527,6 +551,14 @@ What: >> /sys/.../events/in_magn_y_raw_thresh_rising_value >> What: /sys/.../events/in_magn_y_raw_thresh_falling_value >> What: /sys/.../events/in_magn_z_raw_thresh_rising_value >> What: /sys/.../events/in_magn_z_raw_thresh_falling_value >> +What: /sys/.../events/in_magn_north_raw_thresh_rising_value >> +What: /sys/.../events/in_magn_north_raw_thresh_falling_value >> +What: /sys/.../events/in_magn_north_true_raw_thresh_rising_value >> +What: /sys/.../events/in_magn_north_true_raw_thresh_falling_value >> +What: /sys/.../events/in_magn_north_tilt_comp_raw_thresh_rising_value >> +What: /sys/.../events/in_magn_north_tilt_comp_raw_thresh_falling_value >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_raw_thresh_rising_value >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_raw_thresh_falling_value >> What: /sys/.../events/in_voltageY_supply_raw_thresh_rising_value >> What: /sys/.../events/in_voltageY_supply_raw_thresh_falling_value >> What: /sys/.../events/in_voltageY_raw_thresh_rising_value >> @@ -577,6 +609,18 @@ What: >> /sys/.../events/in_magn_y_thresh_either_hysteresis >> What: /sys/.../events/in_magn_z_thresh_rising_hysteresis >> What: /sys/.../events/in_magn_z_thresh_falling_hysteresis >> What: /sys/.../events/in_magn_z_thresh_either_hysteresis >> +What: /sys/.../events/in_magn_north_thresh_rising_hysteresis >> +What: /sys/.../events/in_magn_north_thresh_falling_hysteresis >> +What: /sys/.../events/in_magn_north_thresh_either_hysteresis >> +What: /sys/.../events/in_magn_north_true_thresh_rising_hysteresis >> +What: /sys/.../events/in_magn_north_true_thresh_falling_hysteresis >> +What: /sys/.../events/in_magn_north_true_thresh_either_hysteresis >> +What: /sys/.../events/in_magn_north_tilt_comp_thresh_rising_hysteresis >> +What: /sys/.../events/in_magn_north_tilt_comp_thresh_falling_hysteresis >> +What: /sys/.../events/in_magn_north_tilt_comp_thresh_either_hysteresis >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_thresh_rising_hysteresis >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_thresh_falling_hysteresis >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_thresh_either_hysteresis >> What: /sys/.../events/in_voltageY_thresh_rising_hysteresis >> What: /sys/.../events/in_voltageY_thresh_falling_hysteresis >> What: /sys/.../events/in_voltageY_thresh_either_hysteresis >> @@ -624,6 +668,14 @@ What: >> /sys/.../events/in_magn_y_raw_roc_rising_value >> What: /sys/.../events/in_magn_y_raw_roc_falling_value >> What: /sys/.../events/in_magn_z_raw_roc_rising_value >> What: /sys/.../events/in_magn_z_raw_roc_falling_value >> +What: /sys/.../events/in_magn_north_raw_roc_rising_value >> +What: /sys/.../events/in_magn_north_raw_roc_falling_value >> +What: /sys/.../events/in_magn_north_true_raw_roc_rising_value >> +What: /sys/.../events/in_magn_north_true_raw_roc_falling_value >> +What: /sys/.../events/in_magn_north_tilt_comp_raw_roc_rising_value >> +What: /sys/.../events/in_magn_north_tilt_comp_raw_roc_falling_value >> +What: /sys/.../events/in_magn_north_true_tilt_comp_raw_roc_rising_value >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_raw_roc_falling_value >> What: /sys/.../events/in_voltageY_supply_raw_roc_rising_value >> What: /sys/.../events/in_voltageY_supply_raw_roc_falling_value >> What: /sys/.../events/in_voltageY_raw_roc_rising_value >> @@ -679,6 +731,22 @@ What: >> /sys/.../events/in_magn_z_thresh_rising_period >> What: /sys/.../events/in_magn_z_thresh_falling_period >> What: /sys/.../events/in_magn_z_roc_rising_period >> What: /sys/.../events/in_magn_z_roc_falling_period >> +What: /sys/.../events/in_magn_north_thresh_rising_period >> +What: /sys/.../events/in_magn_north_thresh_falling_period >> +What: /sys/.../events/in_magn_north_roc_rising_period >> +What: /sys/.../events/in_magn_north_roc_falling_period >> +What: /sys/.../events/in_magn_north_true_thresh_rising_period >> +What: /sys/.../events/in_magn_north_true_thresh_falling_period >> +What: /sys/.../events/in_magn_north_true_roc_rising_period >> +What: /sys/.../events/in_magn_north_true_roc_falling_period >> +What: /sys/.../events/in_magn_north_tilt_comp_thresh_rising_period >> +What: /sys/.../events/in_magn_north_tilt_comp_thresh_falling_period >> +What: /sys/.../events/in_magn_north_tilt_comp_roc_rising_period >> +What: /sys/.../events/in_magn_north_tilt_comp_roc_falling_period >> +What: /sys/.../events/in_magn_north_true_tilt_comp_thresh_rising_period >> +What: >> /sys/.../events/in_magn_north_true_tilt_comp_thresh_falling_period >> +What: /sys/.../events/in_magn_north_true_tilt_comp_roc_rising_period >> +What: /sys/.../events/in_magn_north_true_tilt_comp_roc_falling_period >> What: /sys/.../events/in_voltageY_supply_thresh_rising_period >> What: /sys/.../events/in_voltageY_supply_thresh_falling_period >> What: /sys/.../events/in_voltageY_supply_roc_rising_period >> @@ -776,6 +844,10 @@ What: >> /sys/.../iio:deviceX/scan_elements/in_anglvel_z_en >> What: /sys/.../iio:deviceX/scan_elements/in_magn_x_en >> What: /sys/.../iio:deviceX/scan_elements/in_magn_y_en >> What: /sys/.../iio:deviceX/scan_elements/in_magn_z_en >> +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_en >> +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_en >> +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_tilt_comp_en >> +What: >> /sys/.../iio:deviceX/scan_elements/in_magn_north_true_tilt_comp_en >> What: /sys/.../iio:deviceX/scan_elements/in_timestamp_en >> What: /sys/.../iio:deviceX/scan_elements/in_voltageY_supply_en >> What: /sys/.../iio:deviceX/scan_elements/in_voltageY_en >> @@ -840,6 +912,10 @@ What: >> /sys/.../iio:deviceX/scan_elements/in_anglvel_z_index >> What: /sys/.../iio:deviceX/scan_elements/in_magn_x_index >> What: /sys/.../iio:deviceX/scan_elements/in_magn_y_index >> What: /sys/.../iio:deviceX/scan_elements/in_magn_z_index >> +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_index >> +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_true_index >> +What: /sys/.../iio:deviceX/scan_elements/in_magn_north_tilt_comp_index >> +What: >> /sys/.../iio:deviceX/scan_elements/in_magn_north_true_tilt_comp_index >> What: /sys/.../iio:deviceX/scan_elements/in_incli_x_index >> What: /sys/.../iio:deviceX/scan_elements/in_incli_y_index >> What: /sys/.../iio:deviceX/scan_elements/in_timestamp_index >> > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/3] IIO: Add iio_chan modifier for True/Magnetic North HID usages 2014-05-28 21:06 [PATCH 0/3] IIO: hid-sensor-magn-3d: Add support for compass north usage attribute Reyad Attiyat 2014-05-28 21:06 ` [PATCH 1/3] IIO: Add iio magn_north ABI documentation Reyad Attiyat @ 2014-05-28 21:06 ` Reyad Attiyat [not found] ` <1401311175-12784-3-git-send-email-reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2014-05-28 21:06 ` [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support " Reyad Attiyat 2 siblings, 1 reply; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:06 UTC (permalink / raw) To: linux-kernel, linux-iio, jic23, srinivas.pandruvada, linux-input, jkosina Cc: Reyad Attiyat Updated iio_chan_info_enum for compass north sensor usages, including magnetic/true north and tilt compensation. Signed-off-by: Reyad Attiyat <reyad.attiyat@gmail.com> --- drivers/iio/industrialio-core.c | 4 ++++ include/linux/iio/types.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index ede16aec..41bd377 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -84,6 +84,10 @@ static const char * const iio_modifier_names[] = { [IIO_MOD_LIGHT_RED] = "red", [IIO_MOD_LIGHT_GREEN] = "green", [IIO_MOD_LIGHT_BLUE] = "blue", + [IIO_MOD_MAGN_NORTH] = "north", + [IIO_MOD_MAGN_NORTH_TRUE] = "north_true", + [IIO_MOD_MAGN_NORTH_TILT_COMP] = "north_tilt_comp", + [IIO_MOD_MAGN_NORTH_TRUE_TILT_COMP] = "north_true_tilt_comp", }; /* relies on pairs of these shared then separate */ diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h index 084d882..f1e8be6 100644 --- a/include/linux/iio/types.h +++ b/include/linux/iio/types.h @@ -53,6 +53,10 @@ enum iio_modifier { IIO_MOD_LIGHT_RED, IIO_MOD_LIGHT_GREEN, IIO_MOD_LIGHT_BLUE, + IIO_MOD_MAGN_NORTH, + IIO_MOD_MAGN_NORTH_TRUE, + IIO_MOD_MAGN_NORTH_TILT_COMP, + IIO_MOD_MAGN_NORTH_TRUE_TILT_COMP }; enum iio_event_type { -- 1.9.3 ^ permalink raw reply related [flat|nested] 13+ messages in thread
[parent not found: <1401311175-12784-3-git-send-email-reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 2/3] IIO: Add iio_chan modifier for True/Magnetic North HID usages [not found] ` <1401311175-12784-3-git-send-email-reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2014-05-31 10:14 ` Jonathan Cameron [not found] ` <5389AB89.9080305-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 0 siblings, 1 reply; 13+ messages in thread From: Jonathan Cameron @ 2014-05-31 10:14 UTC (permalink / raw) To: Reyad Attiyat, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-iio-u79uwXL29TY76Z2rM5mHXA, srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA, linux-input-u79uwXL29TY76Z2rM5mHXA, jkosina-AlSwsSmVLrQ On 28/05/14 22:06, Reyad Attiyat wrote: > Updated iio_chan_info_enum for compass north sensor usages, > including magnetic/true north and tilt compensation. > > Signed-off-by: Reyad Attiyat <reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > drivers/iio/industrialio-core.c | 4 ++++ > include/linux/iio/types.h | 4 ++++ > 2 files changed, 8 insertions(+) > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index ede16aec..41bd377 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -84,6 +84,10 @@ static const char * const iio_modifier_names[] = { > [IIO_MOD_LIGHT_RED] = "red", > [IIO_MOD_LIGHT_GREEN] = "green", > [IIO_MOD_LIGHT_BLUE] = "blue", > + [IIO_MOD_MAGN_NORTH] = "north", > + [IIO_MOD_MAGN_NORTH_TRUE] = "north_true", > + [IIO_MOD_MAGN_NORTH_TILT_COMP] = "north_tilt_comp", > + [IIO_MOD_MAGN_NORTH_TRUE_TILT_COMP] = "north_true_tilt_comp", > }; I think we need the naming to explicitly mention north_magnetic instead of just north. Whilst it is obvious what north means when you have north true alongside it, it won't be so obvious if one just has the north attribute to see in a particular driver - if anything I'd have the true as the one that was simply called north (as it might not be coming from a magnetometer thought obviously that's the most common source) I'd also rather the enum entries were IIO_MOD_NORTH_MAGN IIO_MOD_NORTH_TRUE IIO_MOD_NORTH_MAGN_TILT_COMP IIO_MOD_NORTH_TRUE_TILT_COMP It is definitely feasible that they will not come from magnetometers - a differential bearing is common on GPS units. > > /* relies on pairs of these shared then separate */ > diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h > index 084d882..f1e8be6 100644 > --- a/include/linux/iio/types.h > +++ b/include/linux/iio/types.h > @@ -53,6 +53,10 @@ enum iio_modifier { > IIO_MOD_LIGHT_RED, > IIO_MOD_LIGHT_GREEN, > IIO_MOD_LIGHT_BLUE, > + IIO_MOD_MAGN_NORTH, > + IIO_MOD_MAGN_NORTH_TRUE, > + IIO_MOD_MAGN_NORTH_TILT_COMP, > + IIO_MOD_MAGN_NORTH_TRUE_TILT_COMP > }; > > enum iio_event_type { > ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <5389AB89.9080305-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH 2/3] IIO: Add iio_chan modifier for True/Magnetic North HID usages [not found] ` <5389AB89.9080305-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> @ 2014-06-02 19:54 ` Reyad Attiyat 0 siblings, 0 replies; 13+ messages in thread From: Reyad Attiyat @ 2014-06-02 19:54 UTC (permalink / raw) To: Jonathan Cameron Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-iio-u79uwXL29TY76Z2rM5mHXA, Srinivas Pandruvada, linux-input, Jiri Kosina Hey Jonathan, > > I think we need the naming to explicitly mention north_magnetic instead > of just north. Whilst it is obvious what north means when you have north > true alongside it, it won't be so obvious if one just has the north > attribute > to see in a particular driver - if anything I'd have the true as the one > that was simply called north (as it might not be coming from a magnetometer > thought obviously that's the most common source) I'd also rather the enum > entries > were > IIO_MOD_NORTH_MAGN > IIO_MOD_NORTH_TRUE > IIO_MOD_NORTH_MAGN_TILT_COMP > IIO_MOD_NORTH_TRUE_TILT_COMP > > It is definitely feasible that they will not come from magnetometers - > a differential bearing is common on GPS units. Makes sense to me. I will update the patches with your suggestions. Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages 2014-05-28 21:06 [PATCH 0/3] IIO: hid-sensor-magn-3d: Add support for compass north usage attribute Reyad Attiyat 2014-05-28 21:06 ` [PATCH 1/3] IIO: Add iio magn_north ABI documentation Reyad Attiyat 2014-05-28 21:06 ` [PATCH 2/3] IIO: Add iio_chan modifier for True/Magnetic North HID usages Reyad Attiyat @ 2014-05-28 21:06 ` Reyad Attiyat 2014-05-28 21:15 ` Reyad Attiyat 2 siblings, 1 reply; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:06 UTC (permalink / raw) To: linux-kernel, linux-iio, jic23, srinivas.pandruvada, linux-input, jkosina Cc: Reyad Attiyat Updated magn_3d_channel enum for all possible north channels Added functions to setup iio_chan_spec array depending on a hid usage report Renamed magn_val to iio_val to differentiate the index being used Updated magn_3d_state struct to hold pointer array (magn_val_addr[]) to iio_val and a count of the iio channels found Updated magn_3d_parse_report to scan for all compass usages and create channels for each Signed-off-by: Reyad Attiyat <reyad.attiyat@gmail.com> --- drivers/iio/magnetometer/hid-sensor-magn-3d.c | 278 +++++++++++++++++--------- 1 file changed, 183 insertions(+), 95 deletions(-) diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c index 6d162b7..7ffac17 100644 --- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c +++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c @@ -34,63 +34,54 @@ enum magn_3d_channel { CHANNEL_SCAN_INDEX_X, CHANNEL_SCAN_INDEX_Y, CHANNEL_SCAN_INDEX_Z, + CHANNEL_SCAN_INDEX_NORTH, + CHANNEL_SCAN_INDEX_NORTH_TRUE, + CHANNEL_SCAN_INDEX_NORTH_TILT_COMP, + CHANNEL_SCAN_INDEX_NORTH_TRUE_TILT_COMP, MAGN_3D_CHANNEL_MAX, }; +#define IIO_CHANNEL_MAX MAGN_3D_CHANNEL_MAX + struct magn_3d_state { struct hid_sensor_hub_callbacks callbacks; struct hid_sensor_common common_attributes; struct hid_sensor_hub_attribute_info magn[MAGN_3D_CHANNEL_MAX]; - u32 magn_val[MAGN_3D_CHANNEL_MAX]; -}; + u32 *magn_val_addr[MAGN_3D_CHANNEL_MAX]; -static const u32 magn_3d_addresses[MAGN_3D_CHANNEL_MAX] = { - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS, - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Y_AXIS, - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS + u32 iio_val[IIO_CHANNEL_MAX]; + int num_iio_channels; }; -/* Channel definitions */ -static const struct iio_chan_spec magn_3d_channels[] = { - { - .type = IIO_MAGN, - .modified = 1, - .channel2 = IIO_MOD_X, - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | - BIT(IIO_CHAN_INFO_SCALE) | - BIT(IIO_CHAN_INFO_SAMP_FREQ) | - BIT(IIO_CHAN_INFO_HYSTERESIS), - .scan_index = CHANNEL_SCAN_INDEX_X, - }, { - .type = IIO_MAGN, - .modified = 1, - .channel2 = IIO_MOD_Y, - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | - BIT(IIO_CHAN_INFO_SCALE) | - BIT(IIO_CHAN_INFO_SAMP_FREQ) | - BIT(IIO_CHAN_INFO_HYSTERESIS), - .scan_index = CHANNEL_SCAN_INDEX_Y, - }, { - .type = IIO_MAGN, - .modified = 1, - .channel2 = IIO_MOD_Z, - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | - BIT(IIO_CHAN_INFO_SCALE) | - BIT(IIO_CHAN_INFO_SAMP_FREQ) | - BIT(IIO_CHAN_INFO_HYSTERESIS), - .scan_index = CHANNEL_SCAN_INDEX_Z, +/* Find index into magn_3d_state magn[] and magn_val_addr[] from HID Usage */ +static int magn_3d_usage_id_to_chan_index(unsigned usage_id){ + int offset = -1; + + switch (usage_id) { + case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS: + offset = CHANNEL_SCAN_INDEX_X; + break; + case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Y_AXIS: + offset = CHANNEL_SCAN_INDEX_Y; + break; + case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS: + offset = CHANNEL_SCAN_INDEX_Z; + break; + case HID_USAGE_SENSOR_ORIENT_COMP_MAGN_NORTH: + offset = CHANNEL_SCAN_INDEX_NORTH_TILT_COMP; + break; + case HID_USAGE_SENSOR_ORIENT_COMP_TRUE_NORTH: + offset = CHANNEL_SCAN_INDEX_NORTH_TRUE_TILT_COMP; + break; + case HID_USAGE_SENSOR_ORIENT_MAGN_NORTH: + offset = CHANNEL_SCAN_INDEX_NORTH; + break; + case HID_USAGE_SENSOR_ORIENT_TRUE_NORTH: + offset = CHANNEL_SCAN_INDEX_NORTH_TRUE; + break; } -}; -/* Adjust channel real bits based on report descriptor */ -static void magn_3d_adjust_channel_bit_mask(struct iio_chan_spec *channels, - int channel, int size) -{ - channels[channel].scan_type.sign = 's'; - /* Real storage bits will change based on the report desc. */ - channels[channel].scan_type.realbits = size * 8; - /* Maximum size of a sample to capture is u32 */ - channels[channel].scan_type.storagebits = sizeof(u32) * 8; + return offset; } /* Channel read_raw handler */ @@ -101,21 +92,31 @@ static int magn_3d_read_raw(struct iio_dev *indio_dev, { struct magn_3d_state *magn_state = iio_priv(indio_dev); int report_id = -1; - u32 address; + unsigned usage_id; + int chan_index = -1; int ret; int ret_type; + dev_dbg(&indio_dev->dev, "magn_3d_read_raw\n"); + *val = 0; *val2 = 0; switch (mask) { case 0: + /* We store the HID usage ID of the iio channel + * in its address field + */ + usage_id = chan->address; + chan_index = magn_3d_usage_id_to_chan_index(usage_id); + if(chan_index < 0) + return -EINVAL; + report_id = - magn_state->magn[chan->scan_index].report_id; - address = magn_3d_addresses[chan->scan_index]; + magn_state->magn[chan_index].report_id; if (report_id >= 0) *val = sensor_hub_input_attr_get_raw_value( magn_state->common_attributes.hsdev, - HID_USAGE_SENSOR_COMPASS_3D, address, + HID_USAGE_SENSOR_COMPASS_3D, usage_id, report_id); else { *val = 0; @@ -202,12 +203,13 @@ static int magn_3d_proc_event(struct hid_sensor_hub_device *hsdev, magn_state->common_attributes.data_ready); if (magn_state->common_attributes.data_ready) hid_sensor_push_data(indio_dev, - magn_state->magn_val, - sizeof(magn_state->magn_val)); + &(magn_state->iio_val), + sizeof(magn_state->iio_val)); return 0; } + /* Capture samples in local storage */ static int magn_3d_capture_sample(struct hid_sensor_hub_device *hsdev, unsigned usage_id, @@ -217,62 +219,147 @@ static int magn_3d_capture_sample(struct hid_sensor_hub_device *hsdev, struct iio_dev *indio_dev = platform_get_drvdata(priv); struct magn_3d_state *magn_state = iio_priv(indio_dev); int offset; + u32 *magn_val; int ret = -EINVAL; - switch (usage_id) { + offset = magn_3d_usage_id_to_chan_index(usage_id); + if(offset < 0) + return ret; + + magn_val = magn_state->magn_val_addr[offset]; + if(!magn_val) + return ret; + + *(magn_val) = *(u32 *)raw_data; + + return 0; +} + +/* Setup the iio_chan_spec for HID Usage ID */ +static int magn_3d_setup_iio_chan(unsigned usage_id, + struct iio_chan_spec* channel, + u32 size, + struct magn_3d_state *st) +{ + int ret = -1; + + if(channel == NULL) + return ret; + + channel->type = IIO_MAGN; + channel->address = usage_id; + channel->modified = 1; + + switch (usage_id){ + case HID_USAGE_SENSOR_ORIENT_COMP_MAGN_NORTH: + channel->channel2 = IIO_MOD_MAGN_NORTH_TILT_COMP; + break; + case HID_USAGE_SENSOR_ORIENT_COMP_TRUE_NORTH: + channel->channel2 = IIO_MOD_MAGN_NORTH_TRUE_TILT_COMP; + break; + case HID_USAGE_SENSOR_ORIENT_MAGN_NORTH: + channel->channel2 = IIO_MOD_MAGN_NORTH; + break; + case HID_USAGE_SENSOR_ORIENT_TRUE_NORTH: + channel->channel2 = IIO_MOD_MAGN_NORTH_TRUE; + break; case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS: + channel->channel2 = IIO_MOD_X; + break; case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Y_AXIS: + channel->channel2 = IIO_MOD_Y; + break; case HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS: - offset = usage_id - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS; - magn_state->magn_val[CHANNEL_SCAN_INDEX_X + offset] = - *(u32 *)raw_data; - ret = 0; - break; - default: + channel->channel2 = IIO_MOD_Z; break; + default: + return ret; } - return ret; + channel->info_mask_shared_by_type = + BIT(IIO_CHAN_INFO_OFFSET) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_SAMP_FREQ) | + BIT(IIO_CHAN_INFO_HYSTERESIS); + + channel->scan_type.sign = 's'; + /* Real storage bits will change based on the report desc. */ + channel->scan_type.realbits = size * 8; + /* Maximum size of a sample to capture is u32 */ + channel->scan_type.storagebits = sizeof(u32) * 8; + + return 0; +} + +static void sensor_hub_fill_attr_info( + struct hid_sensor_hub_attribute_info *info, + s32 index, s32 report_id, struct hid_field *field) +{ + info->index = index; + info->report_id = report_id; + info->units = field->unit; + info->unit_expo = field->unit_exponent; + info->size = (field->report_size * field->report_count)/8; + info->logical_minimum = field->logical_minimum; + info->logical_maximum = field->logical_maximum; } -/* Parse report which is specific to an usage id*/ +/* Read the HID reports and setup IIO Channels */ static int magn_3d_parse_report(struct platform_device *pdev, struct hid_sensor_hub_device *hsdev, - struct iio_chan_spec *channels, + struct iio_chan_spec *iio_chans, unsigned usage_id, struct magn_3d_state *st) { - int ret; + int ret = -1; int i; - - for (i = 0; i <= CHANNEL_SCAN_INDEX_Z; ++i) { - ret = sensor_hub_input_get_attribute_info(hsdev, - HID_INPUT_REPORT, - usage_id, - HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_X_AXIS + i, - &st->magn[CHANNEL_SCAN_INDEX_X + i]); - if (ret < 0) - break; - magn_3d_adjust_channel_bit_mask(channels, - CHANNEL_SCAN_INDEX_X + i, - st->magn[CHANNEL_SCAN_INDEX_X + i].size); - } - dev_dbg(&pdev->dev, "magn_3d %x:%x, %x:%x, %x:%x\n", - st->magn[0].index, - st->magn[0].report_id, - st->magn[1].index, st->magn[1].report_id, - st->magn[2].index, st->magn[2].report_id); - - /* Set Sensitivity field ids, when there is no individual modifier */ - if (st->common_attributes.sensitivity.index < 0) { - sensor_hub_input_get_attribute_info(hsdev, - HID_FEATURE_REPORT, usage_id, - HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS | - HID_USAGE_SENSOR_DATA_ORIENTATION, - &st->common_attributes.sensitivity); - dev_dbg(&pdev->dev, "Sensitivity index:report %d:%d\n", - st->common_attributes.sensitivity.index, - st->common_attributes.sensitivity.report_id); + int j; + + struct hid_report *report; + struct hid_field *field; + struct hid_report_enum *report_enum; + struct hid_device *hdev = hsdev->hdev; + struct hid_usage *usage = NULL; + + dev_dbg(&pdev->dev, "magn_north_parse_reports Usage ID: %x\n", usage_id); + report_enum = &hdev->report_enum[HID_INPUT_REPORT]; + list_for_each_entry(report, &report_enum->report_list, list) { + for (i = 0; i < report->maxfield; ++i) { + field = report->field[i]; + + for (j = 0; j < field->maxusage; j++) { + usage = &(field->usage[j]); + + /* Check if collection_index is valid */ + if(usage->collection_index >= + hsdev->start_collection_index && + usage->collection_index < + hsdev->end_collection_index && + usage->hid >= + HID_USAGE_SENSOR_ORIENT_COMP_MAGN_NORTH && + usage->hid <= + HID_USAGE_SENSOR_ORIENT_MAGN_FLUX_Z_AXIS) + { + struct hid_sensor_hub_attribute_info *usage_attr; + int magn_index = magn_3d_usage_id_to_chan_index(usage->hid); + int iio_index = st->num_iio_channels++; + + if(magn_index >= 0 && magn_index < MAGN_3D_CHANNEL_MAX && + iio_index >= 0 && iio_index < IIO_CHANNEL_MAX){ + usage_attr = &(st->magn[magn_index]); + + sensor_hub_fill_attr_info(usage_attr, i, + report->id, + field); + ret = magn_3d_setup_iio_chan(usage->hid, + &(iio_chans[iio_index]), + usage_attr->size, + st); + st->magn_val_addr[magn_index] = &(st->iio_val[iio_index]); + } + } + } + } } return ret; @@ -307,10 +394,11 @@ static int hid_magn_3d_probe(struct platform_device *pdev) return ret; } - channels = kmemdup(magn_3d_channels, sizeof(magn_3d_channels), - GFP_KERNEL); + channels = kcalloc(MAGN_3D_CHANNEL_MAX, + sizeof(struct iio_chan_spec), + GFP_KERNEL); if (!channels) { - dev_err(&pdev->dev, "failed to duplicate channels\n"); + dev_err(&pdev->dev, "failed to allocate memory for iio channel\n"); return -ENOMEM; } @@ -322,7 +410,7 @@ static int hid_magn_3d_probe(struct platform_device *pdev) } indio_dev->channels = channels; - indio_dev->num_channels = ARRAY_SIZE(magn_3d_channels); + indio_dev->num_channels = magn_state->num_iio_channels; indio_dev->dev.parent = &pdev->dev; indio_dev->info = &magn_3d_info; indio_dev->name = name; -- 1.9.3 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages 2014-05-28 21:06 ` [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support " Reyad Attiyat @ 2014-05-28 21:15 ` Reyad Attiyat 2014-05-28 21:25 ` Srinivas Pandruvada 0 siblings, 1 reply; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:15 UTC (permalink / raw) To: linux-kernel, linux-iio, jic23, Srinivas Pandruvada, linux-input, Jiri Kosina Cc: Reyad Attiyat > +static void sensor_hub_fill_attr_info( > + struct hid_sensor_hub_attribute_info *info, > + s32 index, s32 report_id, struct hid_field *field) > +{ > + info->index = index; > + info->report_id = report_id; > + info->units = field->unit; > + info->unit_expo = field->unit_exponent; > + info->size = (field->report_size * field->report_count)/8; > + info->logical_minimum = field->logical_minimum; > + info->logical_maximum = field->logical_maximum; > } I copied this function from hid/hid-sensor-hub.c as it is marked static in that file. I use it to fill attributes as I find them. Should I create an another patch to make it non-static? > + list_for_each_entry(report, &report_enum->report_list, list) { > + for (i = 0; i < report->maxfield; ++i) { > + field = report->field[i]; > + > + for (j = 0; j < field->maxusage; j++) { > + usage = &(field->usage[j]); > + This is how I mange to find all possible hid reports in the parse reports function. I noticed that in the other function that was used, sensor_hub_input_get_attribute_info(), it only uses field->usage[0]. Is there a reason for this and should I change my current implementation? ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages 2014-05-28 21:15 ` Reyad Attiyat @ 2014-05-28 21:25 ` Srinivas Pandruvada 2014-05-28 21:35 ` Reyad Attiyat 0 siblings, 1 reply; 13+ messages in thread From: Srinivas Pandruvada @ 2014-05-28 21:25 UTC (permalink / raw) To: Reyad Attiyat; +Cc: linux-kernel, linux-iio, jic23, linux-input, Jiri Kosina On 05/28/2014 02:15 PM, Reyad Attiyat wrote: >> +static void sensor_hub_fill_attr_info( >> + struct hid_sensor_hub_attribute_info *info, >> + s32 index, s32 report_id, struct hid_field *field) >> +{ >> + info->index = index; >> + info->report_id = report_id; >> + info->units = field->unit; >> + info->unit_expo = field->unit_exponent; >> + info->size = (field->report_size * field->report_count)/8; >> + info->logical_minimum = field->logical_minimum; >> + info->logical_maximum = field->logical_maximum; >> } > I copied this function from hid/hid-sensor-hub.c as it is marked > static in that file. I use it to fill attributes as I find them. > Should I create an another patch to make it non-static? I didn't check your implementation. But sensor_hub_input_get_attribute_info() function is not enough? We are already using to get other attributes for x, y and Z. Thanks, Srinivas >> + list_for_each_entry(report, &report_enum->report_list, list) { >> + for (i = 0; i < report->maxfield; ++i) { >> + field = report->field[i]; >> + >> + for (j = 0; j < field->maxusage; j++) { >> + usage = &(field->usage[j]); >> + > This is how I mange to find all possible hid reports in the parse > reports function. I noticed that in the other function that was used, > sensor_hub_input_get_attribute_info(), it only uses field->usage[0]. > Is there a reason for this and should I change my current > implementation? > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages 2014-05-28 21:25 ` Srinivas Pandruvada @ 2014-05-28 21:35 ` Reyad Attiyat 2014-05-28 21:56 ` Srinivas Pandruvada 0 siblings, 1 reply; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:35 UTC (permalink / raw) To: Srinivas Pandruvada Cc: linux-kernel, linux-iio, jic23, linux-input, Jiri Kosina Hey Srinivas, Well I could use sensor_hub_input_get_attribute_info() for each usage attribute. I was just thinking that since each usage attribute is found in a row, one for each field I think, it'd be easier to create iio channels that way. This would eliminate running the for loop search for usage id each time. I realize that my parse_report function is quite ugly espically ending in four closing parenthesis and copying code from sensor_hub_input_get_attribute_info(). I will change it if you don't think it will slow down the driver or have any negative effects. Thanks, Reyad On Wed, May 28, 2014 at 4:25 PM, Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> wrote: > On 05/28/2014 02:15 PM, Reyad Attiyat wrote: >>> >>> +static void sensor_hub_fill_attr_info( >>> + struct hid_sensor_hub_attribute_info *info, >>> + s32 index, s32 report_id, struct hid_field *field) >>> +{ >>> + info->index = index; >>> + info->report_id = report_id; >>> + info->units = field->unit; >>> + info->unit_expo = field->unit_exponent; >>> + info->size = (field->report_size * field->report_count)/8; >>> + info->logical_minimum = field->logical_minimum; >>> + info->logical_maximum = field->logical_maximum; >>> } >> >> I copied this function from hid/hid-sensor-hub.c as it is marked >> static in that file. I use it to fill attributes as I find them. >> Should I create an another patch to make it non-static? > > > I didn't check your implementation. But > sensor_hub_input_get_attribute_info() > function is not enough? We are already using to get other attributes for x, > y and Z. > > Thanks, > Srinivas > > > >>> + list_for_each_entry(report, &report_enum->report_list, list) { >>> + for (i = 0; i < report->maxfield; ++i) { >>> + field = report->field[i]; >>> + >>> + for (j = 0; j < field->maxusage; j++) { >>> + usage = &(field->usage[j]); >>> + >> >> This is how I mange to find all possible hid reports in the parse >> reports function. I noticed that in the other function that was used, >> sensor_hub_input_get_attribute_info(), it only uses field->usage[0]. >> Is there a reason for this and should I change my current >> implementation? >> > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages 2014-05-28 21:35 ` Reyad Attiyat @ 2014-05-28 21:56 ` Srinivas Pandruvada [not found] ` <CA+BWVURydjyrnC9ec-POtn5A8gL7C93MH6pObcmmAqD4V=p0Zg@mail.gmail.com> 0 siblings, 1 reply; 13+ messages in thread From: Srinivas Pandruvada @ 2014-05-28 21:56 UTC (permalink / raw) To: Reyad Attiyat; +Cc: linux-kernel, linux-iio, jic23, linux-input, Jiri Kosina Hi Reyad, On 05/28/2014 02:35 PM, Reyad Attiyat wrote: > Hey Srinivas, > > Well I could use sensor_hub_input_get_attribute_info() for each usage > attribute. I was just thinking that since each usage attribute is > found in a row, one for each field I think, it'd be easier to create > iio channels that way. This would eliminate running the for loop > search for usage id each time. It shouldn't be an issue for few more attributes. The idea is that we don't expose the report level parsing information to the client drivers. The client shouldn't worry about which collection or report it belongs to. In this way if we have to enhance the parse function for newer FW changes or quirks, it is only done at one place. Clients are not affected at all. Alternatively we can enhance API, which takes multiple usage ids and fills information in a single call. What do you think about this? Thanks, Srinivas > > I realize that my parse_report function is quite ugly espically ending > in four closing parenthesis and copying code from > sensor_hub_input_get_attribute_info(). I will change it if you don't > think it will slow down the driver or have any negative effects. > > Thanks, > Reyad > > > > On Wed, May 28, 2014 at 4:25 PM, Srinivas Pandruvada > <srinivas.pandruvada@linux.intel.com> wrote: >> On 05/28/2014 02:15 PM, Reyad Attiyat wrote: >>>> +static void sensor_hub_fill_attr_info( >>>> + struct hid_sensor_hub_attribute_info *info, >>>> + s32 index, s32 report_id, struct hid_field *field) >>>> +{ >>>> + info->index = index; >>>> + info->report_id = report_id; >>>> + info->units = field->unit; >>>> + info->unit_expo = field->unit_exponent; >>>> + info->size = (field->report_size * field->report_count)/8; >>>> + info->logical_minimum = field->logical_minimum; >>>> + info->logical_maximum = field->logical_maximum; >>>> } >>> I copied this function from hid/hid-sensor-hub.c as it is marked >>> static in that file. I use it to fill attributes as I find them. >>> Should I create an another patch to make it non-static? >> >> I didn't check your implementation. But >> sensor_hub_input_get_attribute_info() >> function is not enough? We are already using to get other attributes for x, >> y and Z. >> >> Thanks, >> Srinivas >> >> >> >>>> + list_for_each_entry(report, &report_enum->report_list, list) { >>>> + for (i = 0; i < report->maxfield; ++i) { >>>> + field = report->field[i]; >>>> + >>>> + for (j = 0; j < field->maxusage; j++) { >>>> + usage = &(field->usage[j]); >>>> + >>> This is how I mange to find all possible hid reports in the parse >>> reports function. I noticed that in the other function that was used, >>> sensor_hub_input_get_attribute_info(), it only uses field->usage[0]. >>> Is there a reason for this and should I change my current >>> implementation? >>> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <CA+BWVURydjyrnC9ec-POtn5A8gL7C93MH6pObcmmAqD4V=p0Zg@mail.gmail.com>]
[parent not found: <CA+BWVURydjyrnC9ec-POtn5A8gL7C93MH6pObcmmAqD4V=p0Zg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Fwd: [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages [not found] ` <CA+BWVURydjyrnC9ec-POtn5A8gL7C93MH6pObcmmAqD4V=p0Zg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2014-05-28 21:59 ` Reyad Attiyat 0 siblings, 0 replies; 13+ messages in thread From: Reyad Attiyat @ 2014-05-28 21:59 UTC (permalink / raw) To: linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-input, linux-iio-u79uwXL29TY76Z2rM5mHXA Forgot to forward to list ---------- Forwarded message ---------- From: Reyad Attiyat <reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Date: Wed, May 28, 2014 at 4:57 PM Subject: Re: [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support for True/Magnetic North HID usages To: Srinivas Pandruvada <srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Hey Srinivas, > It shouldn't be an issue for few more attributes. The idea is that > we don't expose the report level parsing information to the client drivers. > The client shouldn't worry about which collection or report it belongs to. > Makes sense. > In this way if we have to enhance the parse function for newer > FW changes or quirks, it is only done at one place. Clients are not > affected at all. > > Alternatively > we can enhance API, which takes multiple usage ids and fills information > in a single call. What do you think about this? Yes this seems like a great idea. I will try and implement this and resubmit these patches. Thank You, Reyad Attiyat ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-06-02 19:54 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-05-28 21:06 [PATCH 0/3] IIO: hid-sensor-magn-3d: Add support for compass north usage attribute Reyad Attiyat 2014-05-28 21:06 ` [PATCH 1/3] IIO: Add iio magn_north ABI documentation Reyad Attiyat 2014-05-29 16:46 ` Jonathan Cameron [not found] ` <53876477.7000503-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 2014-06-02 15:54 ` Srinivas Pandruvada 2014-05-28 21:06 ` [PATCH 2/3] IIO: Add iio_chan modifier for True/Magnetic North HID usages Reyad Attiyat [not found] ` <1401311175-12784-3-git-send-email-reyad.attiyat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2014-05-31 10:14 ` Jonathan Cameron [not found] ` <5389AB89.9080305-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 2014-06-02 19:54 ` Reyad Attiyat 2014-05-28 21:06 ` [PATCH 3/3] IO: hid-sensor-magn-3d: Add in support " Reyad Attiyat 2014-05-28 21:15 ` Reyad Attiyat 2014-05-28 21:25 ` Srinivas Pandruvada 2014-05-28 21:35 ` Reyad Attiyat 2014-05-28 21:56 ` Srinivas Pandruvada [not found] ` <CA+BWVURydjyrnC9ec-POtn5A8gL7C93MH6pObcmmAqD4V=p0Zg@mail.gmail.com> [not found] ` <CA+BWVURydjyrnC9ec-POtn5A8gL7C93MH6pObcmmAqD4V=p0Zg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-05-28 21:59 ` Fwd: " Reyad Attiyat
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).