Skip to content

Commit 7ba8a04

Browse files
larsclausenjic23
authored andcommitted
iio:adis16400: Add support for the 52.85 Hz base sampling rate
The adis16400 and similar have two different base sampling rate available, from which the actual sampling rate is derived. 1638 Hz and 52.85 Hz, switching to the lower base sampling rate allows to support lower sampling rates. This patch adds support for switching to the lower base sampling rate if the requested sampling frequency is outside of the range which can be supported by the higher base sampling rate. The function which is used to read the current sampling rate already has support for the lower sampling rate, so no changes are required there. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
1 parent b24150e commit 7ba8a04

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/iio/imu/adis16400_core.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,26 @@ static int adis16400_get_freq(struct adis16400_state *st)
9292
static int adis16400_set_freq(struct adis16400_state *st, unsigned int freq)
9393
{
9494
unsigned int t;
95+
uint8_t val = 0;
9596

9697
t = 1638404 / freq;
97-
if (t > 0)
98+
if (t >= 128) {
99+
val |= ADIS16400_SMPL_PRD_TIME_BASE;
100+
t = 52851 / freq;
101+
if (t >= 128)
102+
t = 127;
103+
} else if (t != 0) {
98104
t--;
99-
t &= ADIS16400_SMPL_PRD_DIV_MASK;
105+
}
106+
107+
val |= t;
100108

101-
if ((t & ADIS16400_SMPL_PRD_DIV_MASK) >= 0x0A)
109+
if (t >= 0x0A || (val & ADIS16400_SMPL_PRD_TIME_BASE))
102110
st->adis.spi->max_speed_hz = ADIS16400_SPI_SLOW;
103111
else
104112
st->adis.spi->max_speed_hz = ADIS16400_SPI_FAST;
105113

106-
return adis_write_reg_8(&st->adis, ADIS16400_SMPL_PRD, t);
114+
return adis_write_reg_8(&st->adis, ADIS16400_SMPL_PRD, val);
107115
}
108116

109117
static ssize_t adis16400_read_frequency(struct device *dev,

0 commit comments

Comments
 (0)