Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parent 9631135d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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.
+5 −0
Original line number Diff line number Diff line
@@ -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
+42 −18
Original line number Diff line number Diff line
/*
 * ADXRS450 Digital Output Gyroscope Driver
 * ADXRS450/ADXRS453 Digital Output Gyroscope Driver
 *
 * Copyright 2011 Analog Devices Inc.
 *
@@ -323,7 +323,8 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
	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,
			.modified = 1,
@@ -337,6 +338,21 @@ static const struct iio_chan_spec adxrs450_channels[] = {
			.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");