Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2227944/?format=api
{ "id": 2227944, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2227944/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-i2c/patch/20260424-add-mcu-fan-khadas-vim4-v5-4-afcfa7157b23@aliel.fr/", "project": { "id": 35, "url": "http://patchwork.ozlabs.org/api/1.1/projects/35/?format=api", "name": "Linux I2C development", "link_name": "linux-i2c", "list_id": "linux-i2c.vger.kernel.org", "list_email": "linux-i2c@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260424-add-mcu-fan-khadas-vim4-v5-4-afcfa7157b23@aliel.fr>", "date": "2026-04-24T14:17:35", "name": "[v5,4/8] mfd: khadas-mcu: Add support for VIM4 MCU variant", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "06e86ae18cabb4434cad5d27684c4e4c577793b3", "submitter": { "id": 93204, "url": "http://patchwork.ozlabs.org/api/1.1/people/93204/?format=api", "name": "Ronald Claveau via B4 Relay", "email": "devnull+linux-kernel-dev.aliel.fr@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-i2c/patch/20260424-add-mcu-fan-khadas-vim4-v5-4-afcfa7157b23@aliel.fr/mbox/", "series": [ { "id": 501376, "url": "http://patchwork.ozlabs.org/api/1.1/series/501376/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-i2c/list/?series=501376", "date": "2026-04-24T14:17:34", "name": "Add VIM4 MCU/FAN support", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/501376/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2227944/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2227944/checks/", "tags": {}, "headers": { "Return-Path": "\n <linux-i2c+bounces-17172-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-i2c@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=X7xLkVjg;\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-i2c+bounces-17172-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=\"X7xLkVjg\"", "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 4g2FbC62vpz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 25 Apr 2026 00:24:39 +1000 (AEST)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 8E6F4307A359\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 14:20:21 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 0E53C3DDDB8;\n\tFri, 24 Apr 2026 14:20:11 +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 6CC6F3DC4C5;\n\tFri, 24 Apr 2026 14:20:10 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPS id 16AC9C2BCC9;\n\tFri, 24 Apr 2026 14:20:10 +0000 (UTC)", "from aws-us-west-2-korg-lkml-1.web.codeaurora.org\n (localhost.localdomain [127.0.0.1])\n\tby smtp.lore.kernel.org (Postfix) with ESMTP id 0E821FED3D4;\n\tFri, 24 Apr 2026 14:20:10 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777040410; cv=none;\n b=ObqOiZQBwazd3ufqJvidVuOI41tsUArTH8yPVn5RBWQbdJof1rIBvL7emYSFfcL4muiRt+mfW6GGlaH/R5c7jpGHKkr0KxKsN+4d6uFFAk3qyUvuErzSAz+SAtXM0zcpxDkHI4tjumnr5ekMMgVc6RvC9VvVBBcL7Xonr/TrznY=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777040410; c=relaxed/simple;\n\tbh=2gEhgE6eM8dxMcqF24Eax09Dv0dPGF6ZpfZqtWdTtl8=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=OC+ElY1qvPOYYAS5q4JIrUjB3RLT92/CynZgpPvBiJdPR9swKUG0MNQEHNbVJ+pw7YHj7kFJAYsP/c6x7TKc6wKXETNJPt2mNuz2qkgDnRvmMinDpV5TJG4tVTnk3NGy4xS7C/l4BuvPXAbpRWO2moO2MA8AqUNq01GZfAjsdWY=", "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=X7xLkVjg; 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=1777040410;\n\tbh=2gEhgE6eM8dxMcqF24Eax09Dv0dPGF6ZpfZqtWdTtl8=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=X7xLkVjgoJS0orljQNUUQlFj/pNakk4EsVho8fpjoXH3TiOaLfH2c2/vfhuX66a4G\n\t QI9t4+sfzcENez3/u0u55SnHvn+l7MqjlTh+l+T2VnS1s/P3RPoOUCUC2RvfBYFBpF\n\t PLH+Y+xsT6xcxjFpnwCEyHRCixZUUeiMh5wXeCI/Qyq0GOCU1YYT1PCZDUiSwbLIXx\n\t R8Xxc0mgKMfCgVh8Pj6GMYaIDdw5whA66Oik5Xg5Zii8Trtf4Rux2kNX2hNLLFg6k0\n\t qHBW8jKA4CJM789FCZkOqHckWWEBnPlwrQEEbxtlSEvRlfoayA7plEBI/k9gXgDwqA\n\t M7SMJA7xcHuTQ==", "From": "Ronald Claveau via B4 Relay\n <devnull+linux-kernel-dev.aliel.fr@kernel.org>", "Date": "Fri, 24 Apr 2026 16:17:35 +0200", "Subject": "[PATCH v5 4/8] mfd: khadas-mcu: Add support for VIM4 MCU variant", "Precedence": "bulk", "X-Mailing-List": "linux-i2c@vger.kernel.org", "List-Id": "<linux-i2c.vger.kernel.org>", "List-Subscribe": "<mailto:linux-i2c+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-i2c+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "8bit", "Message-Id": "<20260424-add-mcu-fan-khadas-vim4-v5-4-afcfa7157b23@aliel.fr>", "References": "<20260424-add-mcu-fan-khadas-vim4-v5-0-afcfa7157b23@aliel.fr>", "In-Reply-To": "<20260424-add-mcu-fan-khadas-vim4-v5-0-afcfa7157b23@aliel.fr>", "To": "Neil Armstrong <neil.armstrong@linaro.org>, Lee Jones <lee@kernel.org>,\n Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>,\n Conor Dooley <conor+dt@kernel.org>, Andi Shyti <andi.shyti@kernel.org>,\n Kevin Hilman <khilman@baylibre.com>, Jerome Brunet <jbrunet@baylibre.com>,\n Martin Blumenstingl <martin.blumenstingl@googlemail.com>,\n Beniamino Galvani <b.galvani@gmail.com>,\n \"Rafael J. Wysocki\" <rafael@kernel.org>,\n Daniel Lezcano <daniel.lezcano@kernel.org>, Zhang Rui <rui.zhang@intel.com>,\n Lukasz Luba <lukasz.luba@arm.com>, Liam Girdwood <lgirdwood@gmail.com>,\n Mark Brown <broonie@kernel.org>", "Cc": "linux-amlogic@lists.infradead.org, devicetree@vger.kernel.org,\n linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org,\n linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org,\n Ronald Claveau <linux-kernel-dev@aliel.fr>", "X-Mailer": "b4 0.14.3", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=5119;\n i=linux-kernel-dev@aliel.fr; h=from:subject:message-id;\n bh=6yBuoANmof/0UzpsxBYYuaeY9Bsvyi5B4REa1sHSYxE=;\n b=owGbwMvMwCWm1SvKXP3cUInxtFoSQ+brGiEGjlcJ5mcEFJzDdlhKphc+C99t+dgkbIdHi/vHF\n kaDjbc7SlkYxLgYZMUUWfrnWp54d/noma971FNg5rAygQ3h4hSAiXAkMPxiFi2euPrRJPupkeUm\n je/6JHjVVF9vzzv89oPR6SSdme1WjAwbHSvn6+nNNLwYGVtyQfq5GKdtvlvJVJcKLodUo+id1zg\n A", "X-Developer-Key": "i=linux-kernel-dev@aliel.fr; a=openpgp;\n fpr=DFD863F61375BF917F0012173953305EF1D0EC3E", "X-Endpoint-Received": "by B4 Relay for linux-kernel-dev@aliel.fr/default with\n auth_id=744", "X-Original-From": "Ronald Claveau <linux-kernel-dev@aliel.fr>", "Reply-To": "linux-kernel-dev@aliel.fr" }, "content": "From: Ronald Claveau <linux-kernel-dev@aliel.fr>\n\nRefactor probe() to use per-variant khadas_mcu_data\ninstead of hardcoded globals.\n\nAdd dedicated regmap configuration and device data for the VIM4 MCU,\nwith its own volatile/writeable registers.\n\nAdd the fan control register\n(0–100 levels vs 0–3 for previous supported boards).\n\nAdd a new compatible string \"khadas,vim4-mcu\".\n\nReviewed-by: Neil Armstrong <neil.armstrong@linaro.org>\nSigned-off-by: Ronald Claveau <linux-kernel-dev@aliel.fr>\n---\n drivers/mfd/khadas-mcu.c | 106 ++++++++++++++++++++++++++++++++++++++++++-----\n 1 file changed, 95 insertions(+), 11 deletions(-)", "diff": "diff --git a/drivers/mfd/khadas-mcu.c b/drivers/mfd/khadas-mcu.c\nindex ba981a7886921..b36b3b3ab73c0 100644\n--- a/drivers/mfd/khadas-mcu.c\n+++ b/drivers/mfd/khadas-mcu.c\n@@ -75,15 +75,91 @@ static const struct regmap_config khadas_mcu_regmap_config = {\n \t.cache_type\t= REGCACHE_MAPLE,\n };\n \n+static const struct khadas_mcu_fan_pdata khadas_mcu_fan_pdata = {\n+\t.fan_reg\t= KHADAS_MCU_CMD_FAN_STATUS_CTRL_REG,\n+\t.max_level\t= 3,\n+};\n+\n static struct mfd_cell khadas_mcu_fan_cells[] = {\n \t/* VIM1/2 Rev13+ and VIM3 only */\n-\t{ .name = \"khadas-mcu-fan-ctrl\", },\n+\t{\n+\t\t.name = \"khadas-mcu-fan-ctrl\",\n+\t\t.platform_data = &khadas_mcu_fan_pdata,\n+\t\t.pdata_size = sizeof(khadas_mcu_fan_pdata),\n+\t},\n };\n \n static struct mfd_cell khadas_mcu_cells[] = {\n \t{ .name = \"khadas-mcu-user-mem\", },\n };\n \n+static const struct khadas_mcu_data khadas_mcu_data = {\n+\t.regmap_config\t= &khadas_mcu_regmap_config,\n+\t.cells\t\t= khadas_mcu_cells,\n+\t.ncells\t\t= ARRAY_SIZE(khadas_mcu_cells),\n+\t.fan_cells\t= khadas_mcu_fan_cells,\n+\t.nfan_cells\t= ARRAY_SIZE(khadas_mcu_fan_cells),\n+};\n+\n+static bool khadas_mcu_vim4_reg_volatile(struct device *dev, unsigned int reg)\n+{\n+\tswitch (reg) {\n+\tcase KHADAS_MCU_PWR_OFF_CMD_REG:\n+\tcase KHADAS_MCU_VIM4_REST_CONF_REG:\n+\tcase KHADAS_MCU_WOL_INIT_START_REG:\n+\tcase KHADAS_MCU_VIM4_LED_ON_RAM_REG:\n+\tcase KHADAS_MCU_VIM4_FAN_CTRL_REG:\n+\tcase KHADAS_MCU_VIM4_WDT_EN_REG:\n+\tcase KHADAS_MCU_VIM4_SYS_RST_REG:\n+\t\treturn true;\n+\tdefault:\n+\t\treturn false;\n+\t}\n+}\n+\n+static bool khadas_mcu_vim4_reg_writeable(struct device *dev, unsigned int reg)\n+{\n+\tswitch (reg) {\n+\tcase KHADAS_MCU_VERSION_0_REG:\n+\tcase KHADAS_MCU_VERSION_1_REG:\n+\tcase KHADAS_MCU_SHUTDOWN_NORMAL_STATUS_REG:\n+\t\treturn false;\n+\tdefault:\n+\t\treturn true;\n+\t}\n+}\n+\n+static const struct regmap_config khadas_mcu_vim4_regmap_config = {\n+\t.reg_bits\t= 8,\n+\t.reg_stride\t= 1,\n+\t.val_bits\t= 8,\n+\t.max_register\t= KHADAS_MCU_VIM4_SYS_RST_REG,\n+\t.volatile_reg\t= khadas_mcu_vim4_reg_volatile,\n+\t.writeable_reg\t= khadas_mcu_vim4_reg_writeable,\n+\t.cache_type\t= REGCACHE_MAPLE,\n+};\n+\n+static const struct khadas_mcu_fan_pdata khadas_vim4_fan_pdata = {\n+\t.fan_reg\t= KHADAS_MCU_VIM4_FAN_CTRL_REG,\n+\t.max_level\t= 0x64,\n+};\n+\n+static const struct mfd_cell khadas_mcu_vim4_cells[] = {\n+\t{\n+\t\t.name\t\t= \"khadas-mcu-fan-ctrl\",\n+\t\t.platform_data\t= &khadas_vim4_fan_pdata,\n+\t\t.pdata_size\t= sizeof(khadas_vim4_fan_pdata),\n+\t},\n+};\n+\n+static const struct khadas_mcu_data khadas_vim4_mcu_data = {\n+\t.regmap_config\t= &khadas_mcu_vim4_regmap_config,\n+\t.cells\t\t= NULL,\n+\t.ncells\t\t= 0,\n+\t.fan_cells\t= khadas_mcu_vim4_cells,\n+\t.nfan_cells\t= ARRAY_SIZE(khadas_mcu_vim4_cells),\n+};\n+\n static int khadas_mcu_probe(struct i2c_client *client)\n {\n \tstruct device *dev = &client->dev;\n@@ -94,28 +170,35 @@ static int khadas_mcu_probe(struct i2c_client *client)\n \tif (!ddata)\n \t\treturn -ENOMEM;\n \n+\tddata->data = i2c_get_match_data(client);\n+\tif (!ddata->data)\n+\t\treturn -EINVAL;\n+\n \ti2c_set_clientdata(client, ddata);\n \n \tddata->dev = dev;\n \n-\tddata->regmap = devm_regmap_init_i2c(client, &khadas_mcu_regmap_config);\n+\tddata->regmap = devm_regmap_init_i2c(client,\n+\t\t\t\t\t ddata->data->regmap_config);\n \tif (IS_ERR(ddata->regmap)) {\n \t\tret = PTR_ERR(ddata->regmap);\n \t\tdev_err(dev, \"Failed to allocate register map: %d\\n\", ret);\n \t\treturn ret;\n \t}\n \n-\tret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE,\n-\t\t\t\t khadas_mcu_cells,\n-\t\t\t\t ARRAY_SIZE(khadas_mcu_cells),\n-\t\t\t\t NULL, 0, NULL);\n-\tif (ret)\n-\t\treturn ret;\n+\tif (ddata->data->cells && ddata->data->ncells) {\n+\t\tret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE,\n+\t\t\t\t\t ddata->data->cells,\n+\t\t\t\t\t ddata->data->ncells,\n+\t\t\t\t\t NULL, 0, NULL);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n \n \tif (of_property_present(dev->of_node, \"#cooling-cells\"))\n \t\treturn devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE,\n-\t\t\t\t\t khadas_mcu_fan_cells,\n-\t\t\t\t\t ARRAY_SIZE(khadas_mcu_fan_cells),\n+\t\t\t\t\t ddata->data->fan_cells,\n+\t\t\t\t\t ddata->data->nfan_cells,\n \t\t\t\t\t NULL, 0, NULL);\n \n \treturn 0;\n@@ -123,7 +206,8 @@ static int khadas_mcu_probe(struct i2c_client *client)\n \n #ifdef CONFIG_OF\n static const struct of_device_id khadas_mcu_of_match[] = {\n-\t{ .compatible = \"khadas,mcu\", },\n+\t{ .compatible = \"khadas,mcu\", .data = &khadas_mcu_data },\n+\t{ .compatible = \"khadas,vim4-mcu\", .data = &khadas_vim4_mcu_data },\n \t{},\n };\n MODULE_DEVICE_TABLE(of, khadas_mcu_of_match);\n", "prefixes": [ "v5", "4/8" ] }