get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.0/patches/2223066/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2223066,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2223066/?format=api",
    "project": {
        "id": 42,
        "url": "http://patchwork.ozlabs.org/api/1.0/projects/42/?format=api",
        "name": "Linux GPIO development",
        "link_name": "linux-gpio",
        "list_id": "linux-gpio.vger.kernel.org",
        "list_email": "linux-gpio@vger.kernel.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260414102257.365421-1-deep@crimson.net.eu.org>",
    "date": "2026-04-14T10:22:57",
    "name": "nfc: s3fwrn5: switch to GPIO descriptor API",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "8f8eff98dd5d5725f00846257e8da5911d97a765",
    "submitter": {
        "id": 93142,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/93142/?format=api",
        "name": null,
        "email": "deep@crimson.net.eu.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260414102257.365421-1-deep@crimson.net.eu.org/mbox/",
    "series": [
        {
            "id": 499814,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/499814/?format=api",
            "date": "2026-04-14T10:22:57",
            "name": "nfc: s3fwrn5: switch to GPIO descriptor API",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499814/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223066/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-35139-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-gpio@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=linux-gpio+bounces-35139-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.221.47",
            "smtp.subspace.kernel.org;\n dmarc=fail (p=none dis=none) header.from=crimson.net.eu.org",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=gmail.com"
        ],
        "Received": [
            "from sto.lore.kernel.org (sto.lore.kernel.org\n [IPv6:2600:3c09:e001:a7::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fw0kC44gBz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 20:24:03 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id BD6EC3001D56\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 10:23:59 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 53C323D5236;\n\tTue, 14 Apr 2026 10:23:58 +0000 (UTC)",
            "from mail-wr1-f47.google.com (mail-wr1-f47.google.com\n [209.85.221.47])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id B15113D3D1D\n\tfor <linux-gpio@vger.kernel.org>; Tue, 14 Apr 2026 10:23:50 +0000 (UTC)",
            "by mail-wr1-f47.google.com with SMTP id\n ffacd0b85a97d-43cf8fe9c2aso3336473f8f.2\n        for <linux-gpio@vger.kernel.org>;\n Tue, 14 Apr 2026 03:23:50 -0700 (PDT)",
            "from localhost.localdomain\n (host-79-18-131-221.retail.telecomitalia.it. [79.18.131.221])\n        by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43d750f0ca9sm21461453f8f.37.2026.04.14.03.23.46\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Tue, 14 Apr 2026 03:23:48 -0700 (PDT)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776162236; cv=none;\n b=Flo/s2X5ax1kMG1RUdm8Olnoz11Gb2z1Go+LBmJoFiFjh9SnSH6HiyJMJ7Xr+KUw3AjFhGELiH0JZTfSCetr3htadByaSiG0jj44KpcZqjfNjWT0yhsI0Dn+HFGQgF2uLcAlpBNtxd03WjddJbfeldMU9jFYYmGzjAIKyd6e0Xo=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776162236; c=relaxed/simple;\n\tbh=kXxYyFY2N/cEQFJ8qJDkGUJKJ4FyU6QZbTb+jig8aIo=;\n\th=From:To:Cc:Subject:Date:Message-ID:MIME-Version;\n b=rI58n6A4tSAxQYGCTKorA/ITd9pINoaX+SKoUIFUgRJpiksU0yX8vRxhQahksHsqgvsW0ePFh3v8qZIRJ8HRIqwPJeEkHgPCVsFszF/+XafE/Xu8QStbW0YzBMA+AM5tZUChFPKcyi8Ij8HT9NEiZw5NngPRCLuUJ+m+YcUExXU=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=fail (p=none dis=none) header.from=crimson.net.eu.org;\n spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.221.47",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1776162229; x=1776767029;\n        h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=agEPNcn5UfOsWzLW0MOgaJUmP7o4DXe8RlSLgKzjHg4=;\n        b=K4CsPEy9dAlm2wDvuok65qGkEdkJBumSEvQXSRcGUwgHS6ITxuHdBncIyULqd7mPDY\n         9okc4ynBBCpnNEFzoLCTjgBRqmhk45n9/cTsQs4cdwQaRJhoqiva0RwpUJNki5b7f86y\n         yTWxOyKikfRyft3a+zUnybgCSIDJOFq8Fkz2NZzz4/Q38W3P+ySAWLRQb4s2hL43EGpG\n         sRxHZyM4PNdAmntUAZV8bf1ODIEKt/jJ9nsuVM1m6Z5N0E2yW52F3KFAVHHgcRHU96VI\n         mo9X2bCiz+ypurZ/JDzHxU0FEEDG0y4njqZQyb/02v9CcdhhhRe2fxkW7bOgP5VI2EFJ\n         d5EA==",
        "X-Forwarded-Encrypted": "i=1;\n AFNElJ/lqfK2CGbNVZq7VLAvZATyP8eT/rdzySxNyxskDKORupg6+IcxL9xMb7eKgOGglnpNP9Yi2o7UvSwz@vger.kernel.org",
        "X-Gm-Message-State": "AOJu0Yxza7FsF3pKvhOEjGUb00frd1Y+PF8g3/GDE/Qm5UL2YGP/h1ga\n\tUIdkyG7cZJXYsIDrfgUhZxdK24f34ouSyHlPvfk43rXTZZgKScgoIo7o",
        "X-Gm-Gg": "AeBDieuRnYBQV0/njE7Goveshcn/ZNQ/u6I5Xn2ttn+eZRSqvUWQQFD244m5/4h/Qpw\n\tkifcxtqO90pVPNpVk2YZ8cgC64znOASq+AR1TSrU+qUsgp4xchBeOx+38o1pqQTT2KwiwN5JRe1\n\t9qCfm7CBjDeawdjZ7Y3qkzAPCN/glPPbNnseqIE2c6KEf2Mggi0vLLzC6xMPvOGrMZaxRf8y88W\n\t7e+uWulGqKIOUZcCvoLNUjoAk4gcr6jjNBOXIY7E9kkvIX4x8y2ZQ0u5AtoklChUKji7xBJGGmK\n\tKxtLDnGhYNzSciLhFFcnz4+UeP/w1c74tD9xpmJWBTJxm0a6/Z2bxtywka+CsZSlH9ZH51bLtAq\n\tuySKqw3N5zCGICqcBujF8dZoGQLx40MiOgRluvOunU9WYDiZMdEfZd+l7vtmiTVaMnWo8fbN5jI\n\tyC9wXvxYd1umg+1Rf8QeUr/3ErKF+nl/t04ayGf9bdaK+wF3lD33TgJPdEV9psH3vw5sNRvh7Wm\n\tmXNtrOd2Gaxkp9OnOW3SrlBGY0/M4aQeBJgOmSbFxCdaldhtXuT9Av0+sbIcQ7fCykJWHU=",
        "X-Received": "by 2002:a5d:5d83:0:b0:43b:40ef:5d1a with SMTP id\n ffacd0b85a97d-43d642552e7mr23917731f8f.5.1776162228496;\n        Tue, 14 Apr 2026 03:23:48 -0700 (PDT)",
        "From": "deep@crimson.net.eu.org",
        "To": "Krzysztof Kozlowski <krzk@kernel.org>",
        "Cc": "Linus Walleij <linusw@kernel.org>,\n\tBartosz Golaszewski <brgl@kernel.org>,\n\tnetdev@vger.kernel.org,\n\tlinux-nfc@lists.01.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-gpio@vger.kernel.org,\n\tKenet Jovan Sokoli <deep@crimson.net.eu.org>",
        "Subject": "[PATCH] nfc: s3fwrn5: switch to GPIO descriptor API",
        "Date": "Tue, 14 Apr 2026 12:22:57 +0200",
        "Message-ID": "<20260414102257.365421-1-deep@crimson.net.eu.org>",
        "X-Mailer": "git-send-email 2.43.0",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-gpio@vger.kernel.org",
        "List-Id": "<linux-gpio.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-gpio+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-gpio+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit"
    },
    "content": "From: Kenet Jovan Sokoli <deep@crimson.net.eu.org>\n\nI am working on cleaning up some legacy GPIO usage in the NFC subsystem.\nThis patch converts the s3fwrn5 driver to use the modern descriptor based\nGPIO API instead of the old integer based one.\n\nSpecifically:\n- I changed the gpio_en and gpio_fw_wake types to struct gpio_desc.\n- Replaced the manual DT parsing with devm_gpiod_get() in the probe\nfunctions.\n- Updated the calls in phy_common.c to use gpiod_set_value().\n\nThis also allowed me to remove the s3fwrn5_i2c_parse_dt and\ns3fwrn82_uart_parse_dt functions as they are no longer needed with the\nnew API.\n\nSigned-off-by: Kenet Jovan Sokoli <deep@crimson.net.eu.org>\n---\nI have verified that this patch builds successfully with \"make M=drivers/nfc/s3fwrn5\"\n\"scripts/checkpatch.pl\" with no errors or warnings.\nThis is very complicated stuff, but I am learning a lot by doing these cleanup works.\nI really hope I can contribute as much as possible to this environment, little by little.\n---\n drivers/nfc/s3fwrn5/i2c.c        | 58 ++++++--------------------------\n drivers/nfc/s3fwrn5/phy_common.c | 12 +++----\n drivers/nfc/s3fwrn5/phy_common.h |  5 +--\n drivers/nfc/s3fwrn5/uart.c       | 43 ++++++-----------------\n 4 files changed, 31 insertions(+), 87 deletions(-)",
    "diff": "diff --git a/drivers/nfc/s3fwrn5/i2c.c b/drivers/nfc/s3fwrn5/i2c.c\nindex 110d086cfe5b..a629fbcd3237 100644\n--- a/drivers/nfc/s3fwrn5/i2c.c\n+++ b/drivers/nfc/s3fwrn5/i2c.c\n@@ -8,9 +8,8 @@\n \n #include <linux/clk.h>\n #include <linux/i2c.h>\n-#include <linux/gpio.h>\n+#include <linux/gpio/consumer.h>\n #include <linux/delay.h>\n-#include <linux/of_gpio.h>\n #include <linux/of_irq.h>\n #include <linux/module.h>\n \n@@ -146,37 +145,6 @@ static irqreturn_t s3fwrn5_i2c_irq_thread_fn(int irq, void *phy_id)\n \treturn IRQ_HANDLED;\n }\n \n-static int s3fwrn5_i2c_parse_dt(struct i2c_client *client)\n-{\n-\tstruct s3fwrn5_i2c_phy *phy = i2c_get_clientdata(client);\n-\tstruct device_node *np = client->dev.of_node;\n-\n-\tif (!np)\n-\t\treturn -ENODEV;\n-\n-\tphy->common.gpio_en = of_get_named_gpio(np, \"en-gpios\", 0);\n-\tif (!gpio_is_valid(phy->common.gpio_en)) {\n-\t\t/* Support also deprecated property */\n-\t\tphy->common.gpio_en = of_get_named_gpio(np,\n-\t\t\t\t\t\t\t\"s3fwrn5,en-gpios\",\n-\t\t\t\t\t\t\t0);\n-\t\tif (!gpio_is_valid(phy->common.gpio_en))\n-\t\t\treturn -ENODEV;\n-\t}\n-\n-\tphy->common.gpio_fw_wake = of_get_named_gpio(np, \"wake-gpios\", 0);\n-\tif (!gpio_is_valid(phy->common.gpio_fw_wake)) {\n-\t\t/* Support also deprecated property */\n-\t\tphy->common.gpio_fw_wake = of_get_named_gpio(np,\n-\t\t\t\t\t\t\t     \"s3fwrn5,fw-gpios\",\n-\t\t\t\t\t\t\t     0);\n-\t\tif (!gpio_is_valid(phy->common.gpio_fw_wake))\n-\t\t\treturn -ENODEV;\n-\t}\n-\n-\treturn 0;\n-}\n-\n static int s3fwrn5_i2c_probe(struct i2c_client *client)\n {\n \tstruct s3fwrn5_i2c_phy *phy;\n@@ -193,21 +161,17 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client)\n \tphy->i2c_dev = client;\n \ti2c_set_clientdata(client, phy);\n \n-\tret = s3fwrn5_i2c_parse_dt(client);\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->common.gpio_en,\n-\t\t\t\t    GPIOF_OUT_INIT_HIGH, \"s3fwrn5_en\");\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tret = devm_gpio_request_one(&phy->i2c_dev->dev,\n-\t\t\t\t    phy->common.gpio_fw_wake,\n-\t\t\t\t    GPIOF_OUT_INIT_LOW, \"s3fwrn5_fw_wake\");\n-\tif (ret < 0)\n-\t\treturn ret;\n+\tphy->common.gpio_en = devm_gpiod_get(&client->dev, \"en\", GPIOD_OUT_HIGH);\n+\tif (IS_ERR(phy->common.gpio_en)) {\n+\t\treturn dev_err_probe(&client->dev, PTR_ERR(phy->common.gpio_en),\n+\t\t\t\t\"Failed to get EN gpio\\n\");\n+\t}\n \n+\tphy->common.gpio_fw_wake = devm_gpiod_get(&client->dev, \"wake\", GPIOD_OUT_LOW);\n+\tif (IS_ERR(phy->common.gpio_fw_wake)) {\n+\t\treturn dev_err_probe(&client->dev, PTR_ERR(phy->common.gpio_fw_wake),\n+\t\t\t     \"Failed to get WAKE gpio\\n\");\n+\t}\n \t/*\n \t * S3FWRN5 depends on a clock input (\"XI\" pin) to function properly.\n \t * Depending on the hardware configuration this could be an always-on\ndiff --git a/drivers/nfc/s3fwrn5/phy_common.c b/drivers/nfc/s3fwrn5/phy_common.c\nindex deb2c039f0fd..e802b4e609c8 100644\n--- a/drivers/nfc/s3fwrn5/phy_common.c\n+++ b/drivers/nfc/s3fwrn5/phy_common.c\n@@ -8,7 +8,7 @@\n  * Bongsu Jeon <bongsu.jeon@samsung.com>\n  */\n \n-#include <linux/gpio.h>\n+#include <linux/gpio/consumer.h>\n #include <linux/delay.h>\n #include <linux/module.h>\n \n@@ -19,7 +19,7 @@ void s3fwrn5_phy_set_wake(void *phy_id, bool wake)\n \tstruct phy_common *phy = phy_id;\n \n \tmutex_lock(&phy->mutex);\n-\tgpio_set_value(phy->gpio_fw_wake, wake);\n+\tgpiod_set_value(phy->gpio_fw_wake, wake);\n \tif (wake)\n \t\tmsleep(S3FWRN5_EN_WAIT_TIME);\n \tmutex_unlock(&phy->mutex);\n@@ -33,14 +33,14 @@ bool s3fwrn5_phy_power_ctrl(struct phy_common *phy, enum s3fwrn5_mode mode)\n \n \tphy->mode = mode;\n \n-\tgpio_set_value(phy->gpio_en, 1);\n-\tgpio_set_value(phy->gpio_fw_wake, 0);\n+\tgpiod_set_value(phy->gpio_en, 1);\n+\tgpiod_set_value(phy->gpio_fw_wake, 0);\n \tif (mode == S3FWRN5_MODE_FW)\n-\t\tgpio_set_value(phy->gpio_fw_wake, 1);\n+\t\tgpiod_set_value(phy->gpio_fw_wake, 1);\n \n \tif (mode != S3FWRN5_MODE_COLD) {\n \t\tmsleep(S3FWRN5_EN_WAIT_TIME);\n-\t\tgpio_set_value(phy->gpio_en, 0);\n+\t\tgpiod_set_value(phy->gpio_en, 0);\n \t\tmsleep(S3FWRN5_EN_WAIT_TIME);\n \t}\n \ndiff --git a/drivers/nfc/s3fwrn5/phy_common.h b/drivers/nfc/s3fwrn5/phy_common.h\nindex 9cef25436bf9..10210a8fd755 100644\n--- a/drivers/nfc/s3fwrn5/phy_common.h\n+++ b/drivers/nfc/s3fwrn5/phy_common.h\n@@ -13,6 +13,7 @@\n \n #include <linux/mutex.h>\n #include <net/nfc/nci_core.h>\n+#include <linux/gpio/consumer.h>\n \n #include \"s3fwrn5.h\"\n \n@@ -21,8 +22,8 @@\n struct phy_common {\n \tstruct nci_dev *ndev;\n \n-\tint gpio_en;\n-\tint gpio_fw_wake;\n+\tstruct gpio_desc *gpio_en;\n+\tstruct gpio_desc *gpio_fw_wake;\n \n \tstruct mutex mutex;\n \ndiff --git a/drivers/nfc/s3fwrn5/uart.c b/drivers/nfc/s3fwrn5/uart.c\nindex 4ee481bd7e96..5a7c7741a881 100644\n--- a/drivers/nfc/s3fwrn5/uart.c\n+++ b/drivers/nfc/s3fwrn5/uart.c\n@@ -15,8 +15,7 @@\n #include <linux/netdevice.h>\n #include <linux/of.h>\n #include <linux/serdev.h>\n-#include <linux/gpio.h>\n-#include <linux/of_gpio.h>\n+#include <linux/gpio/consumer.h>\n \n #include \"phy_common.h\"\n \n@@ -92,25 +91,6 @@ static const struct of_device_id s3fwrn82_uart_of_match[] = {\n };\n MODULE_DEVICE_TABLE(of, s3fwrn82_uart_of_match);\n \n-static int s3fwrn82_uart_parse_dt(struct serdev_device *serdev)\n-{\n-\tstruct s3fwrn82_uart_phy *phy = serdev_device_get_drvdata(serdev);\n-\tstruct device_node *np = serdev->dev.of_node;\n-\n-\tif (!np)\n-\t\treturn -ENODEV;\n-\n-\tphy->common.gpio_en = of_get_named_gpio(np, \"en-gpios\", 0);\n-\tif (!gpio_is_valid(phy->common.gpio_en))\n-\t\treturn -ENODEV;\n-\n-\tphy->common.gpio_fw_wake = of_get_named_gpio(np, \"wake-gpios\", 0);\n-\tif (!gpio_is_valid(phy->common.gpio_fw_wake))\n-\t\treturn -ENODEV;\n-\n-\treturn 0;\n-}\n-\n static int s3fwrn82_uart_probe(struct serdev_device *serdev)\n {\n \tstruct s3fwrn82_uart_phy *phy;\n@@ -144,20 +124,19 @@ static int s3fwrn82_uart_probe(struct serdev_device *serdev)\n \n \tserdev_device_set_flow_control(serdev, false);\n \n-\tret = s3fwrn82_uart_parse_dt(serdev);\n-\tif (ret < 0)\n-\t\tgoto err_serdev;\n-\n-\tret = devm_gpio_request_one(&phy->ser_dev->dev, phy->common.gpio_en,\n-\t\t\t\t    GPIOF_OUT_INIT_HIGH, \"s3fwrn82_en\");\n-\tif (ret < 0)\n+\tphy->common.gpio_en = devm_gpiod_get(&serdev->dev, \"en\", GPIOD_OUT_HIGH);\n+\tif (IS_ERR(phy->common.gpio_en)) {\n+\t\tret = dev_err_probe(&serdev->dev, PTR_ERR(phy->common.gpio_en),\n+\t\t\t     \"failed to get en gpio\\n\");\n \t\tgoto err_serdev;\n+\t}\n \n-\tret = devm_gpio_request_one(&phy->ser_dev->dev,\n-\t\t\t\t    phy->common.gpio_fw_wake,\n-\t\t\t\t    GPIOF_OUT_INIT_LOW, \"s3fwrn82_fw_wake\");\n-\tif (ret < 0)\n+\tphy->common.gpio_fw_wake = devm_gpiod_get(&serdev->dev, \"wake\", GPIOD_OUT_LOW);\n+\tif (IS_ERR(phy->common.gpio_fw_wake)) {\n+\t\tret = dev_err_probe(&serdev->dev, PTR_ERR(phy->common.gpio_fw_wake),\n+\t\t\t     \"failed to get wake gpio\\n\");\n \t\tgoto err_serdev;\n+\t}\n \n \tret = s3fwrn5_probe(&phy->common.ndev, phy, &phy->ser_dev->dev,\n \t\t\t    &uart_phy_ops);\n",
    "prefixes": []
}