{"id":2225665,"url":"http://patchwork.ozlabs.org/api/patches/2225665/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-i2c/patch/20260421-add-mcu-fan-khadas-vim4-v4-3-447114a28f2d@aliel.fr/","project":{"id":35,"url":"http://patchwork.ozlabs.org/api/projects/35/?format=json","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":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260421-add-mcu-fan-khadas-vim4-v4-3-447114a28f2d@aliel.fr>","list_archive_url":null,"date":"2026-04-21T11:49:20","name":"[v4,3/8] mfd: khadas-mcu: Add per-variant configuration infrastructure and VIM4 support","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"a10b7b8440e984258d9fbd798c4c2166f2f2dcd4","submitter":{"id":93204,"url":"http://patchwork.ozlabs.org/api/people/93204/?format=json","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/20260421-add-mcu-fan-khadas-vim4-v4-3-447114a28f2d@aliel.fr/mbox/","series":[{"id":500785,"url":"http://patchwork.ozlabs.org/api/series/500785/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-i2c/list/?series=500785","date":"2026-04-21T11:49:19","name":"Add VIM4 MCU/FAN support","version":4,"mbox":"http://patchwork.ozlabs.org/series/500785/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2225665/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2225665/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-i2c+bounces-17113-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=pc+GwCWY;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=linux-i2c+bounces-17113-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=\"pc+GwCWY\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0LQQ2DFxz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 21:55:26 +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 7A0AD30684DC\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 11:50:29 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1717F3BADAE;\n\tTue, 21 Apr 2026 11:50:23 +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 8F41739934A;\n\tTue, 21 Apr 2026 11:50:22 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPS id 396B2C2BCC9;\n\tTue, 21 Apr 2026 11:50:22 +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 2C625F8FA64;\n\tTue, 21 Apr 2026 11:50:22 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776772222; cv=none;\n b=ACFpFXe+FFt1m1Pz40GbswYQmvM5EKBqkNOjKwCVu6EPb2gSYT59gv4iWXWTHcUG1WCTHksDTZPDADjjg+6Bvn0jk1KW7CuXvEiJY2G6GvmCWuBD6YeFCCaERMsfm7Dn0GqhUbsFfMesJ3iGAkJAwnLjXGQYUAweb0P+fuS4vDU=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776772222; c=relaxed/simple;\n\tbh=Yr40ujZrqiWQlxRZ6ysM7KCEJl1lcxiTahjTdOp4wdo=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=LubRzCdZwy4C2BKb0mKDIA8LzQ8rI9I8I1F/gGvG2acENtq0jYxo9tiNrp4SLuOQaFWINMK0wmogVvZ88LnGWlsLKpE9T6v4K+5eU+RNMz2ekR16wDn70veTRahACG5t88qTcL8UHeIt7G+nqroPXdn2wGhsUfuWVV6Ta0R7qg0=","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=pc+GwCWY; 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=1776772222;\n\tbh=Yr40ujZrqiWQlxRZ6ysM7KCEJl1lcxiTahjTdOp4wdo=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=pc+GwCWY4pLiilS8d2qBIfzejUwXTjbwEOnbIzrCiy9nmuNYRzZlLBmJsY/PIvpYW\n\t uInqtslScwoxnVsAAo4/5CD/8QQu5StOVp4SFTew9Rv6dgTZvAULadCzEiS91Q6SeM\n\t 4fkKl1plOjd2J9ysKHBTViaunat1CB1kqJMfGbsx/f3t0sLCR++vDTVzZdO48IERhO\n\t apewhNLceYT3/Lr6W8h0TTJcfds4/IaADcKcsxh5UPwVij4l8FB4Hoo3UNHMleZy2m\n\t 56jtTuJgg5c5OcoNKjZI5Ys8ukXiOC3gPXIjquf8YcKagRM35uRDadZpWJZywhJSTg\n\t 7vPt4UZQoea2g==","From":"Ronald Claveau via B4 Relay\n <devnull+linux-kernel-dev.aliel.fr@kernel.org>","Date":"Tue, 21 Apr 2026 13:49:20 +0200","Subject":"[PATCH v4 3/8] mfd: khadas-mcu: Add per-variant configuration\n infrastructure and VIM4 support","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":"7bit","Message-Id":"<20260421-add-mcu-fan-khadas-vim4-v4-3-447114a28f2d@aliel.fr>","References":"<20260421-add-mcu-fan-khadas-vim4-v4-0-447114a28f2d@aliel.fr>","In-Reply-To":"<20260421-add-mcu-fan-khadas-vim4-v4-0-447114a28f2d@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=2417;\n i=linux-kernel-dev@aliel.fr; h=from:subject:message-id;\n bh=OW1b2Q/DJTEMxPikE6mdf/p+H5KyL7TPJwoR6k9njCc=;\n b=owGbwMvMwCWm1SvKXP3cUInxtFoSQ+bzlBLf8xq9kzd6bI5sNs5Yb137qeDDFXvPNbrKq642S\n 5j9u9XeUcrCIMbFICumyNI/1/LEu8tHz3zdo54CM4eVCWQIAxenAEzkmhsjw51DlrwHp5/grLJi\n v+YwQcCw6NLP9+GnVapOz70TkLppzl+GP1zF4Y9/zo5dePRV5fSbLavv2r0I1X3quSE4qXrxx0V\n 8FzgB","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\nIntroduce a per-variant configuration structure (khadas_mcu_data)\nholding the regmap config and MFD cells,\nselected at probe time via the of_device_id match data.\nThis makes adding other variants straightforward.\n\nAlso introduce khadas_mcu_fan_pdata to pass fan register address and\nmaximum level to the fan sub-driver, removing the hardcoded constants.\n\nSigned-off-by: Ronald Claveau <linux-kernel-dev@aliel.fr>\n---\n include/linux/mfd/khadas-mcu.h | 39 +++++++++++++++++++++++++++++++++++++--\n 1 file changed, 37 insertions(+), 2 deletions(-)","diff":"diff --git a/include/linux/mfd/khadas-mcu.h b/include/linux/mfd/khadas-mcu.h\nindex a99ba2ed0e4e0..75e275d3fa8d9 100644\n--- a/include/linux/mfd/khadas-mcu.h\n+++ b/include/linux/mfd/khadas-mcu.h\n@@ -70,6 +70,13 @@\n #define KHADAS_MCU_WOL_INIT_START_REG\t\t0x87 /* WO */\n #define KHADAS_MCU_CMD_FAN_STATUS_CTRL_REG\t0x88 /* WO */\n \n+/* VIM4 specific registers */\n+#define KHADAS_MCU_VIM4_REST_CONF_REG\t\t0x2c /* WO - reset EEPROM */\n+#define KHADAS_MCU_VIM4_LED_ON_RAM_REG\t\t0x89 /* WO - LED volatile */\n+#define KHADAS_MCU_VIM4_FAN_CTRL_REG\t\t0x8a /* WO */\n+#define KHADAS_MCU_VIM4_WDT_EN_REG\t\t0x8b /* WO */\n+#define KHADAS_MCU_VIM4_SYS_RST_REG\t\t0x91 /* WO */\n+\n enum {\n \tKHADAS_BOARD_VIM1 = 0x1,\n \tKHADAS_BOARD_VIM2,\n@@ -82,10 +89,38 @@ enum {\n  * struct khadas_mcu - Khadas MCU structure\n  * @device:\t\tdevice reference used for logs\n  * @regmap:\t\tregister map\n+ * @data:\t\tpointer to variant-specific config\n  */\n struct khadas_mcu {\n-\tstruct device *dev;\n-\tstruct regmap *regmap;\n+\tstruct device\t\t\t*dev;\n+\tstruct regmap\t\t\t*regmap;\n+\tconst struct khadas_mcu_data\t*data;\n+};\n+\n+/**\n+ * struct khadas_mcu_data - per-variant configuration\n+ * @regmap_config:\tregmap configuration\n+ * @cells:\t\tMFD sub-devices\n+ * @ncells:\t\tnumber of sub-devices\n+ * @fan_cells:\t\tMFD fan sub-devices\n+ * @nfan_cells:\t\tnumber of fan sub-devices\n+ */\n+struct khadas_mcu_data {\n+\tconst struct regmap_config\t*regmap_config;\n+\tconst struct mfd_cell\t\t*cells;\n+\tint\t\t\t\tncells;\n+\tconst struct mfd_cell\t\t*fan_cells;\n+\tint\t\t\t\tnfan_cells;\n+};\n+\n+/**\n+ * struct khadas_mcu_fan_pdata - fan sub-driver configuration\n+ * @fan_reg: register address to write the fan level\n+ * @max_level: maximum fan level\n+ */\n+struct khadas_mcu_fan_pdata {\n+\tunsigned int fan_reg;\n+\tunsigned int max_level;\n };\n \n #endif /* MFD_KHADAS_MCU_H */\n","prefixes":["v4","3/8"]}