Skip to contentSkip to conversation

iio: accel: kxcjk1013: Support orientation matrix

PATCH Applied Dmitry Osipenko 4 participants 8 messages Jan 12, 2020 – Jan 18, 2020

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index fee535d6e45b..c9924a65c32a 100644
@@ -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
index 8c3c78bc9f91..ea0ecb774371 100644
@@ -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
#1 lore raw

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
index eb76a02e2a82..ce950e162d5d 100644
@@ -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
maintainer Acked-by on v1 2/2
#2 lore raw

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.

---
 .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt     | 7 +++++++
 1 file changed, 7 insertions(+)
#3 lore raw

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.

---
 .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt     | 7 +++++++
 1 file changed, 7 insertions(+)

Thanks!

maintainer Applied
#4 lore raw

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.

---
 .../devicetree/bindings/iio/accel/kionix,kxcjk1013.txt     | 7 +++++++
 1 file changed, 7 insertions(+)
Quoted 4 lines
Quoted 2 lines

Thanks!

Applied.

thanks,

Jonathan

Acked-by on v1 1/2
#5 lore raw
In reply to Dmitry Osipenko
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.

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
index fee535d6e45b..c9924a65c32a 100644
@@ -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 -0
 		data->chipset = (enum kx_chipset)(id->driver_data);
 		name = id->name;
include/linux/iio/accel/kxcjk_1013.h +3 -0
index 8c3c78bc9f91..ea0ecb774371 100644
@@ -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
#6 lore raw

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.

Thanks!

maintainer
#7 lore raw
Quoted 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

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