Commit 617156fb authored by Michael Hennerich's avatar Michael Hennerich Committed by Greg Kroah-Hartman

iio: gyro: ADXRS450: Add support for ADXRS453 Digital Gyroscope

Signed-off-by: default avatarMichael Hennerich <michael.hennerich@analog.com>
Acked-by: default avatarJonathan Cameron <jic23@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 9631135d
...@@ -37,11 +37,11 @@ config ADIS16260 ...@@ -37,11 +37,11 @@ config ADIS16260
will be called adis16260. will be called adis16260.
config ADXRS450 config ADXRS450
tristate "Analog Devices ADXRS450 Digital Output Gyroscope SPI driver" tristate "Analog Devices ADXRS450/3 Digital Output Gyroscope SPI driver"
depends on SPI depends on SPI
help help
Say yes here to build support for Analog Devices ADXRS450 programmable Say yes here to build support for Analog Devices ADXRS450 and ADXRS453
digital output gyroscope. programmable digital output gyroscope.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called adxrs450. will be called adxrs450.
......
...@@ -39,6 +39,11 @@ ...@@ -39,6 +39,11 @@
#define ADXRS450_GET_ST(a) ((a >> 26) & 0x3) #define ADXRS450_GET_ST(a) ((a >> 26) & 0x3)
enum {
ID_ADXRS450,
ID_ADXRS453,
};
/** /**
* struct adxrs450_state - device instance specific data * struct adxrs450_state - device instance specific data
* @us: actual spi_device * @us: actual spi_device
......
/* /*
* ADXRS450 Digital Output Gyroscope Driver * ADXRS450/ADXRS453 Digital Output Gyroscope Driver
* *
* Copyright 2011 Analog Devices Inc. * Copyright 2011 Analog Devices Inc.
* *
...@@ -323,7 +323,8 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev, ...@@ -323,7 +323,8 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
return ret; return ret;
} }
static const struct iio_chan_spec adxrs450_channels[] = { static const struct iio_chan_spec adxrs450_channels[2][2] = {
[ID_ADXRS450] = {
{ {
.type = IIO_ANGL_VEL, .type = IIO_ANGL_VEL,
.modified = 1, .modified = 1,
...@@ -337,6 +338,21 @@ static const struct iio_chan_spec adxrs450_channels[] = { ...@@ -337,6 +338,21 @@ static const struct iio_chan_spec adxrs450_channels[] = {
.channel = 0, .channel = 0,
.info_mask = IIO_CHAN_INFO_SCALE_SEPARATE_BIT, .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 = { static const struct iio_info adxrs450_info = {
...@@ -366,7 +382,8 @@ static int __devinit adxrs450_probe(struct spi_device *spi) ...@@ -366,7 +382,8 @@ static int __devinit adxrs450_probe(struct spi_device *spi)
indio_dev->dev.parent = &spi->dev; indio_dev->dev.parent = &spi->dev;
indio_dev->info = &adxrs450_info; indio_dev->info = &adxrs450_info;
indio_dev->modes = INDIO_DIRECT_MODE; 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->num_channels = ARRAY_SIZE(adxrs450_channels);
indio_dev->name = spi->dev.driver->name; indio_dev->name = spi->dev.driver->name;
...@@ -396,6 +413,13 @@ static int adxrs450_remove(struct spi_device *spi) ...@@ -396,6 +413,13 @@ static int adxrs450_remove(struct spi_device *spi)
return 0; 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 = { static struct spi_driver adxrs450_driver = {
.driver = { .driver = {
.name = "adxrs450", .name = "adxrs450",
...@@ -403,6 +427,7 @@ static struct spi_driver adxrs450_driver = { ...@@ -403,6 +427,7 @@ static struct spi_driver adxrs450_driver = {
}, },
.probe = adxrs450_probe, .probe = adxrs450_probe,
.remove = __devexit_p(adxrs450_remove), .remove = __devexit_p(adxrs450_remove),
.id_table = adxrs450_id,
}; };
static __init int adxrs450_init(void) static __init int adxrs450_init(void)
...@@ -418,6 +443,5 @@ static __exit void adxrs450_exit(void) ...@@ -418,6 +443,5 @@ static __exit void adxrs450_exit(void)
module_exit(adxrs450_exit); module_exit(adxrs450_exit);
MODULE_AUTHOR("Cliff Cai <cliff.cai@xxxxxxxxxx>"); 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_LICENSE("GPL v2");
MODULE_ALIAS("spi:adxrs450");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment