diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c index 81fc1afbbe87..24c6288d28f5 100644 --- a/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -675,6 +675,8 @@ static int monitor_device_parse_dt(struct device *dev, if (!np) return -EINVAL; + of_property_read_u32(np, "rockchip,init-freq", &info->init_freq); + ret = monitor_device_parse_wide_temp_config(np, info); ret &= monitor_device_parse_status_config(np, info); ret &= monitor_device_parse_early_min_volt(np, info); @@ -1107,7 +1109,12 @@ int rockchip_monitor_check_rate_volt(struct monitor_dev_info *info) old_mem_volt = regulator_get_voltage(mem_reg); } - new_rate = old_rate; + if (info->init_freq) { + new_rate = info->init_freq * 1000; + info->init_freq = 0; + } else { + new_rate = old_rate; + } opp = dev_pm_opp_find_freq_ceil(dev, &new_rate); if (IS_ERR(opp)) { opp = dev_pm_opp_find_freq_floor(dev, &new_rate); diff --git a/include/soc/rockchip/rockchip_system_monitor.h b/include/soc/rockchip/rockchip_system_monitor.h index 5c77e7a7a7fe..f6821c305bc2 100644 --- a/include/soc/rockchip/rockchip_system_monitor.h +++ b/include/soc/rockchip/rockchip_system_monitor.h @@ -98,6 +98,7 @@ struct monitor_dev_info { unsigned long high_temp_max_volt; unsigned int video_4k_freq; unsigned int reboot_freq; + unsigned int init_freq; unsigned int status_min_limit; unsigned int status_max_limit; unsigned int early_min_volt;