.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * ADIS16201 Dual-Axis Digital Inclinometer and Accelerometer |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright 2010 Analog Devices Inc. |
---|
5 | | - * |
---|
6 | | - * Licensed under the GPL-2 or later. |
---|
7 | 6 | */ |
---|
8 | 7 | |
---|
9 | 8 | #include <linux/device.h> |
---|
.. | .. |
---|
71 | 70 | #define ADIS16201_DIAG_STAT_FLASH_UPT_FAIL_BIT 2 |
---|
72 | 71 | /* Power supply above 3.625 V */ |
---|
73 | 72 | #define ADIS16201_DIAG_STAT_POWER_HIGH_BIT 1 |
---|
74 | | -/* Power supply below 3.15 V */ |
---|
| 73 | +/* Power supply below 2.975 V */ |
---|
75 | 74 | #define ADIS16201_DIAG_STAT_POWER_LOW_BIT 0 |
---|
76 | 75 | |
---|
77 | 76 | /* System Command Register Definition */ |
---|
.. | .. |
---|
231 | 230 | [ADIS16201_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure", |
---|
232 | 231 | [ADIS16201_DIAG_STAT_FLASH_UPT_FAIL_BIT] = "Flash update failed", |
---|
233 | 232 | [ADIS16201_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 3.625V", |
---|
234 | | - [ADIS16201_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 3.15V", |
---|
| 233 | + [ADIS16201_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 2.975V", |
---|
| 234 | +}; |
---|
| 235 | + |
---|
| 236 | +static const struct adis_timeout adis16201_timeouts = { |
---|
| 237 | + .reset_ms = ADIS16201_STARTUP_DELAY_MS, |
---|
| 238 | + .sw_reset_ms = ADIS16201_STARTUP_DELAY_MS, |
---|
| 239 | + .self_test_ms = ADIS16201_STARTUP_DELAY_MS, |
---|
235 | 240 | }; |
---|
236 | 241 | |
---|
237 | 242 | static const struct adis_data adis16201_data = { |
---|
.. | .. |
---|
241 | 246 | .diag_stat_reg = ADIS16201_DIAG_STAT_REG, |
---|
242 | 247 | |
---|
243 | 248 | .self_test_mask = ADIS16201_MSC_CTRL_SELF_TEST_EN, |
---|
| 249 | + .self_test_reg = ADIS16201_MSC_CTRL_REG, |
---|
244 | 250 | .self_test_no_autoclear = true, |
---|
245 | | - .startup_delay = ADIS16201_STARTUP_DELAY_MS, |
---|
| 251 | + .timeouts = &adis16201_timeouts, |
---|
246 | 252 | |
---|
247 | 253 | .status_error_msgs = adis16201_status_error_msgs, |
---|
248 | 254 | .status_error_mask = BIT(ADIS16201_DIAG_STAT_SPI_FAIL_BIT) | |
---|
.. | .. |
---|
265 | 271 | spi_set_drvdata(spi, indio_dev); |
---|
266 | 272 | |
---|
267 | 273 | indio_dev->name = spi->dev.driver->name; |
---|
268 | | - indio_dev->dev.parent = &spi->dev; |
---|
269 | 274 | indio_dev->info = &adis16201_info; |
---|
270 | 275 | |
---|
271 | 276 | indio_dev->channels = adis16201_channels; |
---|
.. | .. |
---|
276 | 281 | if (ret) |
---|
277 | 282 | return ret; |
---|
278 | 283 | |
---|
279 | | - ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL); |
---|
| 284 | + ret = devm_adis_setup_buffer_and_trigger(st, indio_dev, NULL); |
---|
280 | 285 | if (ret) |
---|
281 | 286 | return ret; |
---|
282 | 287 | |
---|
283 | 288 | ret = adis_initial_startup(st); |
---|
284 | 289 | if (ret) |
---|
285 | | - goto error_cleanup_buffer_trigger; |
---|
| 290 | + return ret; |
---|
286 | 291 | |
---|
287 | | - ret = iio_device_register(indio_dev); |
---|
288 | | - if (ret < 0) |
---|
289 | | - goto error_cleanup_buffer_trigger; |
---|
290 | | - |
---|
291 | | - return 0; |
---|
292 | | - |
---|
293 | | -error_cleanup_buffer_trigger: |
---|
294 | | - adis_cleanup_buffer_and_trigger(st, indio_dev); |
---|
295 | | - return ret; |
---|
296 | | -} |
---|
297 | | - |
---|
298 | | -static int adis16201_remove(struct spi_device *spi) |
---|
299 | | -{ |
---|
300 | | - struct iio_dev *indio_dev = spi_get_drvdata(spi); |
---|
301 | | - struct adis *st = iio_priv(indio_dev); |
---|
302 | | - |
---|
303 | | - iio_device_unregister(indio_dev); |
---|
304 | | - adis_cleanup_buffer_and_trigger(st, indio_dev); |
---|
305 | | - |
---|
306 | | - return 0; |
---|
| 292 | + return devm_iio_device_register(&spi->dev, indio_dev); |
---|
307 | 293 | } |
---|
308 | 294 | |
---|
309 | 295 | static struct spi_driver adis16201_driver = { |
---|
.. | .. |
---|
311 | 297 | .name = "adis16201", |
---|
312 | 298 | }, |
---|
313 | 299 | .probe = adis16201_probe, |
---|
314 | | - .remove = adis16201_remove, |
---|
315 | 300 | }; |
---|
316 | 301 | module_spi_driver(adis16201_driver); |
---|
317 | 302 | |
---|
.. | .. |
---|
319 | 304 | MODULE_DESCRIPTION("Analog Devices ADIS16201 Dual-Axis Digital Inclinometer and Accelerometer"); |
---|
320 | 305 | MODULE_LICENSE("GPL v2"); |
---|
321 | 306 | MODULE_ALIAS("spi:adis16201"); |
---|
| 307 | +MODULE_IMPORT_NS(IIO_ADISLIB); |
---|