Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217401/?format=api
{ "id": 2217401, "url": "http://patchwork.ozlabs.org/api/patches/2217401/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260328-mips-input-rb532-button-v1-2-98e201621501@kernel.org/", "project": { "id": 42, "url": "http://patchwork.ozlabs.org/api/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": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260328-mips-input-rb532-button-v1-2-98e201621501@kernel.org>", "list_archive_url": null, "date": "2026-03-28T15:55:48", "name": "[2/2] MIPS/mtd: Handle READY GPIO in generic NAND platform data", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "41d86cdae9762c94a1e1b09e14038ef457b2d244", "submitter": { "id": 92050, "url": "http://patchwork.ozlabs.org/api/people/92050/?format=api", "name": "Linus Walleij", "email": "linusw@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260328-mips-input-rb532-button-v1-2-98e201621501@kernel.org/mbox/", "series": [ { "id": 497876, "url": "http://patchwork.ozlabs.org/api/series/497876/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=497876", "date": "2026-03-28T15:55:46", "name": "MIPS RB532 GPIO descriptor conversion", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497876/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217401/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217401/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-gpio+bounces-34352-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\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=Bm7fMoYF;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34352-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"Bm7fMoYF\"", "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201" ], "Received": [ "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fjj1M1DsKz1y1j\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 29 Mar 2026 03:01:27 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 9D33830668B6\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 15:55:58 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1C822376472;\n\tSat, 28 Mar 2026 15:55:57 +0000 (UTC)", "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id D3923352927;\n\tSat, 28 Mar 2026 15:55:56 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id 64A26C2BC86;\n\tSat, 28 Mar 2026 15:55:54 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774713356; cv=none;\n b=AYkg6vzRnyNaldCPyybmoHtPVb/KGdtDnlyfxhA244TXXw+0wuXu3gtuN3aV6s2AJyjlcqeltHEH6zbGlW4CaaW0LvGdRGOQo32L5+87exGpPaSDgR9ojvjP85NDFWyP91AaiyRL5grT5PVnVVIzPUDHVnXzO3djsFzf0IjBoIE=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774713356; c=relaxed/simple;\n\tbh=UD/TwSuuylvsTVk6WuLqLc/i823tJemYw2VTGjQDzOU=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=kMgKiyVhwGX4uyRyXSoWxqVEmksfTZAXyYtqr3rdWe5Ff/RS9HFerBnAgbY7e2OUQrDSAd1ytgY9iwoVKTCcC7rfuT9jcwsXHLq2YrY8XCjbMPsPF1BSyvvz37dfzfb1lfnTOmAIEfskv24c0ViRZ02+SWqbrgQs+3bXug+SljA=", "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=Bm7fMoYF; arc=none smtp.client-ip=10.30.226.201", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1774713356;\n\tbh=UD/TwSuuylvsTVk6WuLqLc/i823tJemYw2VTGjQDzOU=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=Bm7fMoYFkUbimvOYpNbqJa1zS9jOSlu3hhkd1VIWosEKAiRFMr0AbqbdeuoXQ6za1\n\t slZjp+JbOw4XGUTyGKd83DJdlyE5RLol1fN1LxQZS3Qy5C5ae/SHwu7NvyvLNl+7Kl\n\t Tmy9K7uxnwDUIRiXkcR4sy4eXorE6OLiKOqpKde6NYgCh+LgD0jhwG5nfFsQoePwmZ\n\t 5NBVj5J41BY1UqisNpeBe79Z7tqOQ3DxRnBATawJnrhNFinStUy9sE6tcHzv/y5sVB\n\t +qsZ1B1KWFzbeMgHRm8nwy9ZbvEPdthwa1FuEKJx/2bZcB7mlBXeONsodKpwPcFNS7\n\t d0+YXPgPSQ2hA==", "From": "Linus Walleij <linusw@kernel.org>", "Date": "Sat, 28 Mar 2026 16:55:48 +0100", "Subject": "[PATCH 2/2] MIPS/mtd: Handle READY GPIO in generic NAND platform\n data", "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-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260328-mips-input-rb532-button-v1-2-98e201621501@kernel.org>", "References": "<20260328-mips-input-rb532-button-v1-0-98e201621501@kernel.org>", "In-Reply-To": "<20260328-mips-input-rb532-button-v1-0-98e201621501@kernel.org>", "To": "Thomas Bogendoerfer <tsbogend@alpha.franken.de>,\n Dmitry Torokhov <dmitry.torokhov@gmail.com>,\n Bartosz Golaszewski <brgl@kernel.org>,\n Miquel Raynal <miquel.raynal@bootlin.com>,\n Richard Weinberger <richard@nod.at>, Vignesh Raghavendra <vigneshr@ti.com>", "Cc": "linux-mips@vger.kernel.org, linux-input@vger.kernel.org,\n linux-gpio@vger.kernel.org, linux-mtd@lists.infradead.org,\n Linus Walleij <linusw@kernel.org>", "X-Mailer": "b4 0.14.3" }, "content": "The callbacks into the MIPS RB532 platform to read the GPIO pin\nindicating that the NAND chip is ready are oldschool and does\nnot assign GPIOs as properties to the NAND device.\n\nAdd a capability to the generic platform NAND chip driver to use\na GPIO line to detect if a NAND chip is ready and override the\nplatform-local drv_ready() callback with this check if the GPIO\nis present.\n\nThis makes it possible to drop the legacy include header\n<linux/gpio.h> from the RB532 devices.\n\nSigned-off-by: Linus Walleij <linusw@kernel.org>\n---\n arch/mips/rb532/devices.c | 36 +++++++++++++++++++++---------------\n drivers/mtd/nand/raw/plat_nand.c | 24 +++++++++++++++++++++++-\n 2 files changed, 44 insertions(+), 16 deletions(-)", "diff": "diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c\nindex 3f56d9feb73a..c3d8d96d0ef5 100644\n--- a/arch/mips/rb532/devices.c\n+++ b/arch/mips/rb532/devices.c\n@@ -14,7 +14,6 @@\n #include <linux/platform_device.h>\n #include <linux/mtd/platnand.h>\n #include <linux/mtd/mtd.h>\n-#include <linux/gpio.h>\n #include <linux/gpio/machine.h>\n #include <linux/gpio/property.h>\n #include <linux/gpio_keys.h>\n@@ -135,12 +134,6 @@ static struct platform_device cf_slot0 = {\n \t.num_resources = ARRAY_SIZE(cf_slot0_res),\n };\n \n-/* Resources and device for NAND */\n-static int rb532_dev_ready(struct nand_chip *chip)\n-{\n-\treturn gpio_get_value(GPIO_RDY);\n-}\n-\n static void rb532_cmd_ctrl(struct nand_chip *chip, int cmd, unsigned int ctrl)\n {\n \tunsigned char orbits, nandbits;\n@@ -166,16 +159,23 @@ static struct resource nand_slot0_res[] = {\n };\n \n static struct platform_nand_data rb532_nand_data = {\n-\t.ctrl.dev_ready = rb532_dev_ready,\n \t.ctrl.cmd_ctrl\t= rb532_cmd_ctrl,\n };\n \n-static struct platform_device nand_slot0 = {\n-\t.name = \"gen_nand\",\n-\t.id = -1,\n-\t.resource = nand_slot0_res,\n-\t.num_resources = ARRAY_SIZE(nand_slot0_res),\n-\t.dev.platform_data = &rb532_nand_data,\n+static const struct property_entry nand0_properties[] = {\n+\tPROPERTY_ENTRY_GPIO(\"ready-gpios\", &rb532_gpio0_node,\n+\t\t\t GPIO_RDY, GPIO_ACTIVE_HIGH),\n+\t{ }\n+};\n+\n+static const struct platform_device_info nand0_info __initconst = {\n+\t.name\t\t= \"gen_nand\",\n+\t.id\t\t= PLATFORM_DEVID_NONE,\n+\t.res\t\t= nand_slot0_res,\n+\t.num_res\t= ARRAY_SIZE(nand_slot0_res),\n+\t.data\t\t= &rb532_nand_data,\n+\t.size_data\t= sizeof(struct platform_nand_data),\n+\t.properties\t= nand0_properties,\n };\n \n static struct mtd_partition rb532_partition_info[] = {\n@@ -234,7 +234,6 @@ static struct platform_device rb532_uart = {\n \n static struct platform_device *rb532_devs[] = {\n \t&korina_dev0,\n-\t&nand_slot0,\n \t&cf_slot0,\n \t&rb532_led,\n \t&rb532_uart,\n@@ -321,6 +320,13 @@ static int __init plat_setup_devices(void)\n \t */\n \tsoftware_node_register(&rb532_gpio0_node);\n \n+\tpd = platform_device_register_full(&nand0_info);\n+\tret = PTR_ERR_OR_ZERO(pd);\n+\tif (ret) {\n+\t\tpr_err(\"failed to create NAND slot0 device: %d\\n\", ret);\n+\t\treturn ret;\n+\t}\n+\n \tpd = platform_device_register_full(&rb532_button_info);\n \tret = PTR_ERR_OR_ZERO(pd);\n \tif (ret) {\ndiff --git a/drivers/mtd/nand/raw/plat_nand.c b/drivers/mtd/nand/raw/plat_nand.c\nindex 0bcd455328ef..fe31551bcf5f 100644\n--- a/drivers/mtd/nand/raw/plat_nand.c\n+++ b/drivers/mtd/nand/raw/plat_nand.c\n@@ -6,6 +6,7 @@\n */\n \n #include <linux/err.h>\n+#include <linux/gpio/consumer.h>\n #include <linux/io.h>\n #include <linux/module.h>\n #include <linux/platform_device.h>\n@@ -17,6 +18,7 @@ struct plat_nand_data {\n \tstruct nand_controller\tcontroller;\n \tstruct nand_chip\tchip;\n \tvoid __iomem\t\t*io_base;\n+\tstruct gpio_desc\t*ready_gpio;\n };\n \n static int plat_nand_attach_chip(struct nand_chip *chip)\n@@ -32,6 +34,14 @@ static const struct nand_controller_ops plat_nand_ops = {\n \t.attach_chip = plat_nand_attach_chip,\n };\n \n+/* Resources and device for NAND */\n+static int plat_nand_gpio_dev_ready(struct nand_chip *chip)\n+{\n+\tstruct plat_nand_data *data = nand_get_controller_data(chip);\n+\n+\treturn gpiod_get_value(data->ready_gpio);\n+}\n+\n /*\n * Probe for the NAND device.\n */\n@@ -41,6 +51,7 @@ static int plat_nand_probe(struct platform_device *pdev)\n \tstruct plat_nand_data *data;\n \tstruct mtd_info *mtd;\n \tconst char **part_types;\n+\tstruct nand_chip *chip;\n \tint err = 0;\n \n \tif (!pdata) {\n@@ -59,9 +70,17 @@ static int plat_nand_probe(struct platform_device *pdev)\n \tif (!data)\n \t\treturn -ENOMEM;\n \n+\tdata->ready_gpio = devm_gpiod_get_optional(&pdev->dev, \"ready\",\n+\t\t\t\t\t\t GPIOD_IN);\n+\tif (IS_ERR(data->ready_gpio))\n+\t\treturn dev_err_probe(&pdev->dev, PTR_ERR(data->ready_gpio),\n+\t\t\t\t \"could not get READY GPIO\\n\");\n+\n \tdata->controller.ops = &plat_nand_ops;\n \tnand_controller_init(&data->controller);\n \tdata->chip.controller = &data->controller;\n+\tchip = &data->chip;\n+\tnand_set_controller_data(chip, data);\n \n \tdata->io_base = devm_platform_ioremap_resource(pdev, 0);\n \tif (IS_ERR(data->io_base))\n@@ -74,7 +93,10 @@ static int plat_nand_probe(struct platform_device *pdev)\n \tdata->chip.legacy.IO_ADDR_R = data->io_base;\n \tdata->chip.legacy.IO_ADDR_W = data->io_base;\n \tdata->chip.legacy.cmd_ctrl = pdata->ctrl.cmd_ctrl;\n-\tdata->chip.legacy.dev_ready = pdata->ctrl.dev_ready;\n+\tif (data->ready_gpio)\n+\t\tdata->chip.legacy.dev_ready = plat_nand_gpio_dev_ready;\n+\telse\n+\t\tdata->chip.legacy.dev_ready = pdata->ctrl.dev_ready;\n \tdata->chip.legacy.select_chip = pdata->ctrl.select_chip;\n \tdata->chip.legacy.write_buf = pdata->ctrl.write_buf;\n \tdata->chip.legacy.read_buf = pdata->ctrl.read_buf;\n", "prefixes": [ "2/2" ] }