From c03abaadc5c9fe0d41cde54debb6a2e3124b6fbb Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Mon, 25 May 2026 19:02:19 +0545 Subject: [PATCH] feat(src/commands): Add Ideapad detection and conditional platform profile handling Enables proper handling of Ideapad laptops by skipping `set_platform_profile` when it is decoupled from fan control, improving compatibility and user feedback. New Features - Added `is_ideapad()` helper function. Enhancements - Conditional execution of `set_platform_profile` based on Ideapad detection. - Added informative messages when platform profile is skipped on Ideapad. Bug Fixes - None. --- src/commands/power.rs | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/commands/power.rs b/src/commands/power.rs index 6365c6b..bfd8868 100644 --- a/src/commands/power.rs +++ b/src/commands/power.rs @@ -209,6 +209,10 @@ fn set_amd_hwmon_limit(watts: u32) -> bool { } success } +fn is_ideapad() -> bool { + Path::new("/sys/bus/platform/drivers/ideapad_acpi").exists() +} + fn set_platform_profile(profile: &str) { let platform_profile_path = Path::new("/sys/firmware/acpi/platform_profile"); if platform_profile_path.exists() { @@ -242,21 +246,39 @@ pub fn execute_local(command: &PowerCommands) { match command { PowerCommands::Performance => { println!("Setting power profile to Performance"); - set_platform_profile("performance"); + if !is_ideapad() { + set_platform_profile("performance"); + } else { + println!( + "Skipping platform_profile (decoupled from fan control on Ideapad). Use 'lapctl cooling' for fan speed." + ); + } set_cpu_governor("performance"); set_energy_performance_preference("performance"); println!("Operation completed successfully."); } PowerCommands::Balanced => { println!("Setting power profile to Balanced"); - set_platform_profile("balanced"); + if !is_ideapad() { + set_platform_profile("balanced"); + } else { + println!( + "Skipping platform_profile (decoupled from fan control on Ideapad). Use 'lapctl cooling' for fan speed." + ); + } set_cpu_governor("schedutil"); set_energy_performance_preference("balance_performance"); println!("Operation completed successfully."); } PowerCommands::BatterySave => { println!("Setting power profile to Battery Saver"); - set_platform_profile("low-power"); + if !is_ideapad() { + set_platform_profile("low-power"); + } else { + println!( + "Skipping platform_profile (decoupled from fan control on Ideapad). Use 'lapctl cooling' for fan speed." + ); + } set_cpu_governor("powersave"); set_energy_performance_preference("power"); println!("Operation completed successfully.");