From 707597b019a608625f64fef0c787fdf6c75f32b8 Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Thu, 4 Dec 2025 20:21:38 +0100 Subject: [PATCH] platform/x86: uniwill-laptop: Disable cTGP and dynamic boost during suspend TODO Signed-off-by: Armin Wolf --- drivers/platform/x86/uniwill/uniwill-acpi.c | 33 ++++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c index 6ce0b9c99d3d..c7e9db3c9a4d 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -897,9 +897,8 @@ static int uniwill_nvidia_ctgp_init(struct uniwill_data *data) if (ret < 0) return ret; - ret = regmap_update_bits(data->regmap, EC_ADDR_CTGP_DB_CTRL, - CTGP_DB_GENERAL_ENABLE | CTGP_DB_DB_ENABLE | CTGP_DB_CTGP_ENABLE, - CTGP_DB_GENERAL_ENABLE | CTGP_DB_DB_ENABLE | CTGP_DB_CTGP_ENABLE); + ret = regmap_set_bits(data->regmap, EC_ADDR_CTGP_DB_CTRL, + CTGP_DB_GENERAL_ENABLE | CTGP_DB_DB_ENABLE | CTGP_DB_CTGP_ENABLE); if (ret < 0) return ret; @@ -1570,6 +1569,15 @@ static int uniwill_suspend_battery(struct uniwill_data *data) return regmap_read(data->regmap, EC_ADDR_CHARGE_CTRL, &data->last_charge_ctrl); } +static int uniwill_suspend_nvidia_ctgp(struct uniwill_data *data) +{ + if (!uniwill_device_supports(data, UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL)) + return 0; + + return regmap_clear_bits(data->regmap, EC_ADDR_CTGP_DB_CTRL, + CTGP_DB_DB_ENABLE | CTGP_DB_CTGP_ENABLE); +} + static int uniwill_suspend(struct device *dev) { struct uniwill_data *data = dev_get_drvdata(dev); @@ -1583,6 +1591,10 @@ static int uniwill_suspend(struct device *dev) if (ret < 0) return ret; + ret = uniwill_suspend_nvidia_ctgp(data); + if (ret < 0) + return ret; + regcache_cache_only(data->regmap, true); regcache_mark_dirty(data->regmap); @@ -1619,6 +1631,15 @@ static int uniwill_resume_battery(struct uniwill_data *data) data->last_charge_ctrl); } +static int uniwill_resume_nvidia_ctgp(struct uniwill_data *data) +{ + if (!uniwill_device_supports(data, UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL)) + return 0; + + return regmap_set_bits(data->regmap, EC_ADDR_CTGP_DB_CTRL, + CTGP_DB_DB_ENABLE | CTGP_DB_CTGP_ENABLE); +} + static int uniwill_resume(struct device *dev) { struct uniwill_data *data = dev_get_drvdata(dev); @@ -1634,7 +1655,11 @@ static int uniwill_resume(struct device *dev) if (ret < 0) return ret; - return uniwill_resume_battery(data); + ret = uniwill_resume_battery(data); + if (ret < 0) + return ret; + + return uniwill_resume_nvidia_ctgp(data); } static DEFINE_SIMPLE_DEV_PM_OPS(uniwill_pm_ops, uniwill_suspend, uniwill_resume); -- 2.39.5