Skip to contentSkip to conversation

iio: light: isl29125: use iio helper function to guarantee direct mode

PATCH In review Alison Schofield 3 participants 5 messages Jun 7, 2016 – Jun 11, 2016 IIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 iio: light: isl29125: use iio helper function to guarantee direct mode

Replace the code that guarantees the device stays in direct mode with iio_device_claim_direct_mode() which does same. This allows removal of an unused lock in the device private global data.

---
 drivers/iio/light/isl29125.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/iio/light/isl29125.c +4 -6
index e2945a2..a6b9d66 100644
@@ -50,7 +50,6 @@
 
 struct isl29125_data {
 	struct i2c_client *client;
-	struct mutex lock;
 	u8 conf1;
 	u16 buffer[8]; /* 3x 16-bit, padding, 8 bytes timestamp */
 };
@@ -128,11 +127,11 @@ static int isl29125_read_raw(struct iio_dev *indio_dev,
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
-		if (iio_buffer_enabled(indio_dev))
-			return -EBUSY;
-		mutex_lock(&data->lock);
+		ret = iio_device_claim_direct_mode(indio_dev);
+		if (ret)
+			return ret;
 		ret = isl29125_read_data(data, chan->scan_index);
-		mutex_unlock(&data->lock);
+		iio_device_release_direct_mode(indio_dev);
 		if (ret < 0)
 			return ret;
 		*val = ret;
@@ -259,7 +258,6 @@ static int isl29125_probe(struct i2c_client *client,
 	data = iio_priv(indio_dev);
 	i2c_set_clientdata(client, indio_dev);
 	data->client = client;
-	mutex_init(&data->lock);
 
 	indio_dev->dev.parent = &client->dev;
 	indio_dev->info = &isl29125_info;
Signature · 1 line
2.1.4
Acked-by on v1 1/1
#1 lore raw
Quoted 4 lines

Replace the code that guarantees the device stays in direct mode with iio_device_claim_direct_mode() which does same. This allows removal of an unused lock in the device private global data.

nice!

Quoted 43 lines
---
 drivers/iio/light/isl29125.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/iio/light/isl29125.c +4 -6
index e2945a2..a6b9d66 100644
@@ -50,7 +50,6 @@
 
 struct isl29125_data {
 	struct i2c_client *client;
-	struct mutex lock;
 	u8 conf1;
 	u16 buffer[8]; /* 3x 16-bit, padding, 8 bytes timestamp */
 };
@@ -128,11 +127,11 @@ static int isl29125_read_raw(struct iio_dev *indio_dev,
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
-		if (iio_buffer_enabled(indio_dev))
-			return -EBUSY;
-		mutex_lock(&data->lock);
+		ret = iio_device_claim_direct_mode(indio_dev);
+		if (ret)
+			return ret;
 		ret = isl29125_read_data(data, chan->scan_index);
-		mutex_unlock(&data->lock);
+		iio_device_release_direct_mode(indio_dev);
 		if (ret < 0)
 			return ret;
 		*val = ret;
@@ -259,7 +258,6 @@ static int isl29125_probe(struct i2c_client *client,
 	data = iio_priv(indio_dev);
 	i2c_set_clientdata(client, indio_dev);
 	data->client = client;
-	mutex_init(&data->lock);
 
 	indio_dev->dev.parent = &client->dev;
 	indio_dev->info = &isl29125_info;
Signature · 2 lines
Peter Meerwald-Stadler
+43-664-2444418 (mobile)
maintainer
#2 lore raw
Quoted 7 lines · Peter Meerwald-Stadler
Quoted 4 lines

Replace the code that guarantees the device stays in direct mode with iio_device_claim_direct_mode() which does same. This allows removal of an unused lock in the device private global data.

nice!

Applied and pushed out as testing for the autobuilders to play with it.

Thanks,

Jonathan

Quoted 45 lines
Quoted 44 lines
---
 drivers/iio/light/isl29125.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/iio/light/isl29125.c +4 -6
index e2945a2..a6b9d66 100644
@@ -50,7 +50,6 @@
 
 struct isl29125_data {
 	struct i2c_client *client;
-	struct mutex lock;
 	u8 conf1;
 	u16 buffer[8]; /* 3x 16-bit, padding, 8 bytes timestamp */
 };
@@ -128,11 +127,11 @@ static int isl29125_read_raw(struct iio_dev *indio_dev,
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
-		if (iio_buffer_enabled(indio_dev))
-			return -EBUSY;
-		mutex_lock(&data->lock);
+		ret = iio_device_claim_direct_mode(indio_dev);
+		if (ret)
+			return ret;
 		ret = isl29125_read_data(data, chan->scan_index);
-		mutex_unlock(&data->lock);
+		iio_device_release_direct_mode(indio_dev);
 		if (ret < 0)
 			return ret;
 		*val = ret;
@@ -259,7 +258,6 @@ static int isl29125_probe(struct i2c_client *client,
 	data = iio_priv(indio_dev);
 	i2c_set_clientdata(client, indio_dev);
 	data->client = client;
-	mutex_init(&data->lock);
 
 	indio_dev->dev.parent = &client->dev;
 	indio_dev->info = &isl29125_info;
maintainer
#3 lore raw
Quoted 9 lines · Jonathan Cameron
Quoted 7 lines · Peter Meerwald-Stadler
Quoted 4 lines

Replace the code that guarantees the device stays in direct mode with iio_device_claim_direct_mode() which does same. This allows removal of an unused lock in the device private global data.

nice!

Applied and pushed out as testing for the autobuilders to play with it.

Actually hold that - see the tcs3472 response. This lock isn't actually here to prevent the buffer running at the same time as the raw call...

Backed out for now.

Jonathan

Quoted 55 lines

Thanks,

Jonathan

Quoted 41 lines
Quoted 41 lines
---
 drivers/iio/light/isl29125.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/iio/light/isl29125.c +4 -6
index e2945a2..a6b9d66 100644
@@ -50,7 +50,6 @@
 
 struct isl29125_data {
 	struct i2c_client *client;
-	struct mutex lock;
 	u8 conf1;
 	u16 buffer[8]; /* 3x 16-bit, padding, 8 bytes timestamp */
 };
@@ -128,11 +127,11 @@ static int isl29125_read_raw(struct iio_dev *indio_dev,
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
-		if (iio_buffer_enabled(indio_dev))
-			return -EBUSY;
-		mutex_lock(&data->lock);
+		ret = iio_device_claim_direct_mode(indio_dev);
+		if (ret)
+			return ret;
 		ret = isl29125_read_data(data, chan->scan_index);
-		mutex_unlock(&data->lock);
+		iio_device_release_direct_mode(indio_dev);
 		if (ret < 0)
 			return ret;
 		*val = ret;
@@ -259,7 +258,6 @@ static int isl29125_probe(struct i2c_client *client,
 	data = iio_priv(indio_dev);
 	i2c_set_clientdata(client, indio_dev);
 	data->client = client;
-	mutex_init(&data->lock);
 
Quoted 4 lines

drivers/iio/light/isl29125.c static int isl29125_probe(struct i2c_client *client, · line 263

Quoted 3 lines
drivers/iio/light/isl29125.c +0 -0
 	indio_dev->dev.parent = &client->dev;
 	indio_dev->info = &isl29125_info;

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

maintainer
#4 lore raw
Quoted 7 lines · Jonathan Cameron
Quoted 6 lines · Jonathan Cameron
Quoted 5 lines · Peter Meerwald-Stadler
Quoted 4 lines

Replace the code that guarantees the device stays in direct mode with iio_device_claim_direct_mode() which does same. This allows removal of an unused lock in the device private global data.

Quoted 7 lines
Quoted 3 lines
Quoted 2 lines

nice!

Applied and pushed out as testing for the autobuilders to play with it.

Actually hold that - see the tcs3472 response. This lock isn't actually here to prevent the buffer running at the same time as the raw call...

Backed out for now.

Reapplied...

Quoted 63 lines

Jonathan

Quoted 50 lines

Thanks,

Jonathan

Quoted 41 lines
Quoted 41 lines
---
 drivers/iio/light/isl29125.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/iio/light/isl29125.c +4 -6
index e2945a2..a6b9d66 100644
@@ -50,7 +50,6 @@
 
 struct isl29125_data {
 	struct i2c_client *client;
-	struct mutex lock;
 	u8 conf1;
 	u16 buffer[8]; /* 3x 16-bit, padding, 8 bytes timestamp */
 };
@@ -128,11 +127,11 @@ static int isl29125_read_raw(struct iio_dev *indio_dev,
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
-		if (iio_buffer_enabled(indio_dev))
-			return -EBUSY;
-		mutex_lock(&data->lock);
+		ret = iio_device_claim_direct_mode(indio_dev);
+		if (ret)
+			return ret;
 		ret = isl29125_read_data(data, chan->scan_index);
-		mutex_unlock(&data->lock);
+		iio_device_release_direct_mode(indio_dev);
 		if (ret < 0)
 			return ret;
 		*val = ret;
@@ -259,7 +258,6 @@ static int isl29125_probe(struct i2c_client *client,
 	data = iio_priv(indio_dev);
 	i2c_set_clientdata(client, indio_dev);
 	data->client = client;
-	mutex_init(&data->lock);
 
Quoted 4 lines

drivers/iio/light/isl29125.c static int isl29125_probe(struct i2c_client *client, · line 263

Quoted 3 lines
drivers/iio/light/isl29125.c +0 -0
 	indio_dev->dev.parent = &client->dev;
 	indio_dev->info = &isl29125_info;
Quoted 5 lines

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html