From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 03:04:41 +0000
Subject: [PATCH] rk3568 rt init

---
 kernel/drivers/soc/rockchip/rockchip_system_monitor.c |   35 +++++++++++++++++++++++++++++------
 1 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/kernel/drivers/soc/rockchip/rockchip_system_monitor.c b/kernel/drivers/soc/rockchip/rockchip_system_monitor.c
index 8a84d02..ffb95c0 100644
--- a/kernel/drivers/soc/rockchip/rockchip_system_monitor.c
+++ b/kernel/drivers/soc/rockchip/rockchip_system_monitor.c
@@ -68,6 +68,7 @@
 	int temp_hysteresis;
 	unsigned int delay;
 	bool is_temp_offline;
+	bool boosted;
 };
 
 static unsigned long system_status;
@@ -288,6 +289,7 @@
 {
 	struct video_info *video_info;
 	unsigned int max_res = 0, max_stream_bitrate = 0, res = 0;
+	unsigned int max_video_framerate = 0;
 
 	mutex_lock(&video_info_mutex);
 	if (list_empty(&video_info_list)) {
@@ -302,6 +304,8 @@
 			max_res = res;
 		if (video_info->streamBitrate > max_stream_bitrate)
 			max_stream_bitrate = video_info->streamBitrate;
+		if (video_info->videoFramerate > max_video_framerate)
+			max_video_framerate = video_info->videoFramerate;
 	}
 	mutex_unlock(&video_info_mutex);
 
@@ -310,8 +314,9 @@
 	} else {
 		if (max_stream_bitrate == 10)
 			rockchip_set_system_status(SYS_STATUS_VIDEO_4K_10B);
-		else
-			rockchip_set_system_status(SYS_STATUS_VIDEO_4K);
+		if (max_video_framerate == 60)
+			rockchip_set_system_status(SYS_STATUS_VIDEO_4K_60P);
+		rockchip_set_system_status(SYS_STATUS_VIDEO_4K);
 	}
 }
 
@@ -737,6 +742,20 @@
 }
 EXPORT_SYMBOL(rockchip_monitor_cpu_high_temp_adjust);
 
+void rockchip_monitor_set_boosted(void)
+{
+	if (system_monitor)
+		system_monitor->boosted = true;
+}
+EXPORT_SYMBOL(rockchip_monitor_set_boosted);
+
+void rockchip_monitor_clear_boosted(void)
+{
+	if (system_monitor)
+		system_monitor->boosted = false;
+}
+EXPORT_SYMBOL(rockchip_monitor_clear_boosted);
+
 static int rockchip_monitor_update_devfreq(struct devfreq *df)
 {
 	int ret = 0;
@@ -764,6 +783,8 @@
 	if (info->devp && info->devp->data) {
 		df = (struct devfreq *)info->devp->data;
 		rockchip_monitor_update_devfreq(df);
+	} else if (info->devp && info->devp->low_temp_adjust_volt) {
+		info->devp->low_temp_adjust_volt(info);
 	}
 
 	return 0;
@@ -1120,7 +1141,7 @@
 
 	monitor_set_freq_table(dev, info);
 
-	if (info->devp->type == MONITOR_TPYE_DEV) {
+	if (info->devp->type == MONITOR_TPYE_DEV && info->devp->data) {
 		info->devfreq_nb.notifier_call =
 			system_monitor_devfreq_notifier_call;
 		devfreq = (struct devfreq *)info->devp->data;
@@ -1154,11 +1175,12 @@
 	list_del(&info->node);
 	up_write(&mdev_list_sem);
 
-	devfreq = (struct devfreq *)info->devp->data;
-	if (info->devp->type == MONITOR_TPYE_DEV)
+	if (info->devp->type == MONITOR_TPYE_DEV && info->devp->data) {
+		devfreq = (struct devfreq *)info->devp->data;
 		devm_devfreq_unregister_notifier(info->dev, devfreq,
 						 &info->devfreq_nb,
 						 DEVFREQ_TRANSITION_NOTIFIER);
+	}
 
 	kfree(info->low_temp_adjust_table);
 	kfree(info->opp_table);
@@ -1413,7 +1435,8 @@
 			if (limit_freq > info->wide_temp_limit / 1000)
 				limit_freq = info->wide_temp_limit / 1000;
 		}
-		if (info->status_max_limit &&
+		if (!system_monitor->boosted &&
+		    info->status_max_limit &&
 		    limit_freq > info->status_max_limit)
 			limit_freq = info->status_max_limit;
 

--
Gitblit v1.6.2