* [PATCH 0/2] Introduce Synology Microp driver
@ 2026-03-06 19:38 Markus Probst
2026-03-06 19:38 ` [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices Markus Probst
2026-03-06 19:38 ` [PATCH 2/2] staging: Add initial synology microp driver Markus Probst
0 siblings, 2 replies; 13+ messages in thread
From: Markus Probst @ 2026-03-06 19:38 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux,
Markus Probst
Synology uses a microcontroller in their NAS devices connected to a
serial port to control certain LEDs, fan speeds, a beeper, to handle
proper shutdown and restart, buttons and fan failures.
This patch series depends on the rust led abstraction [1] and the rust
serdev abstraction [2].
This is only a initial version of the driver able to control LEDs and thus
goes into the staging tree.
The following rust abstractions would be required, to implement the
remaining features:
- hwmon (include/linux/hwmon.h)
- input (include/linux/input.h)
- sysoff handler + hardware protection shutdown (include/linux/reboot.h)
[1] https://lore.kernel.org/rust-for-linux/20260207-rust_leds-v12-0-fdb518417b75@posteo.de/
[2] https://lore.kernel.org/rust-for-linux/20260306-rust_serdev-v2-0-e9b23b42b255@posteo.de/
Signed-off-by: Markus Probst <markus.probst@posteo.de>
---
Markus Probst (2):
dt-bindings: mfd: Add binding for synology,microp devices
staging: Add initial synology microp driver
.../devicetree/bindings/mfd/synology,microp.yaml | 75 +++++++
MAINTAINERS | 6 +
drivers/staging/Kconfig | 2 +
drivers/staging/Makefile | 1 +
drivers/staging/synology_microp/Kconfig | 4 +
drivers/staging/synology_microp/Makefile | 2 +
drivers/staging/synology_microp/TODO | 8 +
drivers/staging/synology_microp/command.rs | 48 +++++
drivers/staging/synology_microp/led.rs | 229 +++++++++++++++++++++
drivers/staging/synology_microp/synology_microp.rs | 73 +++++++
rust/uapi/uapi_helper.h | 2 +
11 files changed, 450 insertions(+)
---
base-commit: 9fad1d148df6f36105159c2503d0ecb1397bc89a
change-id: 20260306-synology_microp_initial-0f7dac7b7496
prerequisite-change-id: 20251217-rust_serdev-ee5481e9085c:v2
prerequisite-patch-id: 52b17274481cc770c257d8f95335293eca32a2c5
prerequisite-patch-id: 680c0509490833f416b17eb3b918bb829ce7b90f
prerequisite-patch-id: 37016d6c07f0da898be02bf30110e8c0a30025d2
prerequisite-patch-id: 3dfc1f7e5ecd3e0dd65d676aeb16f55260847b25
prerequisite-change-id: 20251114-rust_leds-a959f7c2f7f9:v12
prerequisite-patch-id: 42c445ef6981e3a3740dbaaf307f4b810042e46f
prerequisite-patch-id: 90c7b200cca722a592353885e21af069101c4e09
prerequisite-patch-id: c664a52faa3d47000d252eb7603c9c08382e868a
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-06 19:38 [PATCH 0/2] Introduce Synology Microp driver Markus Probst
@ 2026-03-06 19:38 ` Markus Probst
2026-03-07 10:20 ` Krzysztof Kozlowski
2026-03-07 15:42 ` Krzysztof Kozlowski
2026-03-06 19:38 ` [PATCH 2/2] staging: Add initial synology microp driver Markus Probst
1 sibling, 2 replies; 13+ messages in thread
From: Markus Probst @ 2026-03-06 19:38 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux,
Markus Probst
Add the Synology Microp devicetree bindings. Those devices are
microcontrollers found on Synology NAS devices. They are connected to a
serial port on the host device.
Those devices are used to control certain LEDs, fan speeds, a beeper, to
handle buttons, fan failures and to properly shutdown and reboot the
device.
Signed-off-by: Markus Probst <markus.probst@posteo.de>
---
.../devicetree/bindings/mfd/synology,microp.yaml | 75 ++++++++++++++++++++++
1 file changed, 75 insertions(+)
diff --git a/Documentation/devicetree/bindings/mfd/synology,microp.yaml b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
new file mode 100644
index 000000000000..0fcb0b750bf0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
@@ -0,0 +1,75 @@
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/synology,microp.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Synology NAS on-board Microcontroller
+
+maintainers:
+ - Markus Probst <markus.probst@posteo.de>
+
+description: |
+ Synology devices contain a microcontroller on their device to control
+ certain leds, fan speeds, a beeper, to properly handle system shutdown
+ and reboot, buttons and fan failures.
+
+properties:
+ compatible:
+ enum:
+ - synology,microp
+ power-led:
+ $ref: /schemas/leds/common.yaml
+ unevaluatedProperties: false
+ status-led:
+ $ref: /schemas/leds/common.yaml
+ unevaluatedProperties: false
+ alert-led:
+ $ref: /schemas/leds/common.yaml
+ unevaluatedProperties: false
+ usb-led:
+ $ref: /schemas/leds/common.yaml
+ unevaluatedProperties: false
+ no-check-fan:
+ type: boolean
+ description: |
+ Disable fan failure check.
+
+ The fan failure event is triggered on the device, even if the fan
+ has been intentionally set to a low speed. This property prevents a
+ hardware protection shutdown if a fan failure event is reported.
+ no-check-cpu-fan:
+ type: boolean
+ description: |
+ Disable cpu fan failure check.
+
+ The cpu fan failure event is triggered on the device, even if the cpu
+ fan has been intentionally set to a low speed. This property prevents
+ a hardware protection shutdown if a cpu fan failure event is
+ reported.
+
+required:
+ - compatible
+ - power-led
+ - status-led
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/leds/common.h>
+
+ uart {
+ microp {
+ compatible = "synology,microp";
+
+ power-led {
+ color = <LED_COLOR_ID_BLUE>;
+ function = LED_FUNCTION_POWER;
+ };
+
+ status-led {
+ color = <LED_COLOR_ID_MULTI>;
+ function = LED_FUNCTION_STATUS;
+ };
+ };
+ };
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/2] staging: Add initial synology microp driver
2026-03-06 19:38 [PATCH 0/2] Introduce Synology Microp driver Markus Probst
2026-03-06 19:38 ` [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices Markus Probst
@ 2026-03-06 19:38 ` Markus Probst
2026-03-07 7:15 ` Greg Kroah-Hartman
1 sibling, 1 reply; 13+ messages in thread
From: Markus Probst @ 2026-03-06 19:38 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux,
Markus Probst
Add a initial synology microp driver, written in Rust, to the staging tree.
The driver targets a microcontroller found in Synology NAS devices. It
currently only supports controlling of the power led, status led, alert
led and usb led. Other components such as fan control or handling
on-device buttons will be added once the required rust abstractions are
there.
---
MAINTAINERS | 6 +
drivers/staging/Kconfig | 2 +
drivers/staging/Makefile | 1 +
drivers/staging/synology_microp/Kconfig | 4 +
drivers/staging/synology_microp/Makefile | 2 +
drivers/staging/synology_microp/TODO | 8 +
drivers/staging/synology_microp/command.rs | 48 +++++
drivers/staging/synology_microp/led.rs | 229 +++++++++++++++++++++
drivers/staging/synology_microp/synology_microp.rs | 73 +++++++
rust/uapi/uapi_helper.h | 2 +
10 files changed, 375 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index e9e83ab552c7..a1f8dec31db2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -25143,6 +25143,12 @@ L: linux-fbdev@vger.kernel.org
S: Maintained
F: drivers/staging/sm750fb/
+STAGING - SYNOLOGY MICROP DRIVER
+M: Markus Probst <markus.probst@posteo.de>
+S: Maintained
+F: Documentation/devicetree/bindings/mfd/synology,microp.yaml
+F: drivers/staging/synology_microp/
+
STAGING SUBSYSTEM
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
L: linux-staging@lists.linux.dev
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 2f92cd698bef..193d4a5d7f56 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -48,4 +48,6 @@ source "drivers/staging/axis-fifo/Kconfig"
source "drivers/staging/vme_user/Kconfig"
+source "drivers/staging/synology_microp/Kconfig"
+
endif # STAGING
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index f5b8876aa536..cb0cadd08ae2 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -13,3 +13,4 @@ obj-$(CONFIG_MOST) += most/
obj-$(CONFIG_GREYBUS) += greybus/
obj-$(CONFIG_BCM2835_VCHIQ) += vc04_services/
obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/
+obj-$(CONFIG_MFD_SYNOLOGY_MICROP) += synology_microp/
diff --git a/drivers/staging/synology_microp/Kconfig b/drivers/staging/synology_microp/Kconfig
new file mode 100644
index 000000000000..8d315d2576d8
--- /dev/null
+++ b/drivers/staging/synology_microp/Kconfig
@@ -0,0 +1,4 @@
+
+config MFD_SYNOLOGY_MICROP
+ tristate "Synology Microp driver"
+ depends on RUST && SERIAL_DEV_BUS && LEDS_CLASS && LEDS_CLASS_MULTICOLOR
diff --git a/drivers/staging/synology_microp/Makefile b/drivers/staging/synology_microp/Makefile
new file mode 100644
index 000000000000..d762cada20c9
--- /dev/null
+++ b/drivers/staging/synology_microp/Makefile
@@ -0,0 +1,2 @@
+
+obj-y += synology_microp.o
diff --git a/drivers/staging/synology_microp/TODO b/drivers/staging/synology_microp/TODO
new file mode 100644
index 000000000000..d432ddd8403c
--- /dev/null
+++ b/drivers/staging/synology_microp/TODO
@@ -0,0 +1,8 @@
+TODO:
+- not all devices have a alert or usb led. Only register them, if a fwnode entry is present.
+- add missing components:
+ - handle on-device buttons (Power, Factory reset, "USB Copy")
+ - handle fan failure
+ - beeper
+ - fan speed control
+ - correctly perform device power-off and restart on Synology devices
diff --git a/drivers/staging/synology_microp/command.rs b/drivers/staging/synology_microp/command.rs
new file mode 100644
index 000000000000..e98e46423e2d
--- /dev/null
+++ b/drivers/staging/synology_microp/command.rs
@@ -0,0 +1,48 @@
+use kernel::{
+ device::Bound,
+ error::Result,
+ serdev, //
+};
+
+use crate::led;
+
+#[derive(Copy, Clone)]
+#[expect(
+ clippy::enum_variant_names,
+ reason = "future variants will not end with Led"
+)]
+pub(crate) enum Command {
+ PowerLed(led::State),
+ StatusLed(led::StatusLedColor, led::State),
+ AlertLed(led::State),
+ UsbLed(led::State),
+}
+
+impl Command {
+ pub(crate) fn write(self, dev: &serdev::Device<Bound>) -> Result<()> {
+ dev.write_all(
+ match self {
+ Command::PowerLed(led::State::On) => &[0x34],
+ Command::PowerLed(led::State::Blink) => &[0x35],
+ Command::PowerLed(led::State::Off) => &[0x36],
+
+ Command::StatusLed(_, led::State::Off) => &[0x37],
+ Command::StatusLed(led::StatusLedColor::Green, led::State::On) => &[0x38],
+ Command::StatusLed(led::StatusLedColor::Green, led::State::Blink) => &[0x39],
+ Command::StatusLed(led::StatusLedColor::Orange, led::State::On) => &[0x3A],
+ Command::StatusLed(led::StatusLedColor::Orange, led::State::Blink) => &[0x3B],
+
+ Command::AlertLed(led::State::On) => &[0x4C, 0x41, 0x31],
+ Command::AlertLed(led::State::Blink) => &[0x4C, 0x41, 0x32],
+ Command::AlertLed(led::State::Off) => &[0x4C, 0x41, 0x33],
+
+ Command::UsbLed(led::State::On) => &[0x40],
+ Command::UsbLed(led::State::Blink) => &[0x41],
+ Command::UsbLed(led::State::Off) => &[0x42],
+ },
+ serdev::Timeout::Max,
+ )?;
+ dev.wait_until_sent(serdev::Timeout::Max);
+ Ok(())
+ }
+}
diff --git a/drivers/staging/synology_microp/led.rs b/drivers/staging/synology_microp/led.rs
new file mode 100644
index 000000000000..deeece661937
--- /dev/null
+++ b/drivers/staging/synology_microp/led.rs
@@ -0,0 +1,229 @@
+use core::sync::atomic::{
+ AtomicBool,
+ Ordering, //
+};
+
+use kernel::{
+ device::Bound,
+ devres::Devres,
+ error::Error,
+ led::{self, MultiColorSubLed},
+ macros::vtable,
+ prelude::*,
+ serdev, //
+};
+
+use crate::command::Command;
+
+pub(crate) struct SynologyMicropLedHandler {
+ blink: AtomicBool,
+ map: fn(State) -> Command,
+}
+
+pub(crate) struct SynologyMicropStatusLedHandler {
+ blink: AtomicBool,
+}
+
+#[derive(Copy, Clone)]
+pub(crate) enum State {
+ On,
+ Blink,
+ Off,
+}
+
+#[derive(Copy, Clone)]
+pub(crate) enum StatusLedColor {
+ Green,
+ Orange,
+}
+
+impl SynologyMicropLedHandler {
+ fn register<'a>(
+ parent: &'a serdev::Device<Bound>,
+ fwnode_child_name: &'static CStr,
+ default_trigger: &'static CStr,
+ brightness: u32,
+ color: led::Color,
+ map: fn(State) -> Command,
+ ) -> impl PinInit<Devres<led::Device<Self>>, Error> + 'a {
+ led::DeviceBuilder::new()
+ .fwnode(
+ parent
+ .as_ref()
+ .fwnode()
+ .and_then(|fwnode| fwnode.get_child_by_name(fwnode_child_name)),
+ )
+ .default_trigger(default_trigger)
+ .initial_brightness(brightness)
+ .devicename(c"synology-microp")
+ .color(color)
+ .build(
+ parent,
+ Ok(Self {
+ blink: AtomicBool::new(true),
+ map,
+ }),
+ )
+ }
+
+ pub(crate) fn register_power<'a>(
+ parent: &'a serdev::Device<Bound>,
+ ) -> impl PinInit<Devres<led::Device<Self>>, Error> + 'a {
+ Self::register(
+ parent,
+ c"power-led",
+ c"timer",
+ 1,
+ led::Color::Blue,
+ Command::PowerLed,
+ )
+ }
+
+ pub(crate) fn register_alert<'a>(
+ parent: &'a serdev::Device<Bound>,
+ ) -> impl PinInit<Devres<led::Device<Self>>, Error> + 'a {
+ Self::register(
+ parent,
+ c"alert-led",
+ c"none",
+ 0,
+ led::Color::Orange,
+ Command::AlertLed,
+ )
+ }
+
+ pub(crate) fn register_usb<'a>(
+ parent: &'a serdev::Device<Bound>,
+ ) -> impl PinInit<Devres<led::Device<Self>>, Error> + 'a {
+ Self::register(
+ parent,
+ c"usb-led",
+ c"none",
+ 0,
+ led::Color::Green,
+ Command::UsbLed,
+ )
+ }
+}
+
+#[vtable]
+impl led::LedOps for SynologyMicropLedHandler {
+ type Bus = serdev::Device<Bound>;
+ type Mode = led::Normal;
+ const BLOCKING: bool = true;
+ const MAX_BRIGHTNESS: u32 = 1;
+
+ fn brightness_set(
+ &self,
+ dev: &Self::Bus,
+ _classdev: &led::Device<Self>,
+ brightness: u32,
+ ) -> Result<()> {
+ (self.map)(if brightness == 0 {
+ self.blink.store(false, Ordering::Relaxed);
+ State::Off
+ } else if self.blink.load(Ordering::Relaxed) {
+ State::Blink
+ } else {
+ State::On
+ })
+ .write(dev)
+ }
+
+ fn blink_set(
+ &self,
+ dev: &Self::Bus,
+ _classdev: &led::Device<Self>,
+ delay_on: &mut usize,
+ delay_off: &mut usize,
+ ) -> Result<()> {
+ *delay_on = 167;
+ *delay_off = 167;
+
+ self.blink.store(true, Ordering::Relaxed);
+ (self.map)(State::Blink).write(dev)
+ }
+}
+
+impl SynologyMicropStatusLedHandler {
+ pub(crate) fn register(
+ parent: &serdev::Device<Bound>,
+ ) -> impl PinInit<Devres<led::MultiColorDevice<Self>>, Error> + '_ {
+ const SUBLEDS: &[MultiColorSubLed] = &[
+ MultiColorSubLed::new(led::Color::Green).initial_intensity(1),
+ MultiColorSubLed::new(led::Color::Orange),
+ ];
+
+ led::DeviceBuilder::new()
+ .fwnode(
+ parent
+ .as_ref()
+ .fwnode()
+ .and_then(|fwnode| fwnode.get_child_by_name(c"status-led")),
+ )
+ .devicename(c"synology-microp")
+ .color(led::Color::Multi)
+ .build_multicolor(
+ parent,
+ Ok(SynologyMicropStatusLedHandler {
+ blink: AtomicBool::new(false),
+ }),
+ SUBLEDS,
+ )
+ }
+}
+
+#[vtable]
+impl led::LedOps for SynologyMicropStatusLedHandler {
+ type Bus = serdev::Device<Bound>;
+ type Mode = led::MultiColor;
+ const BLOCKING: bool = true;
+ const MAX_BRIGHTNESS: u32 = 1;
+
+ fn brightness_set(
+ &self,
+ dev: &Self::Bus,
+ classdev: &led::MultiColorDevice<Self>,
+ brightness: u32,
+ ) -> Result<()> {
+ if brightness == 0 {
+ self.blink.store(false, Ordering::Relaxed);
+ }
+
+ let (color, subled_brightness) = if classdev.subleds()[1].brightness == 0 {
+ (StatusLedColor::Green, classdev.subleds()[0].brightness)
+ } else {
+ (StatusLedColor::Orange, classdev.subleds()[1].brightness)
+ };
+
+ if subled_brightness == 0 {
+ Command::StatusLed(color, State::Off)
+ } else if self.blink.load(Ordering::Relaxed) {
+ Command::StatusLed(color, State::Blink)
+ } else {
+ Command::StatusLed(color, State::On)
+ }
+ .write(dev)
+ }
+
+ fn blink_set(
+ &self,
+ dev: &Self::Bus,
+ classdev: &led::MultiColorDevice<Self>,
+ delay_on: &mut usize,
+ delay_off: &mut usize,
+ ) -> Result<()> {
+ *delay_on = 167;
+ *delay_off = 167;
+
+ self.blink.store(true, Ordering::Relaxed);
+
+ let color = if classdev.subleds()[1].brightness == 0 {
+ StatusLedColor::Green
+ } else {
+ StatusLedColor::Orange
+ };
+
+ Command::StatusLed(color, State::Blink).write(dev)
+ }
+}
diff --git a/drivers/staging/synology_microp/synology_microp.rs b/drivers/staging/synology_microp/synology_microp.rs
new file mode 100644
index 000000000000..abc513edc590
--- /dev/null
+++ b/drivers/staging/synology_microp/synology_microp.rs
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Synology Microp driver
+
+use kernel::{
+ device,
+ devres::Devres,
+ of,
+ prelude::*,
+ serdev, //
+};
+use pin_init::pin_init_scope;
+
+use crate::{
+ led::{
+ SynologyMicropLedHandler,
+ SynologyMicropStatusLedHandler, //
+ }, //
+};
+
+pub(crate) mod command;
+mod led;
+
+kernel::module_serdev_device_driver! {
+ type: SynologyMicropDriver,
+ name: "synology_microp",
+ authors: ["Markus Probst <markus.probst@posteo.de>"],
+ description: "Synology Microp driver",
+ license: "GPL v2",
+}
+
+#[pin_data]
+struct SynologyMicropDriver {
+ #[pin]
+ power_led: Devres<kernel::led::Device<SynologyMicropLedHandler>>,
+ #[pin]
+ status_led: Devres<kernel::led::MultiColorDevice<SynologyMicropStatusLedHandler>>,
+ #[pin]
+ alert_led: Devres<kernel::led::Device<SynologyMicropLedHandler>>,
+ #[pin]
+ usb_led: Devres<kernel::led::Device<SynologyMicropLedHandler>>,
+}
+
+kernel::of_device_table!(
+ OF_TABLE,
+ MODULE_OF_TABLE,
+ <SynologyMicropDriver as serdev::Driver>::IdInfo,
+ [(of::DeviceId::new(c"synology,microp"), ()),]
+);
+
+#[vtable]
+impl serdev::Driver for SynologyMicropDriver {
+ type IdInfo = ();
+ const OF_ID_TABLE: Option<kernel::of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
+
+ fn probe(
+ dev: &serdev::Device<device::Core>,
+ _id_info: Option<&Self::IdInfo>,
+ ) -> impl PinInit<Self, kernel::error::Error> {
+ pin_init_scope(move || {
+ let _ = dev.set_baudrate(9600);
+ dev.set_flow_control(false);
+ dev.set_parity(serdev::Parity::None)?;
+
+ Ok(try_pin_init!(Self {
+ power_led <- SynologyMicropLedHandler::register_power(dev),
+ status_led <- SynologyMicropStatusLedHandler::register(dev),
+ alert_led <- SynologyMicropLedHandler::register_alert(dev),
+ usb_led <- SynologyMicropLedHandler::register_usb(dev),
+ }))
+ })
+ }
+}
diff --git a/rust/uapi/uapi_helper.h b/rust/uapi/uapi_helper.h
index 06d7d1a2e8da..94b6c1b59e56 100644
--- a/rust/uapi/uapi_helper.h
+++ b/rust/uapi/uapi_helper.h
@@ -14,3 +14,5 @@
#include <uapi/linux/mdio.h>
#include <uapi/linux/mii.h>
#include <uapi/linux/ethtool.h>
+#include <uapi/linux/serial_reg.h>
+
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] staging: Add initial synology microp driver
2026-03-06 19:38 ` [PATCH 2/2] staging: Add initial synology microp driver Markus Probst
@ 2026-03-07 7:15 ` Greg Kroah-Hartman
2026-03-07 12:58 ` Markus Probst
0 siblings, 1 reply; 13+ messages in thread
From: Greg Kroah-Hartman @ 2026-03-07 7:15 UTC (permalink / raw)
To: Markus Probst
Cc: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, devicetree, linux-kernel, linux-staging,
rust-for-linux
On Fri, Mar 06, 2026 at 07:38:30PM +0000, Markus Probst wrote:
> Add a initial synology microp driver, written in Rust, to the staging tree.
> The driver targets a microcontroller found in Synology NAS devices. It
> currently only supports controlling of the power led, status led, alert
> led and usb led. Other components such as fan control or handling
> on-device buttons will be added once the required rust abstractions are
> there.
> ---
> MAINTAINERS | 6 +
> drivers/staging/Kconfig | 2 +
> drivers/staging/Makefile | 1 +
> drivers/staging/synology_microp/Kconfig | 4 +
> drivers/staging/synology_microp/Makefile | 2 +
> drivers/staging/synology_microp/TODO | 8 +
> drivers/staging/synology_microp/command.rs | 48 +++++
> drivers/staging/synology_microp/led.rs | 229 +++++++++++++++++++++
> drivers/staging/synology_microp/synology_microp.rs | 73 +++++++
> rust/uapi/uapi_helper.h | 2 +
> 10 files changed, 375 insertions(+)
No signed-off-by?
And why staging? That's for stuff that needs obvious cleanups done to
it, you don't list that here.
> diff --git a/MAINTAINERS b/MAINTAINERS
> index e9e83ab552c7..a1f8dec31db2 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -25143,6 +25143,12 @@ L: linux-fbdev@vger.kernel.org
> S: Maintained
> F: drivers/staging/sm750fb/
>
> +STAGING - SYNOLOGY MICROP DRIVER
> +M: Markus Probst <markus.probst@posteo.de>
> +S: Maintained
> +F: Documentation/devicetree/bindings/mfd/synology,microp.yaml
> +F: drivers/staging/synology_microp/
No tabs?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-06 19:38 ` [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices Markus Probst
@ 2026-03-07 10:20 ` Krzysztof Kozlowski
2026-03-07 14:25 ` Krzysztof Kozlowski
` (2 more replies)
2026-03-07 15:42 ` Krzysztof Kozlowski
1 sibling, 3 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-07 10:20 UTC (permalink / raw)
To: Markus Probst, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux
On 06/03/2026 20:38, Markus Probst wrote:
> Add the Synology Microp devicetree bindings. Those devices are
> microcontrollers found on Synology NAS devices. They are connected to a
> serial port on the host device.
A nit, subject: drop second/last, redundant "binding for". The
"dt-bindings" prefix is already stating that these are bindings.
See also:
https://elixir.bootlin.com/linux/v6.17-rc3/source/Documentation/devicetree/bindings/submitting-patches.rst#L18
>
> Those devices are used to control certain LEDs, fan speeds, a beeper, to
> handle buttons, fan failures and to properly shutdown and reboot the
> device.
>
> Signed-off-by: Markus Probst <markus.probst@posteo.de>
> ---
> .../devicetree/bindings/mfd/synology,microp.yaml | 75 ++++++++++++++++++++++
> 1 file changed, 75 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/mfd/synology,microp.yaml b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> new file mode 100644
> index 000000000000..0fcb0b750bf0
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> @@ -0,0 +1,75 @@
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mfd/synology,microp.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Synology NAS on-board Microcontroller
> +
> +maintainers:
> + - Markus Probst <markus.probst@posteo.de>
> +
> +description: |
Do not need '|' unless you need to preserve formatting.
> + Synology devices contain a microcontroller on their device to control
> + certain leds, fan speeds, a beeper, to properly handle system shutdown
> + and reboot, buttons and fan failures.
> +
> +properties:
> + compatible:
> + enum:
> + - synology,microp
Missing blank line. Look at other bindings how to write one.
> + power-led:
> + $ref: /schemas/leds/common.yaml
> + unevaluatedProperties: false
> + status-led:
> + $ref: /schemas/leds/common.yaml
> + unevaluatedProperties: false
> + alert-led:
> + $ref: /schemas/leds/common.yaml
> + unevaluatedProperties: false
> + usb-led:
> + $ref: /schemas/leds/common.yaml
> + unevaluatedProperties: false
That's pretty unreadable code.
> + no-check-fan:
Vendor prefix
> + type: boolean
> + description: |
> + Disable fan failure check.
You described the desired Linux feature or behavior, not the actual
hardware. The bindings are about the latter, so instead you need to
rephrase the property and its description to match actual hardware
capabilities/features/configuration etc.
> +
> + The fan failure event is triggered on the device, even if the fan
> + has been intentionally set to a low speed. This property prevents a
> + hardware protection shutdown if a fan failure event is reported.
> + no-check-cpu-fan:
You described the desired Linux feature or behavior, not the actual
hardware. The bindings are about the latter, so instead you need to
rephrase the property and its description to match actual hardware
capabilities/features/configuration etc.
> + type: boolean
> + description: |
> + Disable cpu fan failure check.
> +
> + The cpu fan failure event is triggered on the device, even if the cpu
> + fan has been intentionally set to a low speed. This property prevents
> + a hardware protection shutdown if a cpu fan failure event is
> + reported.
> +
> +required:
> + - compatible
> + - power-led
> + - status-led
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/leds/common.h>
> +
> + uart {
Drop, unuesed
> + microp {
Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
If you cannot find a name matching your device, please check in kernel
sources for similar cases or you can grow the spec (via pull request to
DT spec repo).
> + compatible = "synology,microp";
> +
> + power-led {
> + color = <LED_COLOR_ID_BLUE>;
> + function = LED_FUNCTION_POWER;
> + };
> +
> + status-led {
> + color = <LED_COLOR_ID_MULTI>;
> + function = LED_FUNCTION_STATUS;
> + };
> + };
> + };
>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] staging: Add initial synology microp driver
2026-03-07 7:15 ` Greg Kroah-Hartman
@ 2026-03-07 12:58 ` Markus Probst
2026-03-08 7:08 ` Greg Kroah-Hartman
0 siblings, 1 reply; 13+ messages in thread
From: Markus Probst @ 2026-03-07 12:58 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, devicetree, linux-kernel, linux-staging,
rust-for-linux
[-- Attachment #1: Type: text/plain, Size: 2435 bytes --]
On Sat, 2026-03-07 at 08:15 +0100, Greg Kroah-Hartman wrote:
> On Fri, Mar 06, 2026 at 07:38:30PM +0000, Markus Probst wrote:
> > Add a initial synology microp driver, written in Rust, to the staging tree.
> > The driver targets a microcontroller found in Synology NAS devices. It
> > currently only supports controlling of the power led, status led, alert
> > led and usb led. Other components such as fan control or handling
> > on-device buttons will be added once the required rust abstractions are
> > there.
> > ---
> > MAINTAINERS | 6 +
> > drivers/staging/Kconfig | 2 +
> > drivers/staging/Makefile | 1 +
> > drivers/staging/synology_microp/Kconfig | 4 +
> > drivers/staging/synology_microp/Makefile | 2 +
> > drivers/staging/synology_microp/TODO | 8 +
> > drivers/staging/synology_microp/command.rs | 48 +++++
> > drivers/staging/synology_microp/led.rs | 229 +++++++++++++++++++++
> > drivers/staging/synology_microp/synology_microp.rs | 73 +++++++
> > rust/uapi/uapi_helper.h | 2 +
> > 10 files changed, 375 insertions(+)
>
> No signed-off-by?
Signed-off-by: Markus Probst <markus.probst@posteo.de>
>
> And why staging? That's for stuff that needs obvious cleanups done to
> it, you don't list that here.
Because the driver is not done yet. There are components that do not
exist yet, because the rust abstractions are missing.
Merging an initial version of this driver into staging makes it
possible for the serdev and led rust abstractions to be merged (as
their now exists a driver). After this I can work on the missing rust
abstractions.
Once the driver is complete, is can be moved into the mfd tree.
>
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index e9e83ab552c7..a1f8dec31db2 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -25143,6 +25143,12 @@ L: linux-fbdev@vger.kernel.org
> > S: Maintained
> > F: drivers/staging/sm750fb/
> >
> > +STAGING - SYNOLOGY MICROP DRIVER
> > +M: Markus Probst <markus.probst@posteo.de>
> > +S: Maintained
> > +F: Documentation/devicetree/bindings/mfd/synology,microp.yaml
> > +F: drivers/staging/synology_microp/
>
> No tabs?
Will be fixed.
>
> thanks,
>
> greg k-h
Thanks
- Markus Probst
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-07 10:20 ` Krzysztof Kozlowski
@ 2026-03-07 14:25 ` Krzysztof Kozlowski
2026-03-07 14:43 ` Markus Probst
2026-03-07 15:03 ` Markus Probst
2 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-07 14:25 UTC (permalink / raw)
To: Markus Probst, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux
On 07/03/2026 11:20, Krzysztof Kozlowski wrote:
>> + power-led:
>> + $ref: /schemas/leds/common.yaml
>> + unevaluatedProperties: false
>> + status-led:
>> + $ref: /schemas/leds/common.yaml
>> + unevaluatedProperties: false
>> + alert-led:
>> + $ref: /schemas/leds/common.yaml
>> + unevaluatedProperties: false
>> + usb-led:
>> + $ref: /schemas/leds/common.yaml
>> + unevaluatedProperties: false
>
> That's pretty unreadable code.
... and could be simpler with patternProperties and regex
>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-07 10:20 ` Krzysztof Kozlowski
2026-03-07 14:25 ` Krzysztof Kozlowski
@ 2026-03-07 14:43 ` Markus Probst
2026-03-07 15:10 ` Krzysztof Kozlowski
2026-03-07 15:03 ` Markus Probst
2 siblings, 1 reply; 13+ messages in thread
From: Markus Probst @ 2026-03-07 14:43 UTC (permalink / raw)
To: Krzysztof Kozlowski, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux
[-- Attachment #1: Type: text/plain, Size: 5406 bytes --]
On Sat, 2026-03-07 at 11:20 +0100, Krzysztof Kozlowski wrote:
> On 06/03/2026 20:38, Markus Probst wrote:
> > Add the Synology Microp devicetree bindings. Those devices are
> > microcontrollers found on Synology NAS devices. They are connected to a
> > serial port on the host device.
>
> A nit, subject: drop second/last, redundant "binding for". The
> "dt-bindings" prefix is already stating that these are bindings.
> See also:
> https://elixir.bootlin.com/linux/v6.17-rc3/source/Documentation/devicetree/bindings/submitting-patches.rst#L18
>
> >
> > Those devices are used to control certain LEDs, fan speeds, a beeper, to
> > handle buttons, fan failures and to properly shutdown and reboot the
> > device.
> >
> > Signed-off-by: Markus Probst <markus.probst@posteo.de>
> > ---
> > .../devicetree/bindings/mfd/synology,microp.yaml | 75 ++++++++++++++++++++++
> > 1 file changed, 75 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/mfd/synology,microp.yaml b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> > new file mode 100644
> > index 000000000000..0fcb0b750bf0
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> > @@ -0,0 +1,75 @@
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/mfd/synology,microp.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Synology NAS on-board Microcontroller
> > +
> > +maintainers:
> > + - Markus Probst <markus.probst@posteo.de>
> > +
> > +description: |
>
> Do not need '|' unless you need to preserve formatting.
>
> > + Synology devices contain a microcontroller on their device to control
> > + certain leds, fan speeds, a beeper, to properly handle system shutdown
> > + and reboot, buttons and fan failures.
> > +
> > +properties:
> > + compatible:
> > + enum:
> > + - synology,microp
>
> Missing blank line. Look at other bindings how to write one.
>
> > + power-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
> > + status-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
> > + alert-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
> > + usb-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
>
> That's pretty unreadable code.
>
> > + no-check-fan:
>
> Vendor prefix
>
> > + type: boolean
> > + description: |
> > + Disable fan failure check.
>
> You described the desired Linux feature or behavior, not the actual
> hardware. The bindings are about the latter, so instead you need to
> rephrase the property and its description to match actual hardware
> capabilities/features/configuration etc.
>
> > +
> > + The fan failure event is triggered on the device, even if the fan
> > + has been intentionally set to a low speed. This property prevents a
> > + hardware protection shutdown if a fan failure event is reported.
> > + no-check-cpu-fan:
>
> You described the desired Linux feature or behavior, not the actual
> hardware. The bindings are about the latter, so instead you need to
> rephrase the property and its description to match actual hardware
> capabilities/features/configuration etc.
>
> > + type: boolean
> > + description: |
> > + Disable cpu fan failure check.
> > +
> > + The cpu fan failure event is triggered on the device, even if the cpu
> > + fan has been intentionally set to a low speed. This property prevents
> > + a hardware protection shutdown if a cpu fan failure event is
> > + reported.
> > +
> > +required:
> > + - compatible
> > + - power-led
> > + - status-led
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > + - |
> > + #include <dt-bindings/leds/common.h>
> > +
> > + uart {
>
> Drop, unuesed
The device uses the serial device bus. Thus the device node needs to be
inside a uart device node. The uart node represents a serial device
port in that example.
This is also done the same way in
- Documentation/devicetree/bindings/mfd/qnap,ts433-mcu.yaml
- Documentation/devicetree/bindings/net/nfc/marvell,nci.yaml
- Documentation/devicetree/bindings/net/bluetooth/brcm,bluetooth.yaml
>
> > + microp {
>
> Node names should be generic. See also an explanation and list of
> examples (not exhaustive) in DT specification:
> https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
> If you cannot find a name matching your device, please check in kernel
> sources for similar cases or you can grow the spec (via pull request to
> DT spec repo).
"mcu" seems the most fitting, altough it is not part of the list.
It it used here though:
- Documentation/devicetree/bindings/mfd/qnap,ts433-mcu.yaml
>
> > + compatible = "synology,microp";
> > +
> > + power-led {
> > + color = <LED_COLOR_ID_BLUE>;
> > + function = LED_FUNCTION_POWER;
> > + };
> > +
> > + status-led {
> > + color = <LED_COLOR_ID_MULTI>;
> > + function = LED_FUNCTION_STATUS;
> > + };
> > + };
> > + };
> >
>
>
> Best regards,
> Krzysztof
Thanks
- Markus Probst
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-07 10:20 ` Krzysztof Kozlowski
2026-03-07 14:25 ` Krzysztof Kozlowski
2026-03-07 14:43 ` Markus Probst
@ 2026-03-07 15:03 ` Markus Probst
2026-03-07 15:12 ` Krzysztof Kozlowski
2 siblings, 1 reply; 13+ messages in thread
From: Markus Probst @ 2026-03-07 15:03 UTC (permalink / raw)
To: Krzysztof Kozlowski, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux
[-- Attachment #1: Type: text/plain, Size: 5478 bytes --]
On Sat, 2026-03-07 at 11:20 +0100, Krzysztof Kozlowski wrote:
> On 06/03/2026 20:38, Markus Probst wrote:
> > Add the Synology Microp devicetree bindings. Those devices are
> > microcontrollers found on Synology NAS devices. They are connected to a
> > serial port on the host device.
>
> A nit, subject: drop second/last, redundant "binding for". The
> "dt-bindings" prefix is already stating that these are bindings.
> See also:
> https://elixir.bootlin.com/linux/v6.17-rc3/source/Documentation/devicetree/bindings/submitting-patches.rst#L18
>
> >
> > Those devices are used to control certain LEDs, fan speeds, a beeper, to
> > handle buttons, fan failures and to properly shutdown and reboot the
> > device.
> >
> > Signed-off-by: Markus Probst <markus.probst@posteo.de>
> > ---
> > .../devicetree/bindings/mfd/synology,microp.yaml | 75 ++++++++++++++++++++++
> > 1 file changed, 75 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/mfd/synology,microp.yaml b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> > new file mode 100644
> > index 000000000000..0fcb0b750bf0
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> > @@ -0,0 +1,75 @@
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/mfd/synology,microp.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Synology NAS on-board Microcontroller
> > +
> > +maintainers:
> > + - Markus Probst <markus.probst@posteo.de>
> > +
> > +description: |
>
> Do not need '|' unless you need to preserve formatting.
>
> > + Synology devices contain a microcontroller on their device to control
> > + certain leds, fan speeds, a beeper, to properly handle system shutdown
> > + and reboot, buttons and fan failures.
> > +
> > +properties:
> > + compatible:
> > + enum:
> > + - synology,microp
>
> Missing blank line. Look at other bindings how to write one.
>
> > + power-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
> > + status-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
> > + alert-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
> > + usb-led:
> > + $ref: /schemas/leds/common.yaml
> > + unevaluatedProperties: false
>
> That's pretty unreadable code.
>
> > + no-check-fan:
>
> Vendor prefix
In the documentation it says
"
Nonstandard property names should specify a unique string prefix, such
as a stock ticker symbol, identifying the name of the company or
organization that defined the property.
"
I am not sure whether to use synology or linux as vendor prefix here.
The property itself was not defined by synology,
but the property also is not necessarily specific to linux.
The driver has to tell the device whether it should even check for fan
failures. The property wouldn't alter behaviour of the driver, but of
the device. The device itself would not check for fan failures anymore.
Thanks
- Markus Probst
>
> > + type: boolean
> > + description: |
> > + Disable fan failure check.
>
> You described the desired Linux feature or behavior, not the actual
> hardware. The bindings are about the latter, so instead you need to
> rephrase the property and its description to match actual hardware
> capabilities/features/configuration etc.
>
> > +
> > + The fan failure event is triggered on the device, even if the fan
> > + has been intentionally set to a low speed. This property prevents a
> > + hardware protection shutdown if a fan failure event is reported.
> > + no-check-cpu-fan:
>
> You described the desired Linux feature or behavior, not the actual
> hardware. The bindings are about the latter, so instead you need to
> rephrase the property and its description to match actual hardware
> capabilities/features/configuration etc.
>
> > + type: boolean
> > + description: |
> > + Disable cpu fan failure check.
> > +
> > + The cpu fan failure event is triggered on the device, even if the cpu
> > + fan has been intentionally set to a low speed. This property prevents
> > + a hardware protection shutdown if a cpu fan failure event is
> > + reported.
> > +
> > +required:
> > + - compatible
> > + - power-led
> > + - status-led
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > + - |
> > + #include <dt-bindings/leds/common.h>
> > +
> > + uart {
>
> Drop, unuesed
>
> > + microp {
>
> Node names should be generic. See also an explanation and list of
> examples (not exhaustive) in DT specification:
> https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
> If you cannot find a name matching your device, please check in kernel
> sources for similar cases or you can grow the spec (via pull request to
> DT spec repo).
>
> > + compatible = "synology,microp";
> > +
> > + power-led {
> > + color = <LED_COLOR_ID_BLUE>;
> > + function = LED_FUNCTION_POWER;
> > + };
> > +
> > + status-led {
> > + color = <LED_COLOR_ID_MULTI>;
> > + function = LED_FUNCTION_STATUS;
> > + };
> > + };
> > + };
> >
>
>
> Best regards,
> Krzysztof
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-07 14:43 ` Markus Probst
@ 2026-03-07 15:10 ` Krzysztof Kozlowski
0 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-07 15:10 UTC (permalink / raw)
To: Markus Probst, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux
On 07/03/2026 15:43, Markus Probst wrote:
>>> +
>>> +examples:
>>> + - |
>>> + #include <dt-bindings/leds/common.h>
>>> +
>>> + uart {
>>
>> Drop, unuesed
> The device uses the serial device bus. Thus the device node needs to be
> inside a uart device node. The uart node represents a serial device
> port in that example.
Still not used.
>
> This is also done the same way in
> - Documentation/devicetree/bindings/mfd/qnap,ts433-mcu.yaml
> - Documentation/devicetree/bindings/net/nfc/marvell,nci.yaml
> - Documentation/devicetree/bindings/net/bluetooth/brcm,bluetooth.yaml
Plenty of poor examples...
>
>>
>>> + microp {
>>
>> Node names should be generic. See also an explanation and list of
>> examples (not exhaustive) in DT specification:
>> https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
>> If you cannot find a name matching your device, please check in kernel
>> sources for similar cases or you can grow the spec (via pull request to
>> DT spec repo).
> "mcu" seems the most fitting, altough it is not part of the list.
> It it used here though:
> - Documentation/devicetree/bindings/mfd/qnap,ts433-mcu.yaml
Depending what this is. MCU is generic purpose unit where you load your
different FW for different purposes and you have here specific - to
handle certain aspects of this entire machine. This looks like EC, so
should be called embedded-controller and placed in that directory.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-07 15:03 ` Markus Probst
@ 2026-03-07 15:12 ` Krzysztof Kozlowski
0 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-07 15:12 UTC (permalink / raw)
To: Markus Probst, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: devicetree, linux-kernel, linux-staging, rust-for-linux
On 07/03/2026 16:03, Markus Probst wrote:
>>> + usb-led:
>>> + $ref: /schemas/leds/common.yaml
>>> + unevaluatedProperties: false
>>
>> That's pretty unreadable code.
>>
>>> + no-check-fan:
>>
>> Vendor prefix
>
> In the documentation it says
>
> "
> Nonstandard property names should specify a unique string prefix, such
> as a stock ticker symbol, identifying the name of the company or
> organization that defined the property.
> "
>
> I am not sure whether to use synology or linux as vendor prefix here.
You cannot have linux prefix - you are not adding bindings for a
abstracted/generalized device.
>
> The property itself was not defined by synology,
>
> but the property also is not necessarily specific to linux.
> The driver has to tell the device whether it should even check for fan
> failures. The property wouldn't alter behaviour of the driver, but of
Driver stuff so not really suitable for bindings in the first place.
> the device. The device itself would not check for fan failures anymore.
>
> Thanks
> - Markus Probst
>
>>
>>> + type: boolean
>>> + description: |
>>> + Disable fan failure check.
>>
>> You described the desired Linux feature or behavior, not the actual
>> hardware. The bindings are about the latter, so instead you need to
>> rephrase the property and its description to match actual hardware
>> capabilities/features/configuration etc.
Do not ignore the comments.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices
2026-03-06 19:38 ` [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices Markus Probst
2026-03-07 10:20 ` Krzysztof Kozlowski
@ 2026-03-07 15:42 ` Krzysztof Kozlowski
1 sibling, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-07 15:42 UTC (permalink / raw)
To: Markus Probst
Cc: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, devicetree, linux-kernel,
linux-staging, rust-for-linux
On Fri, Mar 06, 2026 at 07:38:28PM +0000, Markus Probst wrote:
> Add the Synology Microp devicetree bindings. Those devices are
> microcontrollers found on Synology NAS devices. They are connected to a
> serial port on the host device.
>
> Those devices are used to control certain LEDs, fan speeds, a beeper, to
> handle buttons, fan failures and to properly shutdown and reboot the
> device.
>
> Signed-off-by: Markus Probst <markus.probst@posteo.de>
> ---
> .../devicetree/bindings/mfd/synology,microp.yaml | 75 ++++++++++++++++++++++
> 1 file changed, 75 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/mfd/synology,microp.yaml b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> new file mode 100644
> index 000000000000..0fcb0b750bf0
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/synology,microp.yaml
> @@ -0,0 +1,75 @@
> +%YAML 1.2
You we have tools which save you review time. Most important, save
maintainers/reviewers time from giving feedback on obvious mistakes. You
must use these tools, otherwise maintainers get grumpy by wasting their
time.
Please run scripts/checkpatch.pl on the patches and fix reported
warnings. After that, run also 'scripts/checkpatch.pl --strict' on the
patches and (probably) fix more warnings. Some warnings can be ignored,
especially from --strict run, but the code here looks like it needs a
fix. Feel free to get in touch if the warning is not clear.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] staging: Add initial synology microp driver
2026-03-07 12:58 ` Markus Probst
@ 2026-03-08 7:08 ` Greg Kroah-Hartman
0 siblings, 0 replies; 13+ messages in thread
From: Greg Kroah-Hartman @ 2026-03-08 7:08 UTC (permalink / raw)
To: Markus Probst
Cc: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, devicetree, linux-kernel, linux-staging,
rust-for-linux
On Sat, Mar 07, 2026 at 12:58:31PM +0000, Markus Probst wrote:
> On Sat, 2026-03-07 at 08:15 +0100, Greg Kroah-Hartman wrote:
> > On Fri, Mar 06, 2026 at 07:38:30PM +0000, Markus Probst wrote:
> > > Add a initial synology microp driver, written in Rust, to the staging tree.
> > > The driver targets a microcontroller found in Synology NAS devices. It
> > > currently only supports controlling of the power led, status led, alert
> > > led and usb led. Other components such as fan control or handling
> > > on-device buttons will be added once the required rust abstractions are
> > > there.
> > > ---
> > > MAINTAINERS | 6 +
> > > drivers/staging/Kconfig | 2 +
> > > drivers/staging/Makefile | 1 +
> > > drivers/staging/synology_microp/Kconfig | 4 +
> > > drivers/staging/synology_microp/Makefile | 2 +
> > > drivers/staging/synology_microp/TODO | 8 +
> > > drivers/staging/synology_microp/command.rs | 48 +++++
> > > drivers/staging/synology_microp/led.rs | 229 +++++++++++++++++++++
> > > drivers/staging/synology_microp/synology_microp.rs | 73 +++++++
> > > rust/uapi/uapi_helper.h | 2 +
> > > 10 files changed, 375 insertions(+)
> >
> > No signed-off-by?
> Signed-off-by: Markus Probst <markus.probst@posteo.de>
That has to go into the real part of the patch :)
> >
> > And why staging? That's for stuff that needs obvious cleanups done to
> > it, you don't list that here.
> Because the driver is not done yet. There are components that do not
> exist yet, because the rust abstractions are missing.
That is not what staging is for, sorry. Please just work to get the
driver working properly and merge it to the correct location first.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-03-08 7:08 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-06 19:38 [PATCH 0/2] Introduce Synology Microp driver Markus Probst
2026-03-06 19:38 ` [PATCH 1/2] dt-bindings: mfd: Add binding for synology,microp devices Markus Probst
2026-03-07 10:20 ` Krzysztof Kozlowski
2026-03-07 14:25 ` Krzysztof Kozlowski
2026-03-07 14:43 ` Markus Probst
2026-03-07 15:10 ` Krzysztof Kozlowski
2026-03-07 15:03 ` Markus Probst
2026-03-07 15:12 ` Krzysztof Kozlowski
2026-03-07 15:42 ` Krzysztof Kozlowski
2026-03-06 19:38 ` [PATCH 2/2] staging: Add initial synology microp driver Markus Probst
2026-03-07 7:15 ` Greg Kroah-Hartman
2026-03-07 12:58 ` Markus Probst
2026-03-08 7:08 ` Greg Kroah-Hartman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox