| .. | .. |
|---|
| 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 | |
|---|