linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] Add support to LIS2DW12 accel sensor
@ 2017-08-16 19:13 Lorenzo Bianconi
  2017-08-16 19:13 ` [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones Lorenzo Bianconi
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-16 19:13 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

Modify management of drdy line and status register in order to support
LIS2DW12 device
This patchset is based on 'Add support to LIS2MDL magnetometer sensor'
patchset

Lorenzo Bianconi (5):
  iio: st_sensors: decouple irq1 configuration parameters from the irq2
    ones
  iio: st_sensors: do not always write enable_axis register
  iio: st_sensors: add register mask for status register
  iio: accel: add support to LIS2DW12
  dt-bindings: iio: accel: add LIS2DW12 sensor device binding

 .../devicetree/bindings/iio/st-sensors.txt         |   1 +
 drivers/iio/accel/st_accel.h                       |   2 +
 drivers/iio/accel/st_accel_core.c                  | 180 +++++++++++++++++----
 drivers/iio/accel/st_accel_i2c.c                   |   5 +
 drivers/iio/accel/st_accel_spi.c                   |   5 +
 drivers/iio/common/st_sensors/st_sensors_core.c    |  33 ++--
 drivers/iio/common/st_sensors/st_sensors_trigger.c |  16 +-
 drivers/iio/gyro/st_gyro_core.c                    |  33 ++--
 drivers/iio/magnetometer/st_magn_core.c            |  11 +-
 drivers/iio/pressure/st_pressure_core.c            |  50 ++++--
 include/linux/iio/common/st_sensors.h              |  23 ++-
 11 files changed, 271 insertions(+), 88 deletions(-)

-- 
2.14.0

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones
  2017-08-16 19:13 [PATCH 0/5] Add support to LIS2DW12 accel sensor Lorenzo Bianconi
@ 2017-08-16 19:13 ` Lorenzo Bianconi
  2017-08-17 14:59   ` Jonathan Cameron
  2017-08-16 19:13 ` [PATCH 2/5] iio: st_sensors: do not always write enable_axis register Lorenzo Bianconi
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-16 19:13 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

Separate data-ready configuration parameters for INT1 and INT2 pins in
st_sensor_data_ready_irq data structure. That change will be use to
properly support LIS2DW12 accel sensor.

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
---
 drivers/iio/accel/st_accel_core.c               | 66 ++++++++++++++++---------
 drivers/iio/common/st_sensors/st_sensors_core.c | 28 ++++++-----
 drivers/iio/gyro/st_gyro_core.c                 | 18 ++++---
 drivers/iio/magnetometer/st_magn_core.c         |  6 ++-
 drivers/iio/pressure/st_pressure_core.c         | 35 ++++++++-----
 include/linux/iio/common/st_sensors.h           | 16 +++---
 6 files changed, 110 insertions(+), 59 deletions(-)

diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
index 752856b3a849..9fac5a41bacd 100644
--- a/drivers/iio/accel/st_accel_core.c
+++ b/drivers/iio/accel/st_accel_core.c
@@ -159,9 +159,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask = 0x80,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int1 = 0x10,
-			.mask_int2 = 0x00,
+			.int1 = {
+				.addr = 0x22,
+				.mask = 0x10,
+			},
 			.addr_ihl = 0x25,
 			.mask_ihl = 0x02,
 			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
@@ -229,9 +230,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask = 0x80,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int1 = 0x02,
-			.mask_int2 = 0x10,
+			.int1 = {
+				.addr = 0x22,
+				.mask = 0x02,
+			},
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x10,
+			},
 			.addr_ihl = 0x22,
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
@@ -313,9 +319,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask = 0x08,
 		},
 		.drdy_irq = {
-			.addr = 0x23,
-			.mask_int1 = 0x80,
-			.mask_int2 = 0x00,
+			.int1 = {
+				.addr = 0x23,
+				.mask = 0x80,
+			},
 			.addr_ihl = 0x23,
 			.mask_ihl = 0x40,
 			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
@@ -387,8 +394,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask = 0x01,
 		},
 		.drdy_irq = {
-			.addr = 0x21,
-			.mask_int1 = 0x04,
+			.int1 = {
+				.addr = 0x21,
+				.mask = 0x04,
+			},
 			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
 		},
 		.sim = {
@@ -444,9 +453,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			},
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int1 = 0x04,
-			.mask_int2 = 0x20,
+			.int1 = {
+				.addr = 0x22,
+				.mask = 0x04,
+			},
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x20,
+			},
 			.addr_ihl = 0x22,
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
@@ -513,9 +527,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask = 0x80,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int1 = 0x02,
-			.mask_int2 = 0x10,
+			.int1 = {
+				.addr = 0x22,
+				.mask = 0x02,
+			},
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x10,
+			},
 			.addr_ihl = 0x22,
 			.mask_ihl = 0x80,
 		},
@@ -567,8 +586,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 		.bdu = {
 		},
 		.drdy_irq = {
-			.addr = 0x21,
-			.mask_int1 = 0x04,
+			.int1 = {
+				.addr = 0x21,
+				.mask = 0x04,
+			},
 			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
 		},
 		.sim = {
@@ -635,9 +656,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			},
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int1 = 0x10,
-			.mask_int2 = 0x00,
+			.int1 = {
+				.addr = 0x22,
+				.mask = 0x10,
+			},
 			.addr_ihl = 0x25,
 			.mask_ihl = 0x02,
 			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
index d99bb1460fe2..a26217b0604f 100644
--- a/drivers/iio/common/st_sensors/st_sensors_core.c
+++ b/drivers/iio/common/st_sensors/st_sensors_core.c
@@ -283,7 +283,8 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
 	struct st_sensor_data *sdata = iio_priv(indio_dev);
 
 	/* Sensor does not support interrupts */
-	if (sdata->sensor_settings->drdy_irq.addr == 0) {
+	if (!sdata->sensor_settings->drdy_irq.int1.addr &&
+	    !sdata->sensor_settings->drdy_irq.int2.addr) {
 		if (pdata->drdy_int_pin)
 			dev_info(&indio_dev->dev,
 				 "DRDY on pin INT%d specified, but sensor "
@@ -294,7 +295,7 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
 
 	switch (pdata->drdy_int_pin) {
 	case 1:
-		if (sdata->sensor_settings->drdy_irq.mask_int1 == 0) {
+		if (!sdata->sensor_settings->drdy_irq.int1.mask) {
 			dev_err(&indio_dev->dev,
 					"DRDY on INT1 not available.\n");
 			return -EINVAL;
@@ -302,7 +303,7 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
 		sdata->drdy_int_pin = 1;
 		break;
 	case 2:
-		if (sdata->sensor_settings->drdy_irq.mask_int2 == 0) {
+		if (!sdata->sensor_settings->drdy_irq.int2.mask) {
 			dev_err(&indio_dev->dev,
 					"DRDY on INT2 not available.\n");
 			return -EINVAL;
@@ -460,10 +461,11 @@ EXPORT_SYMBOL(st_sensors_init_sensor);
 int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
 {
 	int err;
-	u8 drdy_mask;
+	u8 drdy_addr, drdy_mask;
 	struct st_sensor_data *sdata = iio_priv(indio_dev);
 
-	if (!sdata->sensor_settings->drdy_irq.addr)
+	if (!sdata->sensor_settings->drdy_irq.int1.addr &&
+	    !sdata->sensor_settings->drdy_irq.int2.addr)
 		return 0;
 
 	/* Enable/Disable the interrupt generator 1. */
@@ -476,18 +478,20 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
 			goto st_accel_set_dataready_irq_error;
 	}
 
-	if (sdata->drdy_int_pin == 1)
-		drdy_mask = sdata->sensor_settings->drdy_irq.mask_int1;
-	else
-		drdy_mask = sdata->sensor_settings->drdy_irq.mask_int2;
+	if (sdata->drdy_int_pin == 1) {
+		drdy_addr = sdata->sensor_settings->drdy_irq.int1.addr;
+		drdy_mask = sdata->sensor_settings->drdy_irq.int1.mask;
+	} else {
+		drdy_addr = sdata->sensor_settings->drdy_irq.int2.addr;
+		drdy_mask = sdata->sensor_settings->drdy_irq.int2.mask;
+	}
 
 	/* Flag to the poll function that the hardware trigger is in use */
 	sdata->hw_irq_trigger = enable;
 
 	/* Enable/Disable the interrupt generator for data ready. */
-	err = st_sensors_write_data_with_mask(indio_dev,
-					sdata->sensor_settings->drdy_irq.addr,
-					drdy_mask, (int)enable);
+	err = st_sensors_write_data_with_mask(indio_dev, drdy_addr,
+					      drdy_mask, (int)enable);
 
 st_accel_set_dataready_irq_error:
 	return err;
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
index e366422e8512..764306378b20 100644
--- a/drivers/iio/gyro/st_gyro_core.c
+++ b/drivers/iio/gyro/st_gyro_core.c
@@ -111,8 +111,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			.mask = 0x80,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int2 = 0x08,
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x08,
+			},
 			/*
 			 * The sensor has IHL (active low) and open
 			 * drain settings, but only for INT1 and not
@@ -181,8 +183,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			.mask = 0x80,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int2 = 0x08,
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x08,
+			},
 			/*
 			 * The sensor has IHL (active low) and open
 			 * drain settings, but only for INT1 and not
@@ -246,8 +250,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			.mask = 0x80,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int2 = 0x08,
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x08,
+			},
 			/*
 			 * The sensor has IHL (active low) and open
 			 * drain settings, but only for INT1 and not
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
index e68368b5b2a3..2c465cbe3b0a 100644
--- a/drivers/iio/magnetometer/st_magn_core.c
+++ b/drivers/iio/magnetometer/st_magn_core.c
@@ -355,8 +355,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
 			.mask = 0x10,
 		},
 		.drdy_irq = {
-			.addr = 0x62,
-			.mask_int1 = 0x01,
+			.int1 = {
+				.addr = 0x62,
+				.mask = 0x01,
+			},
 			.addr_stat_drdy = 0x67,
 		},
 		.multi_read_bit = false,
diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
index c84eea73b3ae..97971d432021 100644
--- a/drivers/iio/pressure/st_pressure_core.c
+++ b/drivers/iio/pressure/st_pressure_core.c
@@ -280,9 +280,14 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask = 0x04,
 		},
 		.drdy_irq = {
-			.addr = 0x22,
-			.mask_int1 = 0x04,
-			.mask_int2 = 0x20,
+			.int1 = {
+				.addr = 0x22,
+				.mask = 0x04,
+			},
+			.int2 = {
+				.addr = 0x22,
+				.mask = 0x20,
+			},
 			.addr_ihl = 0x22,
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
@@ -336,7 +341,12 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask = 0x04,
 		},
 		.drdy_irq = {
-			.addr = 0,
+			.int1 = {
+				.addr = 0x00,
+			},
+			.int2 = {
+				.addr = 0x00,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
@@ -388,9 +398,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask = 0x04,
 		},
 		.drdy_irq = {
-			.addr = 0x23,
-			.mask_int1 = 0x01,
-			.mask_int2 = 0x00,
+			.int1 = {
+				.addr = 0x23,
+				.mask = 0x01,
+			},
 			.addr_ihl = 0x22,
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
@@ -447,9 +458,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask = 0x02,
 		},
 		.drdy_irq = {
-			.addr = 0x12,
-			.mask_int1 = 0x04,
-			.mask_int2 = 0x00,
+			.int1 = {
+				.addr = 0x12,
+				.mask = 0x04,
+			},
 			.addr_ihl = 0x12,
 			.mask_ihl = 0x80,
 			.addr_od = 0x12,
@@ -605,7 +617,8 @@ int st_press_common_probe(struct iio_dev *indio_dev)
 	press_data->odr = press_data->sensor_settings->odr.odr_avl[0].hz;
 
 	/* Some devices don't support a data ready pin. */
-	if (!pdata && press_data->sensor_settings->drdy_irq.addr)
+	if (!pdata && (press_data->sensor_settings->drdy_irq.int1.addr ||
+		       press_data->sensor_settings->drdy_irq.int2.addr))
 		pdata =	(struct st_sensors_platform_data *)&default_press_pdata;
 
 	err = st_sensors_init_sensor(indio_dev, press_data->dev->platform_data);
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
index 7b0fa8b5c120..ac3aa89518ca 100644
--- a/include/linux/iio/common/st_sensors.h
+++ b/include/linux/iio/common/st_sensors.h
@@ -132,9 +132,8 @@ struct st_sensor_das {
 
 /**
  * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt
- * @addr: address of the register.
- * @mask_int1: mask to enable/disable IRQ on INT1 pin.
- * @mask_int2: mask to enable/disable IRQ on INT2 pin.
+ * struct int1 - data-ready configuration register for INT1 pin.
+ * struct int2 - data-ready configuration register for INT2 pin.
  * @addr_ihl: address to enable/disable active low on the INT lines.
  * @mask_ihl: mask to enable/disable active low on the INT lines.
  * @addr_od: address to enable/disable Open Drain on the INT lines.
@@ -145,9 +144,14 @@ struct st_sensor_das {
  * @en_mask: mask to write the on/off value for enable.
  */
 struct st_sensor_data_ready_irq {
-	u8 addr;
-	u8 mask_int1;
-	u8 mask_int2;
+	struct {
+		u8 addr;
+		u8 mask;
+	} int1;
+	struct {
+		u8 addr;
+		u8 mask;
+	} int2;
 	u8 addr_ihl;
 	u8 mask_ihl;
 	u8 addr_od;
-- 
2.14.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/5] iio: st_sensors: do not always write enable_axis register
  2017-08-16 19:13 [PATCH 0/5] Add support to LIS2DW12 accel sensor Lorenzo Bianconi
  2017-08-16 19:13 ` [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones Lorenzo Bianconi
@ 2017-08-16 19:13 ` Lorenzo Bianconi
  2017-08-17 15:00   ` Jonathan Cameron
  2017-08-16 19:13 ` [PATCH 3/5] iio: st_sensors: add register mask for status register Lorenzo Bianconi
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-16 19:13 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

New devices (e.g. LIS2DW12) enable all axis by default and do not export
that capability in register map. Check if the enable_axis register
address has been declared in st_sensor_settings map in order to verify if
the driver needs to enable all sensor axis

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
---
 drivers/iio/common/st_sensors/st_sensors_core.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
index a26217b0604f..6331cc91e02d 100644
--- a/drivers/iio/common/st_sensors/st_sensors_core.c
+++ b/drivers/iio/common/st_sensors/st_sensors_core.c
@@ -221,11 +221,14 @@ EXPORT_SYMBOL(st_sensors_set_enable);
 int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable)
 {
 	struct st_sensor_data *sdata = iio_priv(indio_dev);
+	int err = 0;
 
-	return st_sensors_write_data_with_mask(indio_dev,
+	if (sdata->sensor_settings->enable_axis.addr)
+		err = st_sensors_write_data_with_mask(indio_dev,
 				sdata->sensor_settings->enable_axis.addr,
 				sdata->sensor_settings->enable_axis.mask,
 				axis_enable);
+	return err;
 }
 EXPORT_SYMBOL(st_sensors_set_axis_enable);
 
-- 
2.14.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/5] iio: st_sensors: add register mask for status register
  2017-08-16 19:13 [PATCH 0/5] Add support to LIS2DW12 accel sensor Lorenzo Bianconi
  2017-08-16 19:13 ` [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones Lorenzo Bianconi
  2017-08-16 19:13 ` [PATCH 2/5] iio: st_sensors: do not always write enable_axis register Lorenzo Bianconi
@ 2017-08-16 19:13 ` Lorenzo Bianconi
  2017-08-17 15:04   ` Jonathan Cameron
  2017-08-16 19:13 ` [PATCH 4/5] iio: accel: add support to LIS2DW12 Lorenzo Bianconi
  2017-08-16 19:13 ` [PATCH 5/5] dt-bindings: iio: accel: add LIS2DW12 sensor device binding Lorenzo Bianconi
  4 siblings, 1 reply; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-16 19:13 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

Introduce register mask for data-ready status register since
pressure sensors (e.g. LPS22HB) export just two channels
(BIT(0) and BIT(1)) and BIT(2) is marked reserved while in
st_sensors_new_samples_available() value read from status register
is masked using 0x7.
Moreover do not mask status register using active_scan_mask since
now status value is properly masked and if the result is not zero the
interrupt has to be consumed by the driver. This fix an issue on LPS25H
and LPS331AP where channel definition is swapped respect to status
register.
Furthermore that change allows to properly support new devices
(e.g LIS2DW12) that report just ZYXDA (data-ready) field in status register
to figure out if the interrupt has been generated by the device.

Fixes: 97865fe41322 (iio: st_sensors: verify interrupt event to status)
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
---
 drivers/iio/accel/st_accel_core.c                  | 35 +++++++++++++++++-----
 drivers/iio/common/st_sensors/st_sensors_trigger.c | 16 +++-------
 drivers/iio/gyro/st_gyro_core.c                    | 15 ++++++++--
 drivers/iio/magnetometer/st_magn_core.c            |  5 +++-
 drivers/iio/pressure/st_pressure_core.c            | 15 ++++++++--
 include/linux/iio/common/st_sensors.h              |  7 +++--
 6 files changed, 65 insertions(+), 28 deletions(-)

diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
index 9fac5a41bacd..4d9190625630 100644
--- a/drivers/iio/accel/st_accel_core.c
+++ b/drivers/iio/accel/st_accel_core.c
@@ -165,7 +165,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			},
 			.addr_ihl = 0x25,
 			.mask_ihl = 0x02,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.sim = {
 			.addr = 0x23,
@@ -242,7 +245,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
 			.mask_od = 0x40,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.sim = {
 			.addr = 0x23,
@@ -325,7 +331,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			},
 			.addr_ihl = 0x23,
 			.mask_ihl = 0x40,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 			.ig1 = {
 				.en_addr = 0x23,
 				.en_mask = 0x08,
@@ -398,7 +407,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 				.addr = 0x21,
 				.mask = 0x04,
 			},
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.sim = {
 			.addr = 0x21,
@@ -465,7 +477,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
 			.mask_od = 0x40,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.sim = {
 			.addr = 0x21,
@@ -590,7 +605,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 				.addr = 0x21,
 				.mask = 0x04,
 			},
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.sim = {
 			.addr = 0x21,
@@ -662,7 +680,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 			},
 			.addr_ihl = 0x25,
 			.mask_ihl = 0x02,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.sim = {
 			.addr = 0x23,
diff --git a/drivers/iio/common/st_sensors/st_sensors_trigger.c b/drivers/iio/common/st_sensors/st_sensors_trigger.c
index fa73e6795359..fdcc5a891958 100644
--- a/drivers/iio/common/st_sensors/st_sensors_trigger.c
+++ b/drivers/iio/common/st_sensors/st_sensors_trigger.c
@@ -31,7 +31,7 @@ static int st_sensors_new_samples_available(struct iio_dev *indio_dev,
 	int ret;
 
 	/* How would I know if I can't check it? */
-	if (!sdata->sensor_settings->drdy_irq.addr_stat_drdy)
+	if (!sdata->sensor_settings->drdy_irq.stat_drdy.addr)
 		return -EINVAL;
 
 	/* No scan mask, no interrupt */
@@ -39,23 +39,15 @@ static int st_sensors_new_samples_available(struct iio_dev *indio_dev,
 		return 0;
 
 	ret = sdata->tf->read_byte(&sdata->tb, sdata->dev,
-			sdata->sensor_settings->drdy_irq.addr_stat_drdy,
+			sdata->sensor_settings->drdy_irq.stat_drdy.addr,
 			&status);
 	if (ret < 0) {
 		dev_err(sdata->dev,
 			"error checking samples available\n");
 		return ret;
 	}
-	/*
-	 * the lower bits of .active_scan_mask[0] is directly mapped
-	 * to the channels on the sensor: either bit 0 for
-	 * one-dimensional sensors, or e.g. x,y,z for accelerometers,
-	 * gyroscopes or magnetometers. No sensor use more than 3
-	 * channels, so cut the other status bits here.
-	 */
-	status &= 0x07;
 
-	if (status & (u8)indio_dev->active_scan_mask[0])
+	if (status & sdata->sensor_settings->drdy_irq.stat_drdy.mask)
 		return 1;
 
 	return 0;
@@ -212,7 +204,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
 	 * it was "our" interrupt.
 	 */
 	if (sdata->int_pin_open_drain &&
-	    sdata->sensor_settings->drdy_irq.addr_stat_drdy)
+	    sdata->sensor_settings->drdy_irq.stat_drdy.addr)
 		irq_trig |= IRQF_SHARED;
 
 	err = request_threaded_irq(sdata->get_irq_data_ready(indio_dev),
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
index 764306378b20..4ebf1dafc13f 100644
--- a/drivers/iio/gyro/st_gyro_core.c
+++ b/drivers/iio/gyro/st_gyro_core.c
@@ -120,7 +120,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			 * drain settings, but only for INT1 and not
 			 * for the DRDY line on INT2.
 			 */
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
@@ -192,7 +195,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			 * drain settings, but only for INT1 and not
 			 * for the DRDY line on INT2.
 			 */
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
@@ -259,7 +265,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			 * drain settings, but only for INT1 and not
 			 * for the DRDY line on INT2.
 			 */
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x07,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
index 2c465cbe3b0a..6d404d2e71be 100644
--- a/drivers/iio/magnetometer/st_magn_core.c
+++ b/drivers/iio/magnetometer/st_magn_core.c
@@ -359,7 +359,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
 				.addr = 0x62,
 				.mask = 0x01,
 			},
-			.addr_stat_drdy = 0x67,
+			.stat_drdy = {
+				.addr = 0x67,
+				.mask = 0x07,
+			},
 		},
 		.multi_read_bit = false,
 		.bootime = 2,
diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
index 97971d432021..2cff138ef1ca 100644
--- a/drivers/iio/pressure/st_pressure_core.c
+++ b/drivers/iio/pressure/st_pressure_core.c
@@ -292,7 +292,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
 			.mask_od = 0x40,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x03,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
@@ -406,7 +409,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask_ihl = 0x80,
 			.addr_od = 0x22,
 			.mask_od = 0x40,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x03,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
@@ -466,7 +472,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
 			.mask_ihl = 0x80,
 			.addr_od = 0x12,
 			.mask_od = 0x40,
-			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x03,
+			},
 		},
 		.multi_read_bit = true,
 		.bootime = 2,
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
index ac3aa89518ca..e6c646d5d6d4 100644
--- a/include/linux/iio/common/st_sensors.h
+++ b/include/linux/iio/common/st_sensors.h
@@ -138,7 +138,7 @@ struct st_sensor_das {
  * @mask_ihl: mask to enable/disable active low on the INT lines.
  * @addr_od: address to enable/disable Open Drain on the INT lines.
  * @mask_od: mask to enable/disable Open Drain on the INT lines.
- * @addr_stat_drdy: address to read status of DRDY (data ready) interrupt
+ * struct stat_drdy - status register of DRDY (data ready) interrupt.
  * struct ig1 - represents the Interrupt Generator 1 of sensors.
  * @en_addr: address of the enable ig1 register.
  * @en_mask: mask to write the on/off value for enable.
@@ -156,7 +156,10 @@ struct st_sensor_data_ready_irq {
 	u8 mask_ihl;
 	u8 addr_od;
 	u8 mask_od;
-	u8 addr_stat_drdy;
+	struct {
+		u8 addr;
+		u8 mask;
+	} stat_drdy;
 	struct {
 		u8 en_addr;
 		u8 en_mask;
-- 
2.14.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/5] iio: accel: add support to LIS2DW12
  2017-08-16 19:13 [PATCH 0/5] Add support to LIS2DW12 accel sensor Lorenzo Bianconi
                   ` (2 preceding siblings ...)
  2017-08-16 19:13 ` [PATCH 3/5] iio: st_sensors: add register mask for status register Lorenzo Bianconi
@ 2017-08-16 19:13 ` Lorenzo Bianconi
  2017-08-17 15:05   ` Jonathan Cameron
  2017-08-16 19:13 ` [PATCH 5/5] dt-bindings: iio: accel: add LIS2DW12 sensor device binding Lorenzo Bianconi
  4 siblings, 1 reply; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-16 19:13 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

add support to STMicroelectronics LIS2DW12 accelerometer in
st_accel framework

http://www.st.com/resource/en/datasheet/lis2dw12.pdf
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
---
 drivers/iio/accel/st_accel.h      |  2 +
 drivers/iio/accel/st_accel_core.c | 79 +++++++++++++++++++++++++++++++++++++++
 drivers/iio/accel/st_accel_i2c.c  |  5 +++
 drivers/iio/accel/st_accel_spi.c  |  5 +++
 4 files changed, 91 insertions(+)

diff --git a/drivers/iio/accel/st_accel.h b/drivers/iio/accel/st_accel.h
index 0fe521609a3a..2ed0f60418c0 100644
--- a/drivers/iio/accel/st_accel.h
+++ b/drivers/iio/accel/st_accel.h
@@ -32,6 +32,7 @@ enum st_accel_type {
 	H3LIS331DL,
 	LIS331DL,
 	LIS3LV02DL,
+	LIS2DW12,
 	ST_ACCEL_MAX,
 };
 
@@ -52,6 +53,7 @@ enum st_accel_type {
 #define LIS2DH12_ACCEL_DEV_NAME		"lis2dh12_accel"
 #define LIS3L02DQ_ACCEL_DEV_NAME	"lis3l02dq"
 #define LNG2DM_ACCEL_DEV_NAME		"lng2dm"
+#define LIS2DW12_ACCEL_DEV_NAME		"lis2dw12"
 
 /**
 * struct st_sensors_platform_data - default accel platform data
diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
index 4d9190625630..42ada20daca0 100644
--- a/drivers/iio/accel/st_accel_core.c
+++ b/drivers/iio/accel/st_accel_core.c
@@ -692,6 +692,85 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
 		.multi_read_bit = true,
 		.bootime = 2,
 	},
+	{
+		.wai = 0x44,
+		.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
+		.sensors_supported = {
+			[0] = LIS2DW12_ACCEL_DEV_NAME,
+		},
+		.ch = (struct iio_chan_spec *)st_accel_12bit_channels,
+		.odr = {
+			.addr = 0x20,
+			.mask = 0xf0,
+			.odr_avl = {
+				{ .hz = 1, .value = 0x01, },
+				{ .hz = 12, .value = 0x02, },
+				{ .hz = 25, .value = 0x03, },
+				{ .hz = 50, .value = 0x04, },
+				{ .hz = 100, .value = 0x05, },
+				{ .hz = 200, .value = 0x06, },
+			},
+		},
+		.pw = {
+			.addr = 0x20,
+			.mask = 0xf0,
+			.value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
+		},
+		.fs = {
+			.addr = 0x25,
+			.mask = 0x30,
+			.fs_avl = {
+				[0] = {
+					.num = ST_ACCEL_FS_AVL_2G,
+					.value = 0x00,
+					.gain = IIO_G_TO_M_S_2(976),
+				},
+				[1] = {
+					.num = ST_ACCEL_FS_AVL_4G,
+					.value = 0x01,
+					.gain = IIO_G_TO_M_S_2(1952),
+				},
+				[2] = {
+					.num = ST_ACCEL_FS_AVL_8G,
+					.value = 0x02,
+					.gain = IIO_G_TO_M_S_2(3904),
+				},
+				[3] = {
+					.num = ST_ACCEL_FS_AVL_16G,
+					.value = 0x03,
+					.gain = IIO_G_TO_M_S_2(7808),
+				},
+			},
+		},
+		.bdu = {
+			.addr = 0x21,
+			.mask = 0x08,
+		},
+		.drdy_irq = {
+			.int1 = {
+				.addr = 0x23,
+				.mask = 0x01,
+			},
+			.int2 = {
+				.addr = 0x24,
+				.mask = 0x01,
+			},
+			.addr_ihl = 0x22,
+			.mask_ihl = 0x08,
+			.addr_od = 0x22,
+			.mask_od = 0x20,
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = 0x01,
+			},
+		},
+		.sim = {
+			.addr = 0x21,
+			.value = BIT(0),
+		},
+		.multi_read_bit = false,
+		.bootime = 2,
+	},
 };
 
 static int st_accel_read_raw(struct iio_dev *indio_dev,
diff --git a/drivers/iio/accel/st_accel_i2c.c b/drivers/iio/accel/st_accel_i2c.c
index 18cafb9f2468..363429b5686c 100644
--- a/drivers/iio/accel/st_accel_i2c.c
+++ b/drivers/iio/accel/st_accel_i2c.c
@@ -94,6 +94,10 @@ static const struct of_device_id st_accel_of_match[] = {
 		.compatible = "st,lng2dm-accel",
 		.data = LNG2DM_ACCEL_DEV_NAME,
 	},
+	{
+		.compatible = "st,lis2dw12",
+		.data = LIS2DW12_ACCEL_DEV_NAME,
+	},
 	{},
 };
 MODULE_DEVICE_TABLE(of, st_accel_of_match);
@@ -129,6 +133,7 @@ static const struct i2c_device_id st_accel_id_table[] = {
 	{ H3LIS331DL_ACCEL_DEV_NAME, H3LIS331DL },
 	{ LIS331DL_ACCEL_DEV_NAME, LIS331DL },
 	{ LIS3LV02DL_ACCEL_DEV_NAME, LIS3LV02DL },
+	{ LIS2DW12_ACCEL_DEV_NAME, LIS2DW12 },
 	{},
 };
 MODULE_DEVICE_TABLE(i2c, st_accel_id_table);
diff --git a/drivers/iio/accel/st_accel_spi.c b/drivers/iio/accel/st_accel_spi.c
index 915fa49085f7..7692da49e59f 100644
--- a/drivers/iio/accel/st_accel_spi.c
+++ b/drivers/iio/accel/st_accel_spi.c
@@ -82,6 +82,10 @@ static const struct of_device_id st_accel_of_match[] = {
 		.compatible = "st,lis331dl-accel",
 		.data = LIS331DL_ACCEL_DEV_NAME,
 	},
+	{
+		.compatible = "st,lis2dw12",
+		.data = LIS2DW12_ACCEL_DEV_NAME,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, st_accel_of_match);
@@ -133,6 +137,7 @@ static const struct spi_device_id st_accel_id_table[] = {
 	{ H3LIS331DL_ACCEL_DEV_NAME },
 	{ LIS331DL_ACCEL_DEV_NAME },
 	{ LIS3LV02DL_ACCEL_DEV_NAME },
+	{ LIS2DW12_ACCEL_DEV_NAME },
 	{},
 };
 MODULE_DEVICE_TABLE(spi, st_accel_id_table);
-- 
2.14.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 5/5] dt-bindings: iio: accel: add LIS2DW12 sensor device binding
  2017-08-16 19:13 [PATCH 0/5] Add support to LIS2DW12 accel sensor Lorenzo Bianconi
                   ` (3 preceding siblings ...)
  2017-08-16 19:13 ` [PATCH 4/5] iio: accel: add support to LIS2DW12 Lorenzo Bianconi
@ 2017-08-16 19:13 ` Lorenzo Bianconi
  4 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-16 19:13 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
---
 Documentation/devicetree/bindings/iio/st-sensors.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/iio/st-sensors.txt b/Documentation/devicetree/bindings/iio/st-sensors.txt
index 9ec6f5ce54fc..be64357808d0 100644
--- a/Documentation/devicetree/bindings/iio/st-sensors.txt
+++ b/Documentation/devicetree/bindings/iio/st-sensors.txt
@@ -46,6 +46,7 @@ Accelerometers:
 - st,h3lis331dl-accel
 - st,lng2dm-accel
 - st,lis3l02dq
+- st,lis2dw12
 
 Gyroscopes:
 - st,l3g4200d-gyro
-- 
2.14.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones
  2017-08-16 19:13 ` [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones Lorenzo Bianconi
@ 2017-08-17 14:59   ` Jonathan Cameron
  2017-08-17 15:09     ` Lorenzo Bianconi
  0 siblings, 1 reply; 11+ messages in thread
From: Jonathan Cameron @ 2017-08-17 14:59 UTC (permalink / raw)
  To: Lorenzo Bianconi; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

On Wed, 16 Aug 2017 21:13:12 +0200
Lorenzo Bianconi <lorenzo.bianconi83@gmail.com> wrote:

> Separate data-ready configuration parameters for INT1 and INT2 pins in
> st_sensor_data_ready_irq data structure. That change will be use to
> properly support LIS2DW12 accel sensor.
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>

One oddity which was there already that you've kept.

I'd clean it up whilst we are here rather than doubling it ;)

Jonathan

> @@ -336,7 +341,12 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask = 0x04,
>  		},
>  		.drdy_irq = {
> -			.addr = 0,
> +			.int1 = {
> +				.addr = 0x00,
> +			},
> +			.int2 = {
> +				.addr = 0x00,
> +			},
This is presumably for a device which doesn't support data ready.
Why not rely on the default value of 0 and scrap this explicit entry?
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] iio: st_sensors: do not always write enable_axis register
  2017-08-16 19:13 ` [PATCH 2/5] iio: st_sensors: do not always write enable_axis register Lorenzo Bianconi
@ 2017-08-17 15:00   ` Jonathan Cameron
  0 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2017-08-17 15:00 UTC (permalink / raw)
  To: Lorenzo Bianconi; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

On Wed, 16 Aug 2017 21:13:13 +0200
Lorenzo Bianconi <lorenzo.bianconi83@gmail.com> wrote:

> New devices (e.g. LIS2DW12) enable all axis by default and do not export
> that capability in register map. Check if the enable_axis register
> address has been declared in st_sensor_settings map in order to verify if
> the driver needs to enable all sensor axis
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>

Sounds like the software guys have been feeding back what is useful
to the hardware team ;)

Anyhow, patch is fine.  Will pick up in V2.

Jonathan

> ---
>  drivers/iio/common/st_sensors/st_sensors_core.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
> index a26217b0604f..6331cc91e02d 100644
> --- a/drivers/iio/common/st_sensors/st_sensors_core.c
> +++ b/drivers/iio/common/st_sensors/st_sensors_core.c
> @@ -221,11 +221,14 @@ EXPORT_SYMBOL(st_sensors_set_enable);
>  int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable)
>  {
>  	struct st_sensor_data *sdata = iio_priv(indio_dev);
> +	int err = 0;
>  
> -	return st_sensors_write_data_with_mask(indio_dev,
> +	if (sdata->sensor_settings->enable_axis.addr)
> +		err = st_sensors_write_data_with_mask(indio_dev,
>  				sdata->sensor_settings->enable_axis.addr,
>  				sdata->sensor_settings->enable_axis.mask,
>  				axis_enable);
> +	return err;
>  }
>  EXPORT_SYMBOL(st_sensors_set_axis_enable);
>  


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/5] iio: st_sensors: add register mask for status register
  2017-08-16 19:13 ` [PATCH 3/5] iio: st_sensors: add register mask for status register Lorenzo Bianconi
@ 2017-08-17 15:04   ` Jonathan Cameron
  0 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2017-08-17 15:04 UTC (permalink / raw)
  To: Lorenzo Bianconi; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

On Wed, 16 Aug 2017 21:13:14 +0200
Lorenzo Bianconi <lorenzo.bianconi83@gmail.com> wrote:

> Introduce register mask for data-ready status register since
> pressure sensors (e.g. LPS22HB) export just two channels
> (BIT(0) and BIT(1)) and BIT(2) is marked reserved while in
> st_sensors_new_samples_available() value read from status register
> is masked using 0x7.
> Moreover do not mask status register using active_scan_mask since
> now status value is properly masked and if the result is not zero the
> interrupt has to be consumed by the driver. This fix an issue on LPS25H
> and LPS331AP where channel definition is swapped respect to status
> register.
> Furthermore that change allows to properly support new devices
> (e.g LIS2DW12) that report just ZYXDA (data-ready) field in status register
> to figure out if the interrupt has been generated by the device.
> 
> Fixes: 97865fe41322 (iio: st_sensors: verify interrupt event to status)
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>

This is awkward.  We are late enough in the cycle that a fixes pull request
may not hit before the merge window happens.  

Hmm. I'll figure out how we handle this when v2 shows up but will probably
have to go with the rest but marked for stable (which is ugly).

Jonathan
> ---
>  drivers/iio/accel/st_accel_core.c                  | 35 +++++++++++++++++-----
>  drivers/iio/common/st_sensors/st_sensors_trigger.c | 16 +++-------
>  drivers/iio/gyro/st_gyro_core.c                    | 15 ++++++++--
>  drivers/iio/magnetometer/st_magn_core.c            |  5 +++-
>  drivers/iio/pressure/st_pressure_core.c            | 15 ++++++++--
>  include/linux/iio/common/st_sensors.h              |  7 +++--
>  6 files changed, 65 insertions(+), 28 deletions(-)
> 
> diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
> index 9fac5a41bacd..4d9190625630 100644
> --- a/drivers/iio/accel/st_accel_core.c
> +++ b/drivers/iio/accel/st_accel_core.c
> @@ -165,7 +165,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			},
>  			.addr_ihl = 0x25,
>  			.mask_ihl = 0x02,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.sim = {
>  			.addr = 0x23,
> @@ -242,7 +245,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
>  			.mask_od = 0x40,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.sim = {
>  			.addr = 0x23,
> @@ -325,7 +331,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			},
>  			.addr_ihl = 0x23,
>  			.mask_ihl = 0x40,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  			.ig1 = {
>  				.en_addr = 0x23,
>  				.en_mask = 0x08,
> @@ -398,7 +407,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  				.addr = 0x21,
>  				.mask = 0x04,
>  			},
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.sim = {
>  			.addr = 0x21,
> @@ -465,7 +477,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
>  			.mask_od = 0x40,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.sim = {
>  			.addr = 0x21,
> @@ -590,7 +605,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  				.addr = 0x21,
>  				.mask = 0x04,
>  			},
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.sim = {
>  			.addr = 0x21,
> @@ -662,7 +680,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			},
>  			.addr_ihl = 0x25,
>  			.mask_ihl = 0x02,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.sim = {
>  			.addr = 0x23,
> diff --git a/drivers/iio/common/st_sensors/st_sensors_trigger.c b/drivers/iio/common/st_sensors/st_sensors_trigger.c
> index fa73e6795359..fdcc5a891958 100644
> --- a/drivers/iio/common/st_sensors/st_sensors_trigger.c
> +++ b/drivers/iio/common/st_sensors/st_sensors_trigger.c
> @@ -31,7 +31,7 @@ static int st_sensors_new_samples_available(struct iio_dev *indio_dev,
>  	int ret;
>  
>  	/* How would I know if I can't check it? */
> -	if (!sdata->sensor_settings->drdy_irq.addr_stat_drdy)
> +	if (!sdata->sensor_settings->drdy_irq.stat_drdy.addr)
>  		return -EINVAL;
>  
>  	/* No scan mask, no interrupt */
> @@ -39,23 +39,15 @@ static int st_sensors_new_samples_available(struct iio_dev *indio_dev,
>  		return 0;
>  
>  	ret = sdata->tf->read_byte(&sdata->tb, sdata->dev,
> -			sdata->sensor_settings->drdy_irq.addr_stat_drdy,
> +			sdata->sensor_settings->drdy_irq.stat_drdy.addr,
>  			&status);
>  	if (ret < 0) {
>  		dev_err(sdata->dev,
>  			"error checking samples available\n");
>  		return ret;
>  	}
> -	/*
> -	 * the lower bits of .active_scan_mask[0] is directly mapped
> -	 * to the channels on the sensor: either bit 0 for
> -	 * one-dimensional sensors, or e.g. x,y,z for accelerometers,
> -	 * gyroscopes or magnetometers. No sensor use more than 3
> -	 * channels, so cut the other status bits here.
> -	 */
> -	status &= 0x07;
>  
> -	if (status & (u8)indio_dev->active_scan_mask[0])
> +	if (status & sdata->sensor_settings->drdy_irq.stat_drdy.mask)
>  		return 1;
>  
>  	return 0;
> @@ -212,7 +204,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
>  	 * it was "our" interrupt.
>  	 */
>  	if (sdata->int_pin_open_drain &&
> -	    sdata->sensor_settings->drdy_irq.addr_stat_drdy)
> +	    sdata->sensor_settings->drdy_irq.stat_drdy.addr)
>  		irq_trig |= IRQF_SHARED;
>  
>  	err = request_threaded_irq(sdata->get_irq_data_ready(indio_dev),
> diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
> index 764306378b20..4ebf1dafc13f 100644
> --- a/drivers/iio/gyro/st_gyro_core.c
> +++ b/drivers/iio/gyro/st_gyro_core.c
> @@ -120,7 +120,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			 * drain settings, but only for INT1 and not
>  			 * for the DRDY line on INT2.
>  			 */
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
> @@ -192,7 +195,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			 * drain settings, but only for INT1 and not
>  			 * for the DRDY line on INT2.
>  			 */
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
> @@ -259,7 +265,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			 * drain settings, but only for INT1 and not
>  			 * for the DRDY line on INT2.
>  			 */
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x07,
> +			},
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
> diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
> index 2c465cbe3b0a..6d404d2e71be 100644
> --- a/drivers/iio/magnetometer/st_magn_core.c
> +++ b/drivers/iio/magnetometer/st_magn_core.c
> @@ -359,7 +359,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
>  				.addr = 0x62,
>  				.mask = 0x01,
>  			},
> -			.addr_stat_drdy = 0x67,
> +			.stat_drdy = {
> +				.addr = 0x67,
> +				.mask = 0x07,
> +			},
>  		},
>  		.multi_read_bit = false,
>  		.bootime = 2,
> diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
> index 97971d432021..2cff138ef1ca 100644
> --- a/drivers/iio/pressure/st_pressure_core.c
> +++ b/drivers/iio/pressure/st_pressure_core.c
> @@ -292,7 +292,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
>  			.mask_od = 0x40,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x03,
> +			},
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
> @@ -406,7 +409,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
>  			.mask_od = 0x40,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x03,
> +			},
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
> @@ -466,7 +472,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x12,
>  			.mask_od = 0x40,
> -			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x03,
> +			},
>  		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
> diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
> index ac3aa89518ca..e6c646d5d6d4 100644
> --- a/include/linux/iio/common/st_sensors.h
> +++ b/include/linux/iio/common/st_sensors.h
> @@ -138,7 +138,7 @@ struct st_sensor_das {
>   * @mask_ihl: mask to enable/disable active low on the INT lines.
>   * @addr_od: address to enable/disable Open Drain on the INT lines.
>   * @mask_od: mask to enable/disable Open Drain on the INT lines.
> - * @addr_stat_drdy: address to read status of DRDY (data ready) interrupt
> + * struct stat_drdy - status register of DRDY (data ready) interrupt.
>   * struct ig1 - represents the Interrupt Generator 1 of sensors.
>   * @en_addr: address of the enable ig1 register.
>   * @en_mask: mask to write the on/off value for enable.
> @@ -156,7 +156,10 @@ struct st_sensor_data_ready_irq {
>  	u8 mask_ihl;
>  	u8 addr_od;
>  	u8 mask_od;
> -	u8 addr_stat_drdy;
> +	struct {
> +		u8 addr;
> +		u8 mask;
> +	} stat_drdy;
>  	struct {
>  		u8 en_addr;
>  		u8 en_mask;


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 4/5] iio: accel: add support to LIS2DW12
  2017-08-16 19:13 ` [PATCH 4/5] iio: accel: add support to LIS2DW12 Lorenzo Bianconi
@ 2017-08-17 15:05   ` Jonathan Cameron
  0 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2017-08-17 15:05 UTC (permalink / raw)
  To: Lorenzo Bianconi; +Cc: linux-iio, linus.walleij, lorenzo.bianconi, devicetree

On Wed, 16 Aug 2017 21:13:15 +0200
Lorenzo Bianconi <lorenzo.bianconi83@gmail.com> wrote:

> add support to STMicroelectronics LIS2DW12 accelerometer in
> st_accel framework
> 
> http://www.st.com/resource/en/datasheet/lis2dw12.pdf
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>

Looks good to me from a quick glance (I haven't checked against the data
sheet).  Might take a closer look on v2.

Jonathan
> ---
>  drivers/iio/accel/st_accel.h      |  2 +
>  drivers/iio/accel/st_accel_core.c | 79 +++++++++++++++++++++++++++++++++++++++
>  drivers/iio/accel/st_accel_i2c.c  |  5 +++
>  drivers/iio/accel/st_accel_spi.c  |  5 +++
>  4 files changed, 91 insertions(+)
> 
> diff --git a/drivers/iio/accel/st_accel.h b/drivers/iio/accel/st_accel.h
> index 0fe521609a3a..2ed0f60418c0 100644
> --- a/drivers/iio/accel/st_accel.h
> +++ b/drivers/iio/accel/st_accel.h
> @@ -32,6 +32,7 @@ enum st_accel_type {
>  	H3LIS331DL,
>  	LIS331DL,
>  	LIS3LV02DL,
> +	LIS2DW12,
>  	ST_ACCEL_MAX,
>  };
>  
> @@ -52,6 +53,7 @@ enum st_accel_type {
>  #define LIS2DH12_ACCEL_DEV_NAME		"lis2dh12_accel"
>  #define LIS3L02DQ_ACCEL_DEV_NAME	"lis3l02dq"
>  #define LNG2DM_ACCEL_DEV_NAME		"lng2dm"
> +#define LIS2DW12_ACCEL_DEV_NAME		"lis2dw12"
>  
>  /**
>  * struct st_sensors_platform_data - default accel platform data
> diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
> index 4d9190625630..42ada20daca0 100644
> --- a/drivers/iio/accel/st_accel_core.c
> +++ b/drivers/iio/accel/st_accel_core.c
> @@ -692,6 +692,85 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  		.multi_read_bit = true,
>  		.bootime = 2,
>  	},
> +	{
> +		.wai = 0x44,
> +		.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
> +		.sensors_supported = {
> +			[0] = LIS2DW12_ACCEL_DEV_NAME,
> +		},
> +		.ch = (struct iio_chan_spec *)st_accel_12bit_channels,
> +		.odr = {
> +			.addr = 0x20,
> +			.mask = 0xf0,
> +			.odr_avl = {
> +				{ .hz = 1, .value = 0x01, },
> +				{ .hz = 12, .value = 0x02, },
> +				{ .hz = 25, .value = 0x03, },
> +				{ .hz = 50, .value = 0x04, },
> +				{ .hz = 100, .value = 0x05, },
> +				{ .hz = 200, .value = 0x06, },
> +			},
> +		},
> +		.pw = {
> +			.addr = 0x20,
> +			.mask = 0xf0,
> +			.value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
> +		},
> +		.fs = {
> +			.addr = 0x25,
> +			.mask = 0x30,
> +			.fs_avl = {
> +				[0] = {
> +					.num = ST_ACCEL_FS_AVL_2G,
> +					.value = 0x00,
> +					.gain = IIO_G_TO_M_S_2(976),
> +				},
> +				[1] = {
> +					.num = ST_ACCEL_FS_AVL_4G,
> +					.value = 0x01,
> +					.gain = IIO_G_TO_M_S_2(1952),
> +				},
> +				[2] = {
> +					.num = ST_ACCEL_FS_AVL_8G,
> +					.value = 0x02,
> +					.gain = IIO_G_TO_M_S_2(3904),
> +				},
> +				[3] = {
> +					.num = ST_ACCEL_FS_AVL_16G,
> +					.value = 0x03,
> +					.gain = IIO_G_TO_M_S_2(7808),
> +				},
> +			},
> +		},
> +		.bdu = {
> +			.addr = 0x21,
> +			.mask = 0x08,
> +		},
> +		.drdy_irq = {
> +			.int1 = {
> +				.addr = 0x23,
> +				.mask = 0x01,
> +			},
> +			.int2 = {
> +				.addr = 0x24,
> +				.mask = 0x01,
> +			},
> +			.addr_ihl = 0x22,
> +			.mask_ihl = 0x08,
> +			.addr_od = 0x22,
> +			.mask_od = 0x20,
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = 0x01,
> +			},
> +		},
> +		.sim = {
> +			.addr = 0x21,
> +			.value = BIT(0),
> +		},
> +		.multi_read_bit = false,
> +		.bootime = 2,
> +	},
>  };
>  
>  static int st_accel_read_raw(struct iio_dev *indio_dev,
> diff --git a/drivers/iio/accel/st_accel_i2c.c b/drivers/iio/accel/st_accel_i2c.c
> index 18cafb9f2468..363429b5686c 100644
> --- a/drivers/iio/accel/st_accel_i2c.c
> +++ b/drivers/iio/accel/st_accel_i2c.c
> @@ -94,6 +94,10 @@ static const struct of_device_id st_accel_of_match[] = {
>  		.compatible = "st,lng2dm-accel",
>  		.data = LNG2DM_ACCEL_DEV_NAME,
>  	},
> +	{
> +		.compatible = "st,lis2dw12",
> +		.data = LIS2DW12_ACCEL_DEV_NAME,
> +	},
>  	{},
>  };
>  MODULE_DEVICE_TABLE(of, st_accel_of_match);
> @@ -129,6 +133,7 @@ static const struct i2c_device_id st_accel_id_table[] = {
>  	{ H3LIS331DL_ACCEL_DEV_NAME, H3LIS331DL },
>  	{ LIS331DL_ACCEL_DEV_NAME, LIS331DL },
>  	{ LIS3LV02DL_ACCEL_DEV_NAME, LIS3LV02DL },
> +	{ LIS2DW12_ACCEL_DEV_NAME, LIS2DW12 },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(i2c, st_accel_id_table);
> diff --git a/drivers/iio/accel/st_accel_spi.c b/drivers/iio/accel/st_accel_spi.c
> index 915fa49085f7..7692da49e59f 100644
> --- a/drivers/iio/accel/st_accel_spi.c
> +++ b/drivers/iio/accel/st_accel_spi.c
> @@ -82,6 +82,10 @@ static const struct of_device_id st_accel_of_match[] = {
>  		.compatible = "st,lis331dl-accel",
>  		.data = LIS331DL_ACCEL_DEV_NAME,
>  	},
> +	{
> +		.compatible = "st,lis2dw12",
> +		.data = LIS2DW12_ACCEL_DEV_NAME,
> +	},
>  	{}
>  };
>  MODULE_DEVICE_TABLE(of, st_accel_of_match);
> @@ -133,6 +137,7 @@ static const struct spi_device_id st_accel_id_table[] = {
>  	{ H3LIS331DL_ACCEL_DEV_NAME },
>  	{ LIS331DL_ACCEL_DEV_NAME },
>  	{ LIS3LV02DL_ACCEL_DEV_NAME },
> +	{ LIS2DW12_ACCEL_DEV_NAME },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(spi, st_accel_id_table);


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones
  2017-08-17 14:59   ` Jonathan Cameron
@ 2017-08-17 15:09     ` Lorenzo Bianconi
  0 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2017-08-17 15:09 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Linus Walleij, Lorenzo BIANCONI, devicetree

> On Wed, 16 Aug 2017 21:13:12 +0200
> Lorenzo Bianconi <lorenzo.bianconi83@gmail.com> wrote:
>
>> Separate data-ready configuration parameters for INT1 and INT2 pins in
>> st_sensor_data_ready_irq data structure. That change will be use to
>> properly support LIS2DW12 accel sensor.
>>
>> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
>
> One oddity which was there already that you've kept.
>
> I'd clean it up whilst we are here rather than doubling it ;)
>
> Jonathan
>
>> @@ -336,7 +341,12 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>>                       .mask = 0x04,
>>               },
>>               .drdy_irq = {
>> -                     .addr = 0,
>> +                     .int1 = {
>> +                             .addr = 0x00,
>> +                     },
>> +                     .int2 = {
>> +                             .addr = 0x00,
>> +                     },
> This is presumably for a device which doesn't support data ready.
> Why not rely on the default value of 0 and scrap this explicit entry?
>>               },
>>               .multi_read_bit = true,
>>               .bootime = 2,

Right :). Will do in v2.
Regards,
Lorenzo


-- 
UNIX is Sexy: who | grep -i blonde | talk; cd ~; wine; talk; touch;
unzip; touch; strip; gasp; finger; gasp; mount; fsck; more; yes; gasp;
umount; make clean; sleep

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-08-17 15:09 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-16 19:13 [PATCH 0/5] Add support to LIS2DW12 accel sensor Lorenzo Bianconi
2017-08-16 19:13 ` [PATCH 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones Lorenzo Bianconi
2017-08-17 14:59   ` Jonathan Cameron
2017-08-17 15:09     ` Lorenzo Bianconi
2017-08-16 19:13 ` [PATCH 2/5] iio: st_sensors: do not always write enable_axis register Lorenzo Bianconi
2017-08-17 15:00   ` Jonathan Cameron
2017-08-16 19:13 ` [PATCH 3/5] iio: st_sensors: add register mask for status register Lorenzo Bianconi
2017-08-17 15:04   ` Jonathan Cameron
2017-08-16 19:13 ` [PATCH 4/5] iio: accel: add support to LIS2DW12 Lorenzo Bianconi
2017-08-17 15:05   ` Jonathan Cameron
2017-08-16 19:13 ` [PATCH 5/5] dt-bindings: iio: accel: add LIS2DW12 sensor device binding Lorenzo Bianconi

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).