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
drivers/iio/imu
|
@ -144,6 +144,7 @@ struct adis16480_chip_info {
|
||||||
unsigned int max_dec_rate;
|
unsigned int max_dec_rate;
|
||||||
const unsigned int *filter_freqs;
|
const unsigned int *filter_freqs;
|
||||||
bool has_pps_clk_mode;
|
bool has_pps_clk_mode;
|
||||||
|
bool has_sleep_cnt;
|
||||||
const struct adis_data adis_data;
|
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 */
|
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||||
.int_clk = 2460000,
|
.int_clk = 2460000,
|
||||||
.max_dec_rate = 2048,
|
.max_dec_rate = 2048,
|
||||||
|
.has_sleep_cnt = true,
|
||||||
.filter_freqs = adis16480_def_filter_freqs,
|
.filter_freqs = adis16480_def_filter_freqs,
|
||||||
.adis_data = ADIS16480_DATA(16375, &adis16485_timeouts, 0),
|
.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 */
|
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||||
.int_clk = 2460000,
|
.int_clk = 2460000,
|
||||||
.max_dec_rate = 2048,
|
.max_dec_rate = 2048,
|
||||||
|
.has_sleep_cnt = true,
|
||||||
.filter_freqs = adis16480_def_filter_freqs,
|
.filter_freqs = adis16480_def_filter_freqs,
|
||||||
.adis_data = ADIS16480_DATA(16480, &adis16480_timeouts, 0),
|
.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 */
|
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||||
.int_clk = 2460000,
|
.int_clk = 2460000,
|
||||||
.max_dec_rate = 2048,
|
.max_dec_rate = 2048,
|
||||||
|
.has_sleep_cnt = true,
|
||||||
.filter_freqs = adis16480_def_filter_freqs,
|
.filter_freqs = adis16480_def_filter_freqs,
|
||||||
.adis_data = ADIS16480_DATA(16485, &adis16485_timeouts, 0),
|
.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 */
|
.temp_scale = 5650, /* 5.65 milli degree Celsius */
|
||||||
.int_clk = 2460000,
|
.int_clk = 2460000,
|
||||||
.max_dec_rate = 2048,
|
.max_dec_rate = 2048,
|
||||||
|
.has_sleep_cnt = true,
|
||||||
.filter_freqs = adis16480_def_filter_freqs,
|
.filter_freqs = adis16480_def_filter_freqs,
|
||||||
.adis_data = ADIS16480_DATA(16488, &adis16485_timeouts, 0),
|
.adis_data = ADIS16480_DATA(16488, &adis16485_timeouts, 0),
|
||||||
},
|
},
|
||||||
|
@ -1425,9 +1430,12 @@ static int adis16480_probe(struct spi_device *spi)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = devm_add_action_or_reset(&spi->dev, adis16480_stop, indio_dev);
|
if (st->chip_info->has_sleep_cnt) {
|
||||||
if (ret)
|
ret = devm_add_action_or_reset(&spi->dev, adis16480_stop,
|
||||||
return ret;
|
indio_dev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = adis16480_config_irq_pin(spi->dev.of_node, st);
|
ret = adis16480_config_irq_pin(spi->dev.of_node, st);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
Loading…
Reference in New Issue