From df7ae4d0140c30aa4becc73b3efe60403a1b9f82 Mon Sep 17 00:00:00 2001 From: Luke D Jones Date: Tue, 23 Mar 2021 13:44:07 +1300 Subject: [PATCH] Fix: non-rgb keyboard backlight control --- CHANGELOG.md | 4 ++++ Cargo.lock | 2 +- daemon/Cargo.toml | 2 +- daemon/src/ctrl_leds.rs | 10 +++------- daemon/src/daemon.rs | 31 ++++++++++++++----------------- daemon/src/laptops.rs | 15 ++++++++++++--- 6 files changed, 35 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 954da93f..8fa312b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +# [3.2.2] - 2021-03-23 +### Changed +- Fix brightness control, again, for non-RGB keyboards + # [3.2.1] - 2021-03-21 ### Changed - Fix brightness control diff --git a/Cargo.lock b/Cargo.lock index dd647344..c9946bbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -196,7 +196,7 @@ dependencies = [ [[package]] name = "daemon" -version = "3.2.1" +version = "3.2.2" dependencies = [ "env_logger", "intel-pstate", diff --git a/daemon/Cargo.toml b/daemon/Cargo.toml index 21c98e12..b263cd01 100644 --- a/daemon/Cargo.toml +++ b/daemon/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "daemon" -version = "3.2.1" +version = "3.2.2" license = "MPL-2.0" readme = "README.md" authors = ["Luke "] diff --git a/daemon/src/ctrl_leds.rs b/daemon/src/ctrl_leds.rs index 867ae00f..78133421 100644 --- a/daemon/src/ctrl_leds.rs +++ b/daemon/src/ctrl_leds.rs @@ -37,14 +37,10 @@ impl GetSupported for CtrlKbdBacklight { let multizone_led_mode = false; let per_key_led_mode = false; let laptop = LaptopLedData::get_data(); - let stock_led_modes = if let Some(data) = laptop { - if data.standard.is_empty() { - None - } else { - Some(data.standard) - } - } else { + let stock_led_modes = if laptop.standard.is_empty() { None + } else { + Some(laptop.standard) }; LedSupportedFunctions { diff --git a/daemon/src/daemon.rs b/daemon/src/daemon.rs index ac5a22a3..a555db9a 100644 --- a/daemon/src/daemon.rs +++ b/daemon/src/daemon.rs @@ -135,23 +135,20 @@ fn start_daemon() -> Result<(), Box> { DbusFanAndCpu::new(tmp).add_to_server(&mut object_server); }; - if let Some(laptop) = LaptopLedData::get_data() { - if !laptop.standard.is_empty() { - let aura_config = AuraConfig::load(&laptop); - - if let Ok(ctrl) = CtrlKbdBacklight::new( - laptop, - aura_config, - ) - .map_err(|err| { - error!("Keyboard control: {}", err); - err - }) { - let tmp = Arc::new(Mutex::new(ctrl)); - DbusKbdBacklight::new(tmp.clone()).add_to_server(&mut object_server); - tasks.push(tmp); - } - }} + let laptop = LaptopLedData::get_data(); + let aura_config = AuraConfig::load(&laptop); + if let Ok(ctrl) = CtrlKbdBacklight::new( + laptop, + aura_config, + ) + .map_err(|err| { + error!("Keyboard control: {}", err); + err + }) { + let tmp = Arc::new(Mutex::new(ctrl)); + DbusKbdBacklight::new(tmp.clone()).add_to_server(&mut object_server); + tasks.push(tmp); + } // TODO: implement messaging between threads to check fails // These tasks generally read a sys path or file to check for a diff --git a/daemon/src/laptops.rs b/daemon/src/laptops.rs index b8929a53..4bff52e3 100644 --- a/daemon/src/laptops.rs +++ b/daemon/src/laptops.rs @@ -49,15 +49,24 @@ pub struct LaptopLedData { } impl LaptopLedData { - pub fn get_data() -> Option { + pub fn get_data() -> Self { let dmi = sysfs_class::DmiId::default(); let board_name = dmi.board_name().expect("Could not get board_name"); let prod_family = dmi.product_family().expect("Could not get product_family"); if let Some(modes) = LedSupportFile::load_from_config() { - return modes.matcher(&prod_family, &board_name); + if let Some(data) = modes.matcher(&prod_family, &board_name) { + return data; + } + } + info!("Using generic LED control for keyboard brightness only"); + LaptopLedData { + prod_family, + board_names: vec![board_name], + standard: vec![], + multizone: false, + per_key: false, } - None } }