On Wed, 2026-09-30 at 13:05 +0000, Markus Probst wrote: > The abstraction is used by > https://lore.kernel.org/rust-for-linux/20260724-synology_microp_initial-v18-0-fb2f49f10e77@posteo.de/ > . > > The following changes were made: > * add basic led classdev abstractions to register and unregister leds > > * add basic led classdev abstractions to register and unregister > multicolor leds > > Changes since v25: > * fix issues reported by Sashiko: > * fix vertical import > * add drivers/leds/*.rs to MAINTAINERS file (Kari) > * s/add/Add/ in commit message > > Changes since v24: > * remove `LedOps::Bus` (Gary) > * support type-erased `Device` and `MultiColorDevice` types (Gary) > * use `Device` and `MultiColorDevice` as arbitrary self types in > callbacks. Remove separate `classdev` argument (Gary) > * remove unnecessary imports in doc example > > Changes since v23: > * add separate patch for MAINTAINERS file update > > Changes since v22: > * readded CStrExt import, because it is imported with `as _` in prelude. > A `# CONFIG_RUST is not set` sneaked into my .config while > development, so the compile error was unnoticed. > > Changes since v21: > * use 'init for lifetime that is only alive during initialization > * remove unnecessary CStrExt import > > Changes since v20: > * resolve Sashiko regressions: > * fix typo > * fix fwnode refcount decremented too early > > Changes since v19: > * rebase on v7.2-rc1: > * Add `max_intensity` to `MultiColorSubLed` > * use safer `KBox::pin_slice` instead of `KVec` > (len might not equal capacity) > * explicitly call `FwNode::dec_ref` instead of dropping a reconstructed > `ARef`. > * remove direct access to `intensity` and `brightness` fields, > which may get mutated concurrently by the C side > * fix safety comments pointing to functions from previous revisions > > Changes since v18: > * add inlines > * fix invalid documentation > * improve led color duplicate checking > > Changes since v17: > * use lifetimes instead of Devres > > Changes since v16: > * use for loops for duplicate checking > > Changes since v15: > * fix issues reported by Sashiko bot: > * fix returning error not possible on `brightness_get` callback > > Changes since v14: > * fix issues reported by Sashiko bot: > * add missing inlines > * add missing Sync trait bound > * fix vertical import layout for public export of private types > * fix potential memory leak, if a multicolor led device with over > `u32::MAX` subleds is registered > * remove default_trigger option > * fix missing CAST doc > > Changes since v13: > * rebased onto v7.1-rc1 > > Changes since v12: > * add `led::DeviceBuilder::name()` and `DeviceBuilderState' > * add `led::Color::as_c_str` > > Changes since v11: > * use `led::DeviceBuilder` instead of `led::InitData` > * use static_assert instead of const { assert!(...) } > * restructured patches to avoid moving `led::Device` from > rust/kernel/led.rs to rust/kernel/led/normal.rs in the 2. patch > > Changes since v10: > * allow in-place initialization of `LedOps` > * run rustfmt for code inside `try_pin_init!` > > Changes since v9: > * add missing periods in documentation > * duplicate `led::Device` and `led::Adapter` instead of using a complex > trait > * fix imports not using prelude > * adapt to CStr change > * documented `led::Color::Multi` and `led::Color::Rgb` > > Changes since v8: > * accept `Option>` in `led::InitData::fwnode()` > * make functions in `MultiColorSubLed` const > * drop the "rust: Add trait to convert a device reference to a bus > device reference" patch, as it has been picked into driver-core > > Changes since v7: > * adjusted import style > * added classdev parameter to callback functions in `LedOps` > * implement `led::Color` > * extend `led::InitData` with > - initial_brightness > - default_trigger > - default_color > * split generic and normal led classdev abstractions up (see patch 3/4) > * add multicolor led class device abstractions (see patch 4/4) > * added MAINTAINERS entry > > Changes since v6: > * fixed typos > * improved documentation > > Changes since v5: > * rename `IntoBusDevice` trait into `AsBusDevice` > * fix documentation about `LedOps::BLOCKING` > * removed dependency on i2c bindings > * added `AsBusDevice` implementation for `platform::Device` > * removed `device::Device` fallback implementation > * document that `AsBusDevice` must not be used by drivers and is > intended for bus and class device abstractions only. > > Changes since v4: > * add abstraction to convert a device reference to a bus device > reference > * require the bus device as parent device and provide it in class device > callbacks > * remove Pin> abstraction (as not relevant for the led > abstractions) > * fixed formatting in `led::Device::new` > * fixed `LedOps::BLOCKING` did the inverse effect > > Changes since v3: > * fixed kunit tests failing because of example in documentation > > Changes since v2: > * return `Devres` on `led::Device` creation > * replace KBox with T in struct definition > * increment and decrement reference-count of fwnode > * make a device parent mandatory for led classdev creation > * rename `led::Handler` to `led::LedOps` > * add optional `brightness_get` function to `led::LedOps` > * use `#[vtable]` instead of `const BLINK: bool` > * use `Opaque::cast_from` instead of casting a pointer > * improve documentation > * improve support for older rust versions > * use `&Device` for parent > > Changes since v1: > * fixed typos noticed by Onur Özkan > > Signed-off-by: Markus Probst > --- > Markus Probst (4): > rust: leds: Add basic led classdev abstractions > rust: leds: Add Mode trait > rust: leds: Add multicolor classdev abstractions > MAINTAINERS: rust: leds: Add rust abstraction entry > > MAINTAINERS | 9 + > rust/bindings/bindings_helper.h | 1 + > rust/kernel/led.rs | 317 ++++++++++++++++++++++++++++ > rust/kernel/led/multicolor.rs | 445 ++++++++++++++++++++++++++++++++++++++++ > rust/kernel/led/normal.rs | 230 +++++++++++++++++++++ > rust/kernel/lib.rs | 1 + > 6 files changed, 1003 insertions(+) > --- > base-commit: 5a956dde5526a634dca7ccad27c051ebcc306089 > change-id: 20251114-rust_leds-a959f7c2f7f9 Today is the 1st Year Anniversary of this patch series. That's a fairly long time. I hope it gets merged before there is a 2nd one. Thanks - Markus Probst