From nobody Tue Apr 7 10:42:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FD4733509B; Fri, 13 Mar 2026 19:03:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773428609; cv=none; b=HVm4xo3JgfbnZmQbjJZ5uGOGs6fXVteu/O4DWRjCksF9fSIUOW6hPyHBENxzToRGu2Yv6ZzGlMGX5Ch9AgfbmcmJnKgGXL9pmIJntbiQ3XLEh4GdIpRP6+cP7YzayAnlrGWX5ub7uRkApGc8VjQuWfGDHMnVzFgiydDMp0ZUgPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773428609; c=relaxed/simple; bh=e599/+9riorUGtuRfkF9HzcpRuZoJHcKGAJ9QlZI5I8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nXpmJuekQZ/Y23pJdseybLApJWE0YGRFkV8ddQJ0jySXw0g1ic3CzesK9Gx1W5mdLxF+9s6vIzPVrXH7jLsn6NFReOjACAhbsGZsKjt+pqP2jjLvxiQySUHgLX+r0/7xa37KjWmYBZRW53lxvtqw27wAfXhM8NZrfgQ1dmuyzvY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pvJLiRlV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pvJLiRlV" Received: by smtp.kernel.org (Postfix) with ESMTPS id 9D21AC2BCB6; Fri, 13 Mar 2026 19:03:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773428608; bh=e599/+9riorUGtuRfkF9HzcpRuZoJHcKGAJ9QlZI5I8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=pvJLiRlVTW9gj4yNp19D00dm8OTYy0w6khpjKe122WpTkf8RqPCoBowhTmwWCdTOv sv4PKFUP3zo0RueVJcPzy3YeqvYpURal4NjR6Sny/XdWyxnk2qJuc09lpFVHbKD/dK 8kaVi276zEQIYnqSGmHcBVKEa161uWrEaCo8ObN/ACXevVXGzchAuPXZEKR5vEag0x IjqOVbGRGjIldUBxNKGFAbngT6tbwnBGPRpRVTU0LkAone7APgmxdlwU+pjh/UKd6n X2o+OI3tEmrHGJs40VECpZByH+5FYB0NytevZ66bnKcxY0pjZRoljm4a6ZM61r+v62 RFrgUNSqQVuFw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91AAA107BCD7; Fri, 13 Mar 2026 19:03:28 +0000 (UTC) From: Markus Probst via B4 Relay Date: Fri, 13 Mar 2026 20:03:10 +0100 Subject: [PATCH v3 6/7] mfd: Add synology microp core driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260313-synology_microp_initial-v3-6-ad6ac463a201@posteo.de> References: <20260313-synology_microp_initial-v3-0-ad6ac463a201@posteo.de> In-Reply-To: <20260313-synology_microp_initial-v3-0-ad6ac463a201@posteo.de> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Greg Kroah-Hartman , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , "Rafael J. Wysocki" , Igor Korotin , Daniel Almeida , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Pavel Machek , Len Brown , Robert Moore Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, driver-core@lists.linux.dev, linux-pci@vger.kernel.org, linux-leds@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Markus Probst X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3772; i=markus.probst@posteo.de; h=from:subject:message-id; bh=n1TKkDCU7sA420yu0PCrb8RGAbqzgpwd288LpkGJk1c=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBptF97W5uQx7vZUUUd4QTbEpR69O3l4q/MbVaPB MN4wBOFIiyJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCabRfexsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwyLDIACgkQNHYf+OetQ9IsyhAAhBUVFnog6ffMupKTG44AV8/+txW6AW1 EvUWNHUFE8jVpTzG30B+pT3z9Ay1Wm6uXoBrrg9hRXLYdZczOyEPw5SHpbBQ02+xqwRi732nBd0 NE+9GUMnsEI2Z64+5sNuqjEJCQRQT4shpdDV8fJ4QGegPLRoTcl/ns/JG7Uxik+98RCzJFKuEoH qPiaqjizLGlQSjWRxmToWO8wcORGh27vMzKUR1xRqWWHEBQKN6FbgK3+C+CO8sOSoamqMnhkTq9 z4rxYOrOtA1J/ZiHlNLd55BEQhTXDyKTriwjm8POPEKXAeahPGy4nCXLK9RTKDrGIGERH7DEZCN IhdOEF8AYgjZG4A3F5xy5RxRRAZB2zeEYD8UqGhGthVmmPlD8eo2oBUgox3iNh7BkxER5SqYa6P EKkEKwJZkzbeXT2JmQ3uCNTuGiiA0sLzO0JYPeYNvnwgVtswPVgMZv4zeokBKJe+6tNFBUFcwvn nbQsJYfMsuR6Z/vbZXek0ofgoaTKNDfjbBNyojNybEwKLF35it2wvyfwiwfgRVDpRYcZhswpP22 3+DBMH2MreBmpoTD6ut+vAqGJmAwhRoEPu1P9B4sgWnWkBn6BAq7nTNm3d8nD6OGaw/CbnVpR7x W3cW1RzC4tFC/zCLdW9w6BMAaK9wt8vl1wEqBVbCxRHWXTqCAl7Y= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 X-Endpoint-Received: by B4 Relay for markus.probst@posteo.de/default with auth_id=680 X-Original-From: Markus Probst Reply-To: markus.probst@posteo.de From: Markus Probst Add a synology microp core driver, written in Rust. The driver targets a microcontroller found in Synology NAS devices. It only provides the base for sub-devices, like LEDs. Tested successfully on a Synology DS923+. Signed-off-by: Markus Probst --- MAINTAINERS | 7 +++++++ drivers/mfd/Kconfig | 11 ++++++++++ drivers/mfd/Makefile | 2 ++ drivers/mfd/synology_microp.rs | 46 ++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 66 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index fa49e40836ab..32932ecab9cf 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -25539,6 +25539,13 @@ F: drivers/dma-buf/sync_* F: include/linux/sync_file.h F: include/uapi/linux/sync_file.h =20 +SYNOLOGY MICROP DRIVER +M: Markus Probst +S: Maintained +F: Documentation/devicetree/bindings/leds/synology,microp.yaml +F: Documentation/devicetree/bindings/mfd/synology,microp.yaml +F: drivers/mfd/synology_microp.rs + SYNOPSYS ARC ARCHITECTURE M: Vineet Gupta L: linux-snps-arc@lists.infradead.org diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 7192c9d1d268..8b8b391d1b47 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1320,6 +1320,17 @@ config MFD_SY7636A To enable support for building sub-devices as modules, choose M here. =20 +config MFD_SYNOLOGY_MICROP + tristate "Synology Microp core driver" + depends on RUST + select RUST_SERIAL_DEV_BUS_ABSTRACTIONS + select MFD_CORE + help + Enable support for the MCU found in Synology NAS devices. + + This driver only provides the base for sub-devices. For additional + functionality, you have to enable support for the sub-devices as well. + config MFD_RDC321X tristate "RDC R-321x southbridge" select MFD_CORE diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index e75e8045c28a..f754be7163cd 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -304,3 +304,5 @@ obj-$(CONFIG_MFD_RSMU_SPI) +=3D rsmu_spi.o rsmu_core.o obj-$(CONFIG_MFD_UPBOARD_FPGA) +=3D upboard-fpga.o =20 obj-$(CONFIG_MFD_LOONGSON_SE) +=3D loongson-se.o + +obj-$(CONFIG_MFD_SYNOLOGY_MICROP) +=3D synology_microp.o diff --git a/drivers/mfd/synology_microp.rs b/drivers/mfd/synology_microp.rs new file mode 100644 index 000000000000..b9b5fff5c18d --- /dev/null +++ b/drivers/mfd/synology_microp.rs @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Synology Microp core driver + +use kernel::{ + device, + mfd, + of, + prelude::*, + serdev, // +}; + +kernel::module_serdev_device_driver! { + type: SynologyMicropCoreDriver, + name: "synology_microp", + authors: ["Markus Probst "], + description: "Synology Microp core driver", + license: "GPL v2", +} + +struct SynologyMicropCoreDriver; + +kernel::of_device_table!( + OF_TABLE, + MODULE_OF_TABLE, + ::IdInfo, + [(of::DeviceId::new(c"synology,microp"), ()),] +); + +#[vtable] +impl serdev::Driver for SynologyMicropCoreDriver { + type IdInfo =3D (); + const OF_ID_TABLE: Option> =3D Some(&OF_TABL= E); + const MFD_CELLS: Option<&'static [mfd::Cell]> =3D + Some(&[mfd::Cell::new(c"synology_microp_leds").of(c"synology,micro= p-leds", None)]); + + fn probe( + dev: &serdev::Device, + _id_info: Option<&Self::IdInfo>, + ) -> impl PinInit { + let _ =3D dev.set_baudrate(9600); + dev.set_flow_control(false); + dev.set_parity(serdev::Parity::None)?; + Ok(Self) + } +} --=20 2.52.0