|
@@ -86,9 +86,10 @@ int psm_set_performance_states(struct pp_eventmgr *eventmgr, unsigned long *stat
|
|
|
int psm_adjust_power_state_dynamic(struct pp_eventmgr *eventmgr, bool skip)
|
|
|
{
|
|
|
|
|
|
- const struct pp_power_state *pcurrent;
|
|
|
- struct pp_power_state *requested;
|
|
|
+ struct pp_power_state *pcurrent;
|
|
|
+ struct pp_power_state *requested;
|
|
|
struct pp_hwmgr *hwmgr;
|
|
|
+ bool equal;
|
|
|
|
|
|
if (skip)
|
|
|
return 0;
|
|
@@ -97,7 +98,13 @@ int psm_adjust_power_state_dynamic(struct pp_eventmgr *eventmgr, bool skip)
|
|
|
pcurrent = hwmgr->current_ps;
|
|
|
requested = hwmgr->request_ps;
|
|
|
|
|
|
- if ((pcurrent != NULL || requested != NULL) && (pcurrent != requested)) {
|
|
|
+ if (requested == NULL)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ if (pcurrent == NULL || (0 != phm_check_states_equal(hwmgr, &pcurrent->hardware, &requested->hardware, &equal)))
|
|
|
+ equal = false;
|
|
|
+
|
|
|
+ if (!equal || phm_check_smc_update_required_for_display_configuration(hwmgr)) {
|
|
|
phm_apply_state_adjust_rules(hwmgr, requested, pcurrent);
|
|
|
phm_set_power_state(hwmgr, &pcurrent->hardware, &requested->hardware);
|
|
|
hwmgr->current_ps = requested;
|