diff mbox series

[v3,2/2] iio: mma8452: Add support for the "mount-matrix" device property

Message ID 20220208124336.511884-2-hdegoede@redhat.com (mailing list archive)
State Accepted
Headers show
Series [v3,1/2] iio: mma8452: Fix probe failing when an i2c_device_id is used | expand

Commit Message

Hans de Goede Feb. 8, 2022, 12:43 p.m. UTC
Add support for the standard "mount-matrix" device property to
the mma8452 driver.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
Note this applies on top of the following recent patch from me:
"iio: mma8452: Fix probe failing when an i2c_device_id is used"
---
 drivers/iio/accel/mma8452.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Jonathan Cameron Feb. 13, 2022, 6:12 p.m. UTC | #1
On Tue,  8 Feb 2022 13:43:36 +0100
Hans de Goede <hdegoede@redhat.com> wrote:

> Add support for the standard "mount-matrix" device property to
> the mma8452 driver.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Change of plan. Both patches now applied to the togreg branch of iio.git
as you mentioned in v2 discussion that you don't need this until
5.18 and it saves me juggling patches taking different routes.

> ---
> Note this applies on top of the following recent patch from me:
> "iio: mma8452: Fix probe failing when an i2c_device_id is used"
> ---
>  drivers/iio/accel/mma8452.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
> index 0528717d9f44..590d9431e1bd 100644
> --- a/drivers/iio/accel/mma8452.c
> +++ b/drivers/iio/accel/mma8452.c
> @@ -104,6 +104,7 @@
>  struct mma8452_data {
>  	struct i2c_client *client;
>  	struct mutex lock;
> +	struct iio_mount_matrix orientation;
>  	u8 ctrl_reg1;
>  	u8 data_cfg;
>  	const struct mma_chip_info *chip_info;
> @@ -1190,6 +1191,20 @@ static const struct attribute_group mma8452_event_attribute_group = {
>  	.attrs = mma8452_event_attributes,
>  };
>  
> +static const struct iio_mount_matrix *
> +mma8452_get_mount_matrix(const struct iio_dev *indio_dev,
> +			   const struct iio_chan_spec *chan)
> +{
> +	struct mma8452_data *data = iio_priv(indio_dev);
> +
> +	return &data->orientation;
> +}
> +
> +static const struct iio_chan_spec_ext_info mma8452_ext_info[] = {
> +	IIO_MOUNT_MATRIX(IIO_SHARED_BY_TYPE, mma8452_get_mount_matrix),
> +	{ }
> +};
> +
>  #define MMA8452_FREEFALL_CHANNEL(modifier) { \
>  	.type = IIO_ACCEL, \
>  	.modified = 1, \
> @@ -1228,6 +1243,7 @@ static const struct attribute_group mma8452_event_attribute_group = {
>  	}, \
>  	.event_spec = mma8452_transient_event, \
>  	.num_event_specs = ARRAY_SIZE(mma8452_transient_event), \
> +	.ext_info = mma8452_ext_info, \
>  }
>  
>  #define MMA8652_CHANNEL(axis, idx, bits) { \
> @@ -1249,6 +1265,7 @@ static const struct attribute_group mma8452_event_attribute_group = {
>  	}, \
>  	.event_spec = mma8452_motion_event, \
>  	.num_event_specs = ARRAY_SIZE(mma8452_motion_event), \
> +	.ext_info = mma8452_ext_info, \
>  }
>  
>  static const struct iio_chan_spec mma8451_channels[] = {
> @@ -1546,6 +1563,10 @@ static int mma8452_probe(struct i2c_client *client,
>  		return -ENODEV;
>  	}
>  
> +	ret = iio_read_mount_matrix(&client->dev, &data->orientation);
> +	if (ret)
> +		return ret;
> +
>  	data->vdd_reg = devm_regulator_get(&client->dev, "vdd");
>  	if (IS_ERR(data->vdd_reg))
>  		return dev_err_probe(&client->dev, PTR_ERR(data->vdd_reg),
diff mbox series

Patch

diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
index 0528717d9f44..590d9431e1bd 100644
--- a/drivers/iio/accel/mma8452.c
+++ b/drivers/iio/accel/mma8452.c
@@ -104,6 +104,7 @@ 
 struct mma8452_data {
 	struct i2c_client *client;
 	struct mutex lock;
+	struct iio_mount_matrix orientation;
 	u8 ctrl_reg1;
 	u8 data_cfg;
 	const struct mma_chip_info *chip_info;
@@ -1190,6 +1191,20 @@  static const struct attribute_group mma8452_event_attribute_group = {
 	.attrs = mma8452_event_attributes,
 };
 
+static const struct iio_mount_matrix *
+mma8452_get_mount_matrix(const struct iio_dev *indio_dev,
+			   const struct iio_chan_spec *chan)
+{
+	struct mma8452_data *data = iio_priv(indio_dev);
+
+	return &data->orientation;
+}
+
+static const struct iio_chan_spec_ext_info mma8452_ext_info[] = {
+	IIO_MOUNT_MATRIX(IIO_SHARED_BY_TYPE, mma8452_get_mount_matrix),
+	{ }
+};
+
 #define MMA8452_FREEFALL_CHANNEL(modifier) { \
 	.type = IIO_ACCEL, \
 	.modified = 1, \
@@ -1228,6 +1243,7 @@  static const struct attribute_group mma8452_event_attribute_group = {
 	}, \
 	.event_spec = mma8452_transient_event, \
 	.num_event_specs = ARRAY_SIZE(mma8452_transient_event), \
+	.ext_info = mma8452_ext_info, \
 }
 
 #define MMA8652_CHANNEL(axis, idx, bits) { \
@@ -1249,6 +1265,7 @@  static const struct attribute_group mma8452_event_attribute_group = {
 	}, \
 	.event_spec = mma8452_motion_event, \
 	.num_event_specs = ARRAY_SIZE(mma8452_motion_event), \
+	.ext_info = mma8452_ext_info, \
 }
 
 static const struct iio_chan_spec mma8451_channels[] = {
@@ -1546,6 +1563,10 @@  static int mma8452_probe(struct i2c_client *client,
 		return -ENODEV;
 	}
 
+	ret = iio_read_mount_matrix(&client->dev, &data->orientation);
+	if (ret)
+		return ret;
+
 	data->vdd_reg = devm_regulator_get(&client->dev, "vdd");
 	if (IS_ERR(data->vdd_reg))
 		return dev_err_probe(&client->dev, PTR_ERR(data->vdd_reg),