All of lore.kernel.org
 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 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.