iio: adis16480: fix devices that do not support sleep mode
Not all devices supported by this driver support being put to sleep mode. For those devices, when calling 'adis16480_stop_device()' on the unbind path, we where actually writing in the SYNC_SCALE register. Fixes:80cbc848c4
("iio: imu: adis16480: Add support for ADIS16490") Fixes:82e7a1b250
("iio: imu: adis16480: Add support for ADIS1649x family of devices") Signed-off-by: Nuno Sá <nuno.sa@analog.com> Link: https://lore.kernel.org/r/20210903141423.517028-6-nuno.sa@analog.com Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
c2980c64c7
commit
ea1945c2f7
|
@ -144,6 +144,7 @@ struct adis16480_chip_info {
|
|||
unsigned int max_dec_rate;
|
||||
const unsigned int *filter_freqs;
|
||||
bool has_pps_clk_mode;
|
||||
bool has_sleep_cnt;
|
||||
const struct adis_data adis_data;
|
||||
};
|
||||
|
||||
|
@ -939,6 +940,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
|
|||
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||
.int_clk = 2460000,
|
||||
.max_dec_rate = 2048,
|
||||
.has_sleep_cnt = true,
|
||||
.filter_freqs = adis16480_def_filter_freqs,
|
||||
.adis_data = ADIS16480_DATA(16375, &adis16485_timeouts, 0),
|
||||
},
|
||||
|
@ -952,6 +954,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
|
|||
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||
.int_clk = 2460000,
|
||||
.max_dec_rate = 2048,
|
||||
.has_sleep_cnt = true,
|
||||
.filter_freqs = adis16480_def_filter_freqs,
|
||||
.adis_data = ADIS16480_DATA(16480, &adis16480_timeouts, 0),
|
||||
},
|
||||
|
@ -965,6 +968,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
|
|||
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||
.int_clk = 2460000,
|
||||
.max_dec_rate = 2048,
|
||||
.has_sleep_cnt = true,
|
||||
.filter_freqs = adis16480_def_filter_freqs,
|
||||
.adis_data = ADIS16480_DATA(16485, &adis16485_timeouts, 0),
|
||||
},
|
||||
|
@ -978,6 +982,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
|
|||
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||
.int_clk = 2460000,
|
||||
.max_dec_rate = 2048,
|
||||
.has_sleep_cnt = true,
|
||||
.filter_freqs = adis16480_def_filter_freqs,
|
||||
.adis_data = ADIS16480_DATA(16488, &adis16485_timeouts, 0),
|
||||
},
|
||||
|
@ -1425,9 +1430,12 @@ static int adis16480_probe(struct spi_device *spi)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = devm_add_action_or_reset(&spi->dev, adis16480_stop, indio_dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (st->chip_info->has_sleep_cnt) {
|
||||
ret = devm_add_action_or_reset(&spi->dev, adis16480_stop,
|
||||
indio_dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = adis16480_config_irq_pin(spi->dev.of_node, st);
|
||||
if (ret)
|
||||
|
|
Loading…
Reference in New Issue