From f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 31 Jan 2024 01:04:47 +0000
Subject: [PATCH] add driver 5G

---
 kernel/include/soc/rockchip/rockchip_dmc.h |   78 ++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 13 deletions(-)

diff --git a/kernel/include/soc/rockchip/rockchip_dmc.h b/kernel/include/soc/rockchip/rockchip_dmc.h
index 0fcaaef..f115cdc 100644
--- a/kernel/include/soc/rockchip/rockchip_dmc.h
+++ b/kernel/include/soc/rockchip/rockchip_dmc.h
@@ -31,17 +31,53 @@
 #define SCREEN_DUAL_LVDS_10BIT	12
 #define SCREEN_DP		13
 
-#ifdef CONFIG_ARM_ROCKCHIP_DMC_DEVFREQ
+#define DMCFREQ_TABLE_END	~1u
+
+struct freq_map_table {
+	unsigned int min;
+	unsigned int max;
+	unsigned long freq;
+};
+
+struct rl_map_table {
+	unsigned int pn; /* panel number */
+	unsigned int rl; /* readlatency */
+};
+
+struct dmcfreq_common_info {
+	struct device *dev;
+	struct devfreq *devfreq;
+	struct freq_map_table *vop_bw_tbl;
+	struct freq_map_table *vop_frame_bw_tbl;
+	struct rl_map_table *vop_pn_rl_tbl;
+	struct delayed_work msch_rl_work;
+	unsigned long vop_4k_rate;
+	unsigned long vop_req_rate;
+	unsigned int read_latency;
+	unsigned int auto_freq_en;
+	unsigned int stall_time_ns;
+	bool is_msch_rl_work_started;
+	int (*set_msch_readlatency)(unsigned int rl);
+};
+
+struct dmcfreq_vop_info {
+	unsigned int line_bw_mbyte;
+	unsigned int frame_bw_mbyte;
+	unsigned int plane_num;
+	unsigned int plane_num_4k;
+};
+
+#if IS_REACHABLE(CONFIG_ARM_ROCKCHIP_DMC_DEVFREQ)
 void rockchip_dmcfreq_lock(void);
 void rockchip_dmcfreq_lock_nested(void);
 void rockchip_dmcfreq_unlock(void);
+int rockchip_dmcfreq_write_trylock(void);
+void rockchip_dmcfreq_write_unlock(void);
 int rockchip_dmcfreq_wait_complete(void);
-int rockchip_dmcfreq_vop_bandwidth_request(struct devfreq *devfreq,
-					   unsigned int bw_mbyte);
-void rockchip_dmcfreq_vop_bandwidth_update(struct devfreq *devfreq,
-					   unsigned int line_bw_mbyte,
-					   unsigned int frame_bw_mbyte,
-					   unsigned int plane_num);
+int rockchip_dmcfreq_vop_bandwidth_init(struct dmcfreq_common_info *info);
+int rockchip_dmcfreq_vop_bandwidth_request(struct dmcfreq_vop_info *vop_info);
+void rockchip_dmcfreq_vop_bandwidth_update(struct dmcfreq_vop_info *vop_info);
+unsigned int rockchip_dmcfreq_get_stall_time_ns(void);
 #else
 static inline void rockchip_dmcfreq_lock(void)
 {
@@ -55,25 +91,41 @@
 {
 }
 
+static inline int rockchip_dmcfreq_write_trylock(void)
+{
+	return 0;
+}
+
+static inline void rockchip_dmcfreq_write_unlock(void)
+{
+}
+
 static inline int rockchip_dmcfreq_wait_complete(void)
 {
 	return 0;
 }
 
 static inline int
-rockchip_dmcfreq_vop_bandwidth_request(struct devfreq *devfreq,
-				       unsigned int bw_mbyte)
+rockchip_dmcfreq_vop_bandwidth_request(struct dmcfreq_vop_info *vop_info)
 {
 	return 0;
 }
 
 static inline void
-rockchip_dmcfreq_vop_bandwidth_update(struct devfreq *devfreq,
-				      unsigned int line_bw_mbyte,
-				      unsigned int frame_bw_mbyte,
-				      unsigned int plane_num)
+rockchip_dmcfreq_vop_bandwidth_update(struct dmcfreq_vop_info *vop_info)
 {
 }
+
+static inline void
+rockchip_dmcfreq_vop_bandwidth_init(struct dmcfreq_common_info *info)
+{
+}
+
+static inline unsigned int
+rockchip_dmcfreq_get_stall_time_ns(void)
+{
+	return 0;
+}
 #endif
 
 #endif

--
Gitblit v1.6.2