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. > > 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 -- 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