staging:iio:gyro: add adis16251 support to adis16260 driver
These parts are very similar and the adis16260 driver supports a lot of additional functionality. Precursor to removal of adis16251 driver. Note that some supported devices were missing from Kconfig help text and are also added in this patch. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> Acked-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
35d2b6f9b1
commit
03d1b7d3e4
@@ -25,13 +25,13 @@ config ADIS16130
|
|||||||
Angular Rate Sensor driver.
|
Angular Rate Sensor driver.
|
||||||
|
|
||||||
config ADIS16260
|
config ADIS16260
|
||||||
tristate "Analog Devices ADIS16260 ADIS16265 Digital Gyroscope Sensor SPI driver"
|
tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
|
||||||
depends on SPI
|
depends on SPI
|
||||||
select IIO_TRIGGER if IIO_RING_BUFFER
|
select IIO_TRIGGER if IIO_RING_BUFFER
|
||||||
select IIO_SW_RING if IIO_RING_BUFFER
|
select IIO_SW_RING if IIO_RING_BUFFER
|
||||||
help
|
help
|
||||||
Say yes here to build support for Analog Devices ADIS16260 ADIS16265
|
Say yes here to build support for Analog Devices ADIS16260 ADIS16265
|
||||||
programmable digital gyroscope sensor.
|
ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
|
||||||
|
|
||||||
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 adis16260.
|
will be called adis16260.
|
||||||
|
@@ -238,10 +238,24 @@ error_ret:
|
|||||||
return ret ? ret : len;
|
return ret ? ret : len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t adis16260_read_frequency_available(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct iio_dev *indio_dev = dev_get_drvdata(dev);
|
||||||
|
struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
|
||||||
|
if (spi_get_device_id(st->us)->driver_data)
|
||||||
|
return sprintf(buf, "%s\n", "0.129 ~ 256");
|
||||||
|
else
|
||||||
|
return sprintf(buf, "%s\n", "256 2048");
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t adis16260_read_frequency(struct device *dev,
|
static ssize_t adis16260_read_frequency(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
{
|
{
|
||||||
|
struct iio_dev *indio_dev = dev_get_drvdata(dev);
|
||||||
|
struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
|
||||||
int ret, len = 0;
|
int ret, len = 0;
|
||||||
u16 t;
|
u16 t;
|
||||||
int sps;
|
int sps;
|
||||||
@@ -250,7 +264,11 @@ static ssize_t adis16260_read_frequency(struct device *dev,
|
|||||||
&t);
|
&t);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
|
|
||||||
|
if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
|
||||||
|
sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
|
||||||
|
else
|
||||||
|
sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
|
||||||
sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
|
sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
|
||||||
len = sprintf(buf, "%d SPS\n", sps);
|
len = sprintf(buf, "%d SPS\n", sps);
|
||||||
return len;
|
return len;
|
||||||
@@ -272,16 +290,21 @@ static ssize_t adis16260_write_frequency(struct device *dev,
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
mutex_lock(&indio_dev->mlock);
|
mutex_lock(&indio_dev->mlock);
|
||||||
|
if (spi_get_device_id(st->us)) {
|
||||||
t = (2048 / val);
|
t = (256 / val);
|
||||||
if (t > 0)
|
if (t > 0)
|
||||||
t--;
|
t--;
|
||||||
t &= ADIS16260_SMPL_PRD_DIV_MASK;
|
t &= ADIS16260_SMPL_PRD_DIV_MASK;
|
||||||
|
} else {
|
||||||
|
t = (2048 / val);
|
||||||
|
if (t > 0)
|
||||||
|
t--;
|
||||||
|
t &= ADIS16260_SMPL_PRD_DIV_MASK;
|
||||||
|
}
|
||||||
if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
|
if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
|
||||||
st->us->max_speed_hz = ADIS16260_SPI_SLOW;
|
st->us->max_speed_hz = ADIS16260_SPI_SLOW;
|
||||||
else
|
else
|
||||||
st->us->max_speed_hz = ADIS16260_SPI_FAST;
|
st->us->max_speed_hz = ADIS16260_SPI_FAST;
|
||||||
|
|
||||||
ret = adis16260_spi_write_reg_8(dev,
|
ret = adis16260_spi_write_reg_8(dev,
|
||||||
ADIS16260_SMPL_PRD,
|
ADIS16260_SMPL_PRD,
|
||||||
t);
|
t);
|
||||||
@@ -302,7 +325,10 @@ static ssize_t adis16260_read_gyro_scale(struct device *dev,
|
|||||||
if (st->negate)
|
if (st->negate)
|
||||||
ret = sprintf(buf, "-");
|
ret = sprintf(buf, "-");
|
||||||
/* Take the iio_dev status lock */
|
/* Take the iio_dev status lock */
|
||||||
ret += sprintf(buf + ret, "%s\n", "0.00127862821");
|
if (spi_get_device_id(st->us)->driver_data)
|
||||||
|
ret += sprintf(buf + ret, "%s\n", "0.00031974432");
|
||||||
|
else
|
||||||
|
ret += sprintf(buf + ret, "%s\n", "0.00127862821");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -475,7 +501,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
|
|||||||
|
|
||||||
static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0);
|
static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0);
|
||||||
|
|
||||||
static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("256 2048");
|
|
||||||
|
static IIO_DEVICE_ATTR(sampling_frequency_available,
|
||||||
|
S_IRUGO, adis16260_read_frequency_available, NULL, 0);
|
||||||
|
|
||||||
static IIO_CONST_ATTR_NAME("adis16260");
|
static IIO_CONST_ATTR_NAME("adis16260");
|
||||||
|
|
||||||
@@ -525,7 +553,7 @@ static ADIS16260_GYRO_ATTR_SET(_Z);
|
|||||||
&iio_dev_attr_in1_raw.dev_attr.attr, \
|
&iio_dev_attr_in1_raw.dev_attr.attr, \
|
||||||
&iio_const_attr_in1_scale.dev_attr.attr, \
|
&iio_const_attr_in1_scale.dev_attr.attr, \
|
||||||
&iio_dev_attr_sampling_frequency.dev_attr.attr, \
|
&iio_dev_attr_sampling_frequency.dev_attr.attr, \
|
||||||
&iio_const_attr_sampling_frequency_available.dev_attr.attr, \
|
&iio_dev_attr_sampling_frequency_available.dev_attr.attr, \
|
||||||
&iio_dev_attr_reset.dev_attr.attr, \
|
&iio_dev_attr_reset.dev_attr.attr, \
|
||||||
&iio_const_attr_name.dev_attr.attr, \
|
&iio_const_attr_name.dev_attr.attr, \
|
||||||
NULL \
|
NULL \
|
||||||
@@ -693,6 +721,7 @@ static const struct spi_device_id adis16260_id[] = {
|
|||||||
{"adis16265", 0},
|
{"adis16265", 0},
|
||||||
{"adis16250", 0},
|
{"adis16250", 0},
|
||||||
{"adis16255", 0},
|
{"adis16255", 0},
|
||||||
|
{"adis16251", 1},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user