Commit ea1945c2 authored by Nuno Sá's avatar Nuno Sá Committed by Jonathan Cameron
Browse files

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: 80cbc848 ("iio: imu: adis16480: Add support for ADIS16490")
Fixes: 82e7a1b2 ("iio: imu: adis16480: Add support for ADIS1649x family of devices")
Signed-off-by: default avatarNuno 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: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent c2980c64
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -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 (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)