* [PATCH v6 0/2] Introduce Synology Microp driver
@ 2026-04-05 17:36 Markus Probst via B4 Relay
2026-04-05 17:36 ` [PATCH v6 1/2] platform: Add initial synology microp driver Markus Probst via B4 Relay
2026-04-05 17:36 ` [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices Markus Probst via B4 Relay
0 siblings, 2 replies; 7+ messages in thread
From: Markus Probst via B4 Relay @ 2026-04-05 17:36 UTC (permalink / raw)
To: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue,
Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Greg Kroah-Hartman
Cc: platform-driver-x86, linux-leds, devicetree, linux-kernel,
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.
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/20260329-rust_leds-v13-0-21a599c5b2d1@posteo.de/
[2] https://lore.kernel.org/rust-for-linux/20260313-rust_serdev-v3-0-c9a3af214f7f@posteo.de/
Signed-off-by: Markus Probst <markus.probst@posteo.de>
---
Changes in v6:
- moved devicetree bindings patch at the end of the set
- remove several patches
- move of id table from model.rs to synology_microp.rs
- remove the model! macro
- use if blocks in devicetree schema to narrow down the
fan-failure-gpios property
- add multiple devicetree examples to test if blocks
- Link to v5: https://lore.kernel.org/r/20260329-synology_microp_initial-v5-0-27cb80bdf591@posteo.de
Changes in v5:
- add esata led support
- use different compatible for each model
- add visibility modifier to of_device_table macro
- fix match data missing when using PRP0001
- Link to v4: https://lore.kernel.org/r/20260320-synology_microp_initial-v4-0-0423ddb83ca4@posteo.de
Changes in v4:
- convert to monolithic driver and moved it into drivers/platform
- removed mfd rust abstraction
- moved dt-bindings to embedded-controller
- Link to v3: https://lore.kernel.org/r/20260313-synology_microp_initial-v3-0-ad6ac463a201@posteo.de
Changes in v3:
- remove `default n` from Kconfig entry, as n is the default already.
- select RUST_SERIAL_DEV_BUS_ABSTRACTIONS in Kconfig
- add mfd rust abstraction
- split core and led parts into their own driver. It should now be considered a
MFD device.
- split led part of dt binding into its own file
- Link to v2: https://lore.kernel.org/r/20260308-synology_microp_initial-v2-0-9389963f31c5@posteo.de
Changes in v2:
- fix missing tabs in MAINTAINERS file
- remove word binding from patch subject
- add missing signed-off-by
- add missing help entry in Kconfig
- add missing spdx license headers
- remove no-check{,-cpu}-fan properties from the dt-bindings and replace
them with the check_fan module parameter
- use patternProperties for leds in dt-bindings
- license dt-binding as GPL-2.0-only OR BSD-2-Clause
- move driver from staging tree into mfd tree and mark it as work in
progress inside Kconfig
- only register alert and usb led if fwnode is present
- Link to v1: https://lore.kernel.org/r/20260306-synology_microp_initial-v1-0-fcffede6448c@posteo.de
---
Markus Probst (2):
platform: Add initial synology microp driver
dt-bindings: embedded-controller: Add synology microp devices
.../synology,ds923p-microp.yaml | 112 +++++++++
MAINTAINERS | 6 +
drivers/platform/Kconfig | 2 +
drivers/platform/Makefile | 1 +
drivers/platform/synology_microp/Kconfig | 13 +
drivers/platform/synology_microp/Makefile | 3 +
drivers/platform/synology_microp/TODO | 7 +
drivers/platform/synology_microp/command.rs | 55 ++++
drivers/platform/synology_microp/led.rs | 276 +++++++++++++++++++++
drivers/platform/synology_microp/model.rs | 49 ++++
.../platform/synology_microp/synology_microp.rs | 109 ++++++++
11 files changed, 633 insertions(+)
---
base-commit: b6c7d19951061de1be08fb8f5714e630b24bcc1c
change-id: 20260306-synology_microp_initial-0f7dac7b7496
prerequisite-change-id: 20251217-rust_serdev-ee5481e9085c:v3
prerequisite-patch-id: 52b17274481cc770c257d8f95335293eca32a2c5
prerequisite-patch-id: eec47e5051640d08bcd34a9670b98804449cad52
prerequisite-patch-id: f24b68c71c3f69371e8ac0251efca0a023b31cc4
prerequisite-patch-id: 3dfc1f7e5ecd3e0dd65d676aeb16f55260847b25
prerequisite-change-id: 20251114-rust_leds-a959f7c2f7f9:v13
prerequisite-patch-id: 818700f22dcb9676157c985f82762d7c607b861e
prerequisite-patch-id: b15ffa7d95d9260151bfb116b259c4473f721c82
prerequisite-patch-id: 8c47e0d107530f577a1be0b79f8ee791f95d3cbe
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v6 1/2] platform: Add initial synology microp driver 2026-04-05 17:36 [PATCH v6 0/2] Introduce Synology Microp driver Markus Probst via B4 Relay @ 2026-04-05 17:36 ` Markus Probst via B4 Relay 2026-04-05 17:36 ` [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices Markus Probst via B4 Relay 1 sibling, 0 replies; 7+ messages in thread From: Markus Probst via B4 Relay @ 2026-04-05 17:36 UTC (permalink / raw) To: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue, Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman Cc: platform-driver-x86, linux-leds, devicetree, linux-kernel, rust-for-linux, Markus Probst From: Markus Probst <markus.probst@posteo.de> Add a initial synology microp driver, written in Rust. 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. This driver can be used both on arm and x86, thus it goes into the root directory of drivers/platform. Tested successfully on a Synology DS923+. Signed-off-by: Markus Probst <markus.probst@posteo.de> --- MAINTAINERS | 5 + drivers/platform/Kconfig | 2 + drivers/platform/Makefile | 1 + drivers/platform/synology_microp/Kconfig | 13 + drivers/platform/synology_microp/Makefile | 3 + drivers/platform/synology_microp/TODO | 7 + drivers/platform/synology_microp/command.rs | 55 ++++ drivers/platform/synology_microp/led.rs | 276 +++++++++++++++++++++ drivers/platform/synology_microp/model.rs | 49 ++++ .../platform/synology_microp/synology_microp.rs | 109 ++++++++ 10 files changed, 520 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index a667f4efb66e..78c99d831431 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -25554,6 +25554,11 @@ F: drivers/dma-buf/sync_* F: include/linux/sync_file.h F: include/uapi/linux/sync_file.h +SYNOLOGY MICROP DRIVER +M: Markus Probst <markus.probst@posteo.de> +S: Maintained +F: drivers/platform/synology_microp/ + SYNOPSYS ARC ARCHITECTURE M: Vineet Gupta <vgupta@kernel.org> L: linux-snps-arc@lists.infradead.org diff --git a/drivers/platform/Kconfig b/drivers/platform/Kconfig index 312788f249c9..996050566a4a 100644 --- a/drivers/platform/Kconfig +++ b/drivers/platform/Kconfig @@ -22,3 +22,5 @@ source "drivers/platform/arm64/Kconfig" source "drivers/platform/raspberrypi/Kconfig" source "drivers/platform/wmi/Kconfig" + +source "drivers/platform/synology_microp/Kconfig" diff --git a/drivers/platform/Makefile b/drivers/platform/Makefile index fa322e7f8716..2381872e9133 100644 --- a/drivers/platform/Makefile +++ b/drivers/platform/Makefile @@ -15,3 +15,4 @@ obj-$(CONFIG_SURFACE_PLATFORMS) += surface/ obj-$(CONFIG_ARM64_PLATFORM_DEVICES) += arm64/ obj-$(CONFIG_BCM2835_VCHIQ) += raspberrypi/ obj-$(CONFIG_ACPI_WMI) += wmi/ +obj-$(CONFIG_SYNOLOGY_MICROP) += synology_microp/ diff --git a/drivers/platform/synology_microp/Kconfig b/drivers/platform/synology_microp/Kconfig new file mode 100644 index 000000000000..7c4d8f2808f0 --- /dev/null +++ b/drivers/platform/synology_microp/Kconfig @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: GPL-2.0 + +config SYNOLOGY_MICROP + tristate "Synology Microp driver" + depends on LEDS_CLASS && LEDS_CLASS_MULTICOLOR + depends on RUST_SERIAL_DEV_BUS_ABSTRACTIONS + help + Enable support for the MCU found in Synology NAS devices. + + This is needed to properly shutdown and reboot the device, as well as + additional functionality like fan and LED control. + + This driver is work in progress and may not be fully functional. diff --git a/drivers/platform/synology_microp/Makefile b/drivers/platform/synology_microp/Makefile new file mode 100644 index 000000000000..63585ccf76e4 --- /dev/null +++ b/drivers/platform/synology_microp/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-y += synology_microp.o diff --git a/drivers/platform/synology_microp/TODO b/drivers/platform/synology_microp/TODO new file mode 100644 index 000000000000..1961a33115db --- /dev/null +++ b/drivers/platform/synology_microp/TODO @@ -0,0 +1,7 @@ +TODO: +- 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/platform/synology_microp/command.rs b/drivers/platform/synology_microp/command.rs new file mode 100644 index 000000000000..5b3dd715afac --- /dev/null +++ b/drivers/platform/synology_microp/command.rs @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0 + +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), + EsataLed(led::State), +} + +impl Command { + pub(crate) fn write(self, dev: &serdev::Device<Bound>) -> Result { + dev.write_all( + match self { + Self::PowerLed(led::State::On) => &[0x34], + Self::PowerLed(led::State::Blink) => &[0x35], + Self::PowerLed(led::State::Off) => &[0x36], + + Self::StatusLed(_, led::State::Off) => &[0x37], + Self::StatusLed(led::StatusLedColor::Green, led::State::On) => &[0x38], + Self::StatusLed(led::StatusLedColor::Green, led::State::Blink) => &[0x39], + Self::StatusLed(led::StatusLedColor::Orange, led::State::On) => &[0x3A], + Self::StatusLed(led::StatusLedColor::Orange, led::State::Blink) => &[0x3B], + + Self::AlertLed(led::State::On) => &[0x4C, 0x41, 0x31], + Self::AlertLed(led::State::Blink) => &[0x4C, 0x41, 0x32], + Self::AlertLed(led::State::Off) => &[0x4C, 0x41, 0x33], + + Self::UsbLed(led::State::On) => &[0x40], + Self::UsbLed(led::State::Blink) => &[0x41], + Self::UsbLed(led::State::Off) => &[0x42], + + Self::EsataLed(led::State::On) => &[0x4C, 0x45, 0x31], + Self::EsataLed(led::State::Blink) => &[0x4C, 0x45, 0x32], + Self::EsataLed(led::State::Off) => &[0x4C, 0x45, 0x33], + }, + serdev::Timeout::Max, + )?; + dev.wait_until_sent(serdev::Timeout::Max); + Ok(()) + } +} diff --git a/drivers/platform/synology_microp/led.rs b/drivers/platform/synology_microp/led.rs new file mode 100644 index 000000000000..a78a95588456 --- /dev/null +++ b/drivers/platform/synology_microp/led.rs @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: GPL-2.0 + +use kernel::{ + device::Bound, + devres::{ + self, + Devres, // + }, + led::{ + self, + LedOps, + MultiColorSubLed, // + }, + new_mutex, + prelude::*, + serdev, + str::CString, + sync::Mutex, // +}; +use pin_init::pin_init_scope; + +use crate::{ + command::Command, + model::Model, // +}; + +#[pin_data] +pub(crate) struct Data { + #[pin] + status: Devres<led::MultiColorDevice<StatusLedHandler>>, + power_name: CString, + #[pin] + power: Devres<led::Device<LedHandler>>, +} + +impl Data { + pub(super) fn register<'a>( + dev: &'a serdev::Device<Bound>, + model: &'a Model, + ) -> impl PinInit<Self, Error> + 'a { + pin_init_scope(move || { + if let Some(color) = model.led_alert { + let name = CString::try_from_fmt(fmt!("{}:alarm", color.as_c_str().to_str()?))?; + devres::register( + dev.as_ref(), + led::DeviceBuilder::new().color(color).name(&name).build( + dev, + try_pin_init!(LedHandler { + blink <- new_mutex!(false), + command: Command::AlertLed, + }), + ), + GFP_KERNEL, + )?; + } + + if model.led_usb_copy { + devres::register( + dev.as_ref(), + led::DeviceBuilder::new() + .color(led::Color::Green) + .name(c"green:usb") + .build( + dev, + try_pin_init!(LedHandler { + blink <- new_mutex!(false), + command: Command::UsbLed, + }), + ), + GFP_KERNEL, + )?; + } + + if model.led_esata { + devres::register( + dev.as_ref(), + led::DeviceBuilder::new() + .color(led::Color::Green) + .name(c"green:esata") + .build( + dev, + try_pin_init!(LedHandler { + blink <- new_mutex!(false), + command: Command::EsataLed, + }), + ), + GFP_KERNEL, + )?; + } + + Ok(try_pin_init!(Self { + status <- led::DeviceBuilder::new() + .color(led::Color::Multi) + .name(c"multicolor:status") + .build_multicolor( + dev, + try_pin_init!(StatusLedHandler { + blink <- new_mutex!(false), + }), + StatusLedHandler::SUBLEDS, + ), + power_name: CString::try_from_fmt(fmt!( + "{}:power", + model.led_power.as_c_str().to_str()? + ))?, + power <- led::DeviceBuilder::new() + .color(model.led_power) + .name(power_name) + .build( + dev, + try_pin_init!(LedHandler { + blink <- new_mutex!(true), + command: Command::PowerLed, + }), + ), + })) + }) + } +} + +#[derive(Copy, Clone)] +pub(crate) enum StatusLedColor { + Green, + Orange, +} + +#[derive(Copy, Clone)] +pub(crate) enum State { + On, + Blink, + Off, +} + +#[pin_data] +struct LedHandler { + #[pin] + blink: Mutex<bool>, + command: fn(State) -> Command, +} + +#[vtable] +impl LedOps for LedHandler { + 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<()> { + let mut blink = self.blink.lock(); + (self.command)(if brightness == 0 { + *blink = false; + State::Off + } else if *blink { + State::Blink + } else { + State::On + }) + .write(dev)?; + + Ok(()) + } + + fn blink_set( + &self, + dev: &Self::Bus, + _classdev: &led::Device<Self>, + delay_on: &mut usize, + delay_off: &mut usize, + ) -> Result<()> { + let mut blink = self.blink.lock(); + + (self.command)(if *delay_on == 0 && *delay_off != 0 { + State::Off + } else if *delay_on != 0 && *delay_off == 0 { + State::On + } else { + *blink = true; + *delay_on = 167; + *delay_off = 167; + + State::Blink + }) + .write(dev) + } +} + +#[pin_data] +struct StatusLedHandler { + #[pin] + blink: Mutex<bool>, +} + +impl StatusLedHandler { + const SUBLEDS: &[MultiColorSubLed] = &[ + MultiColorSubLed::new(led::Color::Green).initial_intensity(1), + MultiColorSubLed::new(led::Color::Orange), + ]; +} + +#[vtable] +impl LedOps for StatusLedHandler { + 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<()> { + let mut blink = self.blink.lock(); + if brightness == 0 { + *blink = false; + } + + let (color, subled_brightness) = if classdev.subleds()[1].intensity == 0 { + (StatusLedColor::Green, classdev.subleds()[0].brightness) + } else { + (StatusLedColor::Orange, classdev.subleds()[1].brightness) + }; + + Command::StatusLed( + color, + if subled_brightness == 0 { + State::Off + } else if *blink { + State::Blink + } else { + State::On + }, + ) + .write(dev) + } + + fn blink_set( + &self, + dev: &Self::Bus, + classdev: &led::MultiColorDevice<Self>, + delay_on: &mut usize, + delay_off: &mut usize, + ) -> Result<()> { + let mut blink = self.blink.lock(); + *blink = true; + + let (color, subled_intensity) = if classdev.subleds()[1].intensity == 0 { + (StatusLedColor::Green, classdev.subleds()[0].intensity) + } else { + (StatusLedColor::Orange, classdev.subleds()[1].intensity) + }; + Command::StatusLed( + color, + if *delay_on == 0 && *delay_off != 0 { + *blink = false; + State::Off + } else if subled_intensity == 0 { + State::Off + } else if *delay_on != 0 && *delay_off == 0 { + *blink = false; + State::On + } else { + *delay_on = 167; + *delay_off = 167; + + State::Blink + }, + ) + .write(dev) + } +} diff --git a/drivers/platform/synology_microp/model.rs b/drivers/platform/synology_microp/model.rs new file mode 100644 index 000000000000..715d8840f56b --- /dev/null +++ b/drivers/platform/synology_microp/model.rs @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: GPL-2.0 + +use kernel::led::Color; + +pub(crate) struct Model { + pub(crate) led_power: Color, + pub(crate) led_alert: Option<Color>, + pub(crate) led_usb_copy: bool, + pub(crate) led_esata: bool, +} + +impl Model { + pub(super) const fn new() -> Self { + Self { + led_power: Color::Blue, + led_alert: None, + led_usb_copy: false, + led_esata: false, + } + } + + pub(super) const fn led_power(self, color: Color) -> Self { + Self { + led_power: color, + ..self + } + } + + pub(super) const fn led_alert(self, color: Color) -> Self { + Self { + led_alert: Some(color), + ..self + } + } + + pub(super) const fn led_esata(self) -> Self { + Self { + led_esata: true, + ..self + } + } + + pub(super) const fn led_usb_copy(self) -> Self { + Self { + led_usb_copy: true, + ..self + } + } +} diff --git a/drivers/platform/synology_microp/synology_microp.rs b/drivers/platform/synology_microp/synology_microp.rs new file mode 100644 index 000000000000..f02c4dade76c --- /dev/null +++ b/drivers/platform/synology_microp/synology_microp.rs @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Synology Microp driver + +use kernel::{ + device, + led::Color, + of::{ + DeviceId, + IdTable, // + }, + of_device_table, + prelude::*, + serdev, // +}; +use pin_init::pin_init_scope; + +use crate::model::Model; + +pub(crate) mod command; +mod led; +mod model; + +kernel::module_serdev_device_driver! { + type: SynologyMicropDriver, + name: "synology_microp", + authors: ["Markus Probst <markus.probst@posteo.de>"], + description: "Synology Microp driver", + license: "GPL v2", +} + +#[rustfmt::skip] +of_device_table!( + OF_TABLE, + MODULE_OF_TABLE, + Model, + [ + // apollolake + (DeviceId::new(c"synology,ds918p-microp"), Model::new()), + + // evansport + (DeviceId::new(c"synology,ds214play-microp"), Model::new()), + + // geminilakenk + (DeviceId::new(c"synology,ds225p-microp"), Model::new().led_usb_copy()), + (DeviceId::new(c"synology,ds425p-microp"), Model::new()), + + // pineview + (DeviceId::new(c"synology,ds710p-microp"), Model::new().led_esata()), + (DeviceId::new(c"synology,ds1010p-microp"), Model::new().led_alert(Color::Orange)), + + // r1000 + (DeviceId::new(c"synology,ds923p-microp"), Model::new()), + (DeviceId::new(c"synology,ds723p-microp"), Model::new()), + (DeviceId::new(c"synology,ds1522p-microp"), Model::new()), + (DeviceId::new(c"synology,rs422p-microp"), Model::new().led_power(Color::Green)), + + // r1000nk + (DeviceId::new(c"synology,ds725p-microp"), Model::new()), + + // rtd1296 + (DeviceId::new(c"synology,ds118-microp"), Model::new()), + + // rtd1619b + (DeviceId::new(c"synology,ds124-microp"), Model::new()), + (DeviceId::new(c"synolody,ds223-microp"), Model::new().led_usb_copy()), + (DeviceId::new(c"synology,ds223j-microp"), Model::new()), + + // v1000 + (DeviceId::new(c"synology,ds1823xsp-microp"), Model::new()), + (DeviceId::new(c"synology,rs822p-microp"), Model::new().led_power(Color::Green)), + (DeviceId::new(c"synology,rs1221p-microp"), Model::new().led_power(Color::Green)), + (DeviceId::new(c"synology,rs1221rpp-microp"), Model::new().led_power(Color::Green)), + + // v1000nk + (DeviceId::new(c"synology,ds925p-microp"), Model::new()), + (DeviceId::new(c"synology,ds1525p-microp"), Model::new()), + (DeviceId::new(c"synology,ds1825p-microp"), Model::new()), + ] +); + +#[pin_data] +struct SynologyMicropDriver { + #[pin] + led: led::Data, +} + +#[vtable] +impl serdev::Driver for SynologyMicropDriver { + type IdInfo = Model; + const OF_ID_TABLE: Option<IdTable<Self::IdInfo>> = Some(&OF_TABLE); + + fn probe( + dev: &serdev::Device<device::Core>, + model: Option<&Model>, + ) -> impl PinInit<Self, kernel::error::Error> { + pin_init_scope(move || { + let model = model.ok_or(EINVAL)?; + + dev.set_baudrate(9600).map_err(|_| EINVAL)?; + dev.set_flow_control(false); + dev.set_parity(serdev::Parity::None)?; + + Ok(try_pin_init!(Self { + led <- led::Data::register(dev, model), + })) + }) + } +} -- 2.52.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices 2026-04-05 17:36 [PATCH v6 0/2] Introduce Synology Microp driver Markus Probst via B4 Relay 2026-04-05 17:36 ` [PATCH v6 1/2] platform: Add initial synology microp driver Markus Probst via B4 Relay @ 2026-04-05 17:36 ` Markus Probst via B4 Relay 2026-04-06 7:59 ` Krzysztof Kozlowski 1 sibling, 1 reply; 7+ messages in thread From: Markus Probst via B4 Relay @ 2026-04-05 17:36 UTC (permalink / raw) To: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue, Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman Cc: platform-driver-x86, linux-leds, devicetree, linux-kernel, rust-for-linux, Markus Probst From: Markus Probst <markus.probst@posteo.de> 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. This includes the following compatible ids: - synology,ds923p-microp - synology,ds918p-microp - synology,ds214play-microp - synology,ds225p-microp - synology,ds425p-microp - synology,ds710p-microp - synology,ds1010p-microp - synology,ds723p-microp - synology,ds1522p-microp - synology,rs422p-microp - synology,ds725p-microp - synology,ds118-microp - synology,ds124-microp - synology,ds223-microp - synology,ds223j-microp - synology,ds1823xsp-microp - synology,rs822p-microp - synology,rs1221p-microp - synology,rs1221rpp-microp - synology,ds925p-microp - synology,ds1525p-microp - synology,ds1825p-microp Signed-off-by: Markus Probst <markus.probst@posteo.de> --- .../synology,ds923p-microp.yaml | 112 +++++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 113 insertions(+) diff --git a/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml new file mode 100644 index 000000000000..4518e9b74be1 --- /dev/null +++ b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml @@ -0,0 +1,112 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/embedded-controller/synology,ds923p-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 Microp is a microcontroller found in Synology NAS devices. + It is connected to a serial port on the host device. + + It is necessary to properly shutdown and reboot the NAS device and + provides additional functionality such as led control, fan speed control, + a beeper and buttons on the NAS device. + +properties: + compatible: + enum: + - synology,ds923p-microp + - synology,ds918p-microp + - synology,ds214play-microp + - synology,ds225p-microp + - synology,ds425p-microp + - synology,ds710p-microp + - synology,ds1010p-microp + - synology,ds723p-microp + - synology,ds1522p-microp + - synology,rs422p-microp + - synology,ds725p-microp + - synology,ds118-microp + - synology,ds124-microp + - synology,ds223-microp + - synology,ds223j-microp + - synology,ds1823xsp-microp + - synology,rs822p-microp + - synology,rs1221p-microp + - synology,rs1221rpp-microp + - synology,ds925p-microp + - synology,ds1525p-microp + - synology,ds1825p-microp + + fan-failure-gpios: + description: GPIOs needed to determine which fans stopped working on a fan failure event. + minItems: 2 + maxItems: 3 + +required: + - compatible + +allOf: + - if: + properties: + compatible: + contains: + enum: + - synology,ds214play-microp + - synology,ds225p-microp + - synology,ds710p-microp + - synology,ds723p-microp + - synology,ds725p-microp + - synology,ds118-microp + - synology,ds124-microp + - synology,ds223-microp + - synology,ds223j-microp + - synology,ds1823xsp-microp + - synology,rs822p-microp + - synology,rs1221p-microp + - synology,rs1221rpp-microp + - synology,ds1825p-microp + then: + properties: + fan-failure-gpios: false + else: + required: + - fan-failure-gpios + +additionalProperties: false + +examples: + - | + #include <dt-bindings/leds/common.h> + #include <dt-bindings/gpio/gpio.h> + + embedded-controller { + compatible = "synology,ds923p-microp"; + + fan-failure-gpios = <&gpio 68 GPIO_ACTIVE_HIGH>, <&gpio 69 GPIO_ACTIVE_HIGH>; + }; + + - | + #include <dt-bindings/leds/common.h> + #include <dt-bindings/gpio/gpio.h> + + embedded-controller { + compatible = "synology,ds723p-microp"; + }; + + - | + #include <dt-bindings/leds/common.h> + #include <dt-bindings/gpio/gpio.h> + + embedded-controller { + compatible = "synology,rs422p-microp"; + + fan-failure-gpios = <&gpio 68 GPIO_ACTIVE_HIGH>, + <&gpio 69 GPIO_ACTIVE_HIGH>, + <&gpio 40 GPIO_ACTIVE_HIGH>; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 78c99d831431..72075c9a2016 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -25557,6 +25557,7 @@ F: include/uapi/linux/sync_file.h SYNOLOGY MICROP DRIVER M: Markus Probst <markus.probst@posteo.de> S: Maintained +F: Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml F: drivers/platform/synology_microp/ SYNOPSYS ARC ARCHITECTURE -- 2.52.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices 2026-04-05 17:36 ` [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices Markus Probst via B4 Relay @ 2026-04-06 7:59 ` Krzysztof Kozlowski 2026-04-06 14:22 ` Markus Probst 0 siblings, 1 reply; 7+ messages in thread From: Krzysztof Kozlowski @ 2026-04-06 7:59 UTC (permalink / raw) To: Markus Probst Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue, Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman, platform-driver-x86, linux-leds, devicetree, linux-kernel, rust-for-linux On Sun, Apr 05, 2026 at 07:36:29PM +0200, 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. > > This includes the following compatible ids: > - synology,ds923p-microp > - synology,ds918p-microp > - synology,ds214play-microp > - synology,ds225p-microp > - synology,ds425p-microp > - synology,ds710p-microp > - synology,ds1010p-microp > - synology,ds723p-microp > - synology,ds1522p-microp > - synology,rs422p-microp > - synology,ds725p-microp > - synology,ds118-microp > - synology,ds124-microp > - synology,ds223-microp > - synology,ds223j-microp > - synology,ds1823xsp-microp > - synology,rs822p-microp > - synology,rs1221p-microp > - synology,rs1221rpp-microp > - synology,ds925p-microp > - synology,ds1525p-microp > - synology,ds1825p-microp Drop, we see this in the diff. > > Signed-off-by: Markus Probst <markus.probst@posteo.de> > --- > .../synology,ds923p-microp.yaml | 112 +++++++++++++++++++++ > MAINTAINERS | 1 + > 2 files changed, 113 insertions(+) > > diff --git a/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml > new file mode 100644 > index 000000000000..4518e9b74be1 > --- /dev/null > +++ b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml > @@ -0,0 +1,112 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/embedded-controller/synology,ds923p-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 Microp is a microcontroller found in Synology NAS devices. > + It is connected to a serial port on the host device. > + > + It is necessary to properly shutdown and reboot the NAS device and > + provides additional functionality such as led control, fan speed control, > + a beeper and buttons on the NAS device. > + > +properties: > + compatible: > + enum: > + - synology,ds923p-microp > + - synology,ds918p-microp > + - synology,ds214play-microp > + - synology,ds225p-microp > + - synology,ds425p-microp > + - synology,ds710p-microp > + - synology,ds1010p-microp > + - synology,ds723p-microp > + - synology,ds1522p-microp > + - synology,rs422p-microp > + - synology,ds725p-microp > + - synology,ds118-microp > + - synology,ds124-microp > + - synology,ds223-microp > + - synology,ds223j-microp > + - synology,ds1823xsp-microp > + - synology,rs822p-microp > + - synology,rs1221p-microp > + - synology,rs1221rpp-microp > + - synology,ds925p-microp > + - synology,ds1525p-microp > + - synology,ds1825p-microp So we already talked about this and you were told to use compatibility. Your driver clearly states several of these are compatible, so I am confused that I do not see it expressed here. > + > + fan-failure-gpios: > + description: GPIOs needed to determine which fans stopped working on a fan failure event. > + minItems: 2 > + maxItems: 3 > + > +required: > + - compatible > + > +allOf: > + - if: > + properties: > + compatible: > + contains: > + enum: > + - synology,ds214play-microp > + - synology,ds225p-microp > + - synology,ds710p-microp > + - synology,ds723p-microp > + - synology,ds725p-microp > + - synology,ds118-microp > + - synology,ds124-microp > + - synology,ds223-microp > + - synology,ds223j-microp > + - synology,ds1823xsp-microp > + - synology,rs822p-microp > + - synology,rs1221p-microp > + - synology,rs1221rpp-microp > + - synology,ds1825p-microp > + then: > + properties: > + fan-failure-gpios: false > + else: > + required: > + - fan-failure-gpios > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/leds/common.h> > + #include <dt-bindings/gpio/gpio.h> > + > + embedded-controller { > + compatible = "synology,ds923p-microp"; > + > + fan-failure-gpios = <&gpio 68 GPIO_ACTIVE_HIGH>, <&gpio 69 GPIO_ACTIVE_HIGH>; Keep only one example, they are basically the same. Difference in one property does not need a new example. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices 2026-04-06 7:59 ` Krzysztof Kozlowski @ 2026-04-06 14:22 ` Markus Probst 2026-04-06 14:42 ` Krzysztof Kozlowski 0 siblings, 1 reply; 7+ messages in thread From: Markus Probst @ 2026-04-06 14:22 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue, Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman, platform-driver-x86, linux-leds, devicetree, linux-kernel, rust-for-linux [-- Attachment #1: Type: text/plain, Size: 6406 bytes --] On Mon, 2026-04-06 at 09:59 +0200, Krzysztof Kozlowski wrote: > On Sun, Apr 05, 2026 at 07:36:29PM +0200, 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. > > > > This includes the following compatible ids: > > - synology,ds923p-microp > > - synology,ds918p-microp > > - synology,ds214play-microp > > - synology,ds225p-microp > > - synology,ds425p-microp > > - synology,ds710p-microp > > - synology,ds1010p-microp > > - synology,ds723p-microp > > - synology,ds1522p-microp > > - synology,rs422p-microp > > - synology,ds725p-microp > > - synology,ds118-microp > > - synology,ds124-microp > > - synology,ds223-microp > > - synology,ds223j-microp > > - synology,ds1823xsp-microp > > - synology,rs822p-microp > > - synology,rs1221p-microp > > - synology,rs1221rpp-microp > > - synology,ds925p-microp > > - synology,ds1525p-microp > > - synology,ds1825p-microp > > Drop, we see this in the diff. A prior review commit suggested I should add them [1]. So only synology,ds923p-microp in the Subject then? [1] https://lore.kernel.org/all/20260330-delicate-sassy-mayfly-ebcca7@quoll/ > > > > > Signed-off-by: Markus Probst <markus.probst@posteo.de> > > --- > > .../synology,ds923p-microp.yaml | 112 +++++++++++++++++++++ > > MAINTAINERS | 1 + > > 2 files changed, 113 insertions(+) > > > > diff --git a/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml > > new file mode 100644 > > index 000000000000..4518e9b74be1 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml > > @@ -0,0 +1,112 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/embedded-controller/synology,ds923p-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 Microp is a microcontroller found in Synology NAS devices. > > + It is connected to a serial port on the host device. > > + > > + It is necessary to properly shutdown and reboot the NAS device and > > + provides additional functionality such as led control, fan speed control, > > + a beeper and buttons on the NAS device. > > + > > +properties: > > + compatible: > > + enum: > > + - synology,ds923p-microp > > + - synology,ds918p-microp > > + - synology,ds214play-microp > > + - synology,ds225p-microp > > + - synology,ds425p-microp > > + - synology,ds710p-microp > > + - synology,ds1010p-microp > > + - synology,ds723p-microp > > + - synology,ds1522p-microp > > + - synology,rs422p-microp > > + - synology,ds725p-microp > > + - synology,ds118-microp > > + - synology,ds124-microp > > + - synology,ds223-microp > > + - synology,ds223j-microp > > + - synology,ds1823xsp-microp > > + - synology,rs822p-microp > > + - synology,rs1221p-microp > > + - synology,rs1221rpp-microp > > + - synology,ds925p-microp > > + - synology,ds1525p-microp > > + - synology,ds1825p-microp > > So we already talked about this and you were told to use compatibility. > Your driver clearly states several of these are compatible, so I am > confused that I do not see it expressed here. The driver does not have all functionality implemented yet. A few examples of differences not yet visible in the driver: - synology,ds214play-microp is the only model in the current list to have an cpu fan - 4 of the models are arm based and need a different shutdown behaviour - different amount of fans (already present in the binding via fan- failure-gpios) I could try to group them together, but Synology does not document the exact difference between them. As Rob mentioned [2], I need to be able to handle unexpected differences without qurik properties. [2] https://lore.kernel.org/all/CAL_JsqJUVh1YnhmYYj4ara5BheaLOL1oayjtWNuPH53q1d4xXA@mail.gmail.com/ > > > + > > + fan-failure-gpios: > > + description: GPIOs needed to determine which fans stopped working on a fan failure event. > > + minItems: 2 > > + maxItems: 3 > > + > > +required: > > + - compatible > > + > > +allOf: > > + - if: > > + properties: > > + compatible: > > + contains: > > + enum: > > + - synology,ds214play-microp > > + - synology,ds225p-microp > > + - synology,ds710p-microp > > + - synology,ds723p-microp > > + - synology,ds725p-microp > > + - synology,ds118-microp > > + - synology,ds124-microp > > + - synology,ds223-microp > > + - synology,ds223j-microp > > + - synology,ds1823xsp-microp > > + - synology,rs822p-microp > > + - synology,rs1221p-microp > > + - synology,rs1221rpp-microp > > + - synology,ds1825p-microp > > + then: > > + properties: > > + fan-failure-gpios: false > > + else: > > + required: > > + - fan-failure-gpios > > + > > +additionalProperties: false > > + > > +examples: > > + - | > > + #include <dt-bindings/leds/common.h> > > + #include <dt-bindings/gpio/gpio.h> > > + > > + embedded-controller { > > + compatible = "synology,ds923p-microp"; > > + > > + fan-failure-gpios = <&gpio 68 GPIO_ACTIVE_HIGH>, <&gpio 69 GPIO_ACTIVE_HIGH>; > > Keep only one example, they are basically the same. Difference in one > property does not need a new example. Ok, it seemed like a nice convenient way to automatically test the if blocks. Thanks - Markus Probst > > Best regards, > Krzysztof [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 870 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices 2026-04-06 14:22 ` Markus Probst @ 2026-04-06 14:42 ` Krzysztof Kozlowski 2026-04-06 15:35 ` Markus Probst 0 siblings, 1 reply; 7+ messages in thread From: Krzysztof Kozlowski @ 2026-04-06 14:42 UTC (permalink / raw) To: Markus Probst Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue, Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman, platform-driver-x86, linux-leds, devicetree, linux-kernel, rust-for-linux On 06/04/2026 16:22, Markus Probst wrote: > On Mon, 2026-04-06 at 09:59 +0200, Krzysztof Kozlowski wrote: >> On Sun, Apr 05, 2026 at 07:36:29PM +0200, 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. >>> >>> This includes the following compatible ids: >>> - synology,ds923p-microp >>> - synology,ds918p-microp >>> - synology,ds214play-microp >>> - synology,ds225p-microp >>> - synology,ds425p-microp >>> - synology,ds710p-microp >>> - synology,ds1010p-microp >>> - synology,ds723p-microp >>> - synology,ds1522p-microp >>> - synology,rs422p-microp >>> - synology,ds725p-microp >>> - synology,ds118-microp >>> - synology,ds124-microp >>> - synology,ds223-microp >>> - synology,ds223j-microp >>> - synology,ds1823xsp-microp >>> - synology,rs822p-microp >>> - synology,rs1221p-microp >>> - synology,rs1221rpp-microp >>> - synology,ds925p-microp >>> - synology,ds1525p-microp >>> - synology,ds1825p-microp >> >> Drop, we see this in the diff. > A prior review commit suggested I should add them [1]. > So only synology,ds923p-microp in the Subject then? I do not see how this list resolves my comment. Really, explain my how listing part of binding answers WHY they are not compatible? > > [1] > https://lore.kernel.org/all/20260330-delicate-sassy-mayfly-ebcca7@quoll/ > >> >>> >>> Signed-off-by: Markus Probst <markus.probst@posteo.de> >>> --- >>> .../synology,ds923p-microp.yaml | 112 +++++++++++++++++++++ >>> MAINTAINERS | 1 + >>> 2 files changed, 113 insertions(+) >>> >>> diff --git a/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml >>> new file mode 100644 >>> index 000000000000..4518e9b74be1 >>> --- /dev/null >>> +++ b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml >>> @@ -0,0 +1,112 @@ >>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >>> +%YAML 1.2 >>> +--- >>> +$id: http://devicetree.org/schemas/embedded-controller/synology,ds923p-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 Microp is a microcontroller found in Synology NAS devices. >>> + It is connected to a serial port on the host device. >>> + >>> + It is necessary to properly shutdown and reboot the NAS device and >>> + provides additional functionality such as led control, fan speed control, >>> + a beeper and buttons on the NAS device. >>> + >>> +properties: >>> + compatible: >>> + enum: >>> + - synology,ds923p-microp >>> + - synology,ds918p-microp >>> + - synology,ds214play-microp >>> + - synology,ds225p-microp >>> + - synology,ds425p-microp >>> + - synology,ds710p-microp >>> + - synology,ds1010p-microp >>> + - synology,ds723p-microp >>> + - synology,ds1522p-microp >>> + - synology,rs422p-microp >>> + - synology,ds725p-microp >>> + - synology,ds118-microp >>> + - synology,ds124-microp >>> + - synology,ds223-microp >>> + - synology,ds223j-microp >>> + - synology,ds1823xsp-microp >>> + - synology,rs822p-microp >>> + - synology,rs1221p-microp >>> + - synology,rs1221rpp-microp >>> + - synology,ds925p-microp >>> + - synology,ds1525p-microp >>> + - synology,ds1825p-microp >> >> So we already talked about this and you were told to use compatibility. >> Your driver clearly states several of these are compatible, so I am >> confused that I do not see it expressed here. > The driver does not have all functionality implemented yet. Either this drivers works or not. If it works, explain me how they are not compatible. > > A few examples of differences not yet visible in the driver: > - synology,ds214play-microp is the only model in the current list to > have an cpu fan > - 4 of the models are arm based and need a different shutdown behaviour > - different amount of fans (already present in the binding via fan- > failure-gpios) > > I could try to group them together, but Synology does not document the > exact difference between them. > > As Rob mentioned [2], I need to be able to handle unexpected > differences without qurik properties. I did not object that. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices 2026-04-06 14:42 ` Krzysztof Kozlowski @ 2026-04-06 15:35 ` Markus Probst 0 siblings, 0 replies; 7+ messages in thread From: Markus Probst @ 2026-04-06 15:35 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue, Lee Jones, Pavel Machek, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman, platform-driver-x86, linux-leds, devicetree, linux-kernel, rust-for-linux [-- Attachment #1: Type: text/plain, Size: 6882 bytes --] On Mon, 2026-04-06 at 16:42 +0200, Krzysztof Kozlowski wrote: > On 06/04/2026 16:22, Markus Probst wrote: > > On Mon, 2026-04-06 at 09:59 +0200, Krzysztof Kozlowski wrote: > > > On Sun, Apr 05, 2026 at 07:36:29PM +0200, 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. > > > > > > > > This includes the following compatible ids: > > > > - synology,ds923p-microp > > > > - synology,ds918p-microp > > > > - synology,ds214play-microp > > > > - synology,ds225p-microp > > > > - synology,ds425p-microp > > > > - synology,ds710p-microp > > > > - synology,ds1010p-microp > > > > - synology,ds723p-microp > > > > - synology,ds1522p-microp > > > > - synology,rs422p-microp > > > > - synology,ds725p-microp > > > > - synology,ds118-microp > > > > - synology,ds124-microp > > > > - synology,ds223-microp > > > > - synology,ds223j-microp > > > > - synology,ds1823xsp-microp > > > > - synology,rs822p-microp > > > > - synology,rs1221p-microp > > > > - synology,rs1221rpp-microp > > > > - synology,ds925p-microp > > > > - synology,ds1525p-microp > > > > - synology,ds1825p-microp > > > > > > Drop, we see this in the diff. > > A prior review commit suggested I should add them [1]. > > So only synology,ds923p-microp in the Subject then? > > I do not see how this list resolves my comment. Really, explain my how > listing part of binding answers WHY they are not compatible? I might have misunderstood it then, my apologies for that. > > > > > > [1] > > https://lore.kernel.org/all/20260330-delicate-sassy-mayfly-ebcca7@quoll/ > > > > > > > > > > > > > Signed-off-by: Markus Probst <markus.probst@posteo.de> > > > > --- > > > > .../synology,ds923p-microp.yaml | 112 +++++++++++++++++++++ > > > > MAINTAINERS | 1 + > > > > 2 files changed, 113 insertions(+) > > > > > > > > diff --git a/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml > > > > new file mode 100644 > > > > index 000000000000..4518e9b74be1 > > > > --- /dev/null > > > > +++ b/Documentation/devicetree/bindings/embedded-controller/synology,ds923p-microp.yaml > > > > @@ -0,0 +1,112 @@ > > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > > +%YAML 1.2 > > > > +--- > > > > +$id: http://devicetree.org/schemas/embedded-controller/synology,ds923p-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 Microp is a microcontroller found in Synology NAS devices. > > > > + It is connected to a serial port on the host device. > > > > + > > > > + It is necessary to properly shutdown and reboot the NAS device and > > > > + provides additional functionality such as led control, fan speed control, > > > > + a beeper and buttons on the NAS device. > > > > + > > > > +properties: > > > > + compatible: > > > > + enum: > > > > + - synology,ds923p-microp > > > > + - synology,ds918p-microp > > > > + - synology,ds214play-microp > > > > + - synology,ds225p-microp > > > > + - synology,ds425p-microp > > > > + - synology,ds710p-microp > > > > + - synology,ds1010p-microp > > > > + - synology,ds723p-microp > > > > + - synology,ds1522p-microp > > > > + - synology,rs422p-microp > > > > + - synology,ds725p-microp > > > > + - synology,ds118-microp > > > > + - synology,ds124-microp > > > > + - synology,ds223-microp > > > > + - synology,ds223j-microp > > > > + - synology,ds1823xsp-microp > > > > + - synology,rs822p-microp > > > > + - synology,rs1221p-microp > > > > + - synology,rs1221rpp-microp > > > > + - synology,ds925p-microp > > > > + - synology,ds1525p-microp > > > > + - synology,ds1825p-microp > > > > > > So we already talked about this and you were told to use compatibility. > > > Your driver clearly states several of these are compatible, so I am > > > confused that I do not see it expressed here. > > The driver does not have all functionality implemented yet. > > Either this drivers works or not. If it works, explain me how they are > not compatible. I will use my ds923+ as baseline here. Known relevant differences that make them not compatible: ds918p: - no system current sensor ds214play: - has an cpu fan - has only 1 fan - no system current sensor ds225p: - has usb copy led and button - has only 1 fan - no system current sensor ds415p: - no system current sensor ds710p: - has esata led - has only 1 fan - no system current sensor ds1010p: - has alert led controlled via microp - no system current sensor ds723p - has only 1 fan ds725p: - has only 1 fan - no system current sensor ds1522p: <no relevant known difference> rs422p: - power led is green - has 3 fans rs822p: - power led is green - supports fan rpm report via an adt7475 chip and therefore does not have gpios for fan failure - no system current sensor ds118, ds124, ds223j: - different shutdown behaviour - has only 1 fan - no system current sensor ds223: - different shutdown behaviour - has usb copy led and button - has only 1 fan - no system current sensor rs1221p, rs1221rpp: - power led is green - supports fan rpm report via an adt7475 chip and therefore does not have gpios for fan failure - no system current sensor ds925p, ds1525p, ds1825p, ds1823xsp: - supports fan rpm report via an adt7475 chip and therefore does not have gpios for fan failure - no system current sensor Thanks - Markus Probst > > > > > A few examples of differences not yet visible in the driver: > > - synology,ds214play-microp is the only model in the current list to > > have an cpu fan > > - 4 of the models are arm based and need a different shutdown behaviour > > - different amount of fans (already present in the binding via fan- > > failure-gpios) > > > > I could try to group them together, but Synology does not document the > > exact difference between them. > > > > As Rob mentioned [2], I need to be able to handle unexpected > > differences without qurik properties. > > I did not object that. > > > Best regards, > Krzysztof [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 870 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-04-06 15:35 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-05 17:36 [PATCH v6 0/2] Introduce Synology Microp driver Markus Probst via B4 Relay 2026-04-05 17:36 ` [PATCH v6 1/2] platform: Add initial synology microp driver Markus Probst via B4 Relay 2026-04-05 17:36 ` [PATCH v6 2/2] dt-bindings: embedded-controller: Add synology microp devices Markus Probst via B4 Relay 2026-04-06 7:59 ` Krzysztof Kozlowski 2026-04-06 14:22 ` Markus Probst 2026-04-06 14:42 ` Krzysztof Kozlowski 2026-04-06 15:35 ` Markus Probst
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox