Linux IIO development
 help / color / mirror / Atom feed
* [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers
@ 2011-04-29 10:58 michael.hennerich
  2011-04-29 10:58 ` [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice michael.hennerich
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 10:58 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, drivers, device-drivers-devel, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

Don't issue the same message twice, use two transfers and group them together

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/adxrs450_core.c |   58 ++++++++++++++---------------
 1 files changed, 28 insertions(+), 30 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index dcd88ff..a1a71b7 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -40,29 +40,28 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
 	struct adxrs450_state *st = iio_dev_get_devdata(indio_dev);
 	int ret;
-	struct spi_transfer xfers = {
-		.tx_buf = st->tx,
-		.rx_buf = st->rx,
-		.bits_per_word = 8,
-		.len = 4,
+	struct spi_transfer xfers[] = {
+		{
+			.tx_buf = st->tx,
+			.bits_per_word = 8,
+			.len = 4,
+			.cs_change = 1,
+		}, {
+			.rx_buf = st->rx,
+			.bits_per_word = 8,
+			.len = 4,
+		},
 	};
-	/* Needs to send the command twice to get the wanted value */
+
 	mutex_lock(&st->buf_lock);
-	st->tx[0] = ADXRS450_READ_DATA | reg_address >> 7;
+	st->tx[0] = ADXRS450_READ_DATA | (reg_address >> 7);
 	st->tx[1] = reg_address << 1;
 	st->tx[2] = 0;
 	st->tx[3] = 0;
-	spi_message_init(&msg);
-	spi_message_add_tail(&xfers, &msg);
-	ret = spi_sync(st->us, &msg);
-	if (ret) {
-		dev_err(&st->us->dev, "problem while reading 16 bit register 0x%02x\n",
-				reg_address);
-		goto error_ret;
-	}

 	spi_message_init(&msg);
-	spi_message_add_tail(&xfers, &msg);
+	spi_message_add_tail(&xfers[0], &msg);
+	spi_message_add_tail(&xfers[1], &msg);
 	ret = spi_sync(st->us, &msg);
 	if (ret) {
 		dev_err(&st->us->dev, "problem while reading 16 bit register 0x%02x\n",
@@ -125,11 +124,17 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
 	struct adxrs450_state *st = iio_dev_get_devdata(indio_dev);
 	int ret;
-	struct spi_transfer xfers = {
-		.tx_buf = st->tx,
-		.rx_buf = st->rx,
-		.bits_per_word = 8,
-		.len = 4,
+	struct spi_transfer xfers[] = {
+		{
+			.tx_buf = st->tx,
+			.bits_per_word = 8,
+			.len = 4,
+			.cs_change = 1,
+		}, {
+			.rx_buf = st->rx,
+			.bits_per_word = 8,
+			.len = 4,
+		},
 	};

 	mutex_lock(&st->buf_lock);
@@ -139,15 +144,8 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
 	st->tx[3] = 0;

 	spi_message_init(&msg);
-	spi_message_add_tail(&xfers, &msg);
-	ret = spi_sync(st->us, &msg);
-	if (ret) {
-		dev_err(&st->us->dev, "Problem while reading sensor data\n");
-		goto error_ret;
-	}
-
-	spi_message_init(&msg);
-	spi_message_add_tail(&xfers, &msg);
+	spi_message_add_tail(&xfers[0], &msg);
+	spi_message_add_tail(&xfers[1], &msg);
 	ret = spi_sync(st->us, &msg);
 	if (ret) {
 		dev_err(&st->us->dev, "Problem while reading sensor data\n");
--
1.6.0.2

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

* [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice
  2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
@ 2011-04-29 10:58 ` michael.hennerich
  2011-04-29 12:08   ` Jonathan Cameron
  2011-04-29 10:58 ` [PATCH 3/6] IIO: GYRO: ADXRS450: Add missing parity bit generation michael.hennerich
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 10:58 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, drivers, device-drivers-devel, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

Cleanup result extraction and update license notice, no functional changes.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/adxrs450_core.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index a1a71b7..c02e3ef 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2011 Analog Devices Inc.
  *
- * Licensed under the GPL-2 or later.
+ * Licensed under the GPL-2.
  */
 
 #include <linux/interrupt.h>
@@ -69,7 +69,7 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
 		goto error_ret;
 	}
 
-	*val = (st->rx[1] & 0x1f) << 11 | st->rx[2] << 3 | (st->rx[3] & 0xe0) >> 5;
+	*val = (be32_to_cpu(*(u32 *)st->rx) >> 5) & 0xFFFF;
 
 error_ret:
 	mutex_unlock(&st->buf_lock);
@@ -152,7 +152,8 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
 		goto error_ret;
 	}
 
-	*val = (st->rx[0] & 0x03) << 14 | st->rx[1] << 6 | (st->rx[2] & 0xfc) >> 2;
+	*val = (be32_to_cpu(*(u32 *)st->rx) >> 10) & 0xFFFF;
+
 error_ret:
 	mutex_unlock(&st->buf_lock);
 	return ret;
-- 
1.6.0.2

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

* [PATCH 3/6] IIO: GYRO: ADXRS450: Add missing parity bit generation
  2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
  2011-04-29 10:58 ` [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice michael.hennerich
@ 2011-04-29 10:58 ` michael.hennerich
  2011-04-29 12:09   ` Jonathan Cameron
  2011-04-29 10:58 ` [PATCH 4/6] IIO: GYRO: ADXRS450: enforce sequential transfer delay of at least 0.1ms michael.hennerich
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 10:58 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, drivers, device-drivers-devel, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

Add missing parity bit generation. Failure to add the parity bit
caused half of the register accesses to fail.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/adxrs450_core.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index c02e3ef..5671276 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -59,6 +59,9 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
 	st->tx[2] = 0;
 	st->tx[3] = 0;
 
+	if (!(hweight32(be32_to_cpu(*(u32 *)st->tx)) & 1))
+		st->tx[3]  |= ADXRS450_P;
+
 	spi_message_init(&msg);
 	spi_message_add_tail(&xfers[0], &msg);
 	spi_message_add_tail(&xfers[1], &msg);
@@ -103,6 +106,10 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
 	st->tx[1] = reg_address << 1 | val >> 15;
 	st->tx[2] = val >> 7;
 	st->tx[3] = val << 1;
+
+	if (!(hweight32(be32_to_cpu(*(u32 *)st->tx)) & 1))
+		st->tx[3]  |= ADXRS450_P;
+
 	spi_message_init(&msg);
 	spi_message_add_tail(&xfers, &msg);
 	ret = spi_sync(st->us, &msg);
-- 
1.6.0.2



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

* [PATCH 4/6] IIO: GYRO: ADXRS450: enforce sequential transfer delay of at least 0.1ms
  2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
  2011-04-29 10:58 ` [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice michael.hennerich
  2011-04-29 10:58 ` [PATCH 3/6] IIO: GYRO: ADXRS450: Add missing parity bit generation michael.hennerich
@ 2011-04-29 10:58 ` michael.hennerich
  2011-04-29 12:12   ` Jonathan Cameron
  2011-04-29 10:58 ` [PATCH 5/6] IIO: GYRO: ADXRS450: Fix sign issues, properly shift results and limit values michael.hennerich
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 10:58 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, drivers, device-drivers-devel, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>


Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/adxrs450_core.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index 5671276..d73acff 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -116,6 +116,7 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
 	if (ret)
 		dev_err(&st->us->dev, "problem while writing 16 bit register 0x%02x\n",
 				reg_address);
+	msleep(1); /* enforce sequential transfer delay 0.1ms */
 	mutex_unlock(&st->buf_lock);
 	return ret;
 }
-- 
1.6.0.2



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

* [PATCH 5/6] IIO: GYRO: ADXRS450: Fix sign issues, properly shift results and limit values
  2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
                   ` (2 preceding siblings ...)
  2011-04-29 10:58 ` [PATCH 4/6] IIO: GYRO: ADXRS450: enforce sequential transfer delay of at least 0.1ms michael.hennerich
@ 2011-04-29 10:58 ` michael.hennerich
  2011-04-29 12:14   ` Jonathan Cameron
  2011-04-29 10:58 ` [PATCH 6/6] IIO: GYRO: ADXRS450: Don't exit probe, in case the power on default is not met michael.hennerich
  2011-04-29 12:05 ` [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers Jonathan Cameron
  5 siblings, 1 reply; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 10:58 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, drivers, device-drivers-devel, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

RATE and QUADRATURE_CORRECTION data is formatted as a twos complement number,
and therefore must be handled as type signed short.

TEMP result should be properly shifted.

Dynamic Null Correction is a 10-bit signed number.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/adxrs450_core.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index d73acff..e71b91c 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -126,7 +126,7 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
  * @dev: device associated with child of actual iio_dev
  * @val: somewhere to pass back the value read
  **/
-static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
+static int adxrs450_spi_sensor_data(struct device *dev, s16 *val)
 {
 	struct spi_message msg;
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
@@ -217,7 +217,7 @@ static ssize_t adxrs450_read_temp(struct device *dev,
 			&t);
 	if (ret)
 		return ret;
-	return sprintf(buf, "%d\n", t);
+	return sprintf(buf, "%d\n", t >> 7);
 }
 
 static ssize_t adxrs450_read_quad(struct device *dev,
@@ -225,7 +225,7 @@ static ssize_t adxrs450_read_quad(struct device *dev,
 		char *buf)
 {
 	int ret;
-	u16 t;
+	s16 t;
 	ret = adxrs450_spi_read_reg_16(dev,
 			ADXRS450_QUAD1,
 			&t);
@@ -247,7 +247,7 @@ static ssize_t adxrs450_write_dnc(struct device *dev,
 		goto error_ret;
 	ret = adxrs450_spi_write_reg_16(dev,
 			ADXRS450_DNC1,
-			val);
+			val & 0x3FF);
 error_ret:
 	return ret ? ret : len;
 }
@@ -257,7 +257,7 @@ static ssize_t adxrs450_read_sensor_data(struct device *dev,
 		char *buf)
 {
 	int ret;
-	u16 t;
+	s16 t;
 
 	ret = adxrs450_spi_sensor_data(dev, &t);
 	if (ret)
-- 
1.6.0.2

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

* [PATCH 6/6] IIO: GYRO: ADXRS450: Don't exit probe, in case the power on default is not met.
  2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
                   ` (3 preceding siblings ...)
  2011-04-29 10:58 ` [PATCH 5/6] IIO: GYRO: ADXRS450: Fix sign issues, properly shift results and limit values michael.hennerich
@ 2011-04-29 10:58 ` michael.hennerich
  2011-04-29 12:15   ` Jonathan Cameron
  2011-04-29 12:05 ` [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers Jonathan Cameron
  5 siblings, 1 reply; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 10:58 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, drivers, device-drivers-devel, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

If the part get's probed twice without hard reset in between, the power on default
register read-back can't be met. This shouldn't cause the second probe to fail.
So warn but don't exit.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/adxrs450_core.c |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index e71b91c..7a9d7c2 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -278,11 +278,9 @@ static int adxrs450_initial_setup(struct adxrs450_state *st)
 	ret = adxrs450_spi_initial(st, &t, 1);
 	if (ret)
 		return ret;
-	if (t != 0x01) {
-		dev_err(&st->us->dev, "The initial response is not correct!\n");
-		return -ENODEV;
-
-	}
+	if (t != 0x01)
+		dev_warn(&st->us->dev, "The initial power on response "
+			 "is not correct! Restart without reset?\n");
 
 	msleep(ADXRS450_STARTUP_DELAY);
 	ret = adxrs450_spi_initial(st, &t, 0);
-- 
1.6.0.2

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

* Re: [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers
  2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
                   ` (4 preceding siblings ...)
  2011-04-29 10:58 ` [PATCH 6/6] IIO: GYRO: ADXRS450: Don't exit probe, in case the power on default is not met michael.hennerich
@ 2011-04-29 12:05 ` Jonathan Cameron
  5 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2011-04-29 12:05 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-iio, drivers, device-drivers-devel

On 04/29/11 11:58, michael.hennerich@analog.com wrote:
> From: Michael Hennerich <michael.hennerich@analog.com>
> 
> Don't issue the same message twice, use two transfers and group them together
> 
> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/adxrs450_core.c |   58 ++++++++++++++---------------
>  1 files changed, 28 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index dcd88ff..a1a71b7 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -40,29 +40,28 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
>  	struct iio_dev *indio_dev = dev_get_drvdata(dev);
>  	struct adxrs450_state *st = iio_dev_get_devdata(indio_dev);
>  	int ret;
> -	struct spi_transfer xfers = {
> -		.tx_buf = st->tx,
> -		.rx_buf = st->rx,
> -		.bits_per_word = 8,
> -		.len = 4,
> +	struct spi_transfer xfers[] = {
> +		{
> +			.tx_buf = st->tx,
> +			.bits_per_word = 8,
> +			.len = 4,
> +			.cs_change = 1,
> +		}, {
> +			.rx_buf = st->rx,
> +			.bits_per_word = 8,
> +			.len = 4,
> +		},
>  	};
> -	/* Needs to send the command twice to get the wanted value */
> +
>  	mutex_lock(&st->buf_lock);
> -	st->tx[0] = ADXRS450_READ_DATA | reg_address >> 7;
> +	st->tx[0] = ADXRS450_READ_DATA | (reg_address >> 7);
>  	st->tx[1] = reg_address << 1;
>  	st->tx[2] = 0;
>  	st->tx[3] = 0;
> -	spi_message_init(&msg);
> -	spi_message_add_tail(&xfers, &msg);
> -	ret = spi_sync(st->us, &msg);
> -	if (ret) {
> -		dev_err(&st->us->dev, "problem while reading 16 bit register 0x%02x\n",
> -				reg_address);
> -		goto error_ret;
> -	}
> 
>  	spi_message_init(&msg);
> -	spi_message_add_tail(&xfers, &msg);
> +	spi_message_add_tail(&xfers[0], &msg);
> +	spi_message_add_tail(&xfers[1], &msg);
>  	ret = spi_sync(st->us, &msg);
>  	if (ret) {
>  		dev_err(&st->us->dev, "problem while reading 16 bit register 0x%02x\n",
> @@ -125,11 +124,17 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
>  	struct iio_dev *indio_dev = dev_get_drvdata(dev);
>  	struct adxrs450_state *st = iio_dev_get_devdata(indio_dev);
>  	int ret;
> -	struct spi_transfer xfers = {
> -		.tx_buf = st->tx,
> -		.rx_buf = st->rx,
> -		.bits_per_word = 8,
> -		.len = 4,
> +	struct spi_transfer xfers[] = {
> +		{
> +			.tx_buf = st->tx,
> +			.bits_per_word = 8,
> +			.len = 4,
> +			.cs_change = 1,
> +		}, {
> +			.rx_buf = st->rx,
> +			.bits_per_word = 8,
> +			.len = 4,
> +		},
>  	};
> 
>  	mutex_lock(&st->buf_lock);
> @@ -139,15 +144,8 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
>  	st->tx[3] = 0;
> 
>  	spi_message_init(&msg);
> -	spi_message_add_tail(&xfers, &msg);
> -	ret = spi_sync(st->us, &msg);
> -	if (ret) {
> -		dev_err(&st->us->dev, "Problem while reading sensor data\n");
> -		goto error_ret;
> -	}
> -
> -	spi_message_init(&msg);
> -	spi_message_add_tail(&xfers, &msg);
> +	spi_message_add_tail(&xfers[0], &msg);
> +	spi_message_add_tail(&xfers[1], &msg);
>  	ret = spi_sync(st->us, &msg);
>  	if (ret) {
>  		dev_err(&st->us->dev, "Problem while reading sensor data\n");
> --
> 1.6.0.2
> 
> 
> 


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

* Re: [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice
  2011-04-29 10:58 ` [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice michael.hennerich
@ 2011-04-29 12:08   ` Jonathan Cameron
  0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2011-04-29 12:08 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-iio, drivers, device-drivers-devel

On 04/29/11 11:58, michael.hennerich@analog.com wrote:
> From: Michael Hennerich <michael.hennerich@analog.com>
> 
> Cleanup result extraction and update license notice, no functional changes.
> 
> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/adxrs450_core.c |    7 ++++---
>  1 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index a1a71b7..c02e3ef 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -3,7 +3,7 @@
>   *
>   * Copyright 2011 Analog Devices Inc.
>   *
> - * Licensed under the GPL-2 or later.
> + * Licensed under the GPL-2.
>   */
>  
>  #include <linux/interrupt.h>
> @@ -69,7 +69,7 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
>  		goto error_ret;
>  	}
>  
> -	*val = (st->rx[1] & 0x1f) << 11 | st->rx[2] << 3 | (st->rx[3] & 0xe0) >> 5;
> +	*val = (be32_to_cpu(*(u32 *)st->rx) >> 5) & 0xFFFF;
>  
>  error_ret:
>  	mutex_unlock(&st->buf_lock);
> @@ -152,7 +152,8 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
>  		goto error_ret;
>  	}
>  
> -	*val = (st->rx[0] & 0x03) << 14 | st->rx[1] << 6 | (st->rx[2] & 0xfc) >> 2;
> +	*val = (be32_to_cpu(*(u32 *)st->rx) >> 10) & 0xFFFF;
> +
>  error_ret:
>  	mutex_unlock(&st->buf_lock);
>  	return ret;


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

* Re: [PATCH 3/6] IIO: GYRO: ADXRS450: Add missing parity bit generation
  2011-04-29 10:58 ` [PATCH 3/6] IIO: GYRO: ADXRS450: Add missing parity bit generation michael.hennerich
@ 2011-04-29 12:09   ` Jonathan Cameron
  0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2011-04-29 12:09 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-iio, drivers, device-drivers-devel

On 04/29/11 11:58, michael.hennerich@analog.com wrote:
> From: Michael Hennerich <michael.hennerich@analog.com>
> 
> Add missing parity bit generation. Failure to add the parity bit
> caused half of the register accesses to fail.
oops :)
> 
> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/adxrs450_core.c |    7 +++++++
>  1 files changed, 7 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index c02e3ef..5671276 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -59,6 +59,9 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
>  	st->tx[2] = 0;
>  	st->tx[3] = 0;
>  
> +	if (!(hweight32(be32_to_cpu(*(u32 *)st->tx)) & 1))
> +		st->tx[3]  |= ADXRS450_P;
> +
>  	spi_message_init(&msg);
>  	spi_message_add_tail(&xfers[0], &msg);
>  	spi_message_add_tail(&xfers[1], &msg);
> @@ -103,6 +106,10 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
>  	st->tx[1] = reg_address << 1 | val >> 15;
>  	st->tx[2] = val >> 7;
>  	st->tx[3] = val << 1;
> +
> +	if (!(hweight32(be32_to_cpu(*(u32 *)st->tx)) & 1))
> +		st->tx[3]  |= ADXRS450_P;
> +
>  	spi_message_init(&msg);
>  	spi_message_add_tail(&xfers, &msg);
>  	ret = spi_sync(st->us, &msg);


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

* Re: [PATCH 4/6] IIO: GYRO: ADXRS450: enforce sequential transfer delay of at least 0.1ms
  2011-04-29 10:58 ` [PATCH 4/6] IIO: GYRO: ADXRS450: enforce sequential transfer delay of at least 0.1ms michael.hennerich
@ 2011-04-29 12:12   ` Jonathan Cameron
  0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2011-04-29 12:12 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-iio, drivers, device-drivers-devel

On 04/29/11 11:58, michael.hennerich@analog.com wrote:
> From: Michael Hennerich <michael.hennerich@analog.com>
> 
> 
Fair enough. Nasty hardware requirement of the day award goes to....
> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/adxrs450_core.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index 5671276..d73acff 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -116,6 +116,7 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
>  	if (ret)
>  		dev_err(&st->us->dev, "problem while writing 16 bit register 0x%02x\n",
>  				reg_address);
> +	msleep(1); /* enforce sequential transfer delay 0.1ms */
>  	mutex_unlock(&st->buf_lock);
>  	return ret;
>  }


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

* Re: [PATCH 5/6] IIO: GYRO: ADXRS450: Fix sign issues, properly shift results and limit values
  2011-04-29 10:58 ` [PATCH 5/6] IIO: GYRO: ADXRS450: Fix sign issues, properly shift results and limit values michael.hennerich
@ 2011-04-29 12:14   ` Jonathan Cameron
  0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2011-04-29 12:14 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-iio, drivers, device-drivers-devel

On 04/29/11 11:58, michael.hennerich@analog.com wrote:
> From: Michael Hennerich <michael.hennerich@analog.com>
> 
> RATE and QUADRATURE_CORRECTION data is formatted as a twos complement number,
> and therefore must be handled as type signed short.
> 
> TEMP result should be properly shifted.
> 
> Dynamic Null Correction is a 10-bit signed number.
> 
> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/adxrs450_core.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index d73acff..e71b91c 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -126,7 +126,7 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
>   * @dev: device associated with child of actual iio_dev
>   * @val: somewhere to pass back the value read
>   **/
> -static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
> +static int adxrs450_spi_sensor_data(struct device *dev, s16 *val)
>  {
>  	struct spi_message msg;
>  	struct iio_dev *indio_dev = dev_get_drvdata(dev);
> @@ -217,7 +217,7 @@ static ssize_t adxrs450_read_temp(struct device *dev,
>  			&t);
>  	if (ret)
>  		return ret;
> -	return sprintf(buf, "%d\n", t);
> +	return sprintf(buf, "%d\n", t >> 7);
>  }
>  
>  static ssize_t adxrs450_read_quad(struct device *dev,
> @@ -225,7 +225,7 @@ static ssize_t adxrs450_read_quad(struct device *dev,
>  		char *buf)
>  {
>  	int ret;
> -	u16 t;
> +	s16 t;
>  	ret = adxrs450_spi_read_reg_16(dev,
>  			ADXRS450_QUAD1,
>  			&t);
> @@ -247,7 +247,7 @@ static ssize_t adxrs450_write_dnc(struct device *dev,
>  		goto error_ret;
>  	ret = adxrs450_spi_write_reg_16(dev,
>  			ADXRS450_DNC1,
> -			val);
> +			val & 0x3FF);
>  error_ret:
>  	return ret ? ret : len;
>  }
> @@ -257,7 +257,7 @@ static ssize_t adxrs450_read_sensor_data(struct device *dev,
>  		char *buf)
>  {
>  	int ret;
> -	u16 t;
> +	s16 t;
>  
>  	ret = adxrs450_spi_sensor_data(dev, &t);
>  	if (ret)


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

* Re: [PATCH 6/6] IIO: GYRO: ADXRS450: Don't exit probe, in case the power on default is not met.
  2011-04-29 10:58 ` [PATCH 6/6] IIO: GYRO: ADXRS450: Don't exit probe, in case the power on default is not met michael.hennerich
@ 2011-04-29 12:15   ` Jonathan Cameron
  0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2011-04-29 12:15 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-iio, drivers, device-drivers-devel

On 04/29/11 11:58, michael.hennerich@analog.com wrote:
> From: Michael Hennerich <michael.hennerich@analog.com>
> 
> If the part get's probed twice without hard reset in between, the power on default
> register read-back can't be met. This shouldn't cause the second probe to fail.
> So warn but don't exit.
> 
> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/adxrs450_core.c |    8 +++-----
>  1 files changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
> index e71b91c..7a9d7c2 100644
> --- a/drivers/staging/iio/gyro/adxrs450_core.c
> +++ b/drivers/staging/iio/gyro/adxrs450_core.c
> @@ -278,11 +278,9 @@ static int adxrs450_initial_setup(struct adxrs450_state *st)
>  	ret = adxrs450_spi_initial(st, &t, 1);
>  	if (ret)
>  		return ret;
> -	if (t != 0x01) {
> -		dev_err(&st->us->dev, "The initial response is not correct!\n");
> -		return -ENODEV;
> -
> -	}
> +	if (t != 0x01)
> +		dev_warn(&st->us->dev, "The initial power on response "
> +			 "is not correct! Restart without reset?\n");
>  
>  	msleep(ADXRS450_STARTUP_DELAY);
>  	ret = adxrs450_spi_initial(st, &t, 0);


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

* [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice
  2011-04-29 12:16 michael.hennerich
@ 2011-04-29 12:17 ` michael.hennerich
  0 siblings, 0 replies; 13+ messages in thread
From: michael.hennerich @ 2011-04-29 12:17 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, drivers, jic23, device-drivers-devel,
	Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

Cleanup result extraction and update license notice, no functional changes.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/gyro/adxrs450_core.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index a1a71b7..c02e3ef 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2011 Analog Devices Inc.
  *
- * Licensed under the GPL-2 or later.
+ * Licensed under the GPL-2.
  */

 #include <linux/interrupt.h>
@@ -69,7 +69,7 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
 		goto error_ret;
 	}

-	*val = (st->rx[1] & 0x1f) << 11 | st->rx[2] << 3 | (st->rx[3] & 0xe0) >> 5;
+	*val = (be32_to_cpu(*(u32 *)st->rx) >> 5) & 0xFFFF;

 error_ret:
 	mutex_unlock(&st->buf_lock);
@@ -152,7 +152,8 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
 		goto error_ret;
 	}

-	*val = (st->rx[0] & 0x03) << 14 | st->rx[1] << 6 | (st->rx[2] & 0xfc) >> 2;
+	*val = (be32_to_cpu(*(u32 *)st->rx) >> 10) & 0xFFFF;
+
 error_ret:
 	mutex_unlock(&st->buf_lock);
 	return ret;
--
1.6.0.2



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

end of thread, other threads:[~2011-04-29 12:26 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-29 10:58 [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers michael.hennerich
2011-04-29 10:58 ` [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice michael.hennerich
2011-04-29 12:08   ` Jonathan Cameron
2011-04-29 10:58 ` [PATCH 3/6] IIO: GYRO: ADXRS450: Add missing parity bit generation michael.hennerich
2011-04-29 12:09   ` Jonathan Cameron
2011-04-29 10:58 ` [PATCH 4/6] IIO: GYRO: ADXRS450: enforce sequential transfer delay of at least 0.1ms michael.hennerich
2011-04-29 12:12   ` Jonathan Cameron
2011-04-29 10:58 ` [PATCH 5/6] IIO: GYRO: ADXRS450: Fix sign issues, properly shift results and limit values michael.hennerich
2011-04-29 12:14   ` Jonathan Cameron
2011-04-29 10:58 ` [PATCH 6/6] IIO: GYRO: ADXRS450: Don't exit probe, in case the power on default is not met michael.hennerich
2011-04-29 12:15   ` Jonathan Cameron
2011-04-29 12:05 ` [PATCH 1/6] IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers Jonathan Cameron
  -- strict thread matches above, loose matches on Subject: below --
2011-04-29 12:16 michael.hennerich
2011-04-29 12:17 ` [PATCH 2/6] IIO: GYRO: ADXRS450: Cleanup result extraction and update license notice michael.hennerich

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