get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2215571,
    "url": "http://patchwork.ozlabs.org/api/patches/2215571/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260324-dev-b4-aaeon-mcu-driver-v4-3-afb011df4794@bootlin.com/",
    "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": "<20260324-dev-b4-aaeon-mcu-driver-v4-3-afb011df4794@bootlin.com>",
    "list_archive_url": null,
    "date": "2026-03-24T19:24:29",
    "name": "[v4,3/5] mfd: aaeon: Add SRG-IMX8P MCU driver",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "b6de4229f47dcb5aea9cc42ac109cd590ce6fb9f",
    "submitter": {
        "id": 82054,
        "url": "http://patchwork.ozlabs.org/api/people/82054/?format=api",
        "name": "Thomas Perrot (Schneider Electric)",
        "email": "thomas.perrot@bootlin.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260324-dev-b4-aaeon-mcu-driver-v4-3-afb011df4794@bootlin.com/mbox/",
    "series": [
        {
            "id": 497335,
            "url": "http://patchwork.ozlabs.org/api/series/497335/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=497335",
            "date": "2026-03-24T19:24:29",
            "name": "Add support for AAEON SRG-IMX8P MCU",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/497335/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2215571/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2215571/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-34103-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=bootlin.com header.i=@bootlin.com header.a=rsa-sha256\n header.s=dkim header.b=ninpLKDa;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.232.135.74; helo=sto.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34103-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com\n header.b=\"ninpLKDa\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=185.171.202.116",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=bootlin.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=bootlin.com"
        ],
        "Received": [
            "from sto.lore.kernel.org (sto.lore.kernel.org [172.232.135.74])\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 4fgKl451qsz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 06:25:52 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id 8A21F304648F\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 24 Mar 2026 19:25:14 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6131230EF7F;\n\tTue, 24 Mar 2026 19:24:57 +0000 (UTC)",
            "from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116])\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 221DA2C0F84;\n\tTue, 24 Mar 2026 19:24:55 +0000 (UTC)",
            "from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233])\n\tby smtpout-04.galae.net (Postfix) with ESMTPS id 5F857C5809C;\n\tTue, 24 Mar 2026 19:25:21 +0000 (UTC)",
            "from mail.galae.net (mail.galae.net [212.83.136.155])\n\tby smtpout-01.galae.net (Postfix) with ESMTPS id F06B0601A0;\n\tTue, 24 Mar 2026 19:24:53 +0000 (UTC)",
            "from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon)\n with ESMTPSA id A50CC1045081D;\n\tTue, 24 Mar 2026 20:24:50 +0100 (CET)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774380297; cv=none;\n b=pZWE/DkwZ/QmT468Ec0A1qdF5Wqg1Ze1Vni43TjxN5Sq/jPNrUOIcoAf3v0buFvgTU3q1KtQI8+zWpbhNDq86sNRxikMec/PsLt1OXDNTrvheQld3VCrlsaHcBca8408i6X8g6C+kECtXSh6M0iDFq2/XDrqd8u9Bu5YHJgCg3E=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774380297; c=relaxed/simple;\n\tbh=d+BkQJpdUUbVfiWpGXEH+iAN3nggRjJsqUblHTPBDXI=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=gEhSFmZFpeW9KeFHfFQPjqE63UaBnYiO7sQIlPxHqUl5KdkPG/0rAVuWRwTvoRd/ikWw7GkgETpRrVC5dYKM7IZI0KVo98MrjtNjFe1Qi3blHbSJgCTc4Be5aqbGWS9tdAmnJVDD+d/HbTgQlV3n8Sc/2vYec+0frgfUpDeUWCI=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=bootlin.com;\n spf=pass smtp.mailfrom=bootlin.com;\n dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com\n header.b=ninpLKDa; arc=none smtp.client-ip=185.171.202.116",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim;\n\tt=1774380292; h=from:subject:date:message-id:to:cc:mime-version:content-type:\n\t content-transfer-encoding:in-reply-to:references;\n\tbh=UGL1FngKXWCgRtQ6FWCBPJEK7tWFqJr3/YLfN6h8aC8=;\n\tb=ninpLKDaCQwZrqbu9aEhtg8IHrPbrK0GfIfkzp9MC0qBIvAVyhr/H5vKeRcp/GhMFBTNtQ\n\tr0DN+W6sn49U2TUwy7JRMQZ2W8aOhCiAYkqeXMEXNYdEv6XvpkyxvQaJmj4XTREXkfdlul\n\tV/XON+22A0M5rlzWRLpNClFeU0b/VMxRBxaPr/eQQ4a44K3Dfi5BmPsLFcB1/5Gq+9jQn1\n\t8XFnEngw+NLTg3gY8nMj5xN0MwaDb3xWVuUdVwqb8d5pCbMU/Sb3TjQ8xGvxPx1jvvWALt\n\tZC/LHtJo59URMY3Jlj/m6jQTFUnsc2CauLV91a86hHpYsWsi2lCyvacazdqXNQ==",
        "From": "\"Thomas Perrot (Schneider Electric)\" <thomas.perrot@bootlin.com>",
        "Date": "Tue, 24 Mar 2026 20:24:29 +0100",
        "Subject": "[PATCH v4 3/5] mfd: aaeon: Add SRG-IMX8P MCU driver",
        "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": "8bit",
        "Message-Id": "<20260324-dev-b4-aaeon-mcu-driver-v4-3-afb011df4794@bootlin.com>",
        "References": "<20260324-dev-b4-aaeon-mcu-driver-v4-0-afb011df4794@bootlin.com>",
        "In-Reply-To": "<20260324-dev-b4-aaeon-mcu-driver-v4-0-afb011df4794@bootlin.com>",
        "To": "Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>,\n  Conor Dooley <conor+dt@kernel.org>, Linus Walleij <linusw@kernel.org>,\n  Bartosz Golaszewski <brgl@kernel.org>, Shawn Guo <shawnguo@kernel.org>,\n  Sascha Hauer <s.hauer@pengutronix.de>,\n  Pengutronix Kernel Team <kernel@pengutronix.de>,\n  Fabio Estevam <festevam@gmail.com>,\n =?utf-8?b?SsOpcsOpbWllIERhdXRoZXJpYmVz?= <jeremie.dautheribes@bootlin.com>,\n  Wim Van Sebroeck <wim@linux-watchdog.org>,\n  Guenter Roeck <linux@roeck-us.net>, Lee Jones <lee@kernel.org>",
        "Cc": "devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-gpio@vger.kernel.org, imx@lists.linux.dev,\n linux-arm-kernel@lists.infradead.org, linux-watchdog@vger.kernel.org,\n Thomas Petazzoni <thomas.petazzoni@bootlin.com>,\n Miquel Raynal <miquel.raynal@bootlin.com>,\n \"Thomas Perrot (Schneider Electric)\" <thomas.perrot@bootlin.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=8495;\n i=thomas.perrot@bootlin.com; h=from:subject:message-id;\n bh=d+BkQJpdUUbVfiWpGXEH+iAN3nggRjJsqUblHTPBDXI=;\n b=owEB7QES/pANAwAKAZ/ACwVx/grtAcsmYgBpwuT29nCclVo5UcagNOTSFbhpzSvAHxpmSAOXI\n dmrLjIZLmqJAbMEAAEKAB0WIQSHQHfGpqMKIwOoEiGfwAsFcf4K7QUCacLk9gAKCRCfwAsFcf4K\n 7fnWC/0Wblk1hquJN3CTe5tAQOz9fowxysDxw/rU7ZG01TUlpCQZNCQBH0Ln9Dju07ca7bimzpL\n sEYEpsfBsUU2dbSn6FBjWvXDCdX/TIfxKdLE82t9ufFvO14sPo80aLaiyiNPRpzE6DzjtnOowOP\n 1vt85pj0xKx/D6OCb2sE8A4ln6pye4oYgA0St21GXSze73Q4fMQZdpTSk/fKapTlQytxmYQwSf0\n 2fx5WKYgooi39/o7cIhAFhcsaBvmLBG7uzzud93Z2PTIm9+HdKgVqvPrS+XtODKsEoAYJw8+Eb1\n OL/E0+K4iMgZXQX1V3Pd8k076ywF0zlHAEAjDAElEXRArpmeINiGNK8mCbmAi4LRcJxZAS2fLt2\n 19BVlfRAG6B4Fklef22FHi0q2xftGpB/u1Fs7+XA+eTmHdy1VsBEljeUwFlm1mpGxHtkQEJYxMQ\n d5F+IrTiqGgIpocnTtBKnLA0JkcV9YzodV5YyijDcFU8HpVJw0kRHtTLRYYBEu7Bgo+vc=",
        "X-Developer-Key": "i=thomas.perrot@bootlin.com; a=openpgp;\n fpr=874077C6A6A30A2303A812219FC00B0571FE0AED",
        "X-Last-TLS-Session-Version": "TLSv1.3"
    },
    "content": "Add Multi-Function Device (MFD) driver for the Aaeon SRG-IMX8P\nembedded controller. This driver provides the core I2C communication\ninterface and registers child devices (GPIO and watchdog controllers).\n\nThe driver implements a custom regmap bus over I2C to match the MCU's\nfixed 3-byte command format [opcode, arg, value]. Register addresses\nare encoded as 16-bit values (opcode << 8 | arg) using the\nAAEON_MCU_REG() macro defined in the shared header. The regmap\ninstance is shared with child drivers via dev_get_regmap(). Concurrent\nI2C accesses from child drivers are serialized by regmap's built-in\nlocking.\n\nCo-developed-by: Jérémie Dautheribes (Schneider Electric) <jeremie.dautheribes@bootlin.com>\nSigned-off-by: Jérémie Dautheribes (Schneider Electric) <jeremie.dautheribes@bootlin.com>\nSigned-off-by: Thomas Perrot (Schneider Electric) <thomas.perrot@bootlin.com>\n---\n MAINTAINERS                   |   2 +\n drivers/mfd/Kconfig           |  10 +++\n drivers/mfd/Makefile          |   1 +\n drivers/mfd/aaeon-mcu.c       | 155 ++++++++++++++++++++++++++++++++++++++++++\n include/linux/mfd/aaeon-mcu.h |  20 ++++++\n 5 files changed, 188 insertions(+)",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex ea9d55f76f3509c7f6ba6d1bc86ca2e2e71aa954..f91b6a1826d04bef8a0f88221f6c8e8a3652cd77 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -191,6 +191,8 @@ M:\tThomas Perrot <thomas.perrot@bootlin.com>\n R:\tJérémie Dautheribes <jeremie.dautheribes@bootlin.com>\n S:\tMaintained\n F:\tDocumentation/devicetree/bindings/mfd/aaeon,srg-imx8p-mcu.yaml\n+F:\tdrivers/mfd/aaeon-mcu.c\n+F:\tinclude/linux/mfd/aaeon-mcu.h\n \n AAEON UPBOARD FPGA MFD DRIVER\n M:\tThomas Richard <thomas.richard@bootlin.com>\ndiff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig\nindex aace5766b38aa5e46e32a8a7b42eea238159fbcf..7a1ceedece899faad7a03a1fe7b1c91b72253c05 100644\n--- a/drivers/mfd/Kconfig\n+++ b/drivers/mfd/Kconfig\n@@ -1574,6 +1574,16 @@ config AB8500_CORE\n \t  the irq_chip parts for handling the Mixed Signal chip events.\n \t  This chip embeds various other multimedia functionalities as well.\n \n+config MFD_AAEON_MCU\n+\ttristate \"Aaeon SRG-IMX8P MCU Driver\"\n+\tdepends on I2C || COMPILE_TEST\n+\tselect MFD_CORE\n+\thelp\n+\t  Select this option to enable support for the Aaeon SRG-IMX8P\n+\t  onboard microcontroller (MCU). This driver provides the core\n+\t  functionality to communicate with the MCU over I2C. The MCU\n+\t  provides GPIO and watchdog functionality.\n+\n config MFD_DB8500_PRCMU\n \tbool \"ST-Ericsson DB8500 Power Reset Control Management Unit\"\n \tdepends on UX500_SOC_DB8500\ndiff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile\nindex e75e8045c28afae975ac61d282b3b85af5440119..34db5b033584368b7a269b1eef12528a74baf8f5 100644\n--- a/drivers/mfd/Makefile\n+++ b/drivers/mfd/Makefile\n@@ -8,6 +8,7 @@ obj-$(CONFIG_MFD_88PM860X)\t+= 88pm860x.o\n obj-$(CONFIG_MFD_88PM800)\t+= 88pm800.o 88pm80x.o\n obj-$(CONFIG_MFD_88PM805)\t+= 88pm805.o 88pm80x.o\n obj-$(CONFIG_MFD_88PM886_PMIC)\t+= 88pm886.o\n+obj-$(CONFIG_MFD_AAEON_MCU)\t+= aaeon-mcu.o\n obj-$(CONFIG_MFD_ACT8945A)\t+= act8945a.o\n obj-$(CONFIG_MFD_SM501)\t\t+= sm501.o\n obj-$(CONFIG_ARCH_BCM2835)\t+= bcm2835-pm.o\ndiff --git a/drivers/mfd/aaeon-mcu.c b/drivers/mfd/aaeon-mcu.c\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..5a969890d201c027eb25c324b4d4d89b1f8c563e\n--- /dev/null\n+++ b/drivers/mfd/aaeon-mcu.c\n@@ -0,0 +1,155 @@\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+/*\n+ * Aaeon MCU driver\n+ *\n+ * Copyright (C) 2025 Bootlin\n+ * Author: Jérémie Dautheribes <jeremie.dautheribes@bootlin.com>\n+ * Author: Thomas Perrot <thomas.perrot@bootlin.com>\n+ */\n+\n+#include <linux/err.h>\n+#include <linux/i2c.h>\n+#include <linux/mfd/core.h>\n+#include <linux/platform_device.h>\n+#include <linux/regmap.h>\n+\n+static const struct mfd_cell aaeon_mcu_devs[] = {\n+\t{\n+\t\t.name = \"aaeon-mcu-wdt\",\n+\t},\n+\t{\n+\t\t.name = \"aaeon-mcu-gpio\",\n+\t},\n+};\n+\n+/*\n+ * Custom regmap bus for the Aaeon MCU I2C protocol.\n+ *\n+ * The MCU uses a fixed 3-byte command format [opcode, arg, value] followed\n+ * by a 1-byte response.  It requires a STOP condition between the command\n+ * write and the response read, so two separate i2c_transfer() calls are\n+ * issued.  The regmap lock serialises concurrent accesses from the GPIO\n+ * and watchdog child drivers.\n+ *\n+ * Register addresses are encoded as a 16-bit big-endian value where the\n+ * high byte is the opcode and the low byte is the argument, matching the\n+ * wire layout produced by regmap for reg_bits=16.\n+ */\n+\n+static int aaeon_mcu_regmap_write(void *context, const void *data, size_t count)\n+{\n+\tstruct i2c_client *client = context;\n+\t/* data = [opcode, arg, value] as formatted by regmap */\n+\tstruct i2c_msg write_msg = {\n+\t\t.addr  = client->addr,\n+\t\t.flags = 0,\n+\t\t.buf   = (u8 *)data,\n+\t\t.len   = count,\n+\t};\n+\tu8 rsp;\n+\t/* The MCU always sends a response byte after each command; discard it. */\n+\tstruct i2c_msg rsp_msg = {\n+\t\t.addr  = client->addr,\n+\t\t.flags = I2C_M_RD,\n+\t\t.buf   = &rsp,\n+\t\t.len   = 1,\n+\t};\n+\tint ret;\n+\n+\tret = i2c_transfer(client->adapter, &write_msg, 1);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\tif (ret != 1)\n+\t\treturn -EIO;\n+\n+\tret = i2c_transfer(client->adapter, &rsp_msg, 1);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\tif (ret != 1)\n+\t\treturn -EIO;\n+\n+\treturn 0;\n+}\n+\n+static int aaeon_mcu_regmap_read(void *context, const void *reg_buf,\n+\t\t\t\t size_t reg_size, void *val_buf, size_t val_size)\n+{\n+\tstruct i2c_client *client = context;\n+\t/*\n+\t * reg_buf holds the 2-byte big-endian register address [opcode, arg].\n+\t * Append a trailing 0x00 to form the full 3-byte MCU command.\n+\t */\n+\tu8 cmd[3] = { ((u8 *)reg_buf)[0], ((u8 *)reg_buf)[1], 0x00 };\n+\tstruct i2c_msg write_msg = {\n+\t\t.addr  = client->addr,\n+\t\t.flags = 0,\n+\t\t.buf   = cmd,\n+\t\t.len   = sizeof(cmd),\n+\t};\n+\tstruct i2c_msg read_msg = {\n+\t\t.addr  = client->addr,\n+\t\t.flags = I2C_M_RD,\n+\t\t.buf   = val_buf,\n+\t\t.len   = val_size,\n+\t};\n+\tint ret;\n+\n+\tret = i2c_transfer(client->adapter, &write_msg, 1);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\tif (ret != 1)\n+\t\treturn -EIO;\n+\n+\tret = i2c_transfer(client->adapter, &read_msg, 1);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\tif (ret != 1)\n+\t\treturn -EIO;\n+\n+\treturn 0;\n+}\n+\n+static const struct regmap_bus aaeon_mcu_regmap_bus = {\n+\t.write = aaeon_mcu_regmap_write,\n+\t.read  = aaeon_mcu_regmap_read,\n+};\n+\n+static const struct regmap_config aaeon_mcu_regmap_config = {\n+\t.reg_bits          = 16,\n+\t.val_bits          = 8,\n+\t.reg_format_endian = REGMAP_ENDIAN_BIG,\n+\t.cache_type        = REGCACHE_NONE,\n+};\n+\n+static int aaeon_mcu_probe(struct i2c_client *client)\n+{\n+\tstruct regmap *regmap;\n+\n+\tregmap = devm_regmap_init(&client->dev, &aaeon_mcu_regmap_bus,\n+\t\t\t\t  client, &aaeon_mcu_regmap_config);\n+\tif (IS_ERR(regmap))\n+\t\treturn PTR_ERR(regmap);\n+\n+\treturn devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE,\n+\t\t\t\t    aaeon_mcu_devs, ARRAY_SIZE(aaeon_mcu_devs),\n+\t\t\t\t    NULL, 0, NULL);\n+}\n+\n+static const struct of_device_id aaeon_mcu_of_match[] = {\n+\t{ .compatible = \"aaeon,srg-imx8p-mcu\" },\n+\t{},\n+};\n+MODULE_DEVICE_TABLE(of, aaeon_mcu_of_match);\n+\n+static struct i2c_driver aaeon_mcu_driver = {\n+\t.driver = {\n+\t\t.name = \"aaeon_mcu\",\n+\t\t.of_match_table = aaeon_mcu_of_match,\n+\t},\n+\t.probe = aaeon_mcu_probe,\n+};\n+module_i2c_driver(aaeon_mcu_driver);\n+\n+MODULE_DESCRIPTION(\"Aaeon MCU Driver\");\n+MODULE_AUTHOR(\"Jérémie Dautheribes <jeremie.dautheribes@bootlin.com>\");\n+MODULE_LICENSE(\"GPL\");\ndiff --git a/include/linux/mfd/aaeon-mcu.h b/include/linux/mfd/aaeon-mcu.h\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..861003f6dfd20424c3785008bd2cf89aaa1715b9\n--- /dev/null\n+++ b/include/linux/mfd/aaeon-mcu.h\n@@ -0,0 +1,20 @@\n+/* SPDX-License-Identifier: GPL-2.0-or-later */\n+/*\n+ * Aaeon MCU driver definitions\n+ *\n+ * Copyright (C) 2025 Bootlin\n+ * Author: Jérémie Dautheribes <jeremie.dautheribes@bootlin.com>\n+ * Author: Thomas Perrot <thomas.perrot@bootlin.com>\n+ */\n+\n+#ifndef __LINUX_MFD_AAEON_MCU_H\n+#define __LINUX_MFD_AAEON_MCU_H\n+\n+/*\n+ * MCU register address: the high byte is the command opcode, the low\n+ * byte is the argument.  This matches the 3-byte wire format\n+ * [opcode, arg, value] used by the MCU I2C protocol.\n+ */\n+#define AAEON_MCU_REG(op, arg)\t(((op) << 8) | (arg))\n+\n+#endif /* __LINUX_MFD_AAEON_MCU_H */\n",
    "prefixes": [
        "v4",
        "3/5"
    ]
}