public inbox for linux-iio@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] iio:st_magn: enable trigger before enabling sensor
@ 2018-10-25 22:32 Denis Ciocca
  2018-10-26  1:28 ` Martin Kelly
  2018-10-28 16:20 ` Jonathan Cameron
  0 siblings, 2 replies; 7+ messages in thread
From: Denis Ciocca @ 2018-10-25 22:32 UTC (permalink / raw)
  To: linux-iio, lars, jic23, lorenzo.bianconi83, pmeerw, martin,
	knaack.h
  Cc: Denis Ciocca

>From logical point of view driver should be ready to
receive irqs before enabling the sensor itself.
This patch is fixing also an issue related to
sensors that generate interrupts unconditionally,
(DRDY pads) when interrupt level is used.

Signed-off-by: Martin Kelly <martin@martingkelly.com>
Signed-off-by: Denis Ciocca <denis.ciocca@st.com>
---
 drivers/iio/magnetometer/st_magn_buffer.c | 33 +++++++++++------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/drivers/iio/magnetometer/st_magn_buffer.c b/drivers/iio/magnetometer/st_magn_buffer.c
index 0a9e8fadfa9d..097e6e88a464 100644
--- a/drivers/iio/magnetometer/st_magn_buffer.c
+++ b/drivers/iio/magnetometer/st_magn_buffer.c
@@ -30,11 +30,6 @@ int st_magn_trig_set_state(struct iio_trigger *trig, bool state)
 	return st_sensors_set_dataready_irq(indio_dev, state);
 }
 
-static int st_magn_buffer_preenable(struct iio_dev *indio_dev)
-{
-	return st_sensors_set_enable(indio_dev, true);
-}
-
 static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
 {
 	int err;
@@ -42,40 +37,44 @@ static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
 
 	mdata->buffer_data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
 	if (mdata->buffer_data == NULL) {
-		err = -ENOMEM;
-		goto allocate_memory_error;
+		return -ENOMEM;
 	}
 
 	err = iio_triggered_buffer_postenable(indio_dev);
 	if (err < 0)
-		goto st_magn_buffer_postenable_error;
+		goto st_magn_buffer_free_buffer_data;
+
+	err = st_sensors_set_enable(indio_dev, true);
+	if (err < 0)
+		goto st_magn_buffer_buffer_predisable;
 
 	return err;
 
-st_magn_buffer_postenable_error:
+st_magn_buffer_buffer_predisable:
+	iio_triggered_buffer_predisable(indio_dev);
+st_magn_buffer_free_buffer_data:
 	kfree(mdata->buffer_data);
-allocate_memory_error:
 	return err;
 }
 
 static int st_magn_buffer_predisable(struct iio_dev *indio_dev)
 {
-	int err;
+	int err = 0, err2;
 	struct st_sensor_data *mdata = iio_priv(indio_dev);
 
-	err = iio_triggered_buffer_predisable(indio_dev);
-	if (err < 0)
-		goto st_magn_buffer_predisable_error;
+	err2 = st_sensors_set_enable(indio_dev, false);
+	if (err2 < 0)
+		err = err2;
 
-	err = st_sensors_set_enable(indio_dev, false);
+	err2 = iio_triggered_buffer_predisable(indio_dev);
+	if (err2 < 0)
+		err = err2;
 
-st_magn_buffer_predisable_error:
 	kfree(mdata->buffer_data);
 	return err;
 }
 
 static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = {
-	.preenable = &st_magn_buffer_preenable,
 	.postenable = &st_magn_buffer_postenable,
 	.predisable = &st_magn_buffer_predisable,
 };
-- 
2.19.1

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

end of thread, other threads:[~2018-11-03 19:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-25 22:32 [PATCH] iio:st_magn: enable trigger before enabling sensor Denis Ciocca
2018-10-26  1:28 ` Martin Kelly
2018-10-28 16:20 ` Jonathan Cameron
2018-10-28 19:07   ` Martin Kelly
2018-10-28 22:55     ` Denis CIOCCA
2018-10-28 23:15       ` Martin Kelly
2018-11-03 10:26         ` Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox