* [PATCH v2 2/5] NFC: pn544: Covert to use GPIO descriptor
2017-03-22 19:57 [PATCH v2 1/5] NFC: pn544: Get rid of platform data Andy Shevchenko
@ 2017-03-22 19:57 ` Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 3/5] NFC: pn544: Convert to use devm_request_threaded_irq() Andy Shevchenko
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2017-03-22 19:57 UTC (permalink / raw)
To: Lauro Ramos Venancio, Aloisio Almeida Jr, Samuel Ortiz,
linux-wireless, Mika Westerberg
Cc: Andy Shevchenko
Since we got rid of platform data, the driver may use
GPIO descriptor directly.
This change fixes a potential issue of double freeing GPIOs in ACPI
case by converting to devm_gpiod_get().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/nfc/pn544/i2c.c | 126 +++++++++++++-----------------------------------
1 file changed, 33 insertions(+), 93 deletions(-)
diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index 41e518ee148e..b4001306aff8 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -21,9 +21,6 @@
#include <linux/crc-ccitt.h>
#include <linux/module.h>
#include <linux/i2c.h>
-#include <linux/gpio.h>
-#include <linux/of_gpio.h>
-#include <linux/of_irq.h>
#include <linux/acpi.h>
#include <linux/miscdevice.h>
#include <linux/interrupt.h>
@@ -165,8 +162,9 @@ struct pn544_i2c_phy {
struct i2c_client *i2c_dev;
struct nfc_hci_dev *hdev;
- unsigned int gpio_en;
- unsigned int gpio_fw;
+ struct gpio_desc *gpiod_en;
+ struct gpio_desc *gpiod_fw;
+
unsigned int en_polarity;
u8 hw_variant;
@@ -208,19 +206,18 @@ static void pn544_hci_i2c_platform_init(struct pn544_i2c_phy *phy)
nfc_info(&phy->i2c_dev->dev, "Detecting nfc_en polarity\n");
/* Disable fw download */
- gpio_set_value_cansleep(phy->gpio_fw, 0);
+ gpiod_set_value_cansleep(phy->gpiod_fw, 0);
for (polarity = 0; polarity < 2; polarity++) {
phy->en_polarity = polarity;
retry = 3;
while (retry--) {
/* power off */
- gpio_set_value_cansleep(phy->gpio_en,
- !phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_en, !phy->en_polarity);
usleep_range(10000, 15000);
/* power on */
- gpio_set_value_cansleep(phy->gpio_en, phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_en, phy->en_polarity);
usleep_range(10000, 15000);
/* send reset */
@@ -239,14 +236,13 @@ static void pn544_hci_i2c_platform_init(struct pn544_i2c_phy *phy)
"Could not detect nfc_en polarity, fallback to active high\n");
out:
- gpio_set_value_cansleep(phy->gpio_en, !phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_en, !phy->en_polarity);
}
static void pn544_hci_i2c_enable_mode(struct pn544_i2c_phy *phy, int run_mode)
{
- gpio_set_value_cansleep(phy->gpio_fw,
- run_mode == PN544_FW_MODE ? 1 : 0);
- gpio_set_value_cansleep(phy->gpio_en, phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_fw, run_mode == PN544_FW_MODE ? 1 : 0);
+ gpiod_set_value_cansleep(phy->gpiod_en, phy->en_polarity);
usleep_range(10000, 15000);
phy->run_mode = run_mode;
@@ -269,14 +265,14 @@ static void pn544_hci_i2c_disable(void *phy_id)
{
struct pn544_i2c_phy *phy = phy_id;
- gpio_set_value_cansleep(phy->gpio_fw, 0);
- gpio_set_value_cansleep(phy->gpio_en, !phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_fw, 0);
+ gpiod_set_value_cansleep(phy->gpiod_en, !phy->en_polarity);
usleep_range(10000, 15000);
- gpio_set_value_cansleep(phy->gpio_en, phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_en, phy->en_polarity);
usleep_range(10000, 15000);
- gpio_set_value_cansleep(phy->gpio_en, !phy->en_polarity);
+ gpiod_set_value_cansleep(phy->gpiod_en, !phy->en_polarity);
usleep_range(10000, 15000);
phy->powered = 0;
@@ -877,96 +873,47 @@ static void pn544_hci_i2c_fw_work(struct work_struct *work)
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;
/* Get EN GPIO from ACPI */
- gpiod_en = devm_gpiod_get_index(dev, PN544_GPIO_NAME_EN, 1,
- GPIOD_OUT_LOW);
- if (IS_ERR(gpiod_en)) {
+ phy->gpiod_en = devm_gpiod_get_index(dev, PN544_GPIO_NAME_EN, 1,
+ GPIOD_OUT_LOW);
+ if (IS_ERR(phy->gpiod_en)) {
nfc_err(dev, "Unable to get EN GPIO\n");
- return -ENODEV;
+ return PTR_ERR(phy->gpiod_en);
}
- 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);
- if (IS_ERR(gpiod_fw)) {
+ phy->gpiod_fw = devm_gpiod_get_index(dev, PN544_GPIO_NAME_FW, 2,
+ GPIOD_OUT_LOW);
+ if (IS_ERR(phy->gpiod_fw)) {
nfc_err(dev, "Unable to get FW GPIO\n");
- return -ENODEV;
+ return PTR_ERR(phy->gpiod_fw);
}
- phy->gpio_fw = desc_to_gpio(gpiod_fw);
-
return 0;
}
static int pn544_hci_i2c_of_request_resources(struct i2c_client *client)
{
struct pn544_i2c_phy *phy = i2c_get_clientdata(client);
- struct device_node *pp;
- int ret;
-
- pp = client->dev.of_node;
- if (!pp) {
- ret = -ENODEV;
- goto err_dt;
- }
-
- /* Obtention of EN GPIO from device tree */
- ret = of_get_named_gpio(pp, "enable-gpios", 0);
- if (ret < 0) {
- if (ret != -EPROBE_DEFER)
- nfc_err(&client->dev,
- "Failed to get EN gpio, error: %d\n", ret);
- goto err_dt;
- }
- phy->gpio_en = ret;
-
- /* Configuration of EN GPIO */
- ret = gpio_request(phy->gpio_en, PN544_GPIO_NAME_EN);
- if (ret) {
- nfc_err(&client->dev, "Fail EN pin\n");
- goto err_dt;
- }
- ret = gpio_direction_output(phy->gpio_en, 0);
- if (ret) {
- nfc_err(&client->dev, "Fail EN pin direction\n");
- goto err_gpio_en;
- }
+ struct device *dev = &client->dev;
- /* Obtention of FW GPIO from device tree */
- ret = of_get_named_gpio(pp, "firmware-gpios", 0);
- if (ret < 0) {
- if (ret != -EPROBE_DEFER)
- nfc_err(&client->dev,
- "Failed to get FW gpio, error: %d\n", ret);
- goto err_gpio_en;
+ /* Obtaining EN GPIO from device tree */
+ phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
+ if (IS_ERR(phy->gpiod_en)) {
+ nfc_err(dev, "Failed to get EN gpio\n");
+ return PTR_ERR(phy->gpiod_en);
}
- phy->gpio_fw = ret;
- /* Configuration of FW GPIO */
- ret = gpio_request(phy->gpio_fw, PN544_GPIO_NAME_FW);
- if (ret) {
- nfc_err(&client->dev, "Fail FW pin\n");
- goto err_gpio_en;
- }
- ret = gpio_direction_output(phy->gpio_fw, 0);
- if (ret) {
- nfc_err(&client->dev, "Fail FW pin direction\n");
- goto err_gpio_fw;
+ /* Obtaining FW GPIO from device tree */
+ phy->gpiod_fw = devm_gpiod_get(dev, "firmware", GPIOD_OUT_LOW);
+ if (IS_ERR(phy->gpiod_fw)) {
+ nfc_err(dev, "Failed to get FW gpio\n");
+ return PTR_ERR(phy->gpiod_fw);
}
return 0;
-
-err_gpio_fw:
- gpio_free(phy->gpio_fw);
-err_gpio_en:
- gpio_free(phy->gpio_en);
-err_dt:
- return ret;
}
static int pn544_hci_i2c_probe(struct i2c_client *client,
@@ -1021,7 +968,7 @@ static int pn544_hci_i2c_probe(struct i2c_client *client,
PN544_HCI_I2C_DRIVER_NAME, phy);
if (r < 0) {
nfc_err(&client->dev, "Unable to register IRQ handler\n");
- goto err_rti;
+ return r;
}
r = pn544_hci_probe(phy, &i2c_phy_ops, LLC_SHDLC_NAME,
@@ -1036,10 +983,6 @@ static int pn544_hci_i2c_probe(struct i2c_client *client,
err_hci:
free_irq(client->irq, phy);
-err_rti:
- gpio_free(phy->gpio_en);
- gpio_free(phy->gpio_fw);
-
return r;
}
@@ -1060,9 +1003,6 @@ static int pn544_hci_i2c_remove(struct i2c_client *client)
free_irq(client->irq, phy);
- gpio_free(phy->gpio_en);
- gpio_free(phy->gpio_fw);
-
return 0;
}
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 3/5] NFC: pn544: Convert to use devm_request_threaded_irq()
2017-03-22 19:57 [PATCH v2 1/5] NFC: pn544: Get rid of platform data Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 2/5] NFC: pn544: Covert to use GPIO descriptor Andy Shevchenko
@ 2017-03-22 19:57 ` Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 4/5] NFC: pn544: Add GPIO ACPI mapping table Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 5/5] NFC: pn544: Get rid of code duplication in ->probe() Andy Shevchenko
3 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2017-03-22 19:57 UTC (permalink / raw)
To: Lauro Ramos Venancio, Aloisio Almeida Jr, Samuel Ortiz,
linux-wireless, Mika Westerberg
Cc: Andy Shevchenko
The error handling will be neat and short when using managed resources.
Convert the driver to use devm_request_threaded_irq().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/nfc/pn544/i2c.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index b4001306aff8..5e780e7a28e5 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -963,9 +963,10 @@ static int pn544_hci_i2c_probe(struct i2c_client *client,
pn544_hci_i2c_platform_init(phy);
- r = request_threaded_irq(client->irq, NULL, pn544_hci_i2c_irq_thread_fn,
- IRQF_TRIGGER_RISING | IRQF_ONESHOT,
- PN544_HCI_I2C_DRIVER_NAME, phy);
+ r = devm_request_threaded_irq(&client->dev, client->irq, NULL,
+ pn544_hci_i2c_irq_thread_fn,
+ IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+ PN544_HCI_I2C_DRIVER_NAME, phy);
if (r < 0) {
nfc_err(&client->dev, "Unable to register IRQ handler\n");
return r;
@@ -976,14 +977,9 @@ static int pn544_hci_i2c_probe(struct i2c_client *client,
PN544_HCI_I2C_LLC_MAX_PAYLOAD,
pn544_hci_i2c_fw_download, &phy->hdev);
if (r < 0)
- goto err_hci;
+ return r;
return 0;
-
-err_hci:
- free_irq(client->irq, phy);
-
- return r;
}
static int pn544_hci_i2c_remove(struct i2c_client *client)
@@ -1001,8 +997,6 @@ static int pn544_hci_i2c_remove(struct i2c_client *client)
if (phy->powered)
pn544_hci_i2c_disable(phy);
- free_irq(client->irq, phy);
-
return 0;
}
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 4/5] NFC: pn544: Add GPIO ACPI mapping table
2017-03-22 19:57 [PATCH v2 1/5] NFC: pn544: Get rid of platform data Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 2/5] NFC: pn544: Covert to use GPIO descriptor Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 3/5] NFC: pn544: Convert to use devm_request_threaded_irq() Andy Shevchenko
@ 2017-03-22 19:57 ` Andy Shevchenko
2017-03-22 19:57 ` [PATCH v2 5/5] NFC: pn544: Get rid of code duplication in ->probe() Andy Shevchenko
3 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2017-03-22 19:57 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>
---
drivers/nfc/pn544/i2c.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index 5e780e7a28e5..6226d220f1d0 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -870,22 +870,34 @@ 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 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 */
- phy->gpiod_en = devm_gpiod_get_index(dev, PN544_GPIO_NAME_EN, 1,
- GPIOD_OUT_LOW);
+ phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
if (IS_ERR(phy->gpiod_en)) {
nfc_err(dev, "Unable to get EN GPIO\n");
return PTR_ERR(phy->gpiod_en);
}
/* Get FW GPIO from ACPI */
- phy->gpiod_fw = devm_gpiod_get_index(dev, PN544_GPIO_NAME_FW, 2,
- GPIOD_OUT_LOW);
+ phy->gpiod_fw = devm_gpiod_get(dev, "firmware", GPIOD_OUT_LOW);
if (IS_ERR(phy->gpiod_fw)) {
nfc_err(dev, "Unable to get FW GPIO\n");
return PTR_ERR(phy->gpiod_fw);
@@ -997,6 +1009,7 @@ static int pn544_hci_i2c_remove(struct i2c_client *client)
if (phy->powered)
pn544_hci_i2c_disable(phy);
+ acpi_dev_remove_driver_gpios(ACPI_COMPANION(&client->dev));
return 0;
}
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 5/5] NFC: pn544: Get rid of code duplication in ->probe()
2017-03-22 19:57 [PATCH v2 1/5] NFC: pn544: Get rid of platform data Andy Shevchenko
` (2 preceding siblings ...)
2017-03-22 19:57 ` [PATCH v2 4/5] NFC: pn544: Add GPIO ACPI mapping table Andy Shevchenko
@ 2017-03-22 19:57 ` Andy Shevchenko
2017-03-24 15:50 ` kbuild test robot
3 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2017-03-22 19:57 UTC (permalink / raw)
To: Lauro Ramos Venancio, Aloisio Almeida Jr, Samuel Ortiz,
linux-wireless, Mika Westerberg
Cc: Andy Shevchenko
Since OF and ACPI case almost the same get rid of code duplication
by moving gpiod_get() calls directly to ->probe().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
The patch depends on early sent http://marc.info/?l=linux-wireless&m=149021085530803&w=2
drivers/nfc/pn544/i2c.c | 84 ++++++++++---------------------------------------
1 file changed, 17 insertions(+), 67 deletions(-)
diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index 6226d220f1d0..daa48531b7ae 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -879,58 +879,10 @@ static const struct acpi_gpio_mapping acpi_pn544_gpios[] = {
{ },
};
-static int pn544_hci_i2c_acpi_request_resources(struct i2c_client *client)
-{
- struct pn544_i2c_phy *phy = i2c_get_clientdata(client);
- 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 */
- phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
- if (IS_ERR(phy->gpiod_en)) {
- nfc_err(dev, "Unable to get EN GPIO\n");
- return PTR_ERR(phy->gpiod_en);
- }
-
- /* Get FW GPIO from ACPI */
- phy->gpiod_fw = devm_gpiod_get(dev, "firmware", GPIOD_OUT_LOW);
- if (IS_ERR(phy->gpiod_fw)) {
- nfc_err(dev, "Unable to get FW GPIO\n");
- return PTR_ERR(phy->gpiod_fw);
- }
-
- return 0;
-}
-
-static int pn544_hci_i2c_of_request_resources(struct i2c_client *client)
-{
- struct pn544_i2c_phy *phy = i2c_get_clientdata(client);
- struct device *dev = &client->dev;
-
- /* Obtaining EN GPIO from device tree */
- phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
- if (IS_ERR(phy->gpiod_en)) {
- nfc_err(dev, "Failed to get EN gpio\n");
- return PTR_ERR(phy->gpiod_en);
- }
-
- /* Obtaining FW GPIO from device tree */
- phy->gpiod_fw = devm_gpiod_get(dev, "firmware", GPIOD_OUT_LOW);
- if (IS_ERR(phy->gpiod_fw)) {
- nfc_err(dev, "Failed to get FW gpio\n");
- return PTR_ERR(phy->gpiod_fw);
- }
-
- return 0;
-}
-
static int pn544_hci_i2c_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
+ struct device *dev = &client->dev;
struct pn544_i2c_phy *phy;
int r = 0;
@@ -953,24 +905,22 @@ static int pn544_hci_i2c_probe(struct i2c_client *client,
phy->i2c_dev = client;
i2c_set_clientdata(client, phy);
- /* No platform data, using device tree. */
- if (client->dev.of_node) {
- r = pn544_hci_i2c_of_request_resources(client);
- if (r) {
- nfc_err(&client->dev, "No DT data\n");
- return r;
- }
- /* Using ACPI */
- } else if (ACPI_HANDLE(&client->dev)) {
- r = pn544_hci_i2c_acpi_request_resources(client);
- if (r) {
- nfc_err(&client->dev,
- "Cannot get ACPI data\n");
- return r;
- }
- } else {
- nfc_err(&client->dev, "No platform data\n");
- return -EINVAL;
+ r = acpi_dev_add_driver_gpios(ACPI_COMPANION(dev), acpi_pn544_gpios);
+ if (r)
+ nfc_dbg(dev, "Unable to add GPIO mapping table\n");
+
+ /* Get EN GPIO */
+ phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
+ if (IS_ERR(phy->gpiod_en)) {
+ nfc_err(dev, "Unable to get EN GPIO\n");
+ return PTR_ERR(phy->gpiod_en);
+ }
+
+ /* Get FW GPIO */
+ phy->gpiod_fw = devm_gpiod_get(dev, "firmware", GPIOD_OUT_LOW);
+ if (IS_ERR(phy->gpiod_fw)) {
+ nfc_err(dev, "Unable to get FW GPIO\n");
+ return PTR_ERR(phy->gpiod_fw);
}
pn544_hci_i2c_platform_init(phy);
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v2 5/5] NFC: pn544: Get rid of code duplication in ->probe()
2017-03-22 19:57 ` [PATCH v2 5/5] NFC: pn544: Get rid of code duplication in ->probe() Andy Shevchenko
@ 2017-03-24 15:50 ` kbuild test robot
2017-03-24 16:06 ` Andy Shevchenko
0 siblings, 1 reply; 7+ messages in thread
From: kbuild test robot @ 2017-03-24 15:50 UTC (permalink / raw)
To: Andy Shevchenko
Cc: kbuild-all, Lauro Ramos Venancio, Aloisio Almeida Jr,
Samuel Ortiz, linux-wireless, Mika Westerberg, Andy Shevchenko
[-- Attachment #1: Type: text/plain, Size: 5049 bytes --]
Hi Andy,
[auto build test ERROR on linus/master]
[also build test ERROR on v4.11-rc3 next-20170324]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Andy-Shevchenko/NFC-pn544-Get-rid-of-platform-data/20170324-232445
config: i386-randconfig-x078-201712 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
drivers/nfc/pn544/i2c.c: In function 'pn544_hci_i2c_probe':
>> drivers/nfc/pn544/i2c.c:910:3: error: implicit declaration of function 'nfc_dbg' [-Werror=implicit-function-declaration]
nfc_dbg(dev, "Unable to add GPIO mapping table\n");
^~~~~~~
Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
Cyclomatic Complexity 1 include/uapi/linux/swab.h:__swab16p
Cyclomatic Complexity 1 include/uapi/linux/swab.h:__swab32p
Cyclomatic Complexity 1 include/uapi/linux/byteorder/little_endian.h:__be32_to_cpup
Cyclomatic Complexity 1 include/uapi/linux/byteorder/little_endian.h:__be16_to_cpup
Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
Cyclomatic Complexity 1 include/linux/workqueue.h:__init_work
Cyclomatic Complexity 1 include/linux/device.h:dev_get_drvdata
Cyclomatic Complexity 1 include/linux/device.h:dev_set_drvdata
Cyclomatic Complexity 1 include/linux/i2c.h:i2c_get_clientdata
Cyclomatic Complexity 1 include/linux/i2c.h:i2c_set_clientdata
Cyclomatic Complexity 1 include/linux/i2c.h:i2c_get_functionality
Cyclomatic Complexity 1 include/linux/i2c.h:i2c_check_functionality
Cyclomatic Complexity 2 include/linux/acpi.h:acpi_dev_remove_driver_gpios
Cyclomatic Complexity 1 include/linux/unaligned/access_ok.h:get_unaligned_be16
Cyclomatic Complexity 1 include/linux/unaligned/access_ok.h:get_unaligned_be32
Cyclomatic Complexity 1 include/linux/unaligned/access_ok.h:put_unaligned_be16
Cyclomatic Complexity 3 include/linux/err.h:IS_ERR_OR_NULL
Cyclomatic Complexity 3 include/acpi/acpi_bus.h:is_acpi_device_node
Cyclomatic Complexity 2 include/acpi/acpi_bus.h:to_acpi_device_node
Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_disable
Cyclomatic Complexity 2 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_work_complete
Cyclomatic Complexity 4 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_remove
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_enable_mode
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_enable
Cyclomatic Complexity 1 include/linux/workqueue.h:queue_work
Cyclomatic Complexity 1 include/linux/workqueue.h:schedule_work
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_download
Cyclomatic Complexity 3 drivers/nfc/pn544/i2c.c:check_crc
Cyclomatic Complexity 3 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_check_cmd
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_add_len_crc
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_remove_len_crc
Cyclomatic Complexity 6 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_write
Cyclomatic Complexity 16 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_read_status
Cyclomatic Complexity 1 include/linux/skbuff.h:alloc_skb
Cyclomatic Complexity 8 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_read
Cyclomatic Complexity 11 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_irq_thread_fn
Cyclomatic Complexity 4 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_write_cmd
Cyclomatic Complexity 2 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_write_chunk
Cyclomatic Complexity 4 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_secure_write_frame_cmd
Cyclomatic Complexity 9 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_secure_write_frame
Cyclomatic Complexity 23 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_work
Cyclomatic Complexity 1 include/linux/device.h:devm_kzalloc
Cyclomatic Complexity 6 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_platform_init
Cyclomatic Complexity 10 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_probe
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_driver_init
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_driver_exit
Cyclomatic Complexity 1 drivers/nfc/pn544/i2c.c:_GLOBAL__sub_I_65535_0_i2c.c
cc1: some warnings being treated as errors
vim +/nfc_dbg +910 drivers/nfc/pn544/i2c.c
904
905 phy->i2c_dev = client;
906 i2c_set_clientdata(client, phy);
907
908 r = acpi_dev_add_driver_gpios(ACPI_COMPANION(dev), acpi_pn544_gpios);
909 if (r)
> 910 nfc_dbg(dev, "Unable to add GPIO mapping table\n");
911
912 /* Get EN GPIO */
913 phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26594 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v2 5/5] NFC: pn544: Get rid of code duplication in ->probe()
2017-03-24 15:50 ` kbuild test robot
@ 2017-03-24 16:06 ` Andy Shevchenko
0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2017-03-24 16:06 UTC (permalink / raw)
To: kbuild test robot
Cc: kbuild-all, Lauro Ramos Venancio, Aloisio Almeida Jr,
Samuel Ortiz, linux-wireless, Mika Westerberg
On Fri, 2017-03-24 at 23:50 +0800, kbuild test robot wrote:
> Hi Andy,
>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.11-rc3 next-20170324]
> [if your patch is applied to the wrong git tree, please drop us a note
> to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/Andy-Shevchenko/NFC-p
> n544-Get-rid-of-platform-data/20170324-232445
> config: i386-randconfig-x078-201712 (attached as .config)
> compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=i386
>
> All errors (new ones prefixed by >>):
>
> drivers/nfc/pn544/i2c.c: In function 'pn544_hci_i2c_probe':
> > > drivers/nfc/pn544/i2c.c:910:3: error: implicit declaration of
> > > function 'nfc_dbg' [-Werror=implicit-function-declaration]
>
> nfc_dbg(dev, "Unable to add GPIO mapping table\n");
> ^~~~~~~
Yes, there is a dependency patch. Since I have heard nothing from NFC
maintainers (subsystem seems abandoned) and taking into consideration
removal of such macro back in 2011 I'll probably replace nfc_* by dev_*
in the driver.
> Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
> Cyclomatic Complexity 1 include/uapi/linux/swab.h:__swab16p
> Cyclomatic Complexity 1 include/uapi/linux/swab.h:__swab32p
> Cyclomatic Complexity 1
> include/uapi/linux/byteorder/little_endian.h:__be32_to_cpup
> Cyclomatic Complexity 1
> include/uapi/linux/byteorder/little_endian.h:__be16_to_cpup
> Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
> Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
> Cyclomatic Complexity 1 include/linux/workqueue.h:__init_work
> Cyclomatic Complexity 1 include/linux/device.h:dev_get_drvdata
> Cyclomatic Complexity 1 include/linux/device.h:dev_set_drvdata
> Cyclomatic Complexity 1 include/linux/i2c.h:i2c_get_clientdata
> Cyclomatic Complexity 1 include/linux/i2c.h:i2c_set_clientdata
> Cyclomatic Complexity 1 include/linux/i2c.h:i2c_get_functionality
> Cyclomatic Complexity 1 include/linux/i2c.h:i2c_check_functionality
> Cyclomatic Complexity 2
> include/linux/acpi.h:acpi_dev_remove_driver_gpios
> Cyclomatic Complexity 1
> include/linux/unaligned/access_ok.h:get_unaligned_be16
> Cyclomatic Complexity 1
> include/linux/unaligned/access_ok.h:get_unaligned_be32
> Cyclomatic Complexity 1
> include/linux/unaligned/access_ok.h:put_unaligned_be16
> Cyclomatic Complexity 3 include/linux/err.h:IS_ERR_OR_NULL
> Cyclomatic Complexity 3 include/acpi/acpi_bus.h:is_acpi_device_node
> Cyclomatic Complexity 2 include/acpi/acpi_bus.h:to_acpi_device_node
> Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_disable
> Cyclomatic Complexity 2
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_work_complete
> Cyclomatic Complexity 4
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_remove
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_enable_mode
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_enable
> Cyclomatic Complexity 1 include/linux/workqueue.h:queue_work
> Cyclomatic Complexity 1 include/linux/workqueue.h:schedule_work
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_download
> Cyclomatic Complexity 3 drivers/nfc/pn544/i2c.c:check_crc
> Cyclomatic Complexity 3
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_check_cmd
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_add_len_crc
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_remove_len_crc
> Cyclomatic Complexity 6 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_write
> Cyclomatic Complexity 16
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_read_status
> Cyclomatic Complexity 1 include/linux/skbuff.h:alloc_skb
> Cyclomatic Complexity 8 drivers/nfc/pn544/i2c.c:pn544_hci_i2c_read
> Cyclomatic Complexity 11
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_irq_thread_fn
> Cyclomatic Complexity 4
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_write_cmd
> Cyclomatic Complexity 2
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_write_chunk
> Cyclomatic Complexity 4
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_secure_write_frame_cmd
> Cyclomatic Complexity 9
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_secure_write_frame
> Cyclomatic Complexity 23
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_fw_work
> Cyclomatic Complexity 1 include/linux/device.h:devm_kzalloc
> Cyclomatic Complexity 6
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_platform_init
> Cyclomatic Complexity 10
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_probe
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_driver_init
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:pn544_hci_i2c_driver_exit
> Cyclomatic Complexity 1
> drivers/nfc/pn544/i2c.c:_GLOBAL__sub_I_65535_0_i2c.c
> cc1: some warnings being treated as errors
>
> vim +/nfc_dbg +910 drivers/nfc/pn544/i2c.c
>
> 904
> 905 phy->i2c_dev = client;
> 906 i2c_set_clientdata(client, phy);
> 907
> 908 r =
> acpi_dev_add_driver_gpios(ACPI_COMPANION(dev), acpi_pn544_gpios);
> 909 if (r)
> > 910 nfc_dbg(dev, "Unable to add GPIO mapping
> table\n");
> 911
> 912 /* Get EN GPIO */
> 913 phy->gpiod_en = devm_gpiod_get(dev, "enable",
> GPIOD_OUT_LOW);
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology
> Center
> https://lists.01.org/pipermail/kbuild-all Intel
> Corporation
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 7+ messages in thread