iio: accel: kxcjk1013: Support orientation matrix
Subsystems (2)
PATCH 1/2 iio: accel: kxcjk1013: Support orientation matrix
Hardware could be physically mounted in any possible direction and userpspace needs to be aware of the mounting orientation in order to process sensor's data correctly. In particular this helps iio-sensor-proxy to report display's orientation properly on a phone/tablet devices.
--- drivers/iio/accel/kxcjk-1013.c | 27 +++++++++++++++++++++++++-- include/linux/iio/accel/kxcjk_1013.h | 3 +++ 2 files changed, 28 insertions(+), 2 deletions(-)
drivers/iio/accel/kxcjk-1013.c +25 -2
@@ -130,6 +130,7 @@ struct kxcjk1013_data {struct i2c_client *client;struct iio_trigger *dready_trig;struct iio_trigger *motion_trig; +struct iio_mount_matrix orientation;struct mutex mutex;s16 buffer[8 ];u8 odr_bits;
@@ -983,6 +984,20 @@ static const struct iio_event_spec kxcjk1013_event = {BIT (IIO_EV_INFO_PERIOD) }; +static const struct iio_mount_matrix * +kxcjk1013_get_mount_matrix (const struct iio_dev *indio_dev, +const struct iio_chan_spec *chan) +{ +struct kxcjk1013_data *data =iio_priv (indio_dev); + +return &data->orientation; +} + +static const struct iio_chan_spec_ext_info kxcjk1013_ext_info[] = { +IIO_MOUNT_MATRIX (IIO_SHARED_BY_TYPE , kxcjk1013_get_mount_matrix), + { } +}; +#define KXCJK1013_CHANNEL (_axis) { \ .type = IIO_ACCEL, \ .modified = 1, \
@@ -999,6 +1014,7 @@ static const struct iio_event_spec kxcjk1013_event = { .endianness = IIO_LE, \ }, \ .event_spec = &kxcjk1013_event, \ + .ext_info = kxcjk1013_ext_info, \ .num_event_specs = 1 \ }
@@ -1267,11 +1283,18 @@ static int kxcjk1013_probe(struct i2c_client *client, data->client = client; pdata =dev_get_platdata (&client->dev); -if (pdata) +if (pdata) { data->active_high_intr = pdata->active_high_intr; -else + data->orientation = pdata->orientation; + }else { data->active_high_intr = true;/* default polarity */ + ret =iio_read_mount_matrix (&client->dev,"mount-matrix" , + &data->orientation); +if (ret) +return ret; + } +if (id) { data->chipset = (enum kx_chipset )(id->driver_data); name = id->name;
include/linux/iio/accel/kxcjk_1013.h +3 -0
@@ -7,8 +7,11 @@#ifndef __IIO_KXCJK_1013_H__#define __IIO_KXCJK_1013_H__ +#include <linux/iio/iio.h> +struct kxcjk_1013_platform_data {bool active_high_intr; +struct iio_mount_matrix orientation; };#endif
Signature · 1 line
2.24.0
PATCH 2/2 dt-bindings: iio: accel: kxcjk1013: Document mount-matrix property
The generic IIO mount-matrix property conveys physical orientation of the hardware chip.
--- .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt | 7 +++++++ 1 file changed, 7 insertions(+)
Documentation/devicetree/bindings/iio/accel/kionix,kxcjk1013.txt +7 -0
@@ -9,9 +9,16 @@ Required properties: "kionix,kxtf9" - reg: i2c slave address +Optional properties: + + - mount-matrix: an optional 3x3 mounting rotation matrix + Example: kxtf9@f { compatible = "kionix,kxtf9"; reg = <0x0F>; + mount-matrix = "0", "1", "0", + "1", "0", "0", + "0", "0", "1"; };
Signature · 1 line
2.24.0
Re: [PATCH v1 2/2] dt-bindings: iio: accel: kxcjk1013: Document mount-matrix property
Quoted 8 lines · Dmitry Osipenko
The generic IIO mount-matrix property conveys physical orientation of the hardware chip.
Signed-off-by Dmitry Osipenko <[email protected]>--- .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt | 7 +++++++ 1 file changed, 7 insertions(+)
Re: [PATCH v1 2/2] dt-bindings: iio: accel: kxcjk1013: Document mount-matrix property
15.01.2020 18:39, Rob Herring пишет:
Quoted 12 lines · Dmitry Osipenko
Quoted 8 lines
The generic IIO mount-matrix property conveys physical orientation of the hardware chip.
Signed-off-by Dmitry Osipenko <[email protected]>--- .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt | 7 +++++++ 1 file changed, 7 insertions(+)Acked-by Rob Herring <[email protected]>
Thanks!
Re: [PATCH v1 2/2] dt-bindings: iio: accel: kxcjk1013: Document mount-matrix property
Quoted 11 lines · On Sat, 18 Jan 2020 05:42:01 +0300 Dmitry Osipenko <[email protected]> wrote:
15.01.2020 18:39, Rob Herring пишет:
Quoted 10 lines · Dmitry Osipenko
Quoted 8 lines
The generic IIO mount-matrix property conveys physical orientation of the hardware chip.
Signed-off-by Dmitry Osipenko <[email protected]>--- .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt | 7 +++++++ 1 file changed, 7 insertions(+)
Quoted 4 lines
Quoted 2 lines
Acked-by Rob Herring <[email protected]>Thanks!
Applied.
thanks,
Jonathan
Quoted 7 lines · Dmitry Osipenko
Hardware could be physically mounted in any possible direction and userpspace needs to be aware of the mounting orientation in order to process sensor's data correctly. In particular this helps iio-sensor- proxy
to report display's orientation properly on a phone/tablet devices.Signed-off-by Dmitry Osipenko <[email protected]>
Quoted 98 lines
--- drivers/iio/accel/kxcjk-1013.c | 27 +++++++++++++++++++++++++-(quoted diff) +0
-1- include/linux/iio/accel/kxcjk_1013.h | 3 +++ 2 files changed, 28 insertions(+), 2 deletions(-)drivers/iio/accel/kxcjk-1013.c +15
-0@@ -130,6 +130,7 @@ struct kxcjk1013_data {struct i2c_client *client;struct iio_trigger *dready_trig;struct iio_trigger *motion_trig; +struct iio_mount_matrix orientation;struct mutex mutex;s16 buffer[8 ];u8 odr_bits;@@ -983,6 +984,20 @@ static const struct iio_event_spec kxcjk1013_event = {BIT (IIO_EV_INFO_PERIOD ) }; +static const struct iio_mount_matrix * +kxcjk1013_get_mount_matrix (const struct iio_dev *indio_dev, +const struct iio_chan_spec *chan) +{ +struct kxcjk1013_data *data =iio_priv (indio_dev); + +return &data->orientation; +} + +static const struct iio_chan_spec_ext_info kxcjk1013_ext_info[] = { +IIO_MOUNT_MATRIX (IIO_SHARED_BY_TYPE , kxcjk1013_get_mount_matrix), + { } +}; +#define KXCJK1013_CHANNEL (_axis) {\
.type =IIO_ACCEL,
\
.modified = 1,
\drivers/iio/accel/kxcjk-1013.c +1
-0@@ -999,6 +1014,7 @@ static const struct iio_event_spec kxcjk1013_event = { .endianness = IIO_LE, \ }, \ .event_spec = &kxcjk1013_event, \ + .ext_info = kxcjk1013_ext_info,\
.num_event_specs = 1
\
}drivers/iio/accel/kxcjk-1013.c +9
-2@@ -1267,11 +1283,18 @@ static int kxcjk1013_probe(struct i2c_client *client, data->client = client; pdata =dev_get_platdata (&client->dev); -if (pdata) +if (pdata) { data->active_high_intr = pdata->active_high_intr; -else + data->orientation = pdata->orientation; + }else { data->active_high_intr = true;/* default polarity */ + ret =iio_read_mount_matrix (&client->dev,"mount- matrix", + &data->orientation); +if (ret) +return ret; + } +if (id) {drivers/iio/accel/kxcjk-1013.c +0
-0data->chipset = (enum kx_chipset )(id->driver_data); name = id->name;include/linux/iio/accel/kxcjk_1013.h +3
-0@@ -7,8 +7,11 @@#ifndef __IIO_KXCJK_1013_H__#define __IIO_KXCJK_1013_H__ +#include <linux/iio/iio.h> +struct kxcjk_1013_platform_data {bool active_high_intr; +struct iio_mount_matrix orientation; };#endif
15.01.2020 20:20, Srinivas Pandruvada пишет:
Quoted 10 lines · Dmitry Osipenko
Quoted 7 lines
Hardware could be physically mounted in any possible direction and userpspace needs to be aware of the mounting orientation in order to process sensor's data correctly. In particular this helps iio-sensor- proxy
to report display's orientation properly on a phone/tablet devices.Signed-off-by Dmitry Osipenko <[email protected]>
Thanks!
Jonathan Cameron
maintainerQuoted 8 lines · On Sat, 18 Jan 2020 05:41:33 +0300 Dmitry Osipenko <[email protected]> wrote:
15.01.2020 20:20, Srinivas Pandruvada пишет:
Quoted 7 lines · Dmitry Osipenko
Quoted 6 lines
Hardware could be physically mounted in any possible direction and userpspace needs to be aware of the mounting orientation in order to process sensor's data correctly. In particular this helps iio-sensor- proxy
to report display's orientation properly on a phone/tablet devices.
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
Signed-off-by Dmitry Osipenko <[email protected]>Thanks!
Applied to the togreg branch of iio.git and pushed out as testing to let the various automated test systems poke at it before I push out as non rebasing.
Thanks,
Jonathan