linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] NFC: pn544: Request GPIOs with proper connection IDs
@ 2017-03-07 10:15 Andy Shevchenko
  2017-03-07 10:15 ` [PATCH v2 2/2] NFC: pn544: Add GPIO ACPI mapping table Andy Shevchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Andy Shevchenko @ 2017-03-07 10:15 UTC (permalink / raw)
  To: Lauro Ramos Venancio, Aloisio Almeida Jr, Samuel Ortiz,
	linux-wireless, Mika Westerberg
  Cc: Andy Shevchenko

Since ACPI does support _DSD we might have a firmware that provides a
GPIO mapping in DSDT. When GPIO is requested the core will check for
property with given name. That's why we have to follow the standard
names which are already in use in DT case.

Request GPIOs with proper connection IDs, i.e. use same names as used
for DT case.

In the future ACPI and DT cases might be unified.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/nfc/pn544/i2c.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index f837c39a8017..2df3176205c4 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -881,8 +881,7 @@ static int pn544_hci_i2c_acpi_request_resources(struct i2c_client *client)
 	struct device *dev = &client->dev;
 
 	/* Get EN GPIO from ACPI */
-	gpiod_en = devm_gpiod_get_index(dev, PN544_GPIO_NAME_EN, 1,
-					GPIOD_OUT_LOW);
+	gpiod_en = devm_gpiod_get_index(dev, "enable", 1, GPIOD_OUT_LOW);
 	if (IS_ERR(gpiod_en)) {
 		nfc_err(dev, "Unable to get EN GPIO\n");
 		return -ENODEV;
@@ -891,8 +890,7 @@ static int pn544_hci_i2c_acpi_request_resources(struct i2c_client *client)
 	phy->gpio_en = desc_to_gpio(gpiod_en);
 
 	/* Get FW GPIO from ACPI */
-	gpiod_fw = devm_gpiod_get_index(dev, PN544_GPIO_NAME_FW, 2,
-					GPIOD_OUT_LOW);
+	gpiod_fw = devm_gpiod_get_index(dev, "firmware", 2, GPIOD_OUT_LOW);
 	if (IS_ERR(gpiod_fw)) {
 		nfc_err(dev, "Unable to get FW GPIO\n");
 		return -ENODEV;
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v2 2/2] NFC: pn544: Add GPIO ACPI mapping table
  2017-03-07 10:15 [PATCH v2 1/2] NFC: pn544: Request GPIOs with proper connection IDs Andy Shevchenko
@ 2017-03-07 10:15 ` Andy Shevchenko
  2017-03-10 17:14   ` Andy Shevchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Andy Shevchenko @ 2017-03-07 10:15 UTC (permalink / raw)
  To: Lauro Ramos Venancio, Aloisio Almeida Jr, Samuel Ortiz,
	linux-wireless, Mika Westerberg
  Cc: Andy Shevchenko

In order to make GPIO ACPI library stricter prepare users of
gpiod_get_index() to correctly behave when there no mapping is
provided by firmware.

Here we add explicit mapping between _CRS GpioIo() resources and
their names used in the driver.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
- assign mapping table only in ACPI case
 drivers/nfc/pn544/i2c.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index 2df3176205c4..bfe099f3d347 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -874,11 +874,25 @@ static void pn544_hci_i2c_fw_work(struct work_struct *work)
 	}
 }
 
+static const struct acpi_gpio_params enable_gpios = { 1, 0, false };
+static const struct acpi_gpio_params firmware_gpios = { 2, 0, false };
+
+static const struct acpi_gpio_mapping acpi_pn544_gpios[] = {
+	{ "enable-gpios", &enable_gpios, 1 },
+	{ "firmware-gpios", &firmware_gpios, 1 },
+	{ },
+};
+
 static int pn544_hci_i2c_acpi_request_resources(struct i2c_client *client)
 {
 	struct pn544_i2c_phy *phy = i2c_get_clientdata(client);
 	struct gpio_desc *gpiod_en, *gpiod_fw;
 	struct device *dev = &client->dev;
+	int ret;
+
+	ret = acpi_dev_add_driver_gpios(ACPI_COMPANION(dev), acpi_pn544_gpios);
+	if (ret)
+		return ret;
 
 	/* Get EN GPIO from ACPI */
 	gpiod_en = devm_gpiod_get_index(dev, "enable", 1, GPIOD_OUT_LOW);
@@ -1092,6 +1106,7 @@ static int pn544_hci_i2c_remove(struct i2c_client *client)
 		pdata->free_resources();
 	}
 
+	acpi_dev_remove_driver_gpios(ACPI_COMPANION(&client->dev));
 	return 0;
 }
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2 2/2] NFC: pn544: Add GPIO ACPI mapping table
  2017-03-07 10:15 ` [PATCH v2 2/2] NFC: pn544: Add GPIO ACPI mapping table Andy Shevchenko
@ 2017-03-10 17:14   ` Andy Shevchenko
  0 siblings, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2017-03-10 17:14 UTC (permalink / raw)
  To: Lauro Ramos Venancio, Aloisio Almeida Jr, Samuel Ortiz,
	linux-wireless, Mika Westerberg

On Tue, 2017-03-07 at 12:15 +0200, Andy Shevchenko wrote:
> In order to make GPIO ACPI library stricter prepare users of
> gpiod_get_index() to correctly behave when there no mapping is
> provided by firmware.
> 
> Here we add explicit mapping between _CRS GpioIo() resources and
> their names used in the driver.

While the first patch is correct, this one doesn't.

It missed index conversion when GPIO ACPI mapping table is present.

Please ignore both, I think I will make it similar to what I did for
st21nfca.

> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> - assign mapping table only in ACPI case
>  drivers/nfc/pn544/i2c.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
> index 2df3176205c4..bfe099f3d347 100644
> --- a/drivers/nfc/pn544/i2c.c
> +++ b/drivers/nfc/pn544/i2c.c
> @@ -874,11 +874,25 @@ static void pn544_hci_i2c_fw_work(struct
> work_struct *work)
>  	}
>  }
>  
> +static const struct acpi_gpio_params enable_gpios = { 1, 0, false };
> +static const struct acpi_gpio_params firmware_gpios = { 2, 0, false
> };
> +
> +static const struct acpi_gpio_mapping acpi_pn544_gpios[] = {
> +	{ "enable-gpios", &enable_gpios, 1 },
> +	{ "firmware-gpios", &firmware_gpios, 1 },
> +	{ },
> +};
> +
>  static int pn544_hci_i2c_acpi_request_resources(struct i2c_client
> *client)
>  {
>  	struct pn544_i2c_phy *phy = i2c_get_clientdata(client);
>  	struct gpio_desc *gpiod_en, *gpiod_fw;
>  	struct device *dev = &client->dev;
> +	int ret;
> +
> +	ret = acpi_dev_add_driver_gpios(ACPI_COMPANION(dev),
> acpi_pn544_gpios);
> +	if (ret)
> +		return ret;
>  
>  	/* Get EN GPIO from ACPI */
>  	gpiod_en = devm_gpiod_get_index(dev, "enable", 1,
> GPIOD_OUT_LOW);
> @@ -1092,6 +1106,7 @@ static int pn544_hci_i2c_remove(struct
> i2c_client *client)
>  		pdata->free_resources();
>  	}
>  
> +	acpi_dev_remove_driver_gpios(ACPI_COMPANION(&client->dev));
>  	return 0;
>  }
>  

-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-03-10 17:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-07 10:15 [PATCH v2 1/2] NFC: pn544: Request GPIOs with proper connection IDs Andy Shevchenko
2017-03-07 10:15 ` [PATCH v2 2/2] NFC: pn544: Add GPIO ACPI mapping table Andy Shevchenko
2017-03-10 17:14   ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).