From nobody Thu Apr 9 19:00:49 2026 Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 09A331B142D; Fri, 6 Mar 2026 04:00:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772769633; cv=none; b=iwpaZ3NVm8mXLnJywWQqznVKy7jGtWwWM6QumssYefECx6nfrhwZ15/mrHHwuOyBnVum1wJoRqWD/e7tbmuGDQyc7I+MzGWetvJONp9l3tEZgQOuZRa+7M8mg7iLTPG4R5CRTk6SNK9CL70EuhyZN43J0OPRbfeuctdYfEBtkzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772769633; c=relaxed/simple; bh=CKGTERXqQJIxD1lEXpp9La7JRDnmVFtn7bnxFWg2NO4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KHfu4Qsc20nt941EMdrOCD18lba2RMhXp4t2DdHujC3C1O3SGBIgy9J0Nb7hyX5KRyeEUTpHQypfW4IOq+YDMb4UPdD09GKyXPSgBVv9brrvQLIU7nYxkDYWf/C7lmTFhRAJAFNhUzdOu6qbFSyNFP2rvuJd1yz+4aLU8KtxTIo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=vimux.org; spf=none smtp.mailfrom=vimux.org; arc=none smtp.client-ip=54.204.34.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=vimux.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=vimux.org X-QQ-mid: esmtpsz19t1772769611t08f6ceb7 X-QQ-Originating-IP: 9EODBgkfxojsCaWw8L08G7EmVg9Di5WtQocNQ0HwwPs= Received: from localhost.localdomain ( [119.167.27.18]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 06 Mar 2026 12:00:08 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 6632579061817542946 EX-QQ-RecipientCnt: 8 From: Jialu Xu To: xujialu@vimux.org Cc: brgl@kernel.org, kees@kernel.org, krzk@kernel.org, linusw@kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 1/3] nfc: s3fwrn5: convert to gpio descriptors Date: Fri, 6 Mar 2026 11:59:09 +0800 Message-ID: <7E5FEA920D0FD172+20260306035909.2447844-3-xujialu@vimux.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:vimux.org:qybglogicsvrsz:qybglogicsvrsz3b-0 X-QQ-XMAILINFO: MtYPpoBCfkHlG0icqKthLD3dZ6wmN2MN2wydzfIZsio1CZVS/PZAUYmX Dl8PlHZM+sy7at+q7+K35k9g9f6i3MlY4SFHmDErTZaVv6hud6MuL6G7Jjc2QBLY/vzLLRz SDcxcmHWArB38pzxmvKWKxWYW4Z+gSqnaOwAZwb3Gl2PT0FY5rjdL2oGN0MMuRBAxJjeHCe KohW8mv/nhvvDo4FLYEiwpYiilB6itaPesj/YiIrSyXVLB1Fny0VnI80Vuo/Y4/C/k1WzA6 gpP4uxN98/j53HT5QSltjSojyGLCVe3QjWrPtRuK5LwshWzInKCcOwGR6EQCCwboc4FktVa BQiniRMtinsOvgteDwwbvuVnKUzX3WEJOWVjcJ7IPctoSn2RjvE2+wuFdPF7sEf1xcBDNnI HT1YfUTp9kikSPVPJiVen4PwiHZwBQpzIxngcDoRWJBoG2Dr9/ZKtMLo+mbRArWPS4tc6wl z5hdtjpJFvt62BSh3zd/gth2S5B+RhL6LwnCCJeXW/8vyp7HUs/BZqyLxZyqLvwVbOE3E9K AlmAHP7Zx5L5+h9miTuD1r20TvbuYzWRC8LEsMsW1VaXAMlOPCQCXejHj9L/Cqi5Rg+L0dR 1RHf5O/RWb3VhmOWEtug0sxxbItxutwOn0KBTVdmjRYNuBVqwha3TLw8BWCb5aq+yp3+Lgi NTFLCktr2M04j6VkQGI+lDAi977i6qBGUaeGWf10eJSoATiZwZop63iRNL+HGhknNGsSnpX 0tMVd5ueVwsT35t9Ty1Xql6HYkMCiVzJ/gOZd6E2ktFm9y3TTpZbUNYhXfmbbFH2GqZC4h0 PCK5KVPXYY6OjSZc/mJZ01y12IYNGUxZUm2hstUwYAaM+96vcxSNZ/u3FukqJE5O5HbYZar 52nrAuD1e5WOllETqxHiPqXNJ7zoHlubEjk5qldL+/9gqqk57IRqRmXC7UGKg9c/ZqajoOg qvT575lfTSjvXoOYXo4HYjfh1Ctsd1RHh+a9uOu8AN8YT8GRXWchIAt/U62pWkCJHt8gUrL lEydRPeA== X-QQ-XMRINFO: NI4Ajvh11aEjEMj13RCX7UuhPEoou2bs1g== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" Replace the legacy of_get_named_gpio() / gpio_request_one() / gpio_set_value() API with the descriptor-based devm_gpiod_get() / gpiod_set_value() API from , removing the dependency on . This removes the s3fwrn5_i2c_parse_dt() and s3fwrn82_uart_parse_dt() functions since devm_gpiod_get() handles both DT lookup and resource management. The gpio_en and gpio_fw_wake fields in struct phy_common are changed from int to struct gpio_desc *. Add rename quirks in gpiolib-of.c for the deprecated "s3fwrn5,en-gpios" and "s3fwrn5,fw-gpios" properties to maintain backward compatibility with old device trees. Signed-off-by: Jialu Xu Reviewed-by: Linus Walleij --- drivers/gpio/gpiolib-of.c | 4 +++ drivers/nfc/s3fwrn5/i2c.c | 55 +++++--------------------------- drivers/nfc/s3fwrn5/phy_common.c | 11 +++---- drivers/nfc/s3fwrn5/phy_common.h | 5 +-- drivers/nfc/s3fwrn5/uart.c | 45 +++++++------------------- 5 files changed, 32 insertions(+), 88 deletions(-) diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index ef1ac68b94b78..3bdd9af674474 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -542,6 +542,10 @@ static struct gpio_desc *of_find_gpio_rename(struct de= vice_node *np, { "reset", "reset-n-io", "marvell,nfc-uart" }, { "reset", "reset-n-io", "mrvl,nfc-uart" }, #endif +#if IS_ENABLED(CONFIG_NFC_S3FWRN5_I2C) + { "en", "s3fwrn5,en-gpios", "samsung,s3fwrn5-i2c" }, + { "wake", "s3fwrn5,fw-gpios", "samsung,s3fwrn5-i2c" }, +#endif #if IS_ENABLED(CONFIG_PCI_LANTIQ) /* MIPS Lantiq PCI */ { "reset", "gpio-reset", "lantiq,pci-xway" }, diff --git a/drivers/nfc/s3fwrn5/i2c.c b/drivers/nfc/s3fwrn5/i2c.c index 110d086cfe5ba..3f508b5fbf06b 100644 --- a/drivers/nfc/s3fwrn5/i2c.c +++ b/drivers/nfc/s3fwrn5/i2c.c @@ -8,10 +8,8 @@ =20 #include #include -#include +#include #include -#include -#include #include =20 #include @@ -146,37 +144,6 @@ static irqreturn_t s3fwrn5_i2c_irq_thread_fn(int irq, = void *phy_id) return IRQ_HANDLED; } =20 -static int s3fwrn5_i2c_parse_dt(struct i2c_client *client) -{ - struct s3fwrn5_i2c_phy *phy =3D i2c_get_clientdata(client); - struct device_node *np =3D client->dev.of_node; - - if (!np) - return -ENODEV; - - phy->common.gpio_en =3D of_get_named_gpio(np, "en-gpios", 0); - if (!gpio_is_valid(phy->common.gpio_en)) { - /* Support also deprecated property */ - phy->common.gpio_en =3D of_get_named_gpio(np, - "s3fwrn5,en-gpios", - 0); - if (!gpio_is_valid(phy->common.gpio_en)) - return -ENODEV; - } - - phy->common.gpio_fw_wake =3D of_get_named_gpio(np, "wake-gpios", 0); - if (!gpio_is_valid(phy->common.gpio_fw_wake)) { - /* Support also deprecated property */ - phy->common.gpio_fw_wake =3D of_get_named_gpio(np, - "s3fwrn5,fw-gpios", - 0); - if (!gpio_is_valid(phy->common.gpio_fw_wake)) - return -ENODEV; - } - - return 0; -} - static int s3fwrn5_i2c_probe(struct i2c_client *client) { struct s3fwrn5_i2c_phy *phy; @@ -193,20 +160,14 @@ static int s3fwrn5_i2c_probe(struct i2c_client *clien= t) phy->i2c_dev =3D client; i2c_set_clientdata(client, phy); =20 - ret =3D s3fwrn5_i2c_parse_dt(client); - if (ret < 0) - return ret; - - ret =3D devm_gpio_request_one(&phy->i2c_dev->dev, phy->common.gpio_en, - GPIOF_OUT_INIT_HIGH, "s3fwrn5_en"); - if (ret < 0) - return ret; + phy->common.gpio_en =3D devm_gpiod_get(&client->dev, "en", GPIOD_OUT_HIGH= ); + if (IS_ERR(phy->common.gpio_en)) + return PTR_ERR(phy->common.gpio_en); =20 - ret =3D devm_gpio_request_one(&phy->i2c_dev->dev, - phy->common.gpio_fw_wake, - GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake"); - if (ret < 0) - return ret; + phy->common.gpio_fw_wake =3D devm_gpiod_get(&client->dev, "wake", + GPIOD_OUT_LOW); + if (IS_ERR(phy->common.gpio_fw_wake)) + return PTR_ERR(phy->common.gpio_fw_wake); =20 /* * S3FWRN5 depends on a clock input ("XI" pin) to function properly. diff --git a/drivers/nfc/s3fwrn5/phy_common.c b/drivers/nfc/s3fwrn5/phy_com= mon.c index deb2c039f0fd6..39a60e34136c5 100644 --- a/drivers/nfc/s3fwrn5/phy_common.c +++ b/drivers/nfc/s3fwrn5/phy_common.c @@ -8,7 +8,6 @@ * Bongsu Jeon */ =20 -#include #include #include =20 @@ -19,7 +18,7 @@ void s3fwrn5_phy_set_wake(void *phy_id, bool wake) struct phy_common *phy =3D phy_id; =20 mutex_lock(&phy->mutex); - gpio_set_value(phy->gpio_fw_wake, wake); + gpiod_set_value(phy->gpio_fw_wake, wake); if (wake) msleep(S3FWRN5_EN_WAIT_TIME); mutex_unlock(&phy->mutex); @@ -33,14 +32,14 @@ bool s3fwrn5_phy_power_ctrl(struct phy_common *phy, enu= m s3fwrn5_mode mode) =20 phy->mode =3D mode; =20 - gpio_set_value(phy->gpio_en, 1); - gpio_set_value(phy->gpio_fw_wake, 0); + gpiod_set_value(phy->gpio_en, 1); + gpiod_set_value(phy->gpio_fw_wake, 0); if (mode =3D=3D S3FWRN5_MODE_FW) - gpio_set_value(phy->gpio_fw_wake, 1); + gpiod_set_value(phy->gpio_fw_wake, 1); =20 if (mode !=3D S3FWRN5_MODE_COLD) { msleep(S3FWRN5_EN_WAIT_TIME); - gpio_set_value(phy->gpio_en, 0); + gpiod_set_value(phy->gpio_en, 0); msleep(S3FWRN5_EN_WAIT_TIME); } =20 diff --git a/drivers/nfc/s3fwrn5/phy_common.h b/drivers/nfc/s3fwrn5/phy_com= mon.h index 9cef25436bf90..871bec53dd0a9 100644 --- a/drivers/nfc/s3fwrn5/phy_common.h +++ b/drivers/nfc/s3fwrn5/phy_common.h @@ -12,6 +12,7 @@ #define __NFC_S3FWRN5_PHY_COMMON_H =20 #include +#include #include =20 #include "s3fwrn5.h" @@ -21,8 +22,8 @@ struct phy_common { struct nci_dev *ndev; =20 - int gpio_en; - int gpio_fw_wake; + struct gpio_desc *gpio_en; + struct gpio_desc *gpio_fw_wake; =20 struct mutex mutex; =20 diff --git a/drivers/nfc/s3fwrn5/uart.c b/drivers/nfc/s3fwrn5/uart.c index 9c09c10c2a464..5977a6b58f6fb 100644 --- a/drivers/nfc/s3fwrn5/uart.c +++ b/drivers/nfc/s3fwrn5/uart.c @@ -10,13 +10,12 @@ =20 #include #include +#include #include #include #include -#include #include -#include -#include +#include =20 #include "phy_common.h" =20 @@ -88,25 +87,6 @@ static const struct of_device_id s3fwrn82_uart_of_match[= ] =3D { }; MODULE_DEVICE_TABLE(of, s3fwrn82_uart_of_match); =20 -static int s3fwrn82_uart_parse_dt(struct serdev_device *serdev) -{ - struct s3fwrn82_uart_phy *phy =3D serdev_device_get_drvdata(serdev); - struct device_node *np =3D serdev->dev.of_node; - - if (!np) - return -ENODEV; - - phy->common.gpio_en =3D of_get_named_gpio(np, "en-gpios", 0); - if (!gpio_is_valid(phy->common.gpio_en)) - return -ENODEV; - - phy->common.gpio_fw_wake =3D of_get_named_gpio(np, "wake-gpios", 0); - if (!gpio_is_valid(phy->common.gpio_fw_wake)) - return -ENODEV; - - return 0; -} - static int s3fwrn82_uart_probe(struct serdev_device *serdev) { struct s3fwrn82_uart_phy *phy; @@ -140,20 +120,19 @@ static int s3fwrn82_uart_probe(struct serdev_device *= serdev) =20 serdev_device_set_flow_control(serdev, false); =20 - ret =3D s3fwrn82_uart_parse_dt(serdev); - if (ret < 0) - goto err_serdev; - - ret =3D devm_gpio_request_one(&phy->ser_dev->dev, phy->common.gpio_en, - GPIOF_OUT_INIT_HIGH, "s3fwrn82_en"); - if (ret < 0) + phy->common.gpio_en =3D devm_gpiod_get(&serdev->dev, "en", + GPIOD_OUT_HIGH); + if (IS_ERR(phy->common.gpio_en)) { + ret =3D PTR_ERR(phy->common.gpio_en); goto err_serdev; + } =20 - ret =3D devm_gpio_request_one(&phy->ser_dev->dev, - phy->common.gpio_fw_wake, - GPIOF_OUT_INIT_LOW, "s3fwrn82_fw_wake"); - if (ret < 0) + phy->common.gpio_fw_wake =3D devm_gpiod_get(&serdev->dev, "wake", + GPIOD_OUT_LOW); + if (IS_ERR(phy->common.gpio_fw_wake)) { + ret =3D PTR_ERR(phy->common.gpio_fw_wake); goto err_serdev; + } =20 ret =3D s3fwrn5_probe(&phy->common.ndev, phy, &phy->ser_dev->dev, &uart_phy_ops); --=20 2.47.3 From nobody Thu Apr 9 19:00:49 2026 Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F1BBC36CDE8; Fri, 6 Mar 2026 04:00:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.254.200.128 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772769637; cv=none; b=oKagUo0sBLIeW/7pwGA7PD7TjwGm0OMY301n9Gsin/gRIY7TCbVRc1s4eNYj3IDlgfGTEsJdsdXEhPo63RLHGxVdJJ3a3Ukrdhr81vWmBMGCJr810cacyYuZwR7vHQ43Rf25gz2PXebUHw0jtzwAy4WqXfm2vY+u2pj6TTISaeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772769637; c=relaxed/simple; bh=L25gbdqO4EIyeFfbP7Ndz4vjAj3Benv3OagOxYWI82Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qrq/gJg8/nddlkcZ0XDYPB9+KGPkhVoThiDgMH6msZ1FO6HN0QAjVvu1oNOXE4UB5sv9S+u1nMoP4QrDhMFojHrbRzeQ4v3hdIbpgLS39088dPxr7zd8M8ih2MIpoIV7xqS2oN9rhhFHh54SjJ07cY5HqVmPESrwqeFmSAlgchc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=vimux.org; spf=none smtp.mailfrom=vimux.org; arc=none smtp.client-ip=54.254.200.128 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=vimux.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=vimux.org X-QQ-mid: esmtpsz19t1772769621t644cb599 X-QQ-Originating-IP: Kj0+tNddUFM2kEotjm27sffUVu2bj6SOp3bGFiUH8MI= Received: from localhost.localdomain ( [119.167.27.18]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 06 Mar 2026 12:00:12 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 11925164406285336032 EX-QQ-RecipientCnt: 8 From: Jialu Xu To: xujialu@vimux.org Cc: brgl@kernel.org, kees@kernel.org, krzk@kernel.org, linusw@kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 2/3] nfc: nfcmrvl: convert to gpio descriptors Date: Fri, 6 Mar 2026 11:59:11 +0800 Message-ID: X-Mailer: git-send-email 2.47.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:vimux.org:qybglogicsvrsz:qybglogicsvrsz3b-0 X-QQ-XMAILINFO: MkzgycXnWlOXfoCrf3vxMfivI6JVmON551quIaGMMEjXwe4FyrU/x28O a9BbIuxTYXwhliEb+BrmYKqkpi8Ump8blLVAb9sjxCyKAGroQnTukp8AZr732rres1zfRsq O/MrMabCT1NWPCv5Y4eX0VlE8iBZeiFeIwj8nfm0ye0OhIwo95JwVJKFJ6zvNqkLlt5mqLM 1omTyuwezZei1oai8lE/h+2xjPlW75LpbDGQm4LWwzdU+5GBCX1W7aOUytSsfOKl+PUN6er jXe+YFagTJEz1S+rJNZzrIND/gUAS9gEYNV8wYBNMy14Qc+OV9hyipRiN7BojGZE4PNNoz4 F4ID4waorLPtHMFOtV4OLQCKvY3RS5ySYHtNL8bZbfVz2pl3jMVtD06+V22/IN9s17UWvPE 4/5Yd2W68OiYW2OJgBtz1f/zBKceG5lp7/JJPm4GqkbMO1/oTuEvyUKue7mZyxWY4+rNEFm 43SNPGKZkOm0D25/ycfnhsxMBhUEw1qNYrHe83vCv61ky3vz1iZiEW+yNzaZap7pSMK/+05 I5VYKPs/SxqJXjqLl2ohLk7PU1InPxotgLYUeH9CV2LAq+WUso8ljMOVAhJpkumzgSUt9xJ l3cTTg8DWPYXlNXtI3yZTDB7j46QvptJ/oXxAt7DJ2BtREayNV84Z8Y1LXR8n3vNOgTopRu SxFRlPbHbEKfEp5ambDSlPIV565IEr+6gQC4U6HZpiSYei41S6lAcZUoa5foqX9FEXv6Wq0 HVWmPJ8JL2wkrF8rcPJN4jPIYs9aNgH/b8tYQAbfzCfPPpExvhKnWf64dczmBaRFwOfKu0m eoyc/A0y4Yv+k9RW5aPhu2StsALRlGLwnqLi0oYKsaMDeEXSh4lIkMsDQD1nZMS0cb2gEHP lg4yZ1QU24b2tnw458IaAi8sJjLS0P6cM35/lm2nPaEQByj0LLdaMOO1HhrQxEHdYdFhGGT yZqMj0FiQbeqdOnUfVOic9VAWKP6toljuxPL73yNM3WiOvkFvDgYyHQO+JKLEml5fEkz/ZQ INU+o9lClPEDcVihmENSd1beaQhKzUoeqWPzwrX/ky5pgQaYmM X-QQ-XMRINFO: MSVp+SPm3vtSI1QTLgDHQqIV1w2oNKDqfg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" Replace the legacy of_get_named_gpio() / gpio_request_one() / gpio_set_value() API with the descriptor-based devm_gpiod_get_optional() / gpiod_set_value() API from , removing the dependency on . The "reset-n-io" property rename quirk already exists in gpiolib-of.c (added in commit 9c2cc7171e08), so no additional quirk is needed. Signed-off-by: Jialu Xu Reviewed-by: Linus Walleij --- drivers/nfc/nfcmrvl/main.c | 46 ++++++++++++----------------------- drivers/nfc/nfcmrvl/nfcmrvl.h | 4 ++- drivers/nfc/nfcmrvl/uart.c | 23 ++++++++++++------ drivers/nfc/nfcmrvl/usb.c | 2 +- 4 files changed, 35 insertions(+), 40 deletions(-) diff --git a/drivers/nfc/nfcmrvl/main.c b/drivers/nfc/nfcmrvl/main.c index c51d22e4579c1..46cc1386ad3bc 100644 --- a/drivers/nfc/nfcmrvl/main.c +++ b/drivers/nfc/nfcmrvl/main.c @@ -6,9 +6,9 @@ */ =20 #include -#include +#include #include -#include +#include #include #include #include @@ -112,13 +112,12 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum= nfcmrvl_phy phy, =20 memcpy(&priv->config, pdata, sizeof(*pdata)); =20 - if (gpio_is_valid(priv->config.reset_n_io)) { - rc =3D gpio_request_one(priv->config.reset_n_io, - GPIOF_OUT_INIT_LOW, - "nfcmrvl_reset_n"); - if (rc < 0) { - priv->config.reset_n_io =3D -EINVAL; - nfc_err(dev, "failed to request reset_n io\n"); + if (!priv->config.reset_gpio) { + priv->config.reset_gpio =3D + devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(priv->config.reset_gpio)) { + priv->config.reset_gpio =3D NULL; + nfc_err(dev, "failed to get reset gpio\n"); } } =20 @@ -144,7 +143,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum n= fcmrvl_phy phy, if (!priv->ndev) { nfc_err(dev, "nci_allocate_device failed\n"); rc =3D -ENOMEM; - goto error_free_gpio; + goto error_free; } =20 rc =3D nfcmrvl_fw_dnld_init(priv); @@ -171,9 +170,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum n= fcmrvl_phy phy, nfcmrvl_fw_dnld_deinit(priv); error_free_dev: nci_free_device(priv->ndev); -error_free_gpio: - if (gpio_is_valid(priv->config.reset_n_io)) - gpio_free(priv->config.reset_n_io); +error_free: kfree(priv); return ERR_PTR(rc); } @@ -189,9 +186,6 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private = *priv) =20 nfcmrvl_fw_dnld_deinit(priv); =20 - if (gpio_is_valid(priv->config.reset_n_io)) - gpio_free(priv->config.reset_n_io); - nci_free_device(ndev); kfree(priv); } @@ -233,34 +227,24 @@ void nfcmrvl_chip_reset(struct nfcmrvl_private *priv) /* Reset possible fault of previous session */ clear_bit(NFCMRVL_PHY_ERROR, &priv->flags); =20 - if (gpio_is_valid(priv->config.reset_n_io)) { + if (priv->config.reset_gpio) { nfc_info(priv->dev, "reset the chip\n"); - gpio_set_value(priv->config.reset_n_io, 0); + gpiod_set_value(priv->config.reset_gpio, 0); usleep_range(5000, 10000); - gpio_set_value(priv->config.reset_n_io, 1); + gpiod_set_value(priv->config.reset_gpio, 1); } else nfc_info(priv->dev, "no reset available on this interface\n"); } =20 void nfcmrvl_chip_halt(struct nfcmrvl_private *priv) { - if (gpio_is_valid(priv->config.reset_n_io)) - gpio_set_value(priv->config.reset_n_io, 0); + if (priv->config.reset_gpio) + gpiod_set_value(priv->config.reset_gpio, 0); } =20 int nfcmrvl_parse_dt(struct device_node *node, struct nfcmrvl_platform_data *pdata) { - int reset_n_io; - - reset_n_io =3D of_get_named_gpio(node, "reset-n-io", 0); - if (reset_n_io < 0) { - pr_info("no reset-n-io config\n"); - } else if (!gpio_is_valid(reset_n_io)) { - pr_err("invalid reset-n-io GPIO\n"); - return reset_n_io; - } - pdata->reset_n_io =3D reset_n_io; pdata->hci_muxed =3D of_property_read_bool(node, "hci-muxed"); =20 return 0; diff --git a/drivers/nfc/nfcmrvl/nfcmrvl.h b/drivers/nfc/nfcmrvl/nfcmrvl.h index f61a99e553db0..62fa77d587b2b 100644 --- a/drivers/nfc/nfcmrvl/nfcmrvl.h +++ b/drivers/nfc/nfcmrvl/nfcmrvl.h @@ -10,6 +10,8 @@ =20 #include "fw_dnld.h" =20 +struct gpio_desc; + /* Define private flags: */ #define NFCMRVL_NCI_RUNNING 1 #define NFCMRVL_PHY_ERROR 2 @@ -54,7 +56,7 @@ struct nfcmrvl_platform_data { */ =20 /* GPIO that is wired to RESET_N signal */ - int reset_n_io; + struct gpio_desc *reset_gpio; /* Tell if transport is muxed in HCI one */ bool hci_muxed; =20 diff --git a/drivers/nfc/nfcmrvl/uart.c b/drivers/nfc/nfcmrvl/uart.c index 2037cd6d4f4f4..6ea28340bb58e 100644 --- a/drivers/nfc/nfcmrvl/uart.c +++ b/drivers/nfc/nfcmrvl/uart.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -20,7 +21,6 @@ static unsigned int hci_muxed; static unsigned int flow_control; static unsigned int break_control; -static int reset_n_io =3D -EINVAL; =20 /* * NFCMRVL NCI OPS @@ -62,9 +62,11 @@ static const struct nfcmrvl_if_ops uart_ops =3D { }; =20 static int nfcmrvl_uart_parse_dt(struct device_node *node, - struct nfcmrvl_platform_data *pdata) + struct nfcmrvl_platform_data *pdata, + struct device *dev) { struct device_node *matched_node; + struct gpio_desc *reset_gpio; int ret; =20 matched_node =3D of_get_compatible_child(node, "marvell,nfc-uart"); @@ -84,6 +86,16 @@ static int nfcmrvl_uart_parse_dt(struct device_node *nod= e, pdata->flow_control =3D of_property_read_bool(matched_node, "flow-control= "); pdata->break_control =3D of_property_read_bool(matched_node, "break-contr= ol"); =20 + reset_gpio =3D devm_fwnode_gpiod_get_optional(dev, + of_fwnode_handle(matched_node), + "reset", GPIOD_OUT_LOW, + "nfcmrvl_reset_n"); + if (IS_ERR(reset_gpio)) { + of_node_put(matched_node); + return PTR_ERR(reset_gpio); + } + pdata->reset_gpio =3D reset_gpio; + of_node_put(matched_node); =20 return 0; @@ -107,13 +119,13 @@ static int nfcmrvl_nci_uart_open(struct nci_uart *nu) */ =20 if (dev && dev->parent && dev->parent->of_node) - if (nfcmrvl_uart_parse_dt(dev->parent->of_node, &config) =3D=3D 0) + if (nfcmrvl_uart_parse_dt(dev->parent->of_node, &config, dev) =3D=3D 0) pdata =3D &config; =20 if (!pdata) { pr_info("No platform data / DT -> fallback to module params\n"); config.hci_muxed =3D hci_muxed; - config.reset_n_io =3D reset_n_io; + config.reset_gpio =3D NULL; config.flow_control =3D flow_control; config.break_control =3D break_control; pdata =3D &config; @@ -201,6 +213,3 @@ MODULE_PARM_DESC(break_control, "Tell if UART driver mu= st drive break signal."); =20 module_param(hci_muxed, uint, 0); MODULE_PARM_DESC(hci_muxed, "Tell if transport is muxed in HCI one."); - -module_param(reset_n_io, int, 0); -MODULE_PARM_DESC(reset_n_io, "GPIO that is wired to RESET_N signal."); diff --git a/drivers/nfc/nfcmrvl/usb.c b/drivers/nfc/nfcmrvl/usb.c index ea73094530968..ac62358445bf8 100644 --- a/drivers/nfc/nfcmrvl/usb.c +++ b/drivers/nfc/nfcmrvl/usb.c @@ -294,7 +294,7 @@ static int nfcmrvl_probe(struct usb_interface *intf, =20 /* No configuration for USB */ memset(&config, 0, sizeof(config)); - config.reset_n_io =3D -EINVAL; + config.reset_gpio =3D NULL; =20 nfc_info(&udev->dev, "intf %p id %p\n", intf, id); =20 --=20 2.47.3 From nobody Thu Apr 9 19:00:49 2026 Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87E0136A03F; Fri, 6 Mar 2026 04:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.129 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772769662; cv=none; b=jHFIT56q3GBcISJNuurv9E2bxYmJky14bNVbRIBIt2iu1UimeqAueSHosoyDRLB+Q2wso8a7R9LuoPWkx7H4Ha4WThs649FiEwQrXROJDrL94WmcD4cd112cFL2YQzhKYxpT4u90ZdLDYeDR9bt5HWkuzkVq1fGzLqWANcnfgYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772769662; c=relaxed/simple; bh=CJcKGBki7v36X72qsmzgsFmDkpf9cdrWvVWNI9hOGkc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VluxsILZp9nsWTbpaoVtvDJqUBT1Xv4C+GMWxrafKbDNH133fRNbnSusYjIeqNbjAhNjbWrYsvL79g2lThS9oFRpz28UzuPlGts/7xWT0qJ/mysl8UtWMNDJ4hUOKjLTYMhGZrlrhe5aZrT97FOa7zwE9muniUUyYETuBTfS6Gs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=vimux.org; spf=none smtp.mailfrom=vimux.org; arc=none smtp.client-ip=54.204.34.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=vimux.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=vimux.org X-QQ-mid: esmtpsz19t1772769634t18b456ed X-QQ-Originating-IP: BNKoUk/EEm2ysShfV34K1wbEp9Va9qA1DojK65Fhm/I= Received: from localhost.localdomain ( [119.167.27.18]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 06 Mar 2026 12:00:23 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 7250432472425711869 EX-QQ-RecipientCnt: 8 From: Jialu Xu To: xujialu@vimux.org Cc: brgl@kernel.org, kees@kernel.org, krzk@kernel.org, linusw@kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 3/3] gpio: remove of_get_named_gpio() and Date: Fri, 6 Mar 2026 11:59:13 +0800 Message-ID: <554DC15F66B052BB+20260306035909.2447844-7-xujialu@vimux.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:vimux.org:qybglogicsvrsz:qybglogicsvrsz3b-0 X-QQ-XMAILINFO: Nxo56qkCB4EiaeIznA6Y2Y6th2NxT1tsNFQjMt2a7YTK9P5yndahLDZl 5SP0Z/qrVx+pwUk2ofkH7hnjAP/z0G1+i67T9Zd0KONbI0ZLnS82p8afRnop/rdx1LjqZ2/ BW4kiIH1are7rBy6ci+8d6WmFo6uMN40Ggj4HmjVBg14xI+U6iP0D6XwLVfqNDK2fA8Ay8p 7ZITh9pnLlwdtV5cHOeTqKePe/WAe4xn68eCF+ui2ybja+2dq/ccgqXwiq7PHM43MKt6cuI EHhwmtIVTFEVCfo92EOsZOgu0xMnG6vDk0hP7F/FiMk4tdFhZWZvW2tJhqeI2xlB1D/PEE3 nkflU3BIk1Q6xx1TqXcvv+rIl6WRCSvGHvV4HK/UClAyCKLkWK+WWmn7F0T6M8hSKA00uwU YLOcjUTgRImeYQ9SZQK4LyyrKNz41wMoiDnbZg04Q24pOKt8OGKATRXkLKZTQKvxx5r+wAl T3oQbsqIxHT+KrPSzD1prACYIRWrCz/+teP2FiBEhTsVjKxmyEp/lsg8r2T25W3+kf88u/E LM07dsQ6Ixco0g3B6fRFJQqtCeR5dxT5/Adw3cPT/vsMDJQxMS2rutfV0R0kFi3ZCRcs7/f 4s9dpcM/6Q7d1LoObSUm26LpSISaLmf1u6gAONh8VWIuTwxQAnuzN2tZ5ijeALvY7wk+T7S hwuY4D5pn5mfIoUP75tznxt+r/Y5mvzvlP9aJLw3Sp1y2OExvs0JjwyWPX6k+8LMkwzjrco n8QdpOUSBlGHrpKfy5pVzy8//WHT1IXue1eY+E8DASirSmlP+1mhRNo2neprIWZXLu5Yl+Z Eh0XxhC9QVz/6s2ISFDMlVm8TesZlgJ+mndBSePTf7xjeriwkyISeMI0xDsP2uEXYgBMCsb pFwe71mGfh7oqy6XjmVMO79UzG04JacpB19SLyj6gsM+At3d3QZ95doin2l6Y+lx5zJrEIi 5CGWniue+Y4thErmu6sCMNpMrHcSSAtRFZinjaOYrEfxKWRj3xQQ7oS6RSi84VZGaU7Vy1Q tavcDv63g2kJI2sA6WmqXsLRanxdImCMVdAlwTPg== X-QQ-XMRINFO: Mp0Kj//9VHAxzExpfF+O8yhSrljjwrznVg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" All in-tree consumers have been converted to the descriptor-based API. Remove the deprecated of_get_named_gpio() helper, delete the header, and drop the corresponding entry from MAINTAINERS. Also remove the completed TODO item for this cleanup. Signed-off-by: Jialu Xu Reviewed-by: Linus Walleij --- MAINTAINERS | 1 - drivers/gpio/TODO | 28 ---------------------------- drivers/gpio/gpiolib-of.c | 27 --------------------------- include/linux/of_gpio.h | 38 -------------------------------------- 4 files changed, 94 deletions(-) delete mode 100644 include/linux/of_gpio.h diff --git a/MAINTAINERS b/MAINTAINERS index 61bf550fd37c2..8152fa2158295 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10958,7 +10958,6 @@ F: drivers/gpio/ F: include/dt-bindings/gpio/ F: include/linux/gpio.h F: include/linux/gpio/ -F: include/linux/of_gpio.h K: (devm_)?gpio_(request|free|direction|get|set) K: GPIOD_FLAGS_BIT_NONEXCLUSIVE K: devm_gpiod_unhinge diff --git a/drivers/gpio/TODO b/drivers/gpio/TODO index 5acaeab029ec6..7ce80fde1f17e 100644 --- a/drivers/gpio/TODO +++ b/drivers/gpio/TODO @@ -58,34 +58,6 @@ Work items: =20 --------------------------------------------------------------------------= ----- =20 -Get rid of - -This header and helpers appeared at one point when there was no proper -driver infrastructure for doing simpler MMIO GPIO devices and there was -no core support for parsing device tree GPIOs from the core library with -the [devm_]gpiod_get() calls we have today that will implicitly go into -the device tree back-end. It is legacy and should not be used in new code. - -Work items: - -- Change all consumer drivers that #include to - #include and stop doing custom parsing of the - GPIO lines from the device tree. This can be tricky and often involves - changing board files, etc. - -- Pull semantics for legacy device tree (OF) GPIO lookups into - gpiolib-of.c: in some cases subsystems are doing custom flags and - lookups for polarity inversion, open drain and what not. As we now - handle this with generic OF bindings, pull all legacy handling into - gpiolib so the library API becomes narrow and deep and handle all - legacy bindings internally. (See e.g. commits 6953c57ab172, - 6a537d48461d etc) - -- Delete when all the above is complete and everything - uses or instead. - ---------------------------------------------------------------------------= ----- - Collect drivers =20 Collect GPIO drivers from arch/* and other places that should be placed diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index 3bdd9af674474..c512d735e85ff 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -446,32 +445,6 @@ static struct gpio_desc *of_get_named_gpiod_flags(cons= t struct device_node *np, return desc; } =20 -/** - * of_get_named_gpio() - Get a GPIO number to use with GPIO API - * @np: device node to get GPIO from - * @propname: Name of property containing gpio specifier(s) - * @index: index of the GPIO - * - * **DEPRECATED** This function is deprecated and must not be used in new = code. - * - * Returns: - * GPIO number to use with Linux generic GPIO API, or one of the errno - * value on the error condition. - */ -int of_get_named_gpio(const struct device_node *np, const char *propname, - int index) -{ - struct gpio_desc *desc; - - desc =3D of_get_named_gpiod_flags(np, propname, index, NULL); - - if (IS_ERR(desc)) - return PTR_ERR(desc); - else - return desc_to_gpio(desc); -} -EXPORT_SYMBOL_GPL(of_get_named_gpio); - /* Converts gpio_lookup_flags into bitmask of GPIO_* values */ static unsigned long of_convert_gpio_flags(enum of_gpio_flags flags) { diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h deleted file mode 100644 index d0f66a5e1b2a7..0000000000000 --- a/include/linux/of_gpio.h +++ /dev/null @@ -1,38 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * OF helpers for the GPIO API - * - * Copyright (c) 2007-2008 MontaVista Software, Inc. - * - * Author: Anton Vorontsov - */ - -#ifndef __LINUX_OF_GPIO_H -#define __LINUX_OF_GPIO_H - -#include -#include -#include /* FIXME: Shouldn't be here */ -#include - -struct device_node; - -#ifdef CONFIG_OF_GPIO - -extern int of_get_named_gpio(const struct device_node *np, - const char *list_name, int index); - -#else /* CONFIG_OF_GPIO */ - -#include - -/* Drivers may not strictly depend on the GPIO support, so let them link. = */ -static inline int of_get_named_gpio(const struct device_node *np, - const char *propname, int index) -{ - return -ENOSYS; -} - -#endif /* CONFIG_OF_GPIO */ - -#endif /* __LINUX_OF_GPIO_H */ --=20 2.47.3