Oliver Neukum a3f193
From 43201767b44cbd873c60dbd2acd370147588cb18 Mon Sep 17 00:00:00 2001
Oliver Neukum a3f193
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Oliver Neukum a3f193
Date: Mon, 29 Jul 2019 16:35:04 +0300
Oliver Neukum a3f193
Subject: [PATCH] NFC: nxp-nci: Convert to use GPIO descriptor
Oliver Neukum a3f193
Git-commit: 43201767b44cbd873c60dbd2acd370147588cb18
Oliver Neukum a3f193
References: bsc#1185589
Oliver Neukum a3f193
Patch-mainline: v5.4-rc1
Oliver Neukum a3f193
Oliver Neukum a3f193
Since we got rid of platform data, the driver may use
Oliver Neukum a3f193
GPIO descriptor directly.
Oliver Neukum a3f193
Oliver Neukum a3f193
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Oliver Neukum a3f193
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Oliver Neukum a3f193
Signed-off-by: David S. Miller <davem@davemloft.net>
Oliver Neukum a3f193
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Oliver Neukum a3f193
---
Oliver Neukum a3f193
 drivers/nfc/nxp-nci/core.c |  1 -
Oliver Neukum a3f193
 drivers/nfc/nxp-nci/i2c.c  | 60 ++++++++++----------------------------
Oliver Neukum a3f193
 2 files changed, 15 insertions(+), 46 deletions(-)
Oliver Neukum a3f193
Oliver Neukum a3f193
diff --git a/drivers/nfc/nxp-nci/core.c b/drivers/nfc/nxp-nci/core.c
Oliver Neukum a3f193
index aed18ca60170..a0ce95a287c5 100644
Oliver Neukum a3f193
--- a/drivers/nfc/nxp-nci/core.c
Oliver Neukum a3f193
+++ b/drivers/nfc/nxp-nci/core.c
Oliver Neukum a3f193
@@ -11,7 +11,6 @@
Oliver Neukum a3f193
  */
Oliver Neukum a3f193
 
Oliver Neukum a3f193
 #include <linux/delay.h>
Oliver Neukum a3f193
-#include <linux/gpio.h>
Oliver Neukum a3f193
 #include <linux/module.h>
Oliver Neukum a3f193
 #include <linux/nfc.h>
Oliver Neukum a3f193
 
Oliver Neukum a3f193
diff --git a/drivers/nfc/nxp-nci/i2c.c b/drivers/nfc/nxp-nci/i2c.c
Oliver Neukum a3f193
index 47b3b7e612e6..713c267acf88 100644
Oliver Neukum a3f193
--- a/drivers/nfc/nxp-nci/i2c.c
Oliver Neukum a3f193
+++ b/drivers/nfc/nxp-nci/i2c.c
Oliver Neukum a3f193
@@ -21,8 +21,6 @@
Oliver Neukum a3f193
 #include <linux/module.h>
Oliver Neukum a3f193
 #include <linux/nfc.h>
Oliver Neukum a3f193
 #include <linux/gpio/consumer.h>
Oliver Neukum a3f193
-#include <linux/of_gpio.h>
Oliver Neukum a3f193
-#include <linux/of_irq.h>
Oliver Neukum a3f193
 #include <asm/unaligned.h>
Oliver Neukum a3f193
 
Oliver Neukum a3f193
 #include <net/nfc/nfc.h>
Oliver Neukum a3f193
@@ -37,8 +35,8 @@ struct nxp_nci_i2c_phy {
Oliver Neukum a3f193
 	struct i2c_client *i2c_dev;
Oliver Neukum a3f193
 	struct nci_dev *ndev;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	unsigned int gpio_en;
Oliver Neukum a3f193
-	unsigned int gpio_fw;
Oliver Neukum a3f193
+	struct gpio_desc *gpiod_en;
Oliver Neukum a3f193
+	struct gpio_desc *gpiod_fw;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
 	int hard_fault; /*
Oliver Neukum a3f193
 			 * < 0 if hardware error occurred (e.g. i2c err)
Oliver Neukum a3f193
@@ -51,8 +49,8 @@ static int nxp_nci_i2c_set_mode(void *phy_id,
Oliver Neukum a3f193
 {
Oliver Neukum a3f193
 	struct nxp_nci_i2c_phy *phy = (struct nxp_nci_i2c_phy *) phy_id;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	gpio_set_value(phy->gpio_fw, (mode == NXP_NCI_MODE_FW) ? 1 : 0);
Oliver Neukum a3f193
-	gpio_set_value(phy->gpio_en, (mode != NXP_NCI_MODE_COLD) ? 1 : 0);
Oliver Neukum a3f193
+	gpiod_set_value(phy->gpiod_fw, (mode == NXP_NCI_MODE_FW) ? 1 : 0);
Oliver Neukum a3f193
+	gpiod_set_value(phy->gpiod_en, (mode != NXP_NCI_MODE_COLD) ? 1 : 0);
Oliver Neukum a3f193
 	usleep_range(10000, 15000);
Oliver Neukum a3f193
 
Oliver Neukum a3f193
 	if (mode == NXP_NCI_MODE_COLD)
Oliver Neukum a3f193
@@ -252,30 +250,18 @@ static irqreturn_t nxp_nci_i2c_irq_thread_fn(int irq, void *phy_id)
Oliver Neukum a3f193
 static int nxp_nci_i2c_parse_devtree(struct i2c_client *client)
Oliver Neukum a3f193
 {
Oliver Neukum a3f193
 	struct nxp_nci_i2c_phy *phy = i2c_get_clientdata(client);
Oliver Neukum a3f193
-	struct device_node *pp;
Oliver Neukum a3f193
-	int r;
Oliver Neukum a3f193
-
Oliver Neukum a3f193
-	pp = client->dev.of_node;
Oliver Neukum a3f193
-	if (!pp)
Oliver Neukum a3f193
-		return -ENODEV;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	r = of_get_named_gpio(pp, "enable-gpios", 0);
Oliver Neukum a3f193
-	if (r == -EPROBE_DEFER)
Oliver Neukum a3f193
-		r = of_get_named_gpio(pp, "enable-gpios", 0);
Oliver Neukum a3f193
-	if (r < 0) {
Oliver Neukum a3f193
-		nfc_err(&client->dev, "Failed to get EN gpio, error: %d\n", r);
Oliver Neukum a3f193
-		return r;
Oliver Neukum a3f193
+	phy->gpiod_en = devm_gpiod_get(&client->dev, "enable", GPIOD_OUT_LOW);
Oliver Neukum a3f193
+	if (IS_ERR(phy->gpiod_en)) {
Oliver Neukum a3f193
+		nfc_err(&client->dev, "Failed to get EN gpio\n");
Oliver Neukum a3f193
+		return PTR_ERR(phy->gpiod_en);
Oliver Neukum a3f193
 	}
Oliver Neukum a3f193
-	phy->gpio_en = r;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	r = of_get_named_gpio(pp, "firmware-gpios", 0);
Oliver Neukum a3f193
-	if (r == -EPROBE_DEFER)
Oliver Neukum a3f193
-		r = of_get_named_gpio(pp, "firmware-gpios", 0);
Oliver Neukum a3f193
-	if (r < 0) {
Oliver Neukum a3f193
-		nfc_err(&client->dev, "Failed to get FW gpio, error: %d\n", r);
Oliver Neukum a3f193
-		return r;
Oliver Neukum a3f193
+	phy->gpiod_fw = devm_gpiod_get(&client->dev, "firmware", GPIOD_OUT_LOW);
Oliver Neukum a3f193
+	if (IS_ERR(phy->gpiod_fw)) {
Oliver Neukum a3f193
+		nfc_err(&client->dev, "Failed to get FW gpio\n");
Oliver Neukum a3f193
+		return PTR_ERR(phy->gpiod_fw);
Oliver Neukum a3f193
 	}
Oliver Neukum a3f193
-	phy->gpio_fw = r;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
 	return 0;
Oliver Neukum a3f193
 }
Oliver Neukum a3f193
@@ -283,19 +269,15 @@ static int nxp_nci_i2c_parse_devtree(struct i2c_client *client)
Oliver Neukum a3f193
 static int nxp_nci_i2c_acpi_config(struct nxp_nci_i2c_phy *phy)
Oliver Neukum a3f193
 {
Oliver Neukum a3f193
 	struct i2c_client *client = phy->i2c_dev;
Oliver Neukum a3f193
-	struct gpio_desc *gpiod_en, *gpiod_fw;
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	gpiod_en = devm_gpiod_get_index(&client->dev, NULL, 2, GPIOD_OUT_LOW);
Oliver Neukum a3f193
-	gpiod_fw = devm_gpiod_get_index(&client->dev, NULL, 1, GPIOD_OUT_LOW);
Oliver Neukum a3f193
+	phy->gpiod_en = devm_gpiod_get_index(&client->dev, NULL, 2, GPIOD_OUT_LOW);
Oliver Neukum a3f193
+	phy->gpiod_fw = devm_gpiod_get_index(&client->dev, NULL, 1, GPIOD_OUT_LOW);
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	if (IS_ERR(gpiod_en) || IS_ERR(gpiod_fw)) {
Oliver Neukum a3f193
+	if (IS_ERR(phy->gpiod_en) || IS_ERR(phy->gpiod_fw)) {
Oliver Neukum a3f193
 		nfc_err(&client->dev, "No GPIOs\n");
Oliver Neukum a3f193
 		return -EINVAL;
Oliver Neukum a3f193
 	}
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	phy->gpio_en = desc_to_gpio(gpiod_en);
Oliver Neukum a3f193
-	phy->gpio_fw = desc_to_gpio(gpiod_fw);
Oliver Neukum a3f193
-
Oliver Neukum a3f193
 	return 0;
Oliver Neukum a3f193
 }
Oliver Neukum a3f193
 
Oliver Neukum a3f193
@@ -331,24 +313,12 @@ static int nxp_nci_i2c_probe(struct i2c_client *client,
Oliver Neukum a3f193
 		r = nxp_nci_i2c_acpi_config(phy);
Oliver Neukum a3f193
 		if (r < 0)
Oliver Neukum a3f193
 			goto probe_exit;
Oliver Neukum a3f193
-		goto nci_probe;
Oliver Neukum a3f193
 	} else {
Oliver Neukum a3f193
 		nfc_err(&client->dev, "No platform data\n");
Oliver Neukum a3f193
 		r = -EINVAL;
Oliver Neukum a3f193
 		goto probe_exit;
Oliver Neukum a3f193
 	}
Oliver Neukum a3f193
 
Oliver Neukum a3f193
-	r = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_en,
Oliver Neukum a3f193
-				  GPIOF_OUT_INIT_LOW, "nxp_nci_en");
Oliver Neukum a3f193
-	if (r < 0)
Oliver Neukum a3f193
-		goto probe_exit;
Oliver Neukum a3f193
-
Oliver Neukum a3f193
-	r = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_fw,
Oliver Neukum a3f193
-				  GPIOF_OUT_INIT_LOW, "nxp_nci_fw");
Oliver Neukum a3f193
-	if (r < 0)
Oliver Neukum a3f193
-		goto probe_exit;
Oliver Neukum a3f193
-
Oliver Neukum a3f193
-nci_probe:
Oliver Neukum a3f193
 	r = nxp_nci_probe(phy, &client->dev, &i2c_phy_ops,
Oliver Neukum a3f193
 			  NXP_NCI_I2C_MAX_PAYLOAD, &phy->ndev);
Oliver Neukum a3f193
 	if (r < 0)
Oliver Neukum a3f193
-- 
Oliver Neukum a3f193
2.26.2
Oliver Neukum a3f193