linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes
@ 2011-12-14 12:12 michael.hennerich
  2011-12-14 12:12 ` [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute michael.hennerich
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: michael.hennerich @ 2011-12-14 12:12 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, device-drivers-devel, drivers, Michael Hennerich

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

Add missing scale attributes.
Temperature data is presented as 10-bit, twos complement number.
Therefore use singed and shift accordingly.

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

diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index e832aea..9d33628 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -263,7 +263,7 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
 {
 	int ret;
 	s16 t;
-	u16 ut;
+
 	switch (mask) {
 	case 0:
 		switch (chan->type) {
@@ -276,10 +276,10 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
 			break;
 		case IIO_TEMP:
 			ret = adxrs450_spi_read_reg_16(indio_dev,
-						       ADXRS450_TEMP1, &ut);
+						       ADXRS450_TEMP1, &t);
 			if (ret)
 				break;
-			*val = ut;
+			*val = (t >> 6) + 225;
 			ret = IIO_VAL_INT;
 			break;
 		default:
@@ -287,6 +287,20 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
 			break;
 		}
 		break;
+	case IIO_CHAN_INFO_SCALE:
+		switch (chan->type) {
+		case IIO_ANGL_VEL:
+			*val = 0;
+			*val2 = 218166;
+			return IIO_VAL_INT_PLUS_NANO;
+		case IIO_TEMP:
+			*val = 200;
+			*val2 = 0;
+			return IIO_VAL_INT;
+		default:
+			return -EINVAL;
+		}
+		break;
 	case IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW:
 		ret = adxrs450_spi_read_reg_16(indio_dev, ADXRS450_QUAD1, &t);
 		if (ret)
@@ -308,11 +322,13 @@ static const struct iio_chan_spec adxrs450_channels[] = {
 		.modified = 1,
 		.channel2 = IIO_MOD_Z,
 		.info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
-		IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT,
+		IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
+		IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
 	}, {
 		.type = IIO_TEMP,
 		.indexed = 1,
 		.channel = 0,
+		.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
 	}
 };
 
-- 
1.7.0.4



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

* [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute
  2011-12-14 12:12 [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes michael.hennerich
@ 2011-12-14 12:12 ` michael.hennerich
  2011-12-14 14:17   ` J.I. Cameron
  2011-12-14 12:12 ` [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope michael.hennerich
  2011-12-14 14:17 ` [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes J.I. Cameron
  2 siblings, 1 reply; 8+ messages in thread
From: michael.hennerich @ 2011-12-14 12:12 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, device-drivers-devel, drivers, 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 |    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 9d33628..a146d55 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -308,6 +308,13 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
 		*val = t;
 		ret = IIO_VAL_INT;
 		break;
+	case IIO_CHAN_INFO_CALIBBIAS:
+		ret = adxrs450_spi_read_reg_16(indio_dev, ADXRS450_DNC1, &t);
+		if (ret)
+			break;
+		*val = t;
+		ret = IIO_VAL_INT;
+		break;
 	default:
 		ret = -EINVAL;
 		break;
-- 
1.7.0.4

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

* [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope
  2011-12-14 12:12 [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes michael.hennerich
  2011-12-14 12:12 ` [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute michael.hennerich
@ 2011-12-14 12:12 ` michael.hennerich
  2011-12-14 14:14   ` J.I. Cameron
  2011-12-14 14:17 ` [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes J.I. Cameron
  2 siblings, 1 reply; 8+ messages in thread
From: michael.hennerich @ 2011-12-14 12:12 UTC (permalink / raw)
  To: jic23; +Cc: linux-iio, device-drivers-devel, drivers, Michael Hennerich

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


Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/staging/iio/gyro/Kconfig         |    6 +-
 drivers/staging/iio/gyro/adxrs450.h      |    5 ++
 drivers/staging/iio/gyro/adxrs450_core.c |   60 +++++++++++++++++++++---------
 3 files changed, 50 insertions(+), 21 deletions(-)

diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
index 22aea5b..ea295b2 100644
--- a/drivers/staging/iio/gyro/Kconfig
+++ b/drivers/staging/iio/gyro/Kconfig
@@ -37,11 +37,11 @@ config ADIS16260
 	  will be called adis16260.
 
 config ADXRS450
-	tristate "Analog Devices ADXRS450 Digital Output Gyroscope SPI driver"
+	tristate "Analog Devices ADXRS450/3 Digital Output Gyroscope SPI driver"
 	depends on SPI
 	help
-	  Say yes here to build support for Analog Devices ADXRS450 programmable
-	  digital output gyroscope.
+	  Say yes here to build support for Analog Devices ADXRS450 and ADXRS453
+	  programmable digital output gyroscope.
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called adxrs450.
diff --git a/drivers/staging/iio/gyro/adxrs450.h b/drivers/staging/iio/gyro/adxrs450.h
index b6b6828..af0c870 100644
--- a/drivers/staging/iio/gyro/adxrs450.h
+++ b/drivers/staging/iio/gyro/adxrs450.h
@@ -39,6 +39,11 @@
 
 #define ADXRS450_GET_ST(a)	((a >> 26) & 0x3)
 
+enum {
+	ID_ADXRS450,
+	ID_ADXRS453,
+};
+
 /**
  * struct adxrs450_state - device instance specific data
  * @us:			actual spi_device
diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index a146d55..61690e2 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -1,5 +1,5 @@
 /*
- * ADXRS450 Digital Output Gyroscope Driver
+ * ADXRS450/ADXRS453 Digital Output Gyroscope Driver
  *
  * Copyright 2011 Analog Devices Inc.
  *
@@ -323,20 +323,36 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
 	return ret;
 }
 
-static const struct iio_chan_spec adxrs450_channels[] = {
-	{
-		.type = IIO_ANGL_VEL,
-		.modified = 1,
-		.channel2 = IIO_MOD_Z,
-		.info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
-		IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
-		IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
-	}, {
-		.type = IIO_TEMP,
-		.indexed = 1,
-		.channel = 0,
-		.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
-	}
+static const struct iio_chan_spec adxrs450_channels[2][2] = {
+	[ID_ADXRS450] = {
+		{
+			.type = IIO_ANGL_VEL,
+			.modified = 1,
+			.channel2 = IIO_MOD_Z,
+			.info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
+			IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
+			IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
+		}, {
+			.type = IIO_TEMP,
+			.indexed = 1,
+			.channel = 0,
+			.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
+		}
+	},
+	[ID_ADXRS453] = {
+		{
+			.type = IIO_ANGL_VEL,
+			.modified = 1,
+			.channel2 = IIO_MOD_Z,
+			.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
+			IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT,
+		}, {
+			.type = IIO_TEMP,
+			.indexed = 1,
+			.channel = 0,
+			.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
+		}
+	},
 };
 
 static const struct iio_info adxrs450_info = {
@@ -366,7 +382,8 @@ static int __devinit adxrs450_probe(struct spi_device *spi)
 	indio_dev->dev.parent = &spi->dev;
 	indio_dev->info = &adxrs450_info;
 	indio_dev->modes = INDIO_DIRECT_MODE;
-	indio_dev->channels = adxrs450_channels;
+	indio_dev->channels =
+		adxrs450_channels[spi_get_device_id(spi)->driver_data];
 	indio_dev->num_channels = ARRAY_SIZE(adxrs450_channels);
 	indio_dev->name = spi->dev.driver->name;
 
@@ -396,6 +413,13 @@ static int adxrs450_remove(struct spi_device *spi)
 	return 0;
 }
 
+static const struct spi_device_id adxrs450_id[] = {
+	{"adxrs450", ID_ADXRS450},
+	{"adxrs453", ID_ADXRS453},
+	{}
+};
+MODULE_DEVICE_TABLE(spi, adxrs450_id);
+
 static struct spi_driver adxrs450_driver = {
 	.driver = {
 		.name = "adxrs450",
@@ -403,6 +427,7 @@ static struct spi_driver adxrs450_driver = {
 	},
 	.probe = adxrs450_probe,
 	.remove = __devexit_p(adxrs450_remove),
+	.id_table	= adxrs450_id,
 };
 
 static __init int adxrs450_init(void)
@@ -418,6 +443,5 @@ static __exit void adxrs450_exit(void)
 module_exit(adxrs450_exit);
 
 MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
-MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
+MODULE_DESCRIPTION("Analog Devices ADXRS450/ADXRS453 Gyroscope SPI driver");
 MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("spi:adxrs450");
-- 
1.7.0.4



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

* Re: [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope
  2011-12-14 12:12 ` [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope michael.hennerich
@ 2011-12-14 14:14   ` J.I. Cameron
  2011-12-14 15:06     ` Hennerich, Michael
  0 siblings, 1 reply; 8+ messages in thread
From: J.I. Cameron @ 2011-12-14 14:14 UTC (permalink / raw)
  To: michael.hennerich; +Cc: jic23, linux-iio, device-drivers-devel, drivers

Mostly fine, but why does the adxrs453 not have a scale associated with
the gyro readings and the adxrs450 does?

Also, just out curiosity what is the difference between these two parts?
I'm not finding it obvious from the website :)


>
>Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
>---
> drivers/staging/iio/gyro/Kconfig         |    6 +-
> drivers/staging/iio/gyro/adxrs450.h      |    5 ++
> drivers/staging/iio/gyro/adxrs450_core.c |   60 +++++++++++++++++++++---------
> 3 files changed, 50 insertions(+), 21 deletions(-)
>
>diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
>index 22aea5b..ea295b2 100644
>--- a/drivers/staging/iio/gyro/Kconfig
>+++ b/drivers/staging/iio/gyro/Kconfig
>@@ -37,11 +37,11 @@ config ADIS16260
> 	  will be called adis16260.
> 
> config ADXRS450
>-	tristate "Analog Devices ADXRS450 Digital Output Gyroscope SPI driver"
>+	tristate "Analog Devices ADXRS450/3 Digital Output Gyroscope SPI driver"
> 	depends on SPI
> 	help
>-	  Say yes here to build support for Analog Devices ADXRS450 programmable
>-	  digital output gyroscope.
>+	  Say yes here to build support for Analog Devices ADXRS450 and ADXRS453
>+	  programmable digital output gyroscope.
> 
> 	  This driver can also be built as a module.  If so, the module
> 	  will be called adxrs450.
>diff --git a/drivers/staging/iio/gyro/adxrs450.h b/drivers/staging/iio/gyro/adxrs450.h
>index b6b6828..af0c870 100644
>--- a/drivers/staging/iio/gyro/adxrs450.h
>+++ b/drivers/staging/iio/gyro/adxrs450.h
>@@ -39,6 +39,11 @@
> 
> #define ADXRS450_GET_ST(a)	((a >> 26) & 0x3)
> 
>+enum {
>+	ID_ADXRS450,
>+	ID_ADXRS453,
>+};
>+
> /**
>  * struct adxrs450_state - device instance specific data
>  * @us:			actual spi_device
>diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
>index a146d55..61690e2 100644
>--- a/drivers/staging/iio/gyro/adxrs450_core.c
>+++ b/drivers/staging/iio/gyro/adxrs450_core.c
>@@ -1,5 +1,5 @@
> /*
>- * ADXRS450 Digital Output Gyroscope Driver
>+ * ADXRS450/ADXRS453 Digital Output Gyroscope Driver
>  *
>  * Copyright 2011 Analog Devices Inc.
>  *
>@@ -323,20 +323,36 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
> 	return ret;
> }
> 
>-static const struct iio_chan_spec adxrs450_channels[] = {
>-	{
>-		.type = IIO_ANGL_VEL,
>-		.modified = 1,
>-		.channel2 = IIO_MOD_Z,
>-		.info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
>-		IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
>-		IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
>-	}, {
>-		.type = IIO_TEMP,
>-		.indexed = 1,
>-		.channel = 0,
>-		.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
>-	}
>+static const struct iio_chan_spec adxrs450_channels[2][2] = {
>+	[ID_ADXRS450] = {
>+		{
>+			.type = IIO_ANGL_VEL,
>+			.modified = 1,
>+			.channel2 = IIO_MOD_Z,
>+			.info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
>+			IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
>+			IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
>+		}, {
>+			.type = IIO_TEMP,
>+			.indexed = 1,
>+			.channel = 0,
>+			.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
>+		}
>+	},
>+	[ID_ADXRS453] = {
>+		{
>+			.type = IIO_ANGL_VEL,
>+			.modified = 1,
>+			.channel2 = IIO_MOD_Z,
>+			.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
>+			IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT,
>+		}, {
>+			.type = IIO_TEMP,
>+			.indexed = 1,
>+			.channel = 0,
>+			.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
>+		}
>+	},
> };
> 
> static const struct iio_info adxrs450_info = {
>@@ -366,7 +382,8 @@ static int __devinit adxrs450_probe(struct spi_device *spi)
> 	indio_dev->dev.parent = &spi->dev;
> 	indio_dev->info = &adxrs450_info;
> 	indio_dev->modes = INDIO_DIRECT_MODE;
>-	indio_dev->channels = adxrs450_channels;
>+	indio_dev->channels =
>+		adxrs450_channels[spi_get_device_id(spi)->driver_data];
> 	indio_dev->num_channels = ARRAY_SIZE(adxrs450_channels);
> 	indio_dev->name = spi->dev.driver->name;
> 
>@@ -396,6 +413,13 @@ static int adxrs450_remove(struct spi_device *spi)
> 	return 0;
> }
> 
>+static const struct spi_device_id adxrs450_id[] = {
>+	{"adxrs450", ID_ADXRS450},
>+	{"adxrs453", ID_ADXRS453},
>+	{}
>+};
>+MODULE_DEVICE_TABLE(spi, adxrs450_id);
>+
> static struct spi_driver adxrs450_driver = {
> 	.driver = {
> 		.name = "adxrs450",
>@@ -403,6 +427,7 @@ static struct spi_driver adxrs450_driver = {
> 	},
> 	.probe = adxrs450_probe,
> 	.remove = __devexit_p(adxrs450_remove),
>+	.id_table	= adxrs450_id,
> };
> 
> static __init int adxrs450_init(void)
>@@ -418,6 +443,5 @@ static __exit void adxrs450_exit(void)
> module_exit(adxrs450_exit);
> 
> MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
>-MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
>+MODULE_DESCRIPTION("Analog Devices ADXRS450/ADXRS453 Gyroscope SPI driver");
> MODULE_LICENSE("GPL v2");
>-MODULE_ALIAS("spi:adxrs450");
>

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

* Re: [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute
  2011-12-14 12:12 ` [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute michael.hennerich
@ 2011-12-14 14:17   ` J.I. Cameron
  0 siblings, 0 replies; 8+ messages in thread
From: J.I. Cameron @ 2011-12-14 14:17 UTC (permalink / raw)
  To: michael.hennerich; +Cc: jic23, linux-iio, device-drivers-devel, drivers

On Dec 14 2011, michael.hennerich@analog.com wrote:

>From: Michael Hennerich <michael.hennerich@analog.com>
>
>
>Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@kernel.org>
>---
> 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/ii=
o/gyro/adxrs450_core.c
>index 9d33628..a146d55 100644
>--- a/drivers/staging/iio/gyro/adxrs450_core.c
>+++ b/drivers/staging/iio/gyro/adxrs450_core.c
>@@ -308,6 +308,13 @@ static int adxrs450_read_raw(struct iio_dev *indio_de=
v,
> =09=09*val =3D t;
> =09=09ret =3D IIO_VAL_INT;
> =09=09break;
>+=09case IIO_CHAN_INFO_CALIBBIAS:
>+=09=09ret =3D adxrs450_spi_read_reg_16(indio_dev, ADXRS450_DNC1, &t);
>+=09=09if (ret)
>+=09=09=09break;
>+=09=09*val =3D t;
>+=09=09ret =3D IIO_VAL_INT;
>+=09=09break;
> =09default:
> =09=09ret =3D -EINVAL;
> =09=09break;
>

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

* Re: [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes
  2011-12-14 12:12 [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes michael.hennerich
  2011-12-14 12:12 ` [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute michael.hennerich
  2011-12-14 12:12 ` [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope michael.hennerich
@ 2011-12-14 14:17 ` J.I. Cameron
  2 siblings, 0 replies; 8+ messages in thread
From: J.I. Cameron @ 2011-12-14 14:17 UTC (permalink / raw)
  To: michael.hennerich; +Cc: jic23, linux-iio, device-drivers-devel, drivers

On Dec 14 2011, michael.hennerich@analog.com wrote:

>From: Michael Hennerich <michael.hennerich@analog.com>
>
>Add missing scale attributes.
>Temperature data is presented as 10-bit, twos complement number.
>Therefore use singed and shift accordingly.
>
>Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@kernel.org>
>---
> drivers/staging/iio/gyro/adxrs450_core.c |   24 ++++++++++++++++++++----
> 1 files changed, 20 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/ii=
o/gyro/adxrs450_core.c
>index e832aea..9d33628 100644
>--- a/drivers/staging/iio/gyro/adxrs450_core.c
>+++ b/drivers/staging/iio/gyro/adxrs450_core.c
>@@ -263,7 +263,7 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev=
,
> {
> =09int ret;
> =09s16 t;
>-=09u16 ut;
>+
> =09switch (mask) {
> =09case 0:
> =09=09switch (chan->type) {
>@@ -276,10 +276,10 @@ static int adxrs450_read_raw(struct iio_dev *indio_d=
ev,
> =09=09=09break;
> =09=09case IIO_TEMP:
> =09=09=09ret =3D adxrs450_spi_read_reg_16(indio_dev,
>-=09=09=09=09=09=09       ADXRS450_TEMP1, &ut);
>+=09=09=09=09=09=09       ADXRS450_TEMP1, &t);
> =09=09=09if (ret)
> =09=09=09=09break;
>-=09=09=09*val =3D ut;
>+=09=09=09*val =3D (t >> 6) + 225;
> =09=09=09ret =3D IIO_VAL_INT;
> =09=09=09break;
> =09=09default:
>@@ -287,6 +287,20 @@ static int adxrs450_read_raw(struct iio_dev *indio_de=
v,
> =09=09=09break;
> =09=09}
> =09=09break;
>+=09case IIO_CHAN_INFO_SCALE:
>+=09=09switch (chan->type) {
>+=09=09case IIO_ANGL_VEL:
>+=09=09=09*val =3D 0;
>+=09=09=09*val2 =3D 218166;
>+=09=09=09return IIO_VAL_INT_PLUS_NANO;
>+=09=09case IIO_TEMP:
>+=09=09=09*val =3D 200;
>+=09=09=09*val2 =3D 0;
>+=09=09=09return IIO_VAL_INT;
>+=09=09default:
>+=09=09=09return -EINVAL;
>+=09=09}
>+=09=09break;
> =09case IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW:
> =09=09ret =3D adxrs450_spi_read_reg_16(indio_dev, ADXRS450_QUAD1, &t);
> =09=09if (ret)
>@@ -308,11 +322,13 @@ static const struct iio_chan_spec adxrs450_channels[=
] =3D {
> =09=09.modified =3D 1,
> =09=09.channel2 =3D IIO_MOD_Z,
> =09=09.info_mask =3D IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
>-=09=09IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT,
>+=09=09IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
>+=09=09IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
> =09}, {
> =09=09.type =3D IIO_TEMP,
> =09=09.indexed =3D 1,
> =09=09.channel =3D 0,
>+=09=09.info_mask =3D IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
> =09}
> };
>=20
>

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

* RE: [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope
  2011-12-14 14:14   ` J.I. Cameron
@ 2011-12-14 15:06     ` Hennerich, Michael
  2011-12-14 17:07       ` Jonathan Cameron
  0 siblings, 1 reply; 8+ messages in thread
From: Hennerich, Michael @ 2011-12-14 15:06 UTC (permalink / raw)
  To: J.I. Cameron
  Cc: jic23@kernel.org, linux-iio@vger.kernel.org,
	device-drivers-devel@blackfin.uclinux.org, Drivers

J.I. Cameron wrote on 2011-12-14:
> Mostly fine, but why does the adxrs453 not have a scale associated with
> the gyro readings and the adxrs450 does?

Please see again - both have a scale associated with the gyro readings.
The difference is that the ADXRS453 doesn't have the IIO_CHAN_INFO_CALIBBIA=
S.

>
> Also, just out curiosity what is the difference between these two parts?
> I'm not finding it obvious from the website :)

Honestly - I was asking me the same thing.

But from a functional point of view the only difference I found was the mis=
sing
dynamic null correction feature on the ADXRS453. (exposed as CALIBBIAS)
In addition there are slightly different datasheet specifications.

Regards,
Michael


>>
>> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> ---
>> drivers/staging/iio/gyro/Kconfig         |    6 +-
>> drivers/staging/iio/gyro/adxrs450.h      |    5 ++
>> drivers/staging/iio/gyro/adxrs450_core.c |   60
>> +++++++++++++++++++++--------- 3 files changed, 50 insertions(+), 21
>> deletions(-)
>>
>> diff --git a/drivers/staging/iio/gyro/Kconfig
>> b/drivers/staging/iio/gyro/Kconfig index 22aea5b..ea295b2 100644 ---
>> a/drivers/staging/iio/gyro/Kconfig +++
>> b/drivers/staging/iio/gyro/Kconfig @@ -37,11 +37,11 @@ config ADIS16260
>>        will be called adis16260.
>>
>> config ADXRS450 -    tristate "Analog Devices ADXRS450 Digital Output
>> Gyroscope SPI driver" +      tristate "Analog Devices ADXRS450/3 Digital
>> Output Gyroscope SPI driver"         depends on SPI  help -    Say yes h=
ere to
>> build support for Analog Devices ADXRS450 programmable -       digital
>> output gyroscope. +    Say yes here to build support for Analog Devices
>> ADXRS450 and ADXRS453 +        programmable digital output gyroscope.
>>
>>        This driver can also be built as a module.  If so, the module
>> will be called adxrs450. diff --git
>> a/drivers/staging/iio/gyro/adxrs450.h
>> b/drivers/staging/iio/gyro/adxrs450.h index b6b6828..af0c870 100644 ---
>> a/drivers/staging/iio/gyro/adxrs450.h +++
>> b/drivers/staging/iio/gyro/adxrs450.h @@ -39,6 +39,11 @@
>>
>> #define ADXRS450_GET_ST(a)   ((a >> 26) & 0x3)
>>
>> +enum {
>> +    ID_ADXRS450,
>> +    ID_ADXRS453,
>> +};
>> +
>> /**
>>  * struct adxrs450_state - device instance specific data
>>  * @us:                      actual spi_device
>> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c
>> b/drivers/staging/iio/gyro/adxrs450_core.c index a146d55..61690e2
>> 100644 --- a/drivers/staging/iio/gyro/adxrs450_core.c +++
>> b/drivers/staging/iio/gyro/adxrs450_core.c @@ -1,5 +1,5 @@ /* - *
>> ADXRS450 Digital Output Gyroscope Driver + * ADXRS450/ADXRS453 Digital
>> Output Gyroscope Driver
>>  *
>>  * Copyright 2011 Analog Devices Inc.
>>  *
>> @@ -323,20 +323,36 @@ static int adxrs450_read_raw(struct iio_dev
>> *indio_dev,  return ret; }
>>
>> -static const struct iio_chan_spec adxrs450_channels[] =3D { - { -      =
       .type
>> =3D IIO_ANGL_VEL, -            .modified =3D 1, -                .channe=
l2 =3D IIO_MOD_Z,
>> -            .info_mask =3D IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
>> -            IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
>> -            IIO_CHAN_INFO_SCALE_SEPARATE_BIT, -     }, { -          .ty=
pe =3D IIO_TEMP,
>> -            .indexed =3D 1, -         .channel =3D 0, -         .info_m=
ask =3D
>> IIO_CHAN_INFO_SCALE_SEPARATE_BIT, -  } +static const struct
>> iio_chan_spec adxrs450_channels[2][2] =3D { +  [ID_ADXRS450] =3D { +    =
         {
>> +                    .type =3D IIO_ANGL_VEL, +                 .modified=
 =3D 1, +                        .channel2 =3D IIO_MOD_Z,
>> +                    .info_mask =3D IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT=
 |
>> +                    IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BI=
T |
>> +                    IIO_CHAN_INFO_SCALE_SEPARATE_BIT, +             }, =
{ +                  .type =3D IIO_TEMP,
>> +                    .indexed =3D 1, +                 .channel =3D 0, +=
                 .info_mask =3D
>> IIO_CHAN_INFO_SCALE_SEPARATE_BIT, +          } +     }, +    [ID_ADXRS45=
3] =3D { +             {
>> +                    .type =3D IIO_ANGL_VEL, +                 .modified=
 =3D 1, +                        .channel2 =3D IIO_MOD_Z,
>> +                    .info_mask =3D IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
>> +                    IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BI=
T, +         }, {
>> +                    .type =3D IIO_TEMP, +                     .indexed =
=3D 1, +                 .channel =3D 0,
>> +                    .info_mask =3D IIO_CHAN_INFO_SCALE_SEPARATE_BIT, + =
               } +     }, };
>>
>> static const struct iio_info adxrs450_info =3D { @@ -366,7 +382,8 @@
>> static int __devinit adxrs450_probe(struct spi_device *spi)
>>      indio_dev->dev.parent =3D &spi->dev;      indio_dev->info =3D &adxr=
s450_info;
>>      indio_dev->modes =3D INDIO_DIRECT_MODE; - indio_dev->channels =3D
>> adxrs450_channels; + indio_dev->channels =3D
>> +            adxrs450_channels[spi_get_device_id(spi)->driver_data];
>>      indio_dev->num_channels =3D ARRAY_SIZE(adxrs450_channels);
>>      indio_dev->name =3D spi->dev.driver->name;
>>
>> @@ -396,6 +413,13 @@ static int adxrs450_remove(struct spi_device *spi)
>>      return 0; }
>>
>> +static const struct spi_device_id adxrs450_id[] =3D {
>> +    {"adxrs450", ID_ADXRS450},
>> +    {"adxrs453", ID_ADXRS453},
>> +    {}
>> +};
>> +MODULE_DEVICE_TABLE(spi, adxrs450_id);
>> +
>> static struct spi_driver adxrs450_driver =3D {
>>      .driver =3D {
>>              .name =3D "adxrs450",
>> @@ -403,6 +427,7 @@ static struct spi_driver adxrs450_driver =3D {
>>      },
>>      .probe =3D adxrs450_probe,
>>      .remove =3D __devexit_p(adxrs450_remove),
>> +    .id_table       =3D adxrs450_id,
>> };
>>
>> static __init int adxrs450_init(void)
>> @@ -418,6 +443,5 @@ static __exit void adxrs450_exit(void)
>> module_exit(adxrs450_exit);
>>
>> MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
>> -MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
>> +MODULE_DESCRIPTION("Analog Devices ADXRS450/ADXRS453 Gyroscope SPI
>> driver"); MODULE_LICENSE("GPL v2"); -MODULE_ALIAS("spi:adxrs450");
>>

Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin, Mar=
garet Seif

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

* RE: [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope
  2011-12-14 15:06     ` Hennerich, Michael
@ 2011-12-14 17:07       ` Jonathan Cameron
  0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2011-12-14 17:07 UTC (permalink / raw)
  To: Hennerich, Michael
  Cc: jic23@kernel.org, linux-iio@vger.kernel.org,
	device-drivers-devel@blackfin.uclinux.org, Drivers



"Hennerich, Michael" <Michael.Hennerich@analog.com> wrote:

>J.I. Cameron wrote on 2011-12-14:
>> Mostly fine, but why does the adxrs453 not have a scale associated
>with
>> the gyro readings and the adxrs450 does?
>
>Please see again - both have a scale associated with the gyro readings.
>The difference is that the ADXRS453 doesn't have the
>IIO_CHAN_INFO_CALIBBIAS.
Ah my missread. Feel free to add my ack.
>
>>
>> Also, just out curiosity what is the difference between these two
>parts?
>> I'm not finding it obvious from the website :)
>
>Honestly - I was asking me the same thing.
>
>But from a functional point of view the only difference I found was the
>missing
>dynamic null correction feature on the ADXRS453. (exposed as CALIBBIAS)
>In addition there are slightly different datasheet specifications.
>
>Regards,
>Michael
>
>
>>>
>>> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> ---
>>> drivers/staging/iio/gyro/Kconfig         |    6 +-
>>> drivers/staging/iio/gyro/adxrs450.h      |    5 ++
>>> drivers/staging/iio/gyro/adxrs450_core.c |   60
>>> +++++++++++++++++++++--------- 3 files changed, 50 insertions(+), 21
>>> deletions(-)
>>>
>>> diff --git a/drivers/staging/iio/gyro/Kconfig
>>> b/drivers/staging/iio/gyro/Kconfig index 22aea5b..ea295b2 100644 ---
>>> a/drivers/staging/iio/gyro/Kconfig +++
>>> b/drivers/staging/iio/gyro/Kconfig @@ -37,11 +37,11 @@ config
>ADIS16260
>>>        will be called adis16260.
>>>
>>> config ADXRS450 -    tristate "Analog Devices ADXRS450 Digital
>Output
>>> Gyroscope SPI driver" +      tristate "Analog Devices ADXRS450/3
>Digital
>>> Output Gyroscope SPI driver"         depends on SPI  help -    Say
>yes here to
>>> build support for Analog Devices ADXRS450 programmable -      
>digital
>>> output gyroscope. +    Say yes here to build support for Analog
>Devices
>>> ADXRS450 and ADXRS453 +        programmable digital output
>gyroscope.
>>>
>>>        This driver can also be built as a module.  If so, the module
>>> will be called adxrs450. diff --git
>>> a/drivers/staging/iio/gyro/adxrs450.h
>>> b/drivers/staging/iio/gyro/adxrs450.h index b6b6828..af0c870 100644
>---
>>> a/drivers/staging/iio/gyro/adxrs450.h +++
>>> b/drivers/staging/iio/gyro/adxrs450.h @@ -39,6 +39,11 @@
>>>
>>> #define ADXRS450_GET_ST(a)   ((a >> 26) & 0x3)
>>>
>>> +enum {
>>> +    ID_ADXRS450,
>>> +    ID_ADXRS453,
>>> +};
>>> +
>>> /**
>>>  * struct adxrs450_state - device instance specific data
>>>  * @us:                      actual spi_device
>>> diff --git a/drivers/staging/iio/gyro/adxrs450_core.c
>>> b/drivers/staging/iio/gyro/adxrs450_core.c index a146d55..61690e2
>>> 100644 --- a/drivers/staging/iio/gyro/adxrs450_core.c +++
>>> b/drivers/staging/iio/gyro/adxrs450_core.c @@ -1,5 +1,5 @@ /* - *
>>> ADXRS450 Digital Output Gyroscope Driver + * ADXRS450/ADXRS453
>Digital
>>> Output Gyroscope Driver
>>>  *
>>>  * Copyright 2011 Analog Devices Inc.
>>>  *
>>> @@ -323,20 +323,36 @@ static int adxrs450_read_raw(struct iio_dev
>>> *indio_dev,  return ret; }
>>>
>>> -static const struct iio_chan_spec adxrs450_channels[] = { - { -    
>        .type
>>> = IIO_ANGL_VEL, -            .modified = 1, -               
>.channel2 = IIO_MOD_Z,
>>> -            .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
>>> -            IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
>>> -            IIO_CHAN_INFO_SCALE_SEPARATE_BIT, -     }, { -         
>.type = IIO_TEMP,
>>> -            .indexed = 1, -         .channel = 0, -        
>.info_mask =
>>> IIO_CHAN_INFO_SCALE_SEPARATE_BIT, -  } +static const struct
>>> iio_chan_spec adxrs450_channels[2][2] = { +  [ID_ADXRS450] = { +    
>        {
>>> +                    .type = IIO_ANGL_VEL, +                
>.modified = 1, +                        .channel2 = IIO_MOD_Z,
>>> +                    .info_mask =
>IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
>>> +                   
>IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT |
>>> +                    IIO_CHAN_INFO_SCALE_SEPARATE_BIT, +            
>}, { +                  .type = IIO_TEMP,
>>> +                    .indexed = 1, +                 .channel = 0, +
>                .info_mask =
>>> IIO_CHAN_INFO_SCALE_SEPARATE_BIT, +          } +     }, +   
>[ID_ADXRS453] = { +             {
>>> +                    .type = IIO_ANGL_VEL, +                
>.modified = 1, +                        .channel2 = IIO_MOD_Z,
>>> +                    .info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
>>> +                   
>IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT, +         }, {
>>> +                    .type = IIO_TEMP, +                    
>.indexed = 1, +                 .channel = 0,
>>> +                    .info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
>+                } +     }, };
>>>
>>> static const struct iio_info adxrs450_info = { @@ -366,7 +382,8 @@
>>> static int __devinit adxrs450_probe(struct spi_device *spi)
>>>      indio_dev->dev.parent = &spi->dev;      indio_dev->info =
>&adxrs450_info;
>>>      indio_dev->modes = INDIO_DIRECT_MODE; - indio_dev->channels =
>>> adxrs450_channels; + indio_dev->channels =
>>> +            adxrs450_channels[spi_get_device_id(spi)->driver_data];
>>>      indio_dev->num_channels = ARRAY_SIZE(adxrs450_channels);
>>>      indio_dev->name = spi->dev.driver->name;
>>>
>>> @@ -396,6 +413,13 @@ static int adxrs450_remove(struct spi_device
>*spi)
>>>      return 0; }
>>>
>>> +static const struct spi_device_id adxrs450_id[] = {
>>> +    {"adxrs450", ID_ADXRS450},
>>> +    {"adxrs453", ID_ADXRS453},
>>> +    {}
>>> +};
>>> +MODULE_DEVICE_TABLE(spi, adxrs450_id);
>>> +
>>> static struct spi_driver adxrs450_driver = {
>>>      .driver = {
>>>              .name = "adxrs450",
>>> @@ -403,6 +427,7 @@ static struct spi_driver adxrs450_driver = {
>>>      },
>>>      .probe = adxrs450_probe,
>>>      .remove = __devexit_p(adxrs450_remove),
>>> +    .id_table       = adxrs450_id,
>>> };
>>>
>>> static __init int adxrs450_init(void)
>>> @@ -418,6 +443,5 @@ static __exit void adxrs450_exit(void)
>>> module_exit(adxrs450_exit);
>>>
>>> MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>");
>>> -MODULE_DESCRIPTION("Analog Devices ADXRS450 Gyroscope SPI driver");
>>> +MODULE_DESCRIPTION("Analog Devices ADXRS450/ADXRS453 Gyroscope SPI
>>> driver"); MODULE_LICENSE("GPL v2"); -MODULE_ALIAS("spi:adxrs450");
>>>
>
>Greetings,
>Michael
>
>--
>Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
>Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
>Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin,
>Margaret Seif

-- 
Sent from my Android phone 
with K-9 Mail. Please excuse my brevity.

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

end of thread, other threads:[~2011-12-14 17:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-14 12:12 [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes michael.hennerich
2011-12-14 12:12 ` [PATCH 2/3] iio: gyro: ADXRS450: Add missing read support for calibbias attribute michael.hennerich
2011-12-14 14:17   ` J.I. Cameron
2011-12-14 12:12 ` [PATCH 3/3] iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope michael.hennerich
2011-12-14 14:14   ` J.I. Cameron
2011-12-14 15:06     ` Hennerich, Michael
2011-12-14 17:07       ` Jonathan Cameron
2011-12-14 14:17 ` [PATCH 1/3] iio: gyro: ADXRS450: Add missing scale attributes J.I. Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).