All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale
@ 2013-07-17 14:44 Lars-Peter Clausen
  2013-07-17 14:44 ` [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property Lars-Peter Clausen
                   ` (14 more replies)
  0 siblings, 15 replies; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Return the actual value read from the device and not just the mask.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 620d63f..0b34492 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -223,7 +223,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 			mutex_unlock(&indio_dev->mlock);
 			return ret;
 		}
-		*val = (1 << bits) - 1;
+		*val = val16;
 		mutex_unlock(&indio_dev->mlock);
 		return IIO_VAL_INT;
 	}
-- 
1.8.0


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

* [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 11:54   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping Lars-Peter Clausen
                   ` (13 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Remove the unused 'negate' property from the driver state struct. This also
means we can now use the adis struct directly as the driver data.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260.h               |  9 ----
 drivers/staging/iio/gyro/adis16260_core.c          | 60 ++++++++++------------
 drivers/staging/iio/gyro/adis16260_platform_data.h |  2 -
 3 files changed, 28 insertions(+), 43 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
index df3c0b7..05bf274 100644
--- a/drivers/staging/iio/gyro/adis16260.h
+++ b/drivers/staging/iio/gyro/adis16260.h
@@ -76,15 +76,6 @@
 #define ADIS16260_SPI_BURST	(u32)(1000 * 1000)
 #define ADIS16260_SPI_FAST	(u32)(2000 * 1000)
 
-/**
- * struct adis16260_state - device instance specific data
- * @negate:		negate the scale parameter
- **/
-struct adis16260_state {
-	unsigned	negate:1;
-	struct adis	adis;
-};
-
 /* At the moment triggers are only used for ring buffer
  * filling. This may change!
  */
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 0b34492..83ec32e 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -29,8 +29,8 @@ static ssize_t adis16260_read_frequency_available(struct device *dev,
 						  char *buf)
 {
 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct adis16260_state *st = iio_priv(indio_dev);
-	if (spi_get_device_id(st->adis.spi)->driver_data)
+	struct adis *adis = iio_priv(indio_dev);
+	if (spi_get_device_id(adis->spi)->driver_data)
 		return sprintf(buf, "%s\n", "0.129 ~ 256");
 	else
 		return sprintf(buf, "%s\n", "256 2048");
@@ -41,15 +41,15 @@ static ssize_t adis16260_read_frequency(struct device *dev,
 		char *buf)
 {
 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct adis16260_state *st = iio_priv(indio_dev);
+	struct adis *adis = iio_priv(indio_dev);
 	int ret, len = 0;
 	u16 t;
 	int sps;
-	ret = adis_read_reg_16(&st->adis, ADIS16260_SMPL_PRD, &t);
+	ret = adis_read_reg_16(adis, ADIS16260_SMPL_PRD, &t);
 	if (ret)
 		return ret;
 
-	if (spi_get_device_id(st->adis.spi)->driver_data) /* If an adis16251 */
+	if (spi_get_device_id(adis->spi)->driver_data) /* If an adis16251 */
 		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
 	else
 		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
@@ -64,7 +64,7 @@ static ssize_t adis16260_write_frequency(struct device *dev,
 		size_t len)
 {
 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct adis16260_state *st = iio_priv(indio_dev);
+	struct adis *adis = iio_priv(indio_dev);
 	long val;
 	int ret;
 	u8 t;
@@ -76,7 +76,7 @@ static ssize_t adis16260_write_frequency(struct device *dev,
 		return -EINVAL;
 
 	mutex_lock(&indio_dev->mlock);
-	if (spi_get_device_id(st->adis.spi)->driver_data) {
+	if (spi_get_device_id(adis->spi)->driver_data) {
 		t = (256 / val);
 		if (t > 0)
 			t--;
@@ -88,12 +88,10 @@ static ssize_t adis16260_write_frequency(struct device *dev,
 		t &= ADIS16260_SMPL_PRD_DIV_MASK;
 	}
 	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
-		st->adis.spi->max_speed_hz = ADIS16260_SPI_SLOW;
+		adis->spi->max_speed_hz = ADIS16260_SPI_SLOW;
 	else
-		st->adis.spi->max_speed_hz = ADIS16260_SPI_FAST;
-	ret = adis_write_reg_8(&st->adis,
-			ADIS16260_SMPL_PRD,
-			t);
+		adis->spi->max_speed_hz = ADIS16260_SPI_FAST;
+	ret = adis_write_reg_8(adis, ADIS16260_SMPL_PRD, t);
 
 	mutex_unlock(&indio_dev->mlock);
 
@@ -103,11 +101,11 @@ static ssize_t adis16260_write_frequency(struct device *dev,
 /* Power down the device */
 static int adis16260_stop_device(struct iio_dev *indio_dev)
 {
-	struct adis16260_state *st = iio_priv(indio_dev);
+	struct adis *adis = iio_priv(indio_dev);
 	int ret;
 	u16 val = ADIS16260_SLP_CNT_POWER_OFF;
 
-	ret = adis_write_reg_16(&st->adis, ADIS16260_SLP_CNT, val);
+	ret = adis_write_reg_16(adis, ADIS16260_SLP_CNT, val);
 	if (ret)
 		dev_err(&indio_dev->dev, "problem with turning device off: SLP_CNT");
 
@@ -146,7 +144,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 			      int *val, int *val2,
 			      long mask)
 {
-	struct adis16260_state *st = iio_priv(indio_dev);
+	struct adis *adis = iio_priv(indio_dev);
 	int ret;
 	int bits;
 	u8 addr;
@@ -160,7 +158,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 		switch (chan->type) {
 		case IIO_ANGL_VEL:
 			*val = 0;
-			if (spi_get_device_id(st->adis.spi)->driver_data) {
+			if (spi_get_device_id(adis->spi)->driver_data) {
 				/* 0.01832 degree / sec */
 				*val2 = IIO_DEGREE_TO_RAD(18320);
 			} else {
@@ -198,7 +196,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 		}
 		mutex_lock(&indio_dev->mlock);
 		addr = adis16260_addresses[chan->scan_index][0];
-		ret = adis_read_reg_16(&st->adis, addr, &val16);
+		ret = adis_read_reg_16(adis, addr, &val16);
 		if (ret) {
 			mutex_unlock(&indio_dev->mlock);
 			return ret;
@@ -218,7 +216,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 		}
 		mutex_lock(&indio_dev->mlock);
 		addr = adis16260_addresses[chan->scan_index][1];
-		ret = adis_read_reg_16(&st->adis, addr, &val16);
+		ret = adis_read_reg_16(adis, addr, &val16);
 		if (ret) {
 			mutex_unlock(&indio_dev->mlock);
 			return ret;
@@ -236,7 +234,7 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
 			       int val2,
 			       long mask)
 {
-	struct adis16260_state *st = iio_priv(indio_dev);
+	struct adis *adis = iio_priv(indio_dev);
 	int bits = 12;
 	s16 val16;
 	u8 addr;
@@ -244,11 +242,11 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
 	case IIO_CHAN_INFO_CALIBBIAS:
 		val16 = val & ((1 << bits) - 1);
 		addr = adis16260_addresses[chan->scan_index][0];
-		return adis_write_reg_16(&st->adis, addr, val16);
+		return adis_write_reg_16(adis, addr, val16);
 	case IIO_CHAN_INFO_CALIBSCALE:
 		val16 = val & ((1 << bits) - 1);
 		addr = adis16260_addresses[chan->scan_index][1];
-		return adis_write_reg_16(&st->adis, addr, val16);
+		return adis_write_reg_16(adis, addr, val16);
 	}
 	return -EINVAL;
 }
@@ -305,18 +303,16 @@ static int adis16260_probe(struct spi_device *spi)
 {
 	int ret;
 	struct adis16260_platform_data *pd = spi->dev.platform_data;
-	struct adis16260_state *st;
 	struct iio_dev *indio_dev;
+	struct adis *adis;
 
 	/* setup the industrialio driver allocated elements */
-	indio_dev = iio_device_alloc(sizeof(*st));
+	indio_dev = iio_device_alloc(sizeof(*adis));
 	if (indio_dev == NULL) {
 		ret = -ENOMEM;
 		goto error_ret;
 	}
-	st = iio_priv(indio_dev);
-	if (pd)
-		st->negate = pd->negate;
+	adis = iio_priv(indio_dev);
 	/* this is only used for removal purposes */
 	spi_set_drvdata(spi, indio_dev);
 
@@ -344,11 +340,11 @@ static int adis16260_probe(struct spi_device *spi)
 	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
 	indio_dev->modes = INDIO_DIRECT_MODE;
 
-	ret = adis_init(&st->adis, indio_dev, spi, &adis16260_data);
+	ret = adis_init(adis, indio_dev, spi, &adis16260_data);
 	if (ret)
 		goto error_free_dev;
 
-	ret = adis_setup_buffer_and_trigger(&st->adis, indio_dev, NULL);
+	ret = adis_setup_buffer_and_trigger(adis, indio_dev, NULL);
 	if (ret)
 		goto error_free_dev;
 
@@ -367,7 +363,7 @@ static int adis16260_probe(struct spi_device *spi)
 	}
 
 	/* Get the device into a sane initial state */
-	ret = adis_initial_startup(&st->adis);
+	ret = adis_initial_startup(adis);
 	if (ret)
 		goto error_cleanup_buffer_trigger;
 	ret = iio_device_register(indio_dev);
@@ -377,7 +373,7 @@ static int adis16260_probe(struct spi_device *spi)
 	return 0;
 
 error_cleanup_buffer_trigger:
-	adis_cleanup_buffer_and_trigger(&st->adis, indio_dev);
+	adis_cleanup_buffer_and_trigger(adis, indio_dev);
 error_free_dev:
 	iio_device_free(indio_dev);
 error_ret:
@@ -387,11 +383,11 @@ error_ret:
 static int adis16260_remove(struct spi_device *spi)
 {
 	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-	struct adis16260_state *st = iio_priv(indio_dev);
+	struct adis *adis = iio_priv(indio_dev);
 
 	iio_device_unregister(indio_dev);
 	adis16260_stop_device(indio_dev);
-	adis_cleanup_buffer_and_trigger(&st->adis, indio_dev);
+	adis_cleanup_buffer_and_trigger(adis, indio_dev);
 	iio_device_free(indio_dev);
 
 	return 0;
diff --git a/drivers/staging/iio/gyro/adis16260_platform_data.h b/drivers/staging/iio/gyro/adis16260_platform_data.h
index 12802e9..73c5899 100644
--- a/drivers/staging/iio/gyro/adis16260_platform_data.h
+++ b/drivers/staging/iio/gyro/adis16260_platform_data.h
@@ -11,9 +11,7 @@
 /**
  * struct adis16260_platform_data - instance specific data
  * @direction: x y or z
- * @negate: flag to indicate value should be inverted.
  **/
 struct adis16260_platform_data {
 	char direction;
-	unsigned negate:1;
 };
-- 
1.8.0


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

* [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
  2013-07-17 14:44 ` [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-20  9:28   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 04/15] staging:iio:adis16260: Don't set default scan mask Lars-Peter Clausen
                   ` (12 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

The adis16260 driver implements a unique feature in that it allows to change the
orientation of the gyroscope channel by specifying the orientation in platform
data. This feature is as far as I can see unused though and makes the driver
unnecessarily complex. So this patch removes the support for it. If it turns
out we need this, the cleanest approach to implement it is by adding support for
orientation mapping inside the IIO core so it is available to all drivers.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260.h               |  1 -
 drivers/staging/iio/gyro/adis16260_core.c          | 49 ++++++----------------
 drivers/staging/iio/gyro/adis16260_platform_data.h | 17 --------
 3 files changed, 13 insertions(+), 54 deletions(-)
 delete mode 100644 drivers/staging/iio/gyro/adis16260_platform_data.h

diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
index 05bf274..00455af 100644
--- a/drivers/staging/iio/gyro/adis16260.h
+++ b/drivers/staging/iio/gyro/adis16260.h
@@ -1,7 +1,6 @@
 #ifndef SPI_ADIS16260_H_
 #define SPI_ADIS16260_H_
 
-#include "adis16260_platform_data.h"
 #include <linux/iio/imu/adis.h>
 
 #define ADIS16260_STARTUP_DELAY	220 /* ms */
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 83ec32e..5cec675 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -119,21 +119,16 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
 static IIO_DEVICE_ATTR(sampling_frequency_available,
 		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
 
-#define ADIS16260_GYRO_CHANNEL_SET(axis, mod)				\
-struct iio_chan_spec adis16260_channels_##axis[] = {		\
-	ADIS_GYRO_CHAN(mod, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, \
-		BIT(IIO_CHAN_INFO_CALIBBIAS) | \
-		BIT(IIO_CHAN_INFO_CALIBSCALE), 14), \
-	ADIS_INCLI_CHAN(mod, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), \
-	ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), \
-	ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), \
-	ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12), \
-	IIO_CHAN_SOFT_TIMESTAMP(5),				\
-}
-
-static const ADIS16260_GYRO_CHANNEL_SET(x, X);
-static const ADIS16260_GYRO_CHANNEL_SET(y, Y);
-static const ADIS16260_GYRO_CHANNEL_SET(z, Z);
+static const struct iio_chan_spec adis16260_channels[] = {
+	ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO,
+		BIT(IIO_CHAN_INFO_CALIBBIAS) |
+		BIT(IIO_CHAN_INFO_CALIBSCALE), 14),
+	ADIS_INCLI_CHAN(X, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14),
+	ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12),
+	ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12),
+	ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12),
+	IIO_CHAN_SOFT_TIMESTAMP(5),
+};
 
 static const u8 adis16260_addresses[][2] = {
 	[ADIS16260_SCAN_GYRO] = { ADIS16260_GYRO_OFF, ADIS16260_GYRO_SCALE },
@@ -301,10 +296,9 @@ static const struct adis_data adis16260_data = {
 
 static int adis16260_probe(struct spi_device *spi)
 {
-	int ret;
-	struct adis16260_platform_data *pd = spi->dev.platform_data;
 	struct iio_dev *indio_dev;
 	struct adis *adis;
+	int ret;
 
 	/* setup the industrialio driver allocated elements */
 	indio_dev = iio_device_alloc(sizeof(*adis));
@@ -319,25 +313,8 @@ static int adis16260_probe(struct spi_device *spi)
 	indio_dev->name = spi_get_device_id(spi)->name;
 	indio_dev->dev.parent = &spi->dev;
 	indio_dev->info = &adis16260_info;
-	indio_dev->num_channels
-		= ARRAY_SIZE(adis16260_channels_x);
-	if (pd && pd->direction)
-		switch (pd->direction) {
-		case 'x':
-			indio_dev->channels = adis16260_channels_x;
-			break;
-		case 'y':
-			indio_dev->channels = adis16260_channels_y;
-			break;
-		case 'z':
-			indio_dev->channels = adis16260_channels_z;
-			break;
-		default:
-			return -EINVAL;
-		}
-	else
-		indio_dev->channels = adis16260_channels_x;
-	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
+	indio_dev->channels = adis16260_channels;
+	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels);
 	indio_dev->modes = INDIO_DIRECT_MODE;
 
 	ret = adis_init(adis, indio_dev, spi, &adis16260_data);
diff --git a/drivers/staging/iio/gyro/adis16260_platform_data.h b/drivers/staging/iio/gyro/adis16260_platform_data.h
deleted file mode 100644
index 73c5899..0000000
--- a/drivers/staging/iio/gyro/adis16260_platform_data.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * ADIS16260 Programmable Digital Gyroscope Sensor Driver Platform Data
- *
- * Based on adis16255.h Matthia Brugger <m_brugger&web.de>
- *
- * Copyright (C) 2010 Fraunhofer Institute for Integrated Circuits
-  *
- * Licensed under the GPL-2 or later.
- */
-
-/**
- * struct adis16260_platform_data - instance specific data
- * @direction: x y or z
- **/
-struct adis16260_platform_data {
-	char direction;
-};
-- 
1.8.0


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

* [PATCH 04/15] staging:iio:adis16260: Don't set default scan mask
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
  2013-07-17 14:44 ` [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property Lars-Peter Clausen
  2013-07-17 14:44 ` [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 11:56   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 05/15] staging:iio:adis16260: Remove separate header Lars-Peter Clausen
                   ` (11 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

The recomentation for IIO driver is to leave all scan elements off by default
and let userspace decide which channels need to be enabled.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 5cec675..e42a581 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -325,20 +325,6 @@ static int adis16260_probe(struct spi_device *spi)
 	if (ret)
 		goto error_free_dev;
 
-	if (indio_dev->buffer) {
-		/* Set default scan mode */
-		iio_scan_mask_set(indio_dev, indio_dev->buffer,
-				  ADIS16260_SCAN_SUPPLY);
-		iio_scan_mask_set(indio_dev, indio_dev->buffer,
-				  ADIS16260_SCAN_GYRO);
-		iio_scan_mask_set(indio_dev, indio_dev->buffer,
-				  ADIS16260_SCAN_AUX_ADC);
-		iio_scan_mask_set(indio_dev, indio_dev->buffer,
-				  ADIS16260_SCAN_TEMP);
-		iio_scan_mask_set(indio_dev, indio_dev->buffer,
-				  ADIS16260_SCAN_ANGL);
-	}
-
 	/* Get the device into a sane initial state */
 	ret = adis_initial_startup(adis);
 	if (ret)
-- 
1.8.0


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

* [PATCH 05/15] staging:iio:adis16260: Remove separate header
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (2 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 04/15] staging:iio:adis16260: Don't set default scan mask Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 11:59   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 06/15] staging:iio:adis16260: Add value range check for calibscale/-bias Lars-Peter Clausen
                   ` (10 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

The header is only used by a single C file, just put the register defines
directly into that C file and remove the header.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260.h      | 88 -------------------------------
 drivers/staging/iio/gyro/adis16260_core.c | 83 ++++++++++++++++++++++++++++-
 2 files changed, 82 insertions(+), 89 deletions(-)
 delete mode 100644 drivers/staging/iio/gyro/adis16260.h

diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
deleted file mode 100644
index 00455af..0000000
--- a/drivers/staging/iio/gyro/adis16260.h
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef SPI_ADIS16260_H_
-#define SPI_ADIS16260_H_
-
-#include <linux/iio/imu/adis.h>
-
-#define ADIS16260_STARTUP_DELAY	220 /* ms */
-
-#define ADIS16260_FLASH_CNT  0x00 /* Flash memory write count */
-#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */
-#define ADIS16260_GYRO_OUT   0x04 /* X-axis gyroscope output */
-#define ADIS16260_AUX_ADC    0x0A /* analog input channel measurement */
-#define ADIS16260_TEMP_OUT   0x0C /* internal temperature measurement */
-#define ADIS16260_ANGL_OUT   0x0E /* angle displacement */
-#define ADIS16260_GYRO_OFF   0x14 /* Calibration, offset/bias adjustment */
-#define ADIS16260_GYRO_SCALE 0x16 /* Calibration, scale adjustment */
-#define ADIS16260_ALM_MAG1   0x20 /* Alarm 1 magnitude/polarity setting */
-#define ADIS16260_ALM_MAG2   0x22 /* Alarm 2 magnitude/polarity setting */
-#define ADIS16260_ALM_SMPL1  0x24 /* Alarm 1 dynamic rate of change setting */
-#define ADIS16260_ALM_SMPL2  0x26 /* Alarm 2 dynamic rate of change setting */
-#define ADIS16260_ALM_CTRL   0x28 /* Alarm control */
-#define ADIS16260_AUX_DAC    0x30 /* Auxiliary DAC data */
-#define ADIS16260_GPIO_CTRL  0x32 /* Control, digital I/O line */
-#define ADIS16260_MSC_CTRL   0x34 /* Control, data ready, self-test settings */
-#define ADIS16260_SMPL_PRD   0x36 /* Control, internal sample rate */
-#define ADIS16260_SENS_AVG   0x38 /* Control, dynamic range, filtering */
-#define ADIS16260_SLP_CNT    0x3A /* Control, sleep mode initiation */
-#define ADIS16260_DIAG_STAT  0x3C /* Diagnostic, error flags */
-#define ADIS16260_GLOB_CMD   0x3E /* Control, global commands */
-#define ADIS16260_LOT_ID1    0x52 /* Lot Identification Code 1 */
-#define ADIS16260_LOT_ID2    0x54 /* Lot Identification Code 2 */
-#define ADIS16260_PROD_ID    0x56 /* Product identifier;
-				   * convert to decimal = 16,265/16,260 */
-#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */
-
-#define ADIS16260_ERROR_ACTIVE			(1<<14)
-#define ADIS16260_NEW_DATA			(1<<15)
-
-/* MSC_CTRL */
-#define ADIS16260_MSC_CTRL_MEM_TEST		(1<<11)
-/* Internal self-test enable */
-#define ADIS16260_MSC_CTRL_INT_SELF_TEST	(1<<10)
-#define ADIS16260_MSC_CTRL_NEG_SELF_TEST	(1<<9)
-#define ADIS16260_MSC_CTRL_POS_SELF_TEST	(1<<8)
-#define ADIS16260_MSC_CTRL_DATA_RDY_EN		(1<<2)
-#define ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH	(1<<1)
-#define ADIS16260_MSC_CTRL_DATA_RDY_DIO2	(1<<0)
-
-/* SMPL_PRD */
-/* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */
-#define ADIS16260_SMPL_PRD_TIME_BASE	(1<<7)
-#define ADIS16260_SMPL_PRD_DIV_MASK	0x7F
-
-/* SLP_CNT */
-#define ADIS16260_SLP_CNT_POWER_OFF     0x80
-
-/* DIAG_STAT */
-#define ADIS16260_DIAG_STAT_ALARM2	(1<<9)
-#define ADIS16260_DIAG_STAT_ALARM1	(1<<8)
-#define ADIS16260_DIAG_STAT_FLASH_CHK_BIT	6
-#define ADIS16260_DIAG_STAT_SELF_TEST_BIT	5
-#define ADIS16260_DIAG_STAT_OVERFLOW_BIT	4
-#define ADIS16260_DIAG_STAT_SPI_FAIL_BIT	3
-#define ADIS16260_DIAG_STAT_FLASH_UPT_BIT	2
-#define ADIS16260_DIAG_STAT_POWER_HIGH_BIT	1
-#define ADIS16260_DIAG_STAT_POWER_LOW_BIT	0
-
-/* GLOB_CMD */
-#define ADIS16260_GLOB_CMD_SW_RESET	(1<<7)
-#define ADIS16260_GLOB_CMD_FLASH_UPD	(1<<3)
-#define ADIS16260_GLOB_CMD_DAC_LATCH	(1<<2)
-#define ADIS16260_GLOB_CMD_FAC_CALIB	(1<<1)
-#define ADIS16260_GLOB_CMD_AUTO_NULL	(1<<0)
-
-#define ADIS16260_SPI_SLOW	(u32)(300 * 1000)
-#define ADIS16260_SPI_BURST	(u32)(1000 * 1000)
-#define ADIS16260_SPI_FAST	(u32)(2000 * 1000)
-
-/* At the moment triggers are only used for ring buffer
- * filling. This may change!
- */
-
-#define ADIS16260_SCAN_GYRO	0
-#define ADIS16260_SCAN_SUPPLY	1
-#define ADIS16260_SCAN_AUX_ADC	2
-#define ADIS16260_SCAN_TEMP	3
-#define ADIS16260_SCAN_ANGL	4
-
-#endif /* SPI_ADIS16260_H_ */
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index e42a581..a01c243 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -21,8 +21,89 @@
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
 #include <linux/iio/buffer.h>
+#include <linux/iio/imu/adis.h>
+
+#define ADIS16260_STARTUP_DELAY	220 /* ms */
+
+#define ADIS16260_FLASH_CNT  0x00 /* Flash memory write count */
+#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */
+#define ADIS16260_GYRO_OUT   0x04 /* X-axis gyroscope output */
+#define ADIS16260_AUX_ADC    0x0A /* analog input channel measurement */
+#define ADIS16260_TEMP_OUT   0x0C /* internal temperature measurement */
+#define ADIS16260_ANGL_OUT   0x0E /* angle displacement */
+#define ADIS16260_GYRO_OFF   0x14 /* Calibration, offset/bias adjustment */
+#define ADIS16260_GYRO_SCALE 0x16 /* Calibration, scale adjustment */
+#define ADIS16260_ALM_MAG1   0x20 /* Alarm 1 magnitude/polarity setting */
+#define ADIS16260_ALM_MAG2   0x22 /* Alarm 2 magnitude/polarity setting */
+#define ADIS16260_ALM_SMPL1  0x24 /* Alarm 1 dynamic rate of change setting */
+#define ADIS16260_ALM_SMPL2  0x26 /* Alarm 2 dynamic rate of change setting */
+#define ADIS16260_ALM_CTRL   0x28 /* Alarm control */
+#define ADIS16260_AUX_DAC    0x30 /* Auxiliary DAC data */
+#define ADIS16260_GPIO_CTRL  0x32 /* Control, digital I/O line */
+#define ADIS16260_MSC_CTRL   0x34 /* Control, data ready, self-test settings */
+#define ADIS16260_SMPL_PRD   0x36 /* Control, internal sample rate */
+#define ADIS16260_SENS_AVG   0x38 /* Control, dynamic range, filtering */
+#define ADIS16260_SLP_CNT    0x3A /* Control, sleep mode initiation */
+#define ADIS16260_DIAG_STAT  0x3C /* Diagnostic, error flags */
+#define ADIS16260_GLOB_CMD   0x3E /* Control, global commands */
+#define ADIS16260_LOT_ID1    0x52 /* Lot Identification Code 1 */
+#define ADIS16260_LOT_ID2    0x54 /* Lot Identification Code 2 */
+#define ADIS16260_PROD_ID    0x56 /* Product identifier;
+				   * convert to decimal = 16,265/16,260 */
+#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */
+
+#define ADIS16260_ERROR_ACTIVE			(1<<14)
+#define ADIS16260_NEW_DATA			(1<<15)
+
+/* MSC_CTRL */
+#define ADIS16260_MSC_CTRL_MEM_TEST		(1<<11)
+/* Internal self-test enable */
+#define ADIS16260_MSC_CTRL_INT_SELF_TEST	(1<<10)
+#define ADIS16260_MSC_CTRL_NEG_SELF_TEST	(1<<9)
+#define ADIS16260_MSC_CTRL_POS_SELF_TEST	(1<<8)
+#define ADIS16260_MSC_CTRL_DATA_RDY_EN		(1<<2)
+#define ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH	(1<<1)
+#define ADIS16260_MSC_CTRL_DATA_RDY_DIO2	(1<<0)
+
+/* SMPL_PRD */
+/* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */
+#define ADIS16260_SMPL_PRD_TIME_BASE	(1<<7)
+#define ADIS16260_SMPL_PRD_DIV_MASK	0x7F
+
+/* SLP_CNT */
+#define ADIS16260_SLP_CNT_POWER_OFF     0x80
+
+/* DIAG_STAT */
+#define ADIS16260_DIAG_STAT_ALARM2	(1<<9)
+#define ADIS16260_DIAG_STAT_ALARM1	(1<<8)
+#define ADIS16260_DIAG_STAT_FLASH_CHK_BIT	6
+#define ADIS16260_DIAG_STAT_SELF_TEST_BIT	5
+#define ADIS16260_DIAG_STAT_OVERFLOW_BIT	4
+#define ADIS16260_DIAG_STAT_SPI_FAIL_BIT	3
+#define ADIS16260_DIAG_STAT_FLASH_UPT_BIT	2
+#define ADIS16260_DIAG_STAT_POWER_HIGH_BIT	1
+#define ADIS16260_DIAG_STAT_POWER_LOW_BIT	0
+
+/* GLOB_CMD */
+#define ADIS16260_GLOB_CMD_SW_RESET	(1<<7)
+#define ADIS16260_GLOB_CMD_FLASH_UPD	(1<<3)
+#define ADIS16260_GLOB_CMD_DAC_LATCH	(1<<2)
+#define ADIS16260_GLOB_CMD_FAC_CALIB	(1<<1)
+#define ADIS16260_GLOB_CMD_AUTO_NULL	(1<<0)
+
+#define ADIS16260_SPI_SLOW	(u32)(300 * 1000)
+#define ADIS16260_SPI_BURST	(u32)(1000 * 1000)
+#define ADIS16260_SPI_FAST	(u32)(2000 * 1000)
+
+/* At the moment triggers are only used for ring buffer
+ * filling. This may change!
+ */
 
-#include "adis16260.h"
+#define ADIS16260_SCAN_GYRO	0
+#define ADIS16260_SCAN_SUPPLY	1
+#define ADIS16260_SCAN_AUX_ADC	2
+#define ADIS16260_SCAN_TEMP	3
+#define ADIS16260_SCAN_ANGL	4
 
 static ssize_t adis16260_read_frequency_available(struct device *dev,
 						  struct device_attribute *attr,
-- 
1.8.0


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

* [PATCH 06/15] staging:iio:adis16260: Add value range check for calibscale/-bias
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (3 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 05/15] staging:iio:adis16260: Remove separate header Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 11:58   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 07/15] staging:iio:adis16260: Use sign_extend32() instead of open-coding it Lars-Peter Clausen
                   ` (9 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Instead of just cutting of the upper bits of the value make sure that the value
is in the valid range and return an error if it is not.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index a01c243..55e6795 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -311,18 +311,21 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
 			       long mask)
 {
 	struct adis *adis = iio_priv(indio_dev);
-	int bits = 12;
-	s16 val16;
 	u8 addr;
+
 	switch (mask) {
 	case IIO_CHAN_INFO_CALIBBIAS:
-		val16 = val & ((1 << bits) - 1);
+		if (val < -2048 || val >= 2048)
+			return -EINVAL;
+
 		addr = adis16260_addresses[chan->scan_index][0];
-		return adis_write_reg_16(adis, addr, val16);
+		return adis_write_reg_16(adis, addr, val);
 	case IIO_CHAN_INFO_CALIBSCALE:
-		val16 = val & ((1 << bits) - 1);
+		if (val < 0 || val >= 4096)
+			return -EINVAL;
+
 		addr = adis16260_addresses[chan->scan_index][1];
-		return adis_write_reg_16(adis, addr, val16);
+		return adis_write_reg_16(adis, addr, val);
 	}
 	return -EINVAL;
 }
-- 
1.8.0


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

* [PATCH 07/15] staging:iio:adis16260: Use sign_extend32() instead of open-coding it
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (4 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 06/15] staging:iio:adis16260: Add value range check for calibscale/-bias Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 11:59   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 08/15] staging:iio:adis16260: Simplify calibscale and caliboffset reading Lars-Peter Clausen
                   ` (8 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 55e6795..f060452 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -277,9 +277,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 			mutex_unlock(&indio_dev->mlock);
 			return ret;
 		}
-		val16 &= (1 << bits) - 1;
-		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
-		*val = val16;
+		*val = sign_extend32(val16, bits - 1);
 		mutex_unlock(&indio_dev->mlock);
 		return IIO_VAL_INT;
 	case IIO_CHAN_INFO_CALIBSCALE:
-- 
1.8.0


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

* [PATCH 08/15] staging:iio:adis16260: Simplify calibscale and caliboffset reading
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (5 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 07/15] staging:iio:adis16260: Use sign_extend32() instead of open-coding it Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:00   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 09/15] staging:iio:adis16260: Fix minor style issue Lars-Peter Clausen
                   ` (7 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

All channels for this device have the same number of bits for calibscale and
caliboffset, there is no need to determine it dynamically based on the channel
type. Also there is no locking required since adis_read_reg_16() will take care
of proper locking on its own.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 31 +++++--------------------------
 1 file changed, 5 insertions(+), 26 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index f060452..c70094f 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -222,7 +222,6 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 {
 	struct adis *adis = iio_priv(indio_dev);
 	int ret;
-	int bits;
 	u8 addr;
 	s16 val16;
 
@@ -263,40 +262,20 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 		*val = 250000 / 1453; /* 25 C = 0x00 */
 		return IIO_VAL_INT;
 	case IIO_CHAN_INFO_CALIBBIAS:
-		switch (chan->type) {
-		case IIO_ANGL_VEL:
-			bits = 12;
-			break;
-		default:
-			return -EINVAL;
-		}
-		mutex_lock(&indio_dev->mlock);
 		addr = adis16260_addresses[chan->scan_index][0];
 		ret = adis_read_reg_16(adis, addr, &val16);
-		if (ret) {
-			mutex_unlock(&indio_dev->mlock);
+		if (ret)
 			return ret;
-		}
-		*val = sign_extend32(val16, bits - 1);
-		mutex_unlock(&indio_dev->mlock);
+
+		*val = sign_extend32(val16, 11);
 		return IIO_VAL_INT;
 	case IIO_CHAN_INFO_CALIBSCALE:
-		switch (chan->type) {
-		case IIO_ANGL_VEL:
-			bits = 12;
-			break;
-		default:
-			return -EINVAL;
-		}
-		mutex_lock(&indio_dev->mlock);
 		addr = adis16260_addresses[chan->scan_index][1];
 		ret = adis_read_reg_16(adis, addr, &val16);
-		if (ret) {
-			mutex_unlock(&indio_dev->mlock);
+		if (ret)
 			return ret;
-		}
+
 		*val = val16;
-		mutex_unlock(&indio_dev->mlock);
 		return IIO_VAL_INT;
 	}
 	return -EINVAL;
-- 
1.8.0


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

* [PATCH 09/15] staging:iio:adis16260: Fix minor style issue
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (6 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 08/15] staging:iio:adis16260: Simplify calibscale and caliboffset reading Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:01   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 10/15] staging:iio:adis16260: Remove 'SPS' suffix from samplerate attribute Lars-Peter Clausen
                   ` (6 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Delete some extra whitespace.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index c70094f..4b62000 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -131,9 +131,9 @@ static ssize_t adis16260_read_frequency(struct device *dev,
 		return ret;
 
 	if (spi_get_device_id(adis->spi)->driver_data) /* If an adis16251 */
-		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
+		sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
 	else
-		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
+		sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
 	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
 	len = sprintf(buf, "%d SPS\n", sps);
 	return len;
-- 
1.8.0


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

* [PATCH 10/15] staging:iio:adis16260: Remove 'SPS' suffix from samplerate attribute
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (7 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 09/15] staging:iio:adis16260: Fix minor style issue Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:01   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 11/15] staging:iio:adis16260: Add scale for the inclination channel Lars-Peter Clausen
                   ` (5 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

This is not part of the ABI.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 4b62000..a140d73 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -135,7 +135,7 @@ static ssize_t adis16260_read_frequency(struct device *dev,
 	else
 		sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
 	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
-	len = sprintf(buf, "%d SPS\n", sps);
+	len = sprintf(buf, "%d\n", sps);
 	return len;
 }
 
-- 
1.8.0


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

* [PATCH 11/15] staging:iio:adis16260: Add scale for the inclination channel
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (8 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 10/15] staging:iio:adis16260: Remove 'SPS' suffix from samplerate attribute Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:02   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 12/15] staging:iio:adis16260: Remove unused includes Lars-Peter Clausen
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

While the inclination channel claims to support reading the scale the driver did
not implement this, so trying to read the scale results in a -EINVAL. This patch
fixes it.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index a140d73..48b0e63 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -241,6 +241,10 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
 				*val2 = IIO_DEGREE_TO_RAD(73260);
 			}
 			return IIO_VAL_INT_PLUS_MICRO;
+		case IIO_INCLI:
+			*val = 0;
+			*val2 = IIO_DEGREE_TO_RAD(36630);
+			return IIO_VAL_INT_PLUS_MICRO;
 		case IIO_VOLTAGE:
 			if (chan->channel == 0) {
 				*val = 1;
-- 
1.8.0


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

* [PATCH 12/15] staging:iio:adis16260: Remove unused includes
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (9 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 11/15] staging:iio:adis16260: Add scale for the inclination channel Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:03   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 13/15] staging:iio:adis16260: Add proper range checks to write_frequency() Lars-Peter Clausen
                   ` (3 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Remove some unused includes from the driver.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 48b0e63..b8a6a04 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -7,15 +7,11 @@
  */
 
 #include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/delay.h>
 #include <linux/mutex.h>
 #include <linux/device.h>
 #include <linux/kernel.h>
 #include <linux/spi/spi.h>
-#include <linux/slab.h>
 #include <linux/sysfs.h>
-#include <linux/list.h>
 #include <linux/module.h>
 
 #include <linux/iio/iio.h>
-- 
1.8.0


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

* [PATCH 13/15] staging:iio:adis16260: Add proper range checks to write_frequency()
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (10 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 12/15] staging:iio:adis16260: Remove unused includes Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:04   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 14/15] staging:iio:adis16260: Remove sampling_frequency_available attribute Lars-Peter Clausen
                   ` (2 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

A negative sampling frequency is obviously invalid, so use kstrtouint() instead
of strict_strtoul. Also when setting a sampling frequency smaller than the
minimum supported frequency set the frequency to the minimum supported frequency
instead of just cutting off the upper bits of the raw register value.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index b8a6a04..d4e3dd7 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -142,29 +142,26 @@ static ssize_t adis16260_write_frequency(struct device *dev,
 {
 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 	struct adis *adis = iio_priv(indio_dev);
-	long val;
+	unsigned int val;
 	int ret;
 	u8 t;
 
-	ret = strict_strtol(buf, 10, &val);
+	ret = kstrtouint(buf, 10, &val);
 	if (ret)
 		return ret;
-	if (val == 0)
-		return -EINVAL;
 
 	mutex_lock(&indio_dev->mlock);
-	if (spi_get_device_id(adis->spi)->driver_data) {
-		t = (256 / val);
-		if (t > 0)
-			t--;
-		t &= ADIS16260_SMPL_PRD_DIV_MASK;
-	} else {
-		t = (2048 / val);
-		if (t > 0)
-			t--;
-		t &= ADIS16260_SMPL_PRD_DIV_MASK;
-	}
-	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
+	if (spi_get_device_id(adis->spi)->driver_data)
+		t = 256 / val;
+	else
+		t = 2048 / val;
+
+	if (t > ADIS16260_SMPL_PRD_DIV_MASK)
+		t = ADIS16260_SMPL_PRD_DIV_MASK;
+	else if (t > 0)
+		t--;
+
+	if (t >= 0x0A)
 		adis->spi->max_speed_hz = ADIS16260_SPI_SLOW;
 	else
 		adis->spi->max_speed_hz = ADIS16260_SPI_FAST;
-- 
1.8.0


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

* [PATCH 14/15] staging:iio:adis16260: Remove sampling_frequency_available attribute
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (11 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 13/15] staging:iio:adis16260: Add proper range checks to write_frequency() Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:04   ` Jonathan Cameron
  2013-07-17 14:44 ` [PATCH 15/15] staging:iio:adis16260: Move out of staging Lars-Peter Clausen
  2013-07-27 11:54 ` [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Jonathan Cameron
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

The values presented here are completely bogus. Also ..._available attributes
are supposed to be used for properties that only support discrete sets of
values, but we accept continuous values and will round to the next supported
frequency.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/gyro/adis16260_core.c | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index d4e3dd7..b4cf800 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -101,18 +101,6 @@
 #define ADIS16260_SCAN_TEMP	3
 #define ADIS16260_SCAN_ANGL	4
 
-static ssize_t adis16260_read_frequency_available(struct device *dev,
-						  struct device_attribute *attr,
-						  char *buf)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct adis *adis = iio_priv(indio_dev);
-	if (spi_get_device_id(adis->spi)->driver_data)
-		return sprintf(buf, "%s\n", "0.129 ~ 256");
-	else
-		return sprintf(buf, "%s\n", "256 2048");
-}
-
 static ssize_t adis16260_read_frequency(struct device *dev,
 		struct device_attribute *attr,
 		char *buf)
@@ -190,9 +178,6 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
 		adis16260_read_frequency,
 		adis16260_write_frequency);
 
-static IIO_DEVICE_ATTR(sampling_frequency_available,
-		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
-
 static const struct iio_chan_spec adis16260_channels[] = {
 	ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO,
 		BIT(IIO_CHAN_INFO_CALIBBIAS) |
@@ -306,7 +291,6 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
 
 static struct attribute *adis16260_attributes[] = {
 	&iio_dev_attr_sampling_frequency.dev_attr.attr,
-	&iio_dev_attr_sampling_frequency_available.dev_attr.attr,
 	NULL
 };
 
-- 
1.8.0


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

* [PATCH 15/15] staging:iio:adis16260: Move out of staging
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (12 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 14/15] staging:iio:adis16260: Remove sampling_frequency_available attribute Lars-Peter Clausen
@ 2013-07-17 14:44 ` Lars-Peter Clausen
  2013-07-27 12:08   ` Jonathan Cameron
  2013-07-27 11:54 ` [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Jonathan Cameron
  14 siblings, 1 reply; 31+ messages in thread
From: Lars-Peter Clausen @ 2013-07-17 14:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

The drivers is in more or less good shape, conforms to the IIO ABI and none of
the default static code checker report any problems, so move it out of staging.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/iio/gyro/Kconfig                                     | 12 ++++++++++++
 drivers/iio/gyro/Makefile                                    |  1 +
 .../iio/gyro/adis16260_core.c => iio/gyro/adis16260.c}       |  0
 drivers/staging/iio/gyro/Kconfig                             | 12 ------------
 drivers/staging/iio/gyro/Makefile                            |  3 ---
 5 files changed, 13 insertions(+), 15 deletions(-)
 rename drivers/{staging/iio/gyro/adis16260_core.c => iio/gyro/adis16260.c} (100%)

diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
index 5913735..41c64a4 100644
--- a/drivers/iio/gyro/Kconfig
+++ b/drivers/iio/gyro/Kconfig
@@ -28,6 +28,18 @@ config ADIS16136
 	  Say yes here to build support for the Analog Devices ADIS16133, ADIS16135,
 	  ADIS16136 gyroscope devices.
 
+config ADIS16260
+	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
+	depends on SPI
+	select IIO_ADIS_LIB
+	select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
+	help
+	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
+	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
+
+	  This driver can also be built as a module.  If so, the module
+	  will be called adis16260.
+
 config ADXRS450
 	tristate "Analog Devices ADXRS450/3 Digital Output Gyroscope SPI driver"
 	depends on SPI
diff --git a/drivers/iio/gyro/Makefile b/drivers/iio/gyro/Makefile
index 36091d5..2f2752a 100644
--- a/drivers/iio/gyro/Makefile
+++ b/drivers/iio/gyro/Makefile
@@ -6,6 +6,7 @@
 obj-$(CONFIG_ADIS16080) += adis16080.o
 obj-$(CONFIG_ADIS16130) += adis16130.o
 obj-$(CONFIG_ADIS16136) += adis16136.o
+obj-$(CONFIG_ADIS16260) += adis16260.o
 obj-$(CONFIG_ADXRS450) += adxrs450.o
 
 obj-$(CONFIG_HID_SENSOR_GYRO_3D) += hid-sensor-gyro-3d.o
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/iio/gyro/adis16260.c
similarity index 100%
rename from drivers/staging/iio/gyro/adis16260_core.c
rename to drivers/iio/gyro/adis16260.c
diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
index b433371..88b199b 100644
--- a/drivers/staging/iio/gyro/Kconfig
+++ b/drivers/staging/iio/gyro/Kconfig
@@ -10,16 +10,4 @@ config ADIS16060
 	  Say yes here to build support for Analog Devices adis16060 wide bandwidth
 	  yaw rate gyroscope with SPI.
 
-config ADIS16260
-	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
-	depends on SPI
-	select IIO_ADIS_LIB
-	select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
-	help
-	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
-	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
-
-	  This driver can also be built as a module.  If so, the module
-	  will be called adis16260.
-
 endmenu
diff --git a/drivers/staging/iio/gyro/Makefile b/drivers/staging/iio/gyro/Makefile
index 975f95b..cf22d6d 100644
--- a/drivers/staging/iio/gyro/Makefile
+++ b/drivers/staging/iio/gyro/Makefile
@@ -4,6 +4,3 @@
 
 adis16060-y             := adis16060_core.o
 obj-$(CONFIG_ADIS16060) += adis16060.o
-
-adis16260-y             := adis16260_core.o
-obj-$(CONFIG_ADIS16260) += adis16260.o
-- 
1.8.0


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

* Re: [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping
  2013-07-17 14:44 ` [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping Lars-Peter Clausen
@ 2013-07-20  9:28   ` Jonathan Cameron
  2013-07-27 11:55     ` Jonathan Cameron
  0 siblings, 1 reply; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-20  9:28 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: Jonathan Cameron, linux-iio, m_brugger

On 07/17/2013 03:44 PM, Lars-Peter Clausen wrote:
> The adis16260 driver implements a unique feature in that it allows to change the
> orientation of the gyroscope channel by specifying the orientation in platform
> data. This feature is as far as I can see unused though and makes the driver
> unnecessarily complex. So this patch removes the support for it. If it turns
> out we need this, the cleanest approach to implement it is by adding support for
> orientation mapping inside the IIO core so it is available to all drivers.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Now the reason this originally got introduced was to maintain functionality that
was in the adis16250 that was merged into here.

I agree that moving this into the core, if actually matters, is a good idea.
I have cc'd Matthias on the basis it was his driver this originally came from.

Jonathan
> ---
>  drivers/staging/iio/gyro/adis16260.h               |  1 -
>  drivers/staging/iio/gyro/adis16260_core.c          | 49 ++++++----------------
>  drivers/staging/iio/gyro/adis16260_platform_data.h | 17 --------
>  3 files changed, 13 insertions(+), 54 deletions(-)
>  delete mode 100644 drivers/staging/iio/gyro/adis16260_platform_data.h
> 
> diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
> index 05bf274..00455af 100644
> --- a/drivers/staging/iio/gyro/adis16260.h
> +++ b/drivers/staging/iio/gyro/adis16260.h
> @@ -1,7 +1,6 @@
>  #ifndef SPI_ADIS16260_H_
>  #define SPI_ADIS16260_H_
>  
> -#include "adis16260_platform_data.h"
>  #include <linux/iio/imu/adis.h>
>  
>  #define ADIS16260_STARTUP_DELAY	220 /* ms */
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 83ec32e..5cec675 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -119,21 +119,16 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
>  static IIO_DEVICE_ATTR(sampling_frequency_available,
>  		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
>  
> -#define ADIS16260_GYRO_CHANNEL_SET(axis, mod)				\
> -struct iio_chan_spec adis16260_channels_##axis[] = {		\
> -	ADIS_GYRO_CHAN(mod, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, \
> -		BIT(IIO_CHAN_INFO_CALIBBIAS) | \
> -		BIT(IIO_CHAN_INFO_CALIBSCALE), 14), \
> -	ADIS_INCLI_CHAN(mod, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), \
> -	ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), \
> -	ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), \
> -	ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12), \
> -	IIO_CHAN_SOFT_TIMESTAMP(5),				\
> -}
> -
> -static const ADIS16260_GYRO_CHANNEL_SET(x, X);
> -static const ADIS16260_GYRO_CHANNEL_SET(y, Y);
> -static const ADIS16260_GYRO_CHANNEL_SET(z, Z);
> +static const struct iio_chan_spec adis16260_channels[] = {
> +	ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO,
> +		BIT(IIO_CHAN_INFO_CALIBBIAS) |
> +		BIT(IIO_CHAN_INFO_CALIBSCALE), 14),
> +	ADIS_INCLI_CHAN(X, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14),
> +	ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12),
> +	ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12),
> +	ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12),
> +	IIO_CHAN_SOFT_TIMESTAMP(5),
> +};
>  
>  static const u8 adis16260_addresses[][2] = {
>  	[ADIS16260_SCAN_GYRO] = { ADIS16260_GYRO_OFF, ADIS16260_GYRO_SCALE },
> @@ -301,10 +296,9 @@ static const struct adis_data adis16260_data = {
>  
>  static int adis16260_probe(struct spi_device *spi)
>  {
> -	int ret;
> -	struct adis16260_platform_data *pd = spi->dev.platform_data;
>  	struct iio_dev *indio_dev;
>  	struct adis *adis;
> +	int ret;
>  
>  	/* setup the industrialio driver allocated elements */
>  	indio_dev = iio_device_alloc(sizeof(*adis));
> @@ -319,25 +313,8 @@ static int adis16260_probe(struct spi_device *spi)
>  	indio_dev->name = spi_get_device_id(spi)->name;
>  	indio_dev->dev.parent = &spi->dev;
>  	indio_dev->info = &adis16260_info;
> -	indio_dev->num_channels
> -		= ARRAY_SIZE(adis16260_channels_x);
> -	if (pd && pd->direction)
> -		switch (pd->direction) {
> -		case 'x':
> -			indio_dev->channels = adis16260_channels_x;
> -			break;
> -		case 'y':
> -			indio_dev->channels = adis16260_channels_y;
> -			break;
> -		case 'z':
> -			indio_dev->channels = adis16260_channels_z;
> -			break;
> -		default:
> -			return -EINVAL;
> -		}
> -	else
> -		indio_dev->channels = adis16260_channels_x;
> -	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
> +	indio_dev->channels = adis16260_channels;
> +	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels);
>  	indio_dev->modes = INDIO_DIRECT_MODE;
>  
>  	ret = adis_init(adis, indio_dev, spi, &adis16260_data);
> diff --git a/drivers/staging/iio/gyro/adis16260_platform_data.h b/drivers/staging/iio/gyro/adis16260_platform_data.h
> deleted file mode 100644
> index 73c5899..0000000
> --- a/drivers/staging/iio/gyro/adis16260_platform_data.h
> +++ /dev/null
> @@ -1,17 +0,0 @@
> -/*
> - * ADIS16260 Programmable Digital Gyroscope Sensor Driver Platform Data
> - *
> - * Based on adis16255.h Matthia Brugger <m_brugger&web.de>
> - *
> - * Copyright (C) 2010 Fraunhofer Institute for Integrated Circuits
> -  *
> - * Licensed under the GPL-2 or later.
> - */
> -
> -/**
> - * struct adis16260_platform_data - instance specific data
> - * @direction: x y or z
> - **/
> -struct adis16260_platform_data {
> -	char direction;
> -};
> 

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

* Re: [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale
  2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
                   ` (13 preceding siblings ...)
  2013-07-17 14:44 ` [PATCH 15/15] staging:iio:adis16260: Move out of staging Lars-Peter Clausen
@ 2013-07-27 11:54 ` Jonathan Cameron
  14 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:54 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> Return the actual value read from the device and not just the mask.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks,

> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 620d63f..0b34492 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -223,7 +223,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  			mutex_unlock(&indio_dev->mlock);
>  			return ret;
>  		}
> -		*val = (1 << bits) - 1;
> +		*val = val16;
>  		mutex_unlock(&indio_dev->mlock);
>  		return IIO_VAL_INT;
>  	}
> 

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

* Re: [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property
  2013-07-17 14:44 ` [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property Lars-Peter Clausen
@ 2013-07-27 11:54   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:54 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> Remove the unused 'negate' property from the driver state struct. This also
> means we can now use the adis struct directly as the driver data.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks
> ---
>  drivers/staging/iio/gyro/adis16260.h               |  9 ----
>  drivers/staging/iio/gyro/adis16260_core.c          | 60 ++++++++++------------
>  drivers/staging/iio/gyro/adis16260_platform_data.h |  2 -
>  3 files changed, 28 insertions(+), 43 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
> index df3c0b7..05bf274 100644
> --- a/drivers/staging/iio/gyro/adis16260.h
> +++ b/drivers/staging/iio/gyro/adis16260.h
> @@ -76,15 +76,6 @@
>  #define ADIS16260_SPI_BURST	(u32)(1000 * 1000)
>  #define ADIS16260_SPI_FAST	(u32)(2000 * 1000)
>  
> -/**
> - * struct adis16260_state - device instance specific data
> - * @negate:		negate the scale parameter
> - **/
> -struct adis16260_state {
> -	unsigned	negate:1;
> -	struct adis	adis;
> -};
> -
>  /* At the moment triggers are only used for ring buffer
>   * filling. This may change!
>   */
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 0b34492..83ec32e 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -29,8 +29,8 @@ static ssize_t adis16260_read_frequency_available(struct device *dev,
>  						  char *buf)
>  {
>  	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct adis16260_state *st = iio_priv(indio_dev);
> -	if (spi_get_device_id(st->adis.spi)->driver_data)
> +	struct adis *adis = iio_priv(indio_dev);
> +	if (spi_get_device_id(adis->spi)->driver_data)
>  		return sprintf(buf, "%s\n", "0.129 ~ 256");
>  	else
>  		return sprintf(buf, "%s\n", "256 2048");
> @@ -41,15 +41,15 @@ static ssize_t adis16260_read_frequency(struct device *dev,
>  		char *buf)
>  {
>  	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct adis16260_state *st = iio_priv(indio_dev);
> +	struct adis *adis = iio_priv(indio_dev);
>  	int ret, len = 0;
>  	u16 t;
>  	int sps;
> -	ret = adis_read_reg_16(&st->adis, ADIS16260_SMPL_PRD, &t);
> +	ret = adis_read_reg_16(adis, ADIS16260_SMPL_PRD, &t);
>  	if (ret)
>  		return ret;
>  
> -	if (spi_get_device_id(st->adis.spi)->driver_data) /* If an adis16251 */
> +	if (spi_get_device_id(adis->spi)->driver_data) /* If an adis16251 */
>  		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
>  	else
>  		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
> @@ -64,7 +64,7 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>  		size_t len)
>  {
>  	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct adis16260_state *st = iio_priv(indio_dev);
> +	struct adis *adis = iio_priv(indio_dev);
>  	long val;
>  	int ret;
>  	u8 t;
> @@ -76,7 +76,7 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>  		return -EINVAL;
>  
>  	mutex_lock(&indio_dev->mlock);
> -	if (spi_get_device_id(st->adis.spi)->driver_data) {
> +	if (spi_get_device_id(adis->spi)->driver_data) {
>  		t = (256 / val);
>  		if (t > 0)
>  			t--;
> @@ -88,12 +88,10 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>  		t &= ADIS16260_SMPL_PRD_DIV_MASK;
>  	}
>  	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
> -		st->adis.spi->max_speed_hz = ADIS16260_SPI_SLOW;
> +		adis->spi->max_speed_hz = ADIS16260_SPI_SLOW;
>  	else
> -		st->adis.spi->max_speed_hz = ADIS16260_SPI_FAST;
> -	ret = adis_write_reg_8(&st->adis,
> -			ADIS16260_SMPL_PRD,
> -			t);
> +		adis->spi->max_speed_hz = ADIS16260_SPI_FAST;
> +	ret = adis_write_reg_8(adis, ADIS16260_SMPL_PRD, t);
>  
>  	mutex_unlock(&indio_dev->mlock);
>  
> @@ -103,11 +101,11 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>  /* Power down the device */
>  static int adis16260_stop_device(struct iio_dev *indio_dev)
>  {
> -	struct adis16260_state *st = iio_priv(indio_dev);
> +	struct adis *adis = iio_priv(indio_dev);
>  	int ret;
>  	u16 val = ADIS16260_SLP_CNT_POWER_OFF;
>  
> -	ret = adis_write_reg_16(&st->adis, ADIS16260_SLP_CNT, val);
> +	ret = adis_write_reg_16(adis, ADIS16260_SLP_CNT, val);
>  	if (ret)
>  		dev_err(&indio_dev->dev, "problem with turning device off: SLP_CNT");
>  
> @@ -146,7 +144,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  			      int *val, int *val2,
>  			      long mask)
>  {
> -	struct adis16260_state *st = iio_priv(indio_dev);
> +	struct adis *adis = iio_priv(indio_dev);
>  	int ret;
>  	int bits;
>  	u8 addr;
> @@ -160,7 +158,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  		switch (chan->type) {
>  		case IIO_ANGL_VEL:
>  			*val = 0;
> -			if (spi_get_device_id(st->adis.spi)->driver_data) {
> +			if (spi_get_device_id(adis->spi)->driver_data) {
>  				/* 0.01832 degree / sec */
>  				*val2 = IIO_DEGREE_TO_RAD(18320);
>  			} else {
> @@ -198,7 +196,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  		}
>  		mutex_lock(&indio_dev->mlock);
>  		addr = adis16260_addresses[chan->scan_index][0];
> -		ret = adis_read_reg_16(&st->adis, addr, &val16);
> +		ret = adis_read_reg_16(adis, addr, &val16);
>  		if (ret) {
>  			mutex_unlock(&indio_dev->mlock);
>  			return ret;
> @@ -218,7 +216,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  		}
>  		mutex_lock(&indio_dev->mlock);
>  		addr = adis16260_addresses[chan->scan_index][1];
> -		ret = adis_read_reg_16(&st->adis, addr, &val16);
> +		ret = adis_read_reg_16(adis, addr, &val16);
>  		if (ret) {
>  			mutex_unlock(&indio_dev->mlock);
>  			return ret;
> @@ -236,7 +234,7 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
>  			       int val2,
>  			       long mask)
>  {
> -	struct adis16260_state *st = iio_priv(indio_dev);
> +	struct adis *adis = iio_priv(indio_dev);
>  	int bits = 12;
>  	s16 val16;
>  	u8 addr;
> @@ -244,11 +242,11 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
>  	case IIO_CHAN_INFO_CALIBBIAS:
>  		val16 = val & ((1 << bits) - 1);
>  		addr = adis16260_addresses[chan->scan_index][0];
> -		return adis_write_reg_16(&st->adis, addr, val16);
> +		return adis_write_reg_16(adis, addr, val16);
>  	case IIO_CHAN_INFO_CALIBSCALE:
>  		val16 = val & ((1 << bits) - 1);
>  		addr = adis16260_addresses[chan->scan_index][1];
> -		return adis_write_reg_16(&st->adis, addr, val16);
> +		return adis_write_reg_16(adis, addr, val16);
>  	}
>  	return -EINVAL;
>  }
> @@ -305,18 +303,16 @@ static int adis16260_probe(struct spi_device *spi)
>  {
>  	int ret;
>  	struct adis16260_platform_data *pd = spi->dev.platform_data;
> -	struct adis16260_state *st;
>  	struct iio_dev *indio_dev;
> +	struct adis *adis;
>  
>  	/* setup the industrialio driver allocated elements */
> -	indio_dev = iio_device_alloc(sizeof(*st));
> +	indio_dev = iio_device_alloc(sizeof(*adis));
>  	if (indio_dev == NULL) {
>  		ret = -ENOMEM;
>  		goto error_ret;
>  	}
> -	st = iio_priv(indio_dev);
> -	if (pd)
> -		st->negate = pd->negate;
> +	adis = iio_priv(indio_dev);
>  	/* this is only used for removal purposes */
>  	spi_set_drvdata(spi, indio_dev);
>  
> @@ -344,11 +340,11 @@ static int adis16260_probe(struct spi_device *spi)
>  	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
>  	indio_dev->modes = INDIO_DIRECT_MODE;
>  
> -	ret = adis_init(&st->adis, indio_dev, spi, &adis16260_data);
> +	ret = adis_init(adis, indio_dev, spi, &adis16260_data);
>  	if (ret)
>  		goto error_free_dev;
>  
> -	ret = adis_setup_buffer_and_trigger(&st->adis, indio_dev, NULL);
> +	ret = adis_setup_buffer_and_trigger(adis, indio_dev, NULL);
>  	if (ret)
>  		goto error_free_dev;
>  
> @@ -367,7 +363,7 @@ static int adis16260_probe(struct spi_device *spi)
>  	}
>  
>  	/* Get the device into a sane initial state */
> -	ret = adis_initial_startup(&st->adis);
> +	ret = adis_initial_startup(adis);
>  	if (ret)
>  		goto error_cleanup_buffer_trigger;
>  	ret = iio_device_register(indio_dev);
> @@ -377,7 +373,7 @@ static int adis16260_probe(struct spi_device *spi)
>  	return 0;
>  
>  error_cleanup_buffer_trigger:
> -	adis_cleanup_buffer_and_trigger(&st->adis, indio_dev);
> +	adis_cleanup_buffer_and_trigger(adis, indio_dev);
>  error_free_dev:
>  	iio_device_free(indio_dev);
>  error_ret:
> @@ -387,11 +383,11 @@ error_ret:
>  static int adis16260_remove(struct spi_device *spi)
>  {
>  	struct iio_dev *indio_dev = spi_get_drvdata(spi);
> -	struct adis16260_state *st = iio_priv(indio_dev);
> +	struct adis *adis = iio_priv(indio_dev);
>  
>  	iio_device_unregister(indio_dev);
>  	adis16260_stop_device(indio_dev);
> -	adis_cleanup_buffer_and_trigger(&st->adis, indio_dev);
> +	adis_cleanup_buffer_and_trigger(adis, indio_dev);
>  	iio_device_free(indio_dev);
>  
>  	return 0;
> diff --git a/drivers/staging/iio/gyro/adis16260_platform_data.h b/drivers/staging/iio/gyro/adis16260_platform_data.h
> index 12802e9..73c5899 100644
> --- a/drivers/staging/iio/gyro/adis16260_platform_data.h
> +++ b/drivers/staging/iio/gyro/adis16260_platform_data.h
> @@ -11,9 +11,7 @@
>  /**
>   * struct adis16260_platform_data - instance specific data
>   * @direction: x y or z
> - * @negate: flag to indicate value should be inverted.
>   **/
>  struct adis16260_platform_data {
>  	char direction;
> -	unsigned negate:1;
>  };
> 

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

* Re: [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping
  2013-07-20  9:28   ` Jonathan Cameron
@ 2013-07-27 11:55     ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:55 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: Jonathan Cameron, linux-iio, m_brugger

On 07/20/13 10:28, Jonathan Cameron wrote:
> On 07/17/2013 03:44 PM, Lars-Peter Clausen wrote:
>> The adis16260 driver implements a unique feature in that it allows to change the
>> orientation of the gyroscope channel by specifying the orientation in platform
>> data. This feature is as far as I can see unused though and makes the driver
>> unnecessarily complex. So this patch removes the support for it. If it turns
>> out we need this, the cleanest approach to implement it is by adding support for
>> orientation mapping inside the IIO core so it is available to all drivers.
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Now the reason this originally got introduced was to maintain functionality that
> was in the adis16250 that was merged into here.
> 
> I agree that moving this into the core, if actually matters, is a good idea.
> I have cc'd Matthias on the basis it was his driver this originally came from.

Ah well. I'm going to guess that Matthias no longer has a strong opinion on this
and apply the patch. If he does we'lll look at putting support into the core
for this sort of mapping.

Applied to the togreg branch of iio.git

Thanks,

Jonathan
> 
> Jonathan
>> ---
>>  drivers/staging/iio/gyro/adis16260.h               |  1 -
>>  drivers/staging/iio/gyro/adis16260_core.c          | 49 ++++++----------------
>>  drivers/staging/iio/gyro/adis16260_platform_data.h | 17 --------
>>  3 files changed, 13 insertions(+), 54 deletions(-)
>>  delete mode 100644 drivers/staging/iio/gyro/adis16260_platform_data.h
>>
>> diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
>> index 05bf274..00455af 100644
>> --- a/drivers/staging/iio/gyro/adis16260.h
>> +++ b/drivers/staging/iio/gyro/adis16260.h
>> @@ -1,7 +1,6 @@
>>  #ifndef SPI_ADIS16260_H_
>>  #define SPI_ADIS16260_H_
>>  
>> -#include "adis16260_platform_data.h"
>>  #include <linux/iio/imu/adis.h>
>>  
>>  #define ADIS16260_STARTUP_DELAY	220 /* ms */
>> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
>> index 83ec32e..5cec675 100644
>> --- a/drivers/staging/iio/gyro/adis16260_core.c
>> +++ b/drivers/staging/iio/gyro/adis16260_core.c
>> @@ -119,21 +119,16 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
>>  static IIO_DEVICE_ATTR(sampling_frequency_available,
>>  		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
>>  
>> -#define ADIS16260_GYRO_CHANNEL_SET(axis, mod)				\
>> -struct iio_chan_spec adis16260_channels_##axis[] = {		\
>> -	ADIS_GYRO_CHAN(mod, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, \
>> -		BIT(IIO_CHAN_INFO_CALIBBIAS) | \
>> -		BIT(IIO_CHAN_INFO_CALIBSCALE), 14), \
>> -	ADIS_INCLI_CHAN(mod, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), \
>> -	ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), \
>> -	ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), \
>> -	ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12), \
>> -	IIO_CHAN_SOFT_TIMESTAMP(5),				\
>> -}
>> -
>> -static const ADIS16260_GYRO_CHANNEL_SET(x, X);
>> -static const ADIS16260_GYRO_CHANNEL_SET(y, Y);
>> -static const ADIS16260_GYRO_CHANNEL_SET(z, Z);
>> +static const struct iio_chan_spec adis16260_channels[] = {
>> +	ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO,
>> +		BIT(IIO_CHAN_INFO_CALIBBIAS) |
>> +		BIT(IIO_CHAN_INFO_CALIBSCALE), 14),
>> +	ADIS_INCLI_CHAN(X, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14),
>> +	ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12),
>> +	ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12),
>> +	ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12),
>> +	IIO_CHAN_SOFT_TIMESTAMP(5),
>> +};
>>  
>>  static const u8 adis16260_addresses[][2] = {
>>  	[ADIS16260_SCAN_GYRO] = { ADIS16260_GYRO_OFF, ADIS16260_GYRO_SCALE },
>> @@ -301,10 +296,9 @@ static const struct adis_data adis16260_data = {
>>  
>>  static int adis16260_probe(struct spi_device *spi)
>>  {
>> -	int ret;
>> -	struct adis16260_platform_data *pd = spi->dev.platform_data;
>>  	struct iio_dev *indio_dev;
>>  	struct adis *adis;
>> +	int ret;
>>  
>>  	/* setup the industrialio driver allocated elements */
>>  	indio_dev = iio_device_alloc(sizeof(*adis));
>> @@ -319,25 +313,8 @@ static int adis16260_probe(struct spi_device *spi)
>>  	indio_dev->name = spi_get_device_id(spi)->name;
>>  	indio_dev->dev.parent = &spi->dev;
>>  	indio_dev->info = &adis16260_info;
>> -	indio_dev->num_channels
>> -		= ARRAY_SIZE(adis16260_channels_x);
>> -	if (pd && pd->direction)
>> -		switch (pd->direction) {
>> -		case 'x':
>> -			indio_dev->channels = adis16260_channels_x;
>> -			break;
>> -		case 'y':
>> -			indio_dev->channels = adis16260_channels_y;
>> -			break;
>> -		case 'z':
>> -			indio_dev->channels = adis16260_channels_z;
>> -			break;
>> -		default:
>> -			return -EINVAL;
>> -		}
>> -	else
>> -		indio_dev->channels = adis16260_channels_x;
>> -	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
>> +	indio_dev->channels = adis16260_channels;
>> +	indio_dev->num_channels = ARRAY_SIZE(adis16260_channels);
>>  	indio_dev->modes = INDIO_DIRECT_MODE;
>>  
>>  	ret = adis_init(adis, indio_dev, spi, &adis16260_data);
>> diff --git a/drivers/staging/iio/gyro/adis16260_platform_data.h b/drivers/staging/iio/gyro/adis16260_platform_data.h
>> deleted file mode 100644
>> index 73c5899..0000000
>> --- a/drivers/staging/iio/gyro/adis16260_platform_data.h
>> +++ /dev/null
>> @@ -1,17 +0,0 @@
>> -/*
>> - * ADIS16260 Programmable Digital Gyroscope Sensor Driver Platform Data
>> - *
>> - * Based on adis16255.h Matthia Brugger <m_brugger&web.de>
>> - *
>> - * Copyright (C) 2010 Fraunhofer Institute for Integrated Circuits
>> -  *
>> - * Licensed under the GPL-2 or later.
>> - */
>> -
>> -/**
>> - * struct adis16260_platform_data - instance specific data
>> - * @direction: x y or z
>> - **/
>> -struct adis16260_platform_data {
>> -	char direction;
>> -};
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

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

* Re: [PATCH 04/15] staging:iio:adis16260: Don't set default scan mask
  2013-07-17 14:44 ` [PATCH 04/15] staging:iio:adis16260: Don't set default scan mask Lars-Peter Clausen
@ 2013-07-27 11:56   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:56 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: Jonathan Cameron, linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> The recomentation for IIO driver is to leave all scan elements off by default
> and let userspace decide which channels need to be enabled.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 14 --------------
>  1 file changed, 14 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 5cec675..e42a581 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -325,20 +325,6 @@ static int adis16260_probe(struct spi_device *spi)
>  	if (ret)
>  		goto error_free_dev;
>  
> -	if (indio_dev->buffer) {
> -		/* Set default scan mode */
> -		iio_scan_mask_set(indio_dev, indio_dev->buffer,
> -				  ADIS16260_SCAN_SUPPLY);
> -		iio_scan_mask_set(indio_dev, indio_dev->buffer,
> -				  ADIS16260_SCAN_GYRO);
> -		iio_scan_mask_set(indio_dev, indio_dev->buffer,
> -				  ADIS16260_SCAN_AUX_ADC);
> -		iio_scan_mask_set(indio_dev, indio_dev->buffer,
> -				  ADIS16260_SCAN_TEMP);
> -		iio_scan_mask_set(indio_dev, indio_dev->buffer,
> -				  ADIS16260_SCAN_ANGL);
> -	}
> -
>  	/* Get the device into a sane initial state */
>  	ret = adis_initial_startup(adis);
>  	if (ret)
> 

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

* Re: [PATCH 06/15] staging:iio:adis16260: Add value range check for calibscale/-bias
  2013-07-17 14:44 ` [PATCH 06/15] staging:iio:adis16260: Add value range check for calibscale/-bias Lars-Peter Clausen
@ 2013-07-27 11:58   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:58 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> Instead of just cutting of the upper bits of the value make sure that the value
> is in the valid range and return an error if it is not.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Good spot.

Applied to the togreg branch of iio.git

Thanks,
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index a01c243..55e6795 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -311,18 +311,21 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
>  			       long mask)
>  {
>  	struct adis *adis = iio_priv(indio_dev);
> -	int bits = 12;
> -	s16 val16;
>  	u8 addr;
> +
>  	switch (mask) {
>  	case IIO_CHAN_INFO_CALIBBIAS:
> -		val16 = val & ((1 << bits) - 1);
> +		if (val < -2048 || val >= 2048)
> +			return -EINVAL;
> +
>  		addr = adis16260_addresses[chan->scan_index][0];
> -		return adis_write_reg_16(adis, addr, val16);
> +		return adis_write_reg_16(adis, addr, val);
>  	case IIO_CHAN_INFO_CALIBSCALE:
> -		val16 = val & ((1 << bits) - 1);
> +		if (val < 0 || val >= 4096)
> +			return -EINVAL;
> +
>  		addr = adis16260_addresses[chan->scan_index][1];
> -		return adis_write_reg_16(adis, addr, val16);
> +		return adis_write_reg_16(adis, addr, val);
>  	}
>  	return -EINVAL;
>  }
> 

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

* Re: [PATCH 07/15] staging:iio:adis16260: Use sign_extend32() instead of open-coding it
  2013-07-17 14:44 ` [PATCH 07/15] staging:iio:adis16260: Use sign_extend32() instead of open-coding it Lars-Peter Clausen
@ 2013-07-27 11:59   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:59 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
I wonder how many more of these there are out there?

Anyhow, applied to the togreg branch of iio.git.
Thanks,

Jonathan
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 55e6795..f060452 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -277,9 +277,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  			mutex_unlock(&indio_dev->mlock);
>  			return ret;
>  		}
> -		val16 &= (1 << bits) - 1;
> -		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
> -		*val = val16;
> +		*val = sign_extend32(val16, bits - 1);
>  		mutex_unlock(&indio_dev->mlock);
>  		return IIO_VAL_INT;
>  	case IIO_CHAN_INFO_CALIBSCALE:
> 
?

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

* Re: [PATCH 05/15] staging:iio:adis16260: Remove separate header
  2013-07-17 14:44 ` [PATCH 05/15] staging:iio:adis16260: Remove separate header Lars-Peter Clausen
@ 2013-07-27 11:59   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 11:59 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> The header is only used by a single C file, just put the register defines
> directly into that C file and remove the header.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks,
> ---
>  drivers/staging/iio/gyro/adis16260.h      | 88 -------------------------------
>  drivers/staging/iio/gyro/adis16260_core.c | 83 ++++++++++++++++++++++++++++-
>  2 files changed, 82 insertions(+), 89 deletions(-)
>  delete mode 100644 drivers/staging/iio/gyro/adis16260.h
> 
> diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h
> deleted file mode 100644
> index 00455af..0000000
> --- a/drivers/staging/iio/gyro/adis16260.h
> +++ /dev/null
> @@ -1,88 +0,0 @@
> -#ifndef SPI_ADIS16260_H_
> -#define SPI_ADIS16260_H_
> -
> -#include <linux/iio/imu/adis.h>
> -
> -#define ADIS16260_STARTUP_DELAY	220 /* ms */
> -
> -#define ADIS16260_FLASH_CNT  0x00 /* Flash memory write count */
> -#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */
> -#define ADIS16260_GYRO_OUT   0x04 /* X-axis gyroscope output */
> -#define ADIS16260_AUX_ADC    0x0A /* analog input channel measurement */
> -#define ADIS16260_TEMP_OUT   0x0C /* internal temperature measurement */
> -#define ADIS16260_ANGL_OUT   0x0E /* angle displacement */
> -#define ADIS16260_GYRO_OFF   0x14 /* Calibration, offset/bias adjustment */
> -#define ADIS16260_GYRO_SCALE 0x16 /* Calibration, scale adjustment */
> -#define ADIS16260_ALM_MAG1   0x20 /* Alarm 1 magnitude/polarity setting */
> -#define ADIS16260_ALM_MAG2   0x22 /* Alarm 2 magnitude/polarity setting */
> -#define ADIS16260_ALM_SMPL1  0x24 /* Alarm 1 dynamic rate of change setting */
> -#define ADIS16260_ALM_SMPL2  0x26 /* Alarm 2 dynamic rate of change setting */
> -#define ADIS16260_ALM_CTRL   0x28 /* Alarm control */
> -#define ADIS16260_AUX_DAC    0x30 /* Auxiliary DAC data */
> -#define ADIS16260_GPIO_CTRL  0x32 /* Control, digital I/O line */
> -#define ADIS16260_MSC_CTRL   0x34 /* Control, data ready, self-test settings */
> -#define ADIS16260_SMPL_PRD   0x36 /* Control, internal sample rate */
> -#define ADIS16260_SENS_AVG   0x38 /* Control, dynamic range, filtering */
> -#define ADIS16260_SLP_CNT    0x3A /* Control, sleep mode initiation */
> -#define ADIS16260_DIAG_STAT  0x3C /* Diagnostic, error flags */
> -#define ADIS16260_GLOB_CMD   0x3E /* Control, global commands */
> -#define ADIS16260_LOT_ID1    0x52 /* Lot Identification Code 1 */
> -#define ADIS16260_LOT_ID2    0x54 /* Lot Identification Code 2 */
> -#define ADIS16260_PROD_ID    0x56 /* Product identifier;
> -				   * convert to decimal = 16,265/16,260 */
> -#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */
> -
> -#define ADIS16260_ERROR_ACTIVE			(1<<14)
> -#define ADIS16260_NEW_DATA			(1<<15)
> -
> -/* MSC_CTRL */
> -#define ADIS16260_MSC_CTRL_MEM_TEST		(1<<11)
> -/* Internal self-test enable */
> -#define ADIS16260_MSC_CTRL_INT_SELF_TEST	(1<<10)
> -#define ADIS16260_MSC_CTRL_NEG_SELF_TEST	(1<<9)
> -#define ADIS16260_MSC_CTRL_POS_SELF_TEST	(1<<8)
> -#define ADIS16260_MSC_CTRL_DATA_RDY_EN		(1<<2)
> -#define ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH	(1<<1)
> -#define ADIS16260_MSC_CTRL_DATA_RDY_DIO2	(1<<0)
> -
> -/* SMPL_PRD */
> -/* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */
> -#define ADIS16260_SMPL_PRD_TIME_BASE	(1<<7)
> -#define ADIS16260_SMPL_PRD_DIV_MASK	0x7F
> -
> -/* SLP_CNT */
> -#define ADIS16260_SLP_CNT_POWER_OFF     0x80
> -
> -/* DIAG_STAT */
> -#define ADIS16260_DIAG_STAT_ALARM2	(1<<9)
> -#define ADIS16260_DIAG_STAT_ALARM1	(1<<8)
> -#define ADIS16260_DIAG_STAT_FLASH_CHK_BIT	6
> -#define ADIS16260_DIAG_STAT_SELF_TEST_BIT	5
> -#define ADIS16260_DIAG_STAT_OVERFLOW_BIT	4
> -#define ADIS16260_DIAG_STAT_SPI_FAIL_BIT	3
> -#define ADIS16260_DIAG_STAT_FLASH_UPT_BIT	2
> -#define ADIS16260_DIAG_STAT_POWER_HIGH_BIT	1
> -#define ADIS16260_DIAG_STAT_POWER_LOW_BIT	0
> -
> -/* GLOB_CMD */
> -#define ADIS16260_GLOB_CMD_SW_RESET	(1<<7)
> -#define ADIS16260_GLOB_CMD_FLASH_UPD	(1<<3)
> -#define ADIS16260_GLOB_CMD_DAC_LATCH	(1<<2)
> -#define ADIS16260_GLOB_CMD_FAC_CALIB	(1<<1)
> -#define ADIS16260_GLOB_CMD_AUTO_NULL	(1<<0)
> -
> -#define ADIS16260_SPI_SLOW	(u32)(300 * 1000)
> -#define ADIS16260_SPI_BURST	(u32)(1000 * 1000)
> -#define ADIS16260_SPI_FAST	(u32)(2000 * 1000)
> -
> -/* At the moment triggers are only used for ring buffer
> - * filling. This may change!
> - */
> -
> -#define ADIS16260_SCAN_GYRO	0
> -#define ADIS16260_SCAN_SUPPLY	1
> -#define ADIS16260_SCAN_AUX_ADC	2
> -#define ADIS16260_SCAN_TEMP	3
> -#define ADIS16260_SCAN_ANGL	4
> -
> -#endif /* SPI_ADIS16260_H_ */
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index e42a581..a01c243 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -21,8 +21,89 @@
>  #include <linux/iio/iio.h>
>  #include <linux/iio/sysfs.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/imu/adis.h>
> +
> +#define ADIS16260_STARTUP_DELAY	220 /* ms */
> +
> +#define ADIS16260_FLASH_CNT  0x00 /* Flash memory write count */
> +#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */
> +#define ADIS16260_GYRO_OUT   0x04 /* X-axis gyroscope output */
> +#define ADIS16260_AUX_ADC    0x0A /* analog input channel measurement */
> +#define ADIS16260_TEMP_OUT   0x0C /* internal temperature measurement */
> +#define ADIS16260_ANGL_OUT   0x0E /* angle displacement */
> +#define ADIS16260_GYRO_OFF   0x14 /* Calibration, offset/bias adjustment */
> +#define ADIS16260_GYRO_SCALE 0x16 /* Calibration, scale adjustment */
> +#define ADIS16260_ALM_MAG1   0x20 /* Alarm 1 magnitude/polarity setting */
> +#define ADIS16260_ALM_MAG2   0x22 /* Alarm 2 magnitude/polarity setting */
> +#define ADIS16260_ALM_SMPL1  0x24 /* Alarm 1 dynamic rate of change setting */
> +#define ADIS16260_ALM_SMPL2  0x26 /* Alarm 2 dynamic rate of change setting */
> +#define ADIS16260_ALM_CTRL   0x28 /* Alarm control */
> +#define ADIS16260_AUX_DAC    0x30 /* Auxiliary DAC data */
> +#define ADIS16260_GPIO_CTRL  0x32 /* Control, digital I/O line */
> +#define ADIS16260_MSC_CTRL   0x34 /* Control, data ready, self-test settings */
> +#define ADIS16260_SMPL_PRD   0x36 /* Control, internal sample rate */
> +#define ADIS16260_SENS_AVG   0x38 /* Control, dynamic range, filtering */
> +#define ADIS16260_SLP_CNT    0x3A /* Control, sleep mode initiation */
> +#define ADIS16260_DIAG_STAT  0x3C /* Diagnostic, error flags */
> +#define ADIS16260_GLOB_CMD   0x3E /* Control, global commands */
> +#define ADIS16260_LOT_ID1    0x52 /* Lot Identification Code 1 */
> +#define ADIS16260_LOT_ID2    0x54 /* Lot Identification Code 2 */
> +#define ADIS16260_PROD_ID    0x56 /* Product identifier;
> +				   * convert to decimal = 16,265/16,260 */
> +#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */
> +
> +#define ADIS16260_ERROR_ACTIVE			(1<<14)
> +#define ADIS16260_NEW_DATA			(1<<15)
> +
> +/* MSC_CTRL */
> +#define ADIS16260_MSC_CTRL_MEM_TEST		(1<<11)
> +/* Internal self-test enable */
> +#define ADIS16260_MSC_CTRL_INT_SELF_TEST	(1<<10)
> +#define ADIS16260_MSC_CTRL_NEG_SELF_TEST	(1<<9)
> +#define ADIS16260_MSC_CTRL_POS_SELF_TEST	(1<<8)
> +#define ADIS16260_MSC_CTRL_DATA_RDY_EN		(1<<2)
> +#define ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH	(1<<1)
> +#define ADIS16260_MSC_CTRL_DATA_RDY_DIO2	(1<<0)
> +
> +/* SMPL_PRD */
> +/* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */
> +#define ADIS16260_SMPL_PRD_TIME_BASE	(1<<7)
> +#define ADIS16260_SMPL_PRD_DIV_MASK	0x7F
> +
> +/* SLP_CNT */
> +#define ADIS16260_SLP_CNT_POWER_OFF     0x80
> +
> +/* DIAG_STAT */
> +#define ADIS16260_DIAG_STAT_ALARM2	(1<<9)
> +#define ADIS16260_DIAG_STAT_ALARM1	(1<<8)
> +#define ADIS16260_DIAG_STAT_FLASH_CHK_BIT	6
> +#define ADIS16260_DIAG_STAT_SELF_TEST_BIT	5
> +#define ADIS16260_DIAG_STAT_OVERFLOW_BIT	4
> +#define ADIS16260_DIAG_STAT_SPI_FAIL_BIT	3
> +#define ADIS16260_DIAG_STAT_FLASH_UPT_BIT	2
> +#define ADIS16260_DIAG_STAT_POWER_HIGH_BIT	1
> +#define ADIS16260_DIAG_STAT_POWER_LOW_BIT	0
> +
> +/* GLOB_CMD */
> +#define ADIS16260_GLOB_CMD_SW_RESET	(1<<7)
> +#define ADIS16260_GLOB_CMD_FLASH_UPD	(1<<3)
> +#define ADIS16260_GLOB_CMD_DAC_LATCH	(1<<2)
> +#define ADIS16260_GLOB_CMD_FAC_CALIB	(1<<1)
> +#define ADIS16260_GLOB_CMD_AUTO_NULL	(1<<0)
> +
> +#define ADIS16260_SPI_SLOW	(u32)(300 * 1000)
> +#define ADIS16260_SPI_BURST	(u32)(1000 * 1000)
> +#define ADIS16260_SPI_FAST	(u32)(2000 * 1000)
> +
> +/* At the moment triggers are only used for ring buffer
> + * filling. This may change!
> + */
>  
> -#include "adis16260.h"
> +#define ADIS16260_SCAN_GYRO	0
> +#define ADIS16260_SCAN_SUPPLY	1
> +#define ADIS16260_SCAN_AUX_ADC	2
> +#define ADIS16260_SCAN_TEMP	3
> +#define ADIS16260_SCAN_ANGL	4
>  
>  static ssize_t adis16260_read_frequency_available(struct device *dev,
>  						  struct device_attribute *attr,
> 

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

* Re: [PATCH 08/15] staging:iio:adis16260: Simplify calibscale and caliboffset reading
  2013-07-17 14:44 ` [PATCH 08/15] staging:iio:adis16260: Simplify calibscale and caliboffset reading Lars-Peter Clausen
@ 2013-07-27 12:00   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:00 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> All channels for this device have the same number of bits for calibscale and
> caliboffset, there is no need to determine it dynamically based on the channel
> type. Also there is no locking required since adis_read_reg_16() will take care
> of proper locking on its own.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 31 +++++--------------------------
>  1 file changed, 5 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index f060452..c70094f 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -222,7 +222,6 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  {
>  	struct adis *adis = iio_priv(indio_dev);
>  	int ret;
> -	int bits;
>  	u8 addr;
>  	s16 val16;
>  
> @@ -263,40 +262,20 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  		*val = 250000 / 1453; /* 25 C = 0x00 */
>  		return IIO_VAL_INT;
>  	case IIO_CHAN_INFO_CALIBBIAS:
> -		switch (chan->type) {
> -		case IIO_ANGL_VEL:
> -			bits = 12;
> -			break;
> -		default:
> -			return -EINVAL;
> -		}
> -		mutex_lock(&indio_dev->mlock);
>  		addr = adis16260_addresses[chan->scan_index][0];
>  		ret = adis_read_reg_16(adis, addr, &val16);
> -		if (ret) {
> -			mutex_unlock(&indio_dev->mlock);
> +		if (ret)
>  			return ret;
> -		}
> -		*val = sign_extend32(val16, bits - 1);
> -		mutex_unlock(&indio_dev->mlock);
> +
> +		*val = sign_extend32(val16, 11);
>  		return IIO_VAL_INT;
>  	case IIO_CHAN_INFO_CALIBSCALE:
> -		switch (chan->type) {
> -		case IIO_ANGL_VEL:
> -			bits = 12;
> -			break;
> -		default:
> -			return -EINVAL;
> -		}
> -		mutex_lock(&indio_dev->mlock);
>  		addr = adis16260_addresses[chan->scan_index][1];
>  		ret = adis_read_reg_16(adis, addr, &val16);
> -		if (ret) {
> -			mutex_unlock(&indio_dev->mlock);
> +		if (ret)
>  			return ret;
> -		}
> +
>  		*val = val16;
> -		mutex_unlock(&indio_dev->mlock);
>  		return IIO_VAL_INT;
>  	}
>  	return -EINVAL;
> 

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

* Re: [PATCH 09/15] staging:iio:adis16260: Fix minor style issue
  2013-07-17 14:44 ` [PATCH 09/15] staging:iio:adis16260: Fix minor style issue Lars-Peter Clausen
@ 2013-07-27 12:01   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:01 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> Delete some extra whitespace.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks,

> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index c70094f..4b62000 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -131,9 +131,9 @@ static ssize_t adis16260_read_frequency(struct device *dev,
>  		return ret;
>  
>  	if (spi_get_device_id(adis->spi)->driver_data) /* If an adis16251 */
> -		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
> +		sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
>  	else
> -		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
> +		sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>  	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
>  	len = sprintf(buf, "%d SPS\n", sps);
>  	return len;
> 

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

* Re: [PATCH 10/15] staging:iio:adis16260: Remove 'SPS' suffix from samplerate attribute
  2013-07-17 14:44 ` [PATCH 10/15] staging:iio:adis16260: Remove 'SPS' suffix from samplerate attribute Lars-Peter Clausen
@ 2013-07-27 12:01   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:01 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> This is not part of the ABI.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
I thought we had cleared all these out long ago.

Oh well,

Applied to the togreg branch of iio.git

Thanks.
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 4b62000..a140d73 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -135,7 +135,7 @@ static ssize_t adis16260_read_frequency(struct device *dev,
>  	else
>  		sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>  	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
> -	len = sprintf(buf, "%d SPS\n", sps);
> +	len = sprintf(buf, "%d\n", sps);
>  	return len;
>  }
>  
> 

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

* Re: [PATCH 11/15] staging:iio:adis16260: Add scale for the inclination channel
  2013-07-17 14:44 ` [PATCH 11/15] staging:iio:adis16260: Add scale for the inclination channel Lars-Peter Clausen
@ 2013-07-27 12:02   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:02 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> While the inclination channel claims to support reading the scale the driver did
> not implement this, so trying to read the scale results in a -EINVAL. This patch
> fixes it.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks,

> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index a140d73..48b0e63 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -241,6 +241,10 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
>  				*val2 = IIO_DEGREE_TO_RAD(73260);
>  			}
>  			return IIO_VAL_INT_PLUS_MICRO;
> +		case IIO_INCLI:
> +			*val = 0;
> +			*val2 = IIO_DEGREE_TO_RAD(36630);
> +			return IIO_VAL_INT_PLUS_MICRO;
>  		case IIO_VOLTAGE:
>  			if (chan->channel == 0) {
>  				*val = 1;
> 

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

* Re: [PATCH 12/15] staging:iio:adis16260: Remove unused includes
  2013-07-17 14:44 ` [PATCH 12/15] staging:iio:adis16260: Remove unused includes Lars-Peter Clausen
@ 2013-07-27 12:03   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:03 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: Jonathan Cameron, linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> Remove some unused includes from the driver.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied.
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 48b0e63..b8a6a04 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -7,15 +7,11 @@
>   */
>  
>  #include <linux/interrupt.h>
> -#include <linux/irq.h>
> -#include <linux/delay.h>
>  #include <linux/mutex.h>
>  #include <linux/device.h>
>  #include <linux/kernel.h>
>  #include <linux/spi/spi.h>
> -#include <linux/slab.h>
>  #include <linux/sysfs.h>
> -#include <linux/list.h>
>  #include <linux/module.h>
>  
>  #include <linux/iio/iio.h>
> 

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

* Re: [PATCH 13/15] staging:iio:adis16260: Add proper range checks to write_frequency()
  2013-07-17 14:44 ` [PATCH 13/15] staging:iio:adis16260: Add proper range checks to write_frequency() Lars-Peter Clausen
@ 2013-07-27 12:04   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:04 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> A negative sampling frequency is obviously invalid, so use kstrtouint() instead
> of strict_strtoul. Also when setting a sampling frequency smaller than the
> minimum supported frequency set the frequency to the minimum supported frequency
> instead of just cutting off the upper bits of the raw register value.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to the togreg branch of iio.git

Thanks
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 29 +++++++++++++----------------
>  1 file changed, 13 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index b8a6a04..d4e3dd7 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -142,29 +142,26 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>  {
>  	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>  	struct adis *adis = iio_priv(indio_dev);
> -	long val;
> +	unsigned int val;
>  	int ret;
>  	u8 t;
>  
> -	ret = strict_strtol(buf, 10, &val);
> +	ret = kstrtouint(buf, 10, &val);
>  	if (ret)
>  		return ret;
> -	if (val == 0)
> -		return -EINVAL;
>  
>  	mutex_lock(&indio_dev->mlock);
> -	if (spi_get_device_id(adis->spi)->driver_data) {
> -		t = (256 / val);
> -		if (t > 0)
> -			t--;
> -		t &= ADIS16260_SMPL_PRD_DIV_MASK;
> -	} else {
> -		t = (2048 / val);
> -		if (t > 0)
> -			t--;
> -		t &= ADIS16260_SMPL_PRD_DIV_MASK;
> -	}
> -	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
> +	if (spi_get_device_id(adis->spi)->driver_data)
> +		t = 256 / val;
> +	else
> +		t = 2048 / val;
> +
> +	if (t > ADIS16260_SMPL_PRD_DIV_MASK)
> +		t = ADIS16260_SMPL_PRD_DIV_MASK;
> +	else if (t > 0)
> +		t--;
> +
> +	if (t >= 0x0A)
>  		adis->spi->max_speed_hz = ADIS16260_SPI_SLOW;
>  	else
>  		adis->spi->max_speed_hz = ADIS16260_SPI_FAST;
> 

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

* Re: [PATCH 14/15] staging:iio:adis16260: Remove sampling_frequency_available attribute
  2013-07-17 14:44 ` [PATCH 14/15] staging:iio:adis16260: Remove sampling_frequency_available attribute Lars-Peter Clausen
@ 2013-07-27 12:04   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:04 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> The values presented here are completely bogus. Also ..._available attributes
> are supposed to be used for properties that only support discrete sets of
> values, but we accept continuous values and will round to the next supported
> frequency.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied.

Thanks
> ---
>  drivers/staging/iio/gyro/adis16260_core.c | 16 ----------------
>  1 file changed, 16 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index d4e3dd7..b4cf800 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -101,18 +101,6 @@
>  #define ADIS16260_SCAN_TEMP	3
>  #define ADIS16260_SCAN_ANGL	4
>  
> -static ssize_t adis16260_read_frequency_available(struct device *dev,
> -						  struct device_attribute *attr,
> -						  char *buf)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct adis *adis = iio_priv(indio_dev);
> -	if (spi_get_device_id(adis->spi)->driver_data)
> -		return sprintf(buf, "%s\n", "0.129 ~ 256");
> -	else
> -		return sprintf(buf, "%s\n", "256 2048");
> -}
> -
>  static ssize_t adis16260_read_frequency(struct device *dev,
>  		struct device_attribute *attr,
>  		char *buf)
> @@ -190,9 +178,6 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
>  		adis16260_read_frequency,
>  		adis16260_write_frequency);
>  
> -static IIO_DEVICE_ATTR(sampling_frequency_available,
> -		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
> -
>  static const struct iio_chan_spec adis16260_channels[] = {
>  	ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO,
>  		BIT(IIO_CHAN_INFO_CALIBBIAS) |
> @@ -306,7 +291,6 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
>  
>  static struct attribute *adis16260_attributes[] = {
>  	&iio_dev_attr_sampling_frequency.dev_attr.attr,
> -	&iio_dev_attr_sampling_frequency_available.dev_attr.attr,
>  	NULL
>  };
>  
> 

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

* Re: [PATCH 15/15] staging:iio:adis16260: Move out of staging
  2013-07-17 14:44 ` [PATCH 15/15] staging:iio:adis16260: Move out of staging Lars-Peter Clausen
@ 2013-07-27 12:08   ` Jonathan Cameron
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Cameron @ 2013-07-27 12:08 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 07/17/13 15:44, Lars-Peter Clausen wrote:
> The drivers is in more or less good shape, conforms to the IIO ABI and none of
> the default static code checker report any problems, so move it out of staging.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Applied to the togreg branch of iio.git

If you are really bored, the comment just above the id table is clearly untrue
and you could always apply the new devm_ function to make this driver near perfect.

Thanks for all your work on this.  I sometimes feel guilty about how many drivers
we still have sitting in staging so good to see another one come out.

Jonathan
> ---
>  drivers/iio/gyro/Kconfig                                     | 12 ++++++++++++
>  drivers/iio/gyro/Makefile                                    |  1 +
>  .../iio/gyro/adis16260_core.c => iio/gyro/adis16260.c}       |  0
>  drivers/staging/iio/gyro/Kconfig                             | 12 ------------
>  drivers/staging/iio/gyro/Makefile                            |  3 ---
>  5 files changed, 13 insertions(+), 15 deletions(-)
>  rename drivers/{staging/iio/gyro/adis16260_core.c => iio/gyro/adis16260.c} (100%)
> 
> diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
> index 5913735..41c64a4 100644
> --- a/drivers/iio/gyro/Kconfig
> +++ b/drivers/iio/gyro/Kconfig
> @@ -28,6 +28,18 @@ config ADIS16136
>  	  Say yes here to build support for the Analog Devices ADIS16133, ADIS16135,
>  	  ADIS16136 gyroscope devices.
>  
> +config ADIS16260
> +	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
> +	depends on SPI
> +	select IIO_ADIS_LIB
> +	select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
> +	help
> +	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
> +	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
> +
> +	  This driver can also be built as a module.  If so, the module
> +	  will be called adis16260.
> +
>  config ADXRS450
>  	tristate "Analog Devices ADXRS450/3 Digital Output Gyroscope SPI driver"
>  	depends on SPI
> diff --git a/drivers/iio/gyro/Makefile b/drivers/iio/gyro/Makefile
> index 36091d5..2f2752a 100644
> --- a/drivers/iio/gyro/Makefile
> +++ b/drivers/iio/gyro/Makefile
> @@ -6,6 +6,7 @@
>  obj-$(CONFIG_ADIS16080) += adis16080.o
>  obj-$(CONFIG_ADIS16130) += adis16130.o
>  obj-$(CONFIG_ADIS16136) += adis16136.o
> +obj-$(CONFIG_ADIS16260) += adis16260.o
>  obj-$(CONFIG_ADXRS450) += adxrs450.o
>  
>  obj-$(CONFIG_HID_SENSOR_GYRO_3D) += hid-sensor-gyro-3d.o
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/iio/gyro/adis16260.c
> similarity index 100%
> rename from drivers/staging/iio/gyro/adis16260_core.c
> rename to drivers/iio/gyro/adis16260.c
> diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
> index b433371..88b199b 100644
> --- a/drivers/staging/iio/gyro/Kconfig
> +++ b/drivers/staging/iio/gyro/Kconfig
> @@ -10,16 +10,4 @@ config ADIS16060
>  	  Say yes here to build support for Analog Devices adis16060 wide bandwidth
>  	  yaw rate gyroscope with SPI.
>  
> -config ADIS16260
> -	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
> -	depends on SPI
> -	select IIO_ADIS_LIB
> -	select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
> -	help
> -	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
> -	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
> -
> -	  This driver can also be built as a module.  If so, the module
> -	  will be called adis16260.
> -
>  endmenu
> diff --git a/drivers/staging/iio/gyro/Makefile b/drivers/staging/iio/gyro/Makefile
> index 975f95b..cf22d6d 100644
> --- a/drivers/staging/iio/gyro/Makefile
> +++ b/drivers/staging/iio/gyro/Makefile
> @@ -4,6 +4,3 @@
>  
>  adis16060-y             := adis16060_core.o
>  obj-$(CONFIG_ADIS16060) += adis16060.o
> -
> -adis16260-y             := adis16260_core.o
> -obj-$(CONFIG_ADIS16260) += adis16260.o
> 

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

end of thread, other threads:[~2013-07-27 11:08 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-17 14:44 [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Lars-Peter Clausen
2013-07-17 14:44 ` [PATCH 02/15] staging:iio:adis16260: Drop unused 'negate' property Lars-Peter Clausen
2013-07-27 11:54   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 03/15] staging:iio:adis16260: Remove support for orientation mapping Lars-Peter Clausen
2013-07-20  9:28   ` Jonathan Cameron
2013-07-27 11:55     ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 04/15] staging:iio:adis16260: Don't set default scan mask Lars-Peter Clausen
2013-07-27 11:56   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 05/15] staging:iio:adis16260: Remove separate header Lars-Peter Clausen
2013-07-27 11:59   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 06/15] staging:iio:adis16260: Add value range check for calibscale/-bias Lars-Peter Clausen
2013-07-27 11:58   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 07/15] staging:iio:adis16260: Use sign_extend32() instead of open-coding it Lars-Peter Clausen
2013-07-27 11:59   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 08/15] staging:iio:adis16260: Simplify calibscale and caliboffset reading Lars-Peter Clausen
2013-07-27 12:00   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 09/15] staging:iio:adis16260: Fix minor style issue Lars-Peter Clausen
2013-07-27 12:01   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 10/15] staging:iio:adis16260: Remove 'SPS' suffix from samplerate attribute Lars-Peter Clausen
2013-07-27 12:01   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 11/15] staging:iio:adis16260: Add scale for the inclination channel Lars-Peter Clausen
2013-07-27 12:02   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 12/15] staging:iio:adis16260: Remove unused includes Lars-Peter Clausen
2013-07-27 12:03   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 13/15] staging:iio:adis16260: Add proper range checks to write_frequency() Lars-Peter Clausen
2013-07-27 12:04   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 14/15] staging:iio:adis16260: Remove sampling_frequency_available attribute Lars-Peter Clausen
2013-07-27 12:04   ` Jonathan Cameron
2013-07-17 14:44 ` [PATCH 15/15] staging:iio:adis16260: Move out of staging Lars-Peter Clausen
2013-07-27 12:08   ` Jonathan Cameron
2013-07-27 11:54 ` [PATCH 01/15] staging:iio:adis16260: Fix reading calibscale Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.