scenario->pmqos.max_level = INIT_VALUE;
/* Private data for PASS_MODULE_THERMAL */
- scenario->thermal.temperature = INIT_VALUE;
+ scenario->thermal.temp_start = INIT_VALUE;
+ scenario->thermal.temp_end = INIT_VALUE;
scenario->thermal.timer_interval = INIT_VALUE;
}
int target_level;
int cpuhp_min_level;
int cpuhp_max_level;
- int temperature;
+ json_object *temperature;
+ int temp_start;
+ int temp_end;
int timer_interval_ms;
/* Get property values */
cpuhp_max_level = get_int_from_object(obj, "cpuhp_max_level");
/* - property for only thermal module */
- temperature = get_int_from_object(obj, "temperature");
+ temperature = get_object_from_object(obj, "temperature");
+ if (temperature) {
+ temp_start = get_int_from_object(temperature, "start");
+ temp_end = get_int_from_object(temperature, "end");
+ } else {
+ temp_start = temp_end = 0;
+ }
+
timer_interval_ms = get_int_from_object(obj, "timer_interval_ms");
/* Check the mandatory property values are valid or not */
} else if (target_level < 0) {
_E("Failed to get 'target_level' property in scenario section\n");
return -EINVAL;
+ } else if (temp_start < 0 || temp_end < 0 || temp_end < temp_start) {
+ _E("Invalid values for temperature property\n");
+ return -EINVAL;
}
/* Initialize config_data from property values of confiugartion file */
scenario->pmqos.max_level = cpuhp_max_level;
/* - property for only thermal module */
- scenario->thermal.temperature = temperature;
+ scenario->thermal.temp_start = temp_start;
+ scenario->thermal.temp_end = temp_end;
scenario->thermal.timer_interval = timer_interval_ms;
return 0;
new_scenario_idx = -1;
for (i = 0; i < thermal->num_scenarios; i++) {
- int temp = thermal->scenarios[i].thermal.temperature;
+ int temp_start = thermal->scenarios[i].thermal.temp_start;
+ int temp_end = thermal->scenarios[i].thermal.temp_end;
if (thermal->scenarios[i].state != PASS_ON)
continue;
- if (new_scenario_idx < 0 && new_temp < temp)
- new_scenario_idx = i;
- else if (temp <= new_temp)
+ if (temp_start < new_temp && new_temp <= temp_end) {
new_scenario_idx = i;
+ break;
+ }
}
/*
/** Private data for PASS_MODULE_THERMAL */
struct {
- /** Temperature of the scenario */
- int temperature;
+ /**
+ * Range of temperature to determine scenario level represented
+ * as (temp_start, temp_end].
+ */
+ int temp_start;
+ int temp_end;
/** Interval of timer-based monitor (unit: millisecond) */
int timer_interval;
} thermal;