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

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
......@@ -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,
......
......@@ -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);
usleep_range(1000, 2000);
}
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,32 +2039,23 @@ 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"))
trf->quirks |= TRF7970A_QUIRK_EN2_MUST_STAY_LOW;
} 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;
}
of_property_read_u32(np, "clock-frequency", &clk_freq);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment