1 /* 2 * Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms and conditions of the GNU General Public License, 6 * version 2, as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope it will be useful, but WITHOUT 9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * more details. 12 */ 13 #ifndef __SOC_ROCKCHIP_DMC_H 14 #define __SOC_ROCKCHIP_DMC_H 15 16 #include <linux/devfreq.h> 17 18 /* for lcdc_type */ 19 #define SCREEN_NULL 0 20 #define SCREEN_RGB 1 21 #define SCREEN_LVDS 2 22 #define SCREEN_DUAL_LVDS 3 23 #define SCREEN_MCU 4 24 #define SCREEN_TVOUT 5 25 #define SCREEN_HDMI 6 26 #define SCREEN_MIPI 7 27 #define SCREEN_DUAL_MIPI 8 28 #define SCREEN_EDP 9 29 #define SCREEN_TVOUT_TEST 10 30 #define SCREEN_LVDS_10BIT 11 31 #define SCREEN_DUAL_LVDS_10BIT 12 32 #define SCREEN_DP 13 33 34 #define DMCFREQ_TABLE_END ~1u 35 36 struct freq_map_table { 37 unsigned int min; 38 unsigned int max; 39 unsigned long freq; 40 }; 41 42 struct rl_map_table { 43 unsigned int pn; /* panel number */ 44 unsigned int rl; /* readlatency */ 45 }; 46 47 struct dmcfreq_common_info { 48 struct device *dev; 49 struct devfreq *devfreq; 50 struct freq_map_table *vop_bw_tbl; 51 struct freq_map_table *vop_frame_bw_tbl; 52 struct rl_map_table *vop_pn_rl_tbl; 53 struct delayed_work msch_rl_work; 54 unsigned long vop_4k_rate; 55 unsigned long vop_req_rate; 56 unsigned int read_latency; 57 unsigned int auto_freq_en; 58 bool is_msch_rl_work_started; 59 int (*set_msch_readlatency)(unsigned int rl); 60 }; 61 62 struct dmcfreq_vop_info { 63 unsigned int line_bw_mbyte; 64 unsigned int frame_bw_mbyte; 65 unsigned int plane_num; 66 unsigned int plane_num_4k; 67 }; 68 69 #if IS_REACHABLE(CONFIG_ARM_ROCKCHIP_DMC_DEVFREQ) 70 void rockchip_dmcfreq_lock(void); 71 void rockchip_dmcfreq_lock_nested(void); 72 void rockchip_dmcfreq_unlock(void); 73 int rockchip_dmcfreq_write_trylock(void); 74 void rockchip_dmcfreq_write_unlock(void); 75 int rockchip_dmcfreq_wait_complete(void); 76 int rockchip_dmcfreq_vop_bandwidth_init(struct dmcfreq_common_info *info); 77 int rockchip_dmcfreq_vop_bandwidth_request(struct dmcfreq_vop_info *vop_info); 78 void rockchip_dmcfreq_vop_bandwidth_update(struct dmcfreq_vop_info *vop_info); 79 #else rockchip_dmcfreq_lock(void)80static inline void rockchip_dmcfreq_lock(void) 81 { 82 } 83 rockchip_dmcfreq_lock_nested(void)84static inline void rockchip_dmcfreq_lock_nested(void) 85 { 86 } 87 rockchip_dmcfreq_unlock(void)88static inline void rockchip_dmcfreq_unlock(void) 89 { 90 } 91 rockchip_dmcfreq_write_trylock(void)92static inline int rockchip_dmcfreq_write_trylock(void) 93 { 94 return 0; 95 } 96 rockchip_dmcfreq_write_unlock(void)97static inline void rockchip_dmcfreq_write_unlock(void) 98 { 99 } 100 rockchip_dmcfreq_wait_complete(void)101static inline int rockchip_dmcfreq_wait_complete(void) 102 { 103 return 0; 104 } 105 106 static inline int rockchip_dmcfreq_vop_bandwidth_request(struct dmcfreq_vop_info * vop_info)107rockchip_dmcfreq_vop_bandwidth_request(struct dmcfreq_vop_info *vop_info) 108 { 109 return 0; 110 } 111 112 static inline void rockchip_dmcfreq_vop_bandwidth_update(struct dmcfreq_vop_info * vop_info)113rockchip_dmcfreq_vop_bandwidth_update(struct dmcfreq_vop_info *vop_info) 114 { 115 } 116 117 static inline void rockchip_dmcfreq_vop_bandwidth_init(struct dmcfreq_common_info * info)118rockchip_dmcfreq_vop_bandwidth_init(struct dmcfreq_common_info *info) 119 { 120 } 121 #endif 122 123 #endif 124