Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2197767/?format=api
{ "id": 2197767, "url": "http://patchwork.ozlabs.org/api/patches/2197767/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260218-hid-mcp2221-gpio-v1-1-a2ba53867354@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": "<20260218-hid-mcp2221-gpio-v1-1-a2ba53867354@kernel.org>", "list_archive_url": null, "date": "2026-02-18T13:44:38", "name": "HID: mcp2221: Add module parameter to enfoce GPIO mode", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "6a296164514b6fde3e03eff46e6c90c258c26beb", "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/20260218-hid-mcp2221-gpio-v1-1-a2ba53867354@kernel.org/mbox/", "series": [ { "id": 492551, "url": "http://patchwork.ozlabs.org/api/series/492551/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=492551", "date": "2026-02-18T13:44:38", "name": "HID: mcp2221: Add module parameter to enfoce GPIO mode", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/492551/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2197767/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2197767/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-gpio+bounces-31794-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=lrPVXGe+;\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-31794-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=\"lrPVXGe+\"", "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 4fGHn96gwVz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 00:44:45 +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 E1B2D300D965\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 18 Feb 2026 13:44:42 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 3E9DE32721D;\n\tWed, 18 Feb 2026 13:44:42 +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 02ECC25F984;\n\tWed, 18 Feb 2026 13:44:41 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id 63DE1C19421;\n\tWed, 18 Feb 2026 13:44:40 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771422282; cv=none;\n b=HUA9mrF0Fbs5brXosWZG5T9/QoJ+PGrvFiGo93ROIgjW0j8iUgLD1OYE6gr+4llxnbF4eWB+bJtuSE7teRcwsK+TMNtPR58CE0NdW2VT79RUxPrAAbVCuTQBdpIKI03s7y6WfFzOyoDl6/BbG+X3w0DreDTW8ItP9iJXV0YXWiI=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771422282; c=relaxed/simple;\n\tbh=LRzf+tcHihPY5HIRGI/oAgg3YAIzSJscQ/e9XCC8eJY=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc;\n b=S+7FyaL2TKlPbgQfJcbhescKNbokZhNXmB2yV6Jynm3ALUTTJPdqsqekFPM5wdN1JPowQ5sILLC4qj5cRyj1BnkLUU6rLCCGm80wf8aRZlJVuN8HE7L6NMAU+W2bxVHEjw8C//yiI+wZ0n2OjDGw4SzTxn7B9vk0N0fBkSWOVuo=", "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=lrPVXGe+; 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=1771422281;\n\tbh=LRzf+tcHihPY5HIRGI/oAgg3YAIzSJscQ/e9XCC8eJY=;\n\th=From:Date:Subject:To:Cc:From;\n\tb=lrPVXGe+RbFh9EYOXmJL5xXbuYXW1Q6+/aNlcf4FSk83DVoAQc/DDNLBUy3ePiuo2\n\t OoZJMa6j/TgaFfRg/H4HY8dGo6QqnYqaTtl41swVzR5KmqI5LQjpu+Fx2M1jsXLWIs\n\t 7vkWjs4+iI3eWJfvgwXMxpobcmq5+4oFrWGctJHbGGzxgrxBcBU6oWV8FrYTet05el\n\t gUOpsgidBAQvS9M/QgsBPoRO5B22xfvNg/9vbAfnhFKrkbH/XiZPi0gA8cIkjewK75\n\t SX5DrprmyjWGH7ex26KBesxR82Ew+vtGOnkRdrooz+w0KuNVfO17ZkdUtnUxTU6E6Y\n\t ZVADNmw792ZGw==", "From": "Linus Walleij <linusw@kernel.org>", "Date": "Wed, 18 Feb 2026 14:44:38 +0100", "Subject": "[PATCH] HID: mcp2221: Add module parameter to enfoce GPIO mode", "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": "<20260218-hid-mcp2221-gpio-v1-1-a2ba53867354@kernel.org>", "X-B4-Tracking": "v=1; b=H4sIAAAAAAAC/x3MQQqAIBBA0avErBvQKUy6SrQIG2sWqShEIN09a\n fkW/1conIULzF2FzLcUiaFB9x24cwsHo+zNQIqMIm3xlB0vl4hI45Ek4mj85PRmButGaFnK7OX\n 5l8v6vh/yYELzYgAAAA==", "X-Change-ID": "20260218-hid-mcp2221-gpio-46f7c1a638c4", "To": "Rishi Gupta <gupt21@gmail.com>, Jiri Kosina <jikos@kernel.org>,\n Benjamin Tissoires <bentiss@kernel.org>", "Cc": "linux-input@vger.kernel.org, linux-gpio@vger.kernel.org,\n Linus Walleij <linusw@kernel.org>", "X-Mailer": "b4 0.14.3" }, "content": "Add a module parameter to MCP2221 to enfor GPIO mode on the\ngeneral purpose pins GP0 thru GP3.\n\nIf I plug a device of this type into my machine, it will use the\nGP0, GP1, GP2 and GP3 pins for IIO voltage readings by default\nif CONFIG_IIO is set.\n\nHowever there may be cases where IIO is available but we want to\nuse the GP0 thru GP3 lines for GPIO anyway.\n\nExample use:\n\ninsmode hid-mcp2221.ko gpio_mode_enforce=1\n\nResult in dmesg:\nmcp2221 0003:04D8:00DD.0005: GPIO 0 not in gpio mode\nmcp2221 0003:04D8:00DD.0005: GPIO 1 not in gpio mode\nmcp2221 0003:04D8:00DD.0005: GPIO 2 not in gpio mode\nmcp2221 0003:04D8:00DD.0005: GPIO 3 not in gpio mode\nmcp2221 0003:04D8:00DD.0005: Set GPIO mode for gpio pin 0!\nmcp2221 0003:04D8:00DD.0005: Set GPIO mode for gpio pin 1!\nmcp2221 0003:04D8:00DD.0005: Set GPIO mode for gpio pin 2!\nmcp2221 0003:04D8:00DD.0005: Set GPIO mode for gpio pin 3!\n\nAfter this the gpiolib tools such as gpioset can be used to alter\nthe GPIO line values successfully.\n\nSigned-off-by: Linus Walleij <linusw@kernel.org>\n---\n drivers/hid/hid-mcp2221.c | 18 ++++++++++++++----\n 1 file changed, 14 insertions(+), 4 deletions(-)\n\n\n---\nbase-commit: 05f7e89ab9731565d8a62e3b5d1ec206485eeb0b\nchange-id: 20260218-hid-mcp2221-gpio-46f7c1a638c4\n\nBest regards,", "diff": "diff --git a/drivers/hid/hid-mcp2221.c b/drivers/hid/hid-mcp2221.c\nindex 33603b019f97..58695f3f9e9d 100644\n--- a/drivers/hid/hid-mcp2221.c\n+++ b/drivers/hid/hid-mcp2221.c\n@@ -19,8 +19,15 @@\n #include <linux/gpio/driver.h>\n #include <linux/iio/iio.h>\n #include <linux/minmax.h>\n+#include <linux/moduleparam.h>\n #include \"hid-ids.h\"\n \n+static bool gpio_mode_enforce;\n+\n+module_param(gpio_mode_enforce, bool, 0644);\n+MODULE_PARM_DESC(gpio_mode_enforce,\n+\t \"Enfore GPIO mode for GP0 thru GP3 (default: false, will be used for IIO)\");\n+\n /* Commands codes in a raw output report */\n enum {\n \tMCP2221_I2C_WR_DATA = 0x90,\n@@ -648,7 +655,7 @@ static int mcp2221_check_gpio_pinfunc(struct mcp2221 *mcp)\n \tint needgpiofix = 0;\n \tint ret;\n \n-\tif (IS_ENABLED(CONFIG_IIO))\n+\tif (IS_ENABLED(CONFIG_IIO) && !gpio_mode_enforce)\n \t\treturn 0;\n \n \tret = mcp_gpio_read_sram(mcp);\n@@ -1043,7 +1050,8 @@ static void mcp2221_remove(struct hid_device *hdev)\n #if IS_REACHABLE(CONFIG_IIO)\n \tstruct mcp2221 *mcp = hid_get_drvdata(hdev);\n \n-\tcancel_delayed_work_sync(&mcp->init_work);\n+\tif (!gpio_mode_enforce)\n+\t\tcancel_delayed_work_sync(&mcp->init_work);\n #endif\n }\n \n@@ -1317,8 +1325,10 @@ static int mcp2221_probe(struct hid_device *hdev,\n #endif\n \n #if IS_REACHABLE(CONFIG_IIO)\n-\tINIT_DELAYED_WORK(&mcp->init_work, mcp_init_work);\n-\tschedule_delayed_work(&mcp->init_work, msecs_to_jiffies(100));\n+\tif (!gpio_mode_enforce) {\n+\t\tINIT_DELAYED_WORK(&mcp->init_work, mcp_init_work);\n+\t\tschedule_delayed_work(&mcp->init_work, msecs_to_jiffies(100));\n+\t}\n #endif\n \n \treturn 0;\n", "prefixes": [] }