"Hennerich, Michael" <Michael.Hennerich@xxxxxxxxxx> 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@xxxxxxxxxx> --- >>> 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. -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html