Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d34e48d6 authored by Mark Greer's avatar Mark Greer Committed by Samuel Ortiz
Browse files

NFC: trf7970a: Convert to descriptor based GPIO interface



The trf7970a driver uses the deprecated integer-based GPIO consumer
interface so convert it to use the new descriptor-based GPIO
consumer interface.

Signed-off-by: default avatarMark Greer <mgreer@animalcreek.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 1877d2c5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ menu "Near Field Communication (NFC) devices"

config NFC_TRF7970A
	tristate "Texas Instruments TRF7970a NFC driver"
	depends on SPI && NFC_DIGITAL
	depends on SPI && NFC_DIGITAL && GPIOLIB
	help
	  This option enables the NFC driver for Texas Instruments' TRF7970a
	  device. Such device supports 5 different protocols: ISO14443A,
+25 −36
Original line number Diff line number Diff line
@@ -20,9 +20,8 @@
#include <linux/nfc.h>
#include <linux/skbuff.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/spi/spi.h>
#include <linux/regulator/consumer.h>

@@ -452,8 +451,8 @@ struct trf7970a {
	u8				tx_cmd;
	bool				issue_eof;
	bool				adjust_resp_len;
	int				en2_gpio;
	int				en_gpio;
	struct gpio_desc		*en_gpiod;
	struct gpio_desc		*en2_gpiod;
	struct mutex			lock;
	unsigned int			timeout;
	bool				ignore_timeout;
@@ -1908,14 +1907,13 @@ static int trf7970a_power_up(struct trf7970a *trf)

	usleep_range(5000, 6000);

	if (!(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW)) {
		if (gpio_is_valid(trf->en2_gpio)) {
			gpio_set_value(trf->en2_gpio, 1);
	if (trf->en2_gpiod &&
	    !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW)) {
		gpiod_set_value_cansleep(trf->en2_gpiod, 1);
		usleep_range(1000, 2000);
	}
	}

	gpio_set_value(trf->en_gpio, 1);
	gpiod_set_value_cansleep(trf->en_gpiod, 1);

	usleep_range(20000, 21000);

@@ -1939,11 +1937,11 @@ static int trf7970a_power_down(struct trf7970a *trf)
		return -EBUSY;
	}

	gpio_set_value(trf->en_gpio, 0);
	gpiod_set_value_cansleep(trf->en_gpiod, 0);

	if (!(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW))
		if (gpio_is_valid(trf->en2_gpio))
			gpio_set_value(trf->en2_gpio, 0);
	if (trf->en2_gpiod &&
	    !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW))
		gpiod_set_value_cansleep(trf->en2_gpiod, 0);

	ret = regulator_disable(trf->regulator);
	if (ret)
@@ -2041,31 +2039,22 @@ static int trf7970a_probe(struct spi_device *spi)
		trf->quirks |= TRF7970A_QUIRK_IRQ_STATUS_READ;

	/* There are two enable pins - only EN must be present in the DT */
	trf->en_gpio = of_get_named_gpio(np, "ti,enable-gpios", 0);
	if (!gpio_is_valid(trf->en_gpio)) {
	trf->en_gpiod = devm_gpiod_get_index(trf->dev, "ti,enable", 0,
					     GPIOD_OUT_LOW);
	if (IS_ERR(trf->en_gpiod)) {
		dev_err(trf->dev, "No EN GPIO property\n");
		return trf->en_gpio;
	}

	ret = devm_gpio_request_one(trf->dev, trf->en_gpio,
			GPIOF_DIR_OUT | GPIOF_INIT_LOW, "trf7970a EN");
	if (ret) {
		dev_err(trf->dev, "Can't request EN GPIO: %d\n", ret);
		return ret;
		return PTR_ERR(trf->en_gpiod);
	}

	trf->en2_gpio = of_get_named_gpio(np, "ti,enable-gpios", 1);
	if (!gpio_is_valid(trf->en2_gpio)) {
	trf->en2_gpiod = devm_gpiod_get_index_optional(trf->dev, "ti,enable", 1,
						       GPIOD_OUT_LOW);
	if (!trf->en2_gpiod) {
		dev_info(trf->dev, "No EN2 GPIO property\n");
	} else {
		ret = devm_gpio_request_one(trf->dev, trf->en2_gpio,
				GPIOF_DIR_OUT | GPIOF_INIT_LOW, "trf7970a EN2");
		if (ret) {
			dev_err(trf->dev, "Can't request EN2 GPIO: %d\n", ret);
			return ret;
		}

		if (of_property_read_bool(np, "en2-rf-quirk"))
	} else if (IS_ERR(trf->en2_gpiod)) {
		dev_err(trf->dev, "Error getting EN2 GPIO property: %ld\n",
			PTR_ERR(trf->en2_gpiod));
		return PTR_ERR(trf->en2_gpiod);
	} else if (of_property_read_bool(np, "en2-rf-quirk")) {
		trf->quirks |= TRF7970A_QUIRK_EN2_MUST_STAY_LOW;
	}