.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * AD7266/65 SPI ADC driver |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright 2012 Analog Devices Inc. |
---|
5 | | - * |
---|
6 | | - * Licensed under the GPL-2. |
---|
7 | 6 | */ |
---|
8 | 7 | |
---|
9 | 8 | #include <linux/device.h> |
---|
.. | .. |
---|
12 | 11 | #include <linux/spi/spi.h> |
---|
13 | 12 | #include <linux/regulator/consumer.h> |
---|
14 | 13 | #include <linux/err.h> |
---|
15 | | -#include <linux/gpio.h> |
---|
| 14 | +#include <linux/gpio/consumer.h> |
---|
16 | 15 | #include <linux/module.h> |
---|
17 | 16 | |
---|
18 | 17 | #include <linux/interrupt.h> |
---|
.. | .. |
---|
35 | 34 | enum ad7266_range range; |
---|
36 | 35 | enum ad7266_mode mode; |
---|
37 | 36 | bool fixed_addr; |
---|
38 | | - struct gpio gpios[3]; |
---|
| 37 | + struct gpio_desc *gpios[3]; |
---|
39 | 38 | |
---|
40 | 39 | /* |
---|
41 | 40 | * DMA (thus cache coherency maintenance) requires the |
---|
.. | .. |
---|
75 | 74 | |
---|
76 | 75 | static const struct iio_buffer_setup_ops iio_triggered_buffer_setup_ops = { |
---|
77 | 76 | .preenable = &ad7266_preenable, |
---|
78 | | - .postenable = &iio_triggered_buffer_postenable, |
---|
79 | | - .predisable = &iio_triggered_buffer_predisable, |
---|
80 | 77 | .postdisable = &ad7266_postdisable, |
---|
81 | 78 | }; |
---|
82 | 79 | |
---|
.. | .. |
---|
118 | 115 | } |
---|
119 | 116 | |
---|
120 | 117 | for (i = 0; i < 3; ++i) |
---|
121 | | - gpio_set_value(st->gpios[i].gpio, (bool)(nr & BIT(i))); |
---|
| 118 | + gpiod_set_value(st->gpios[i], (bool)(nr & BIT(i))); |
---|
122 | 119 | } |
---|
123 | 120 | |
---|
124 | 121 | static int ad7266_update_scan_mode(struct iio_dev *indio_dev, |
---|
.. | .. |
---|
377 | 374 | } |
---|
378 | 375 | |
---|
379 | 376 | static const char * const ad7266_gpio_labels[] = { |
---|
380 | | - "AD0", "AD1", "AD2", |
---|
| 377 | + "ad0", "ad1", "ad2", |
---|
381 | 378 | }; |
---|
382 | 379 | |
---|
383 | 380 | static int ad7266_probe(struct spi_device *spi) |
---|
.. | .. |
---|
420 | 417 | |
---|
421 | 418 | if (!st->fixed_addr) { |
---|
422 | 419 | for (i = 0; i < ARRAY_SIZE(st->gpios); ++i) { |
---|
423 | | - st->gpios[i].gpio = pdata->addr_gpios[i]; |
---|
424 | | - st->gpios[i].flags = GPIOF_OUT_INIT_LOW; |
---|
425 | | - st->gpios[i].label = ad7266_gpio_labels[i]; |
---|
| 420 | + st->gpios[i] = devm_gpiod_get(&spi->dev, |
---|
| 421 | + ad7266_gpio_labels[i], |
---|
| 422 | + GPIOD_OUT_LOW); |
---|
| 423 | + if (IS_ERR(st->gpios[i])) { |
---|
| 424 | + ret = PTR_ERR(st->gpios[i]); |
---|
| 425 | + goto error_disable_reg; |
---|
| 426 | + } |
---|
426 | 427 | } |
---|
427 | | - ret = gpio_request_array(st->gpios, |
---|
428 | | - ARRAY_SIZE(st->gpios)); |
---|
429 | | - if (ret) |
---|
430 | | - goto error_disable_reg; |
---|
431 | 428 | } |
---|
432 | 429 | } else { |
---|
433 | 430 | st->fixed_addr = true; |
---|
.. | .. |
---|
438 | 435 | spi_set_drvdata(spi, indio_dev); |
---|
439 | 436 | st->spi = spi; |
---|
440 | 437 | |
---|
441 | | - indio_dev->dev.parent = &spi->dev; |
---|
442 | | - indio_dev->dev.of_node = spi->dev.of_node; |
---|
443 | 438 | indio_dev->name = spi_get_device_id(spi)->name; |
---|
444 | 439 | indio_dev->modes = INDIO_DIRECT_MODE; |
---|
445 | 440 | indio_dev->info = &ad7266_info; |
---|
.. | .. |
---|
466 | 461 | ret = iio_triggered_buffer_setup(indio_dev, &iio_pollfunc_store_time, |
---|
467 | 462 | &ad7266_trigger_handler, &iio_triggered_buffer_setup_ops); |
---|
468 | 463 | if (ret) |
---|
469 | | - goto error_free_gpios; |
---|
| 464 | + goto error_disable_reg; |
---|
470 | 465 | |
---|
471 | 466 | ret = iio_device_register(indio_dev); |
---|
472 | 467 | if (ret) |
---|
.. | .. |
---|
476 | 471 | |
---|
477 | 472 | error_buffer_cleanup: |
---|
478 | 473 | iio_triggered_buffer_cleanup(indio_dev); |
---|
479 | | -error_free_gpios: |
---|
480 | | - if (!st->fixed_addr) |
---|
481 | | - gpio_free_array(st->gpios, ARRAY_SIZE(st->gpios)); |
---|
482 | 474 | error_disable_reg: |
---|
483 | 475 | if (!IS_ERR(st->reg)) |
---|
484 | 476 | regulator_disable(st->reg); |
---|
.. | .. |
---|
493 | 485 | |
---|
494 | 486 | iio_device_unregister(indio_dev); |
---|
495 | 487 | iio_triggered_buffer_cleanup(indio_dev); |
---|
496 | | - if (!st->fixed_addr) |
---|
497 | | - gpio_free_array(st->gpios, ARRAY_SIZE(st->gpios)); |
---|
498 | 488 | if (!IS_ERR(st->reg)) |
---|
499 | 489 | regulator_disable(st->reg); |
---|
500 | 490 | |
---|