• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Allwinner SoCs display driver.
3  *
4  * Copyright (C) 2016 Allwinner.
5  *
6  * This file is licensed under the terms of the GNU General Public
7  * License version 2.  This program is licensed "as is" without any
8  * warranty of any kind, whether express or implied.
9  */
10 #ifndef _DISP_AL_H_
11 #define _DISP_AL_H_
12 
13 #include "../include.h"
14 #include "de_feat.h"
15 #include "de_hal.h"
16 #include "de_enhance.h"
17 #include "de_wb.h"
18 #include "de_smbl.h"
19 #include "de_csc.h"
20 #include "de_lcd.h"
21 #include "de_clock.h"
22 #include "de_rtmx.h"
23 
24 enum {
25 	DISP_AL_IRQ_FLAG_FRAME_END  = DE_IRQ_FLAG_FRAME_END,
26 	DISP_AL_IRQ_FLAG_RCQ_FINISH = DE_IRQ_FLAG_RCQ_FINISH,
27 	DISP_AL_IRQ_FLAG_RCQ_ACCEPT = DE_IRQ_FLAG_RCQ_ACCEPT,
28 	DISP_AL_IRQ_FLAG_MASK       = DE_IRQ_FLAG_MASK,
29 };
30 
31 enum  {
32 	DISP_AL_IRQ_STATE_FRAME_END  = DE_IRQ_STATE_FRAME_END,
33 	DISP_AL_IRQ_STATE_RCQ_FINISH = DE_IRQ_STATE_RCQ_FINISH,
34 	DISP_AL_IRQ_STATE_RCQ_ACCEPT = DE_IRQ_STATE_RCQ_ACCEPT,
35 	DISP_AL_IRQ_STATE_MASK = DE_IRQ_STATE_MASK,
36 };
37 
38 enum {
39 	DISP_AL_CAPTURE_IRQ_FLAG_FRAME_END = WB_IRQ_FLAG_INTR,
40 	DISP_AL_CAPTURE_IRQ_FLAG_RCQ_ACCEPT = DE_WB_IRQ_FLAG_RCQ_ACCEPT,
41 	DISP_AL_CAPTURE_IRQ_FLAG_RCQ_FINISH = DE_WB_IRQ_FLAG_RCQ_FINISH,
42 	DISP_AL_CAPTURE_IRQ_FLAG_MASK =
43 		DISP_AL_CAPTURE_IRQ_FLAG_FRAME_END
44 		| DISP_AL_CAPTURE_IRQ_FLAG_RCQ_ACCEPT
45 		| DISP_AL_CAPTURE_IRQ_FLAG_RCQ_FINISH,
46 };
47 
48 enum {
49 	DISP_AL_CAPTURE_IRQ_STATE_FRAME_END = WB_IRQ_STATE_PROC_END,
50 	DISP_AL_CAPTURE_IRQ_STATE_RCQ_ACCEPT = DE_WB_IRQ_STATE_RCQ_ACCEPT,
51 	DISP_AL_CAPTURE_IRQ_STATE_RCQ_FINISH = DE_WB_IRQ_STATE_RCQ_FINISH,
52 	DISP_AL_CAPTURE_IRQ_STATE_MASK =
53 		DISP_AL_CAPTURE_IRQ_STATE_FRAME_END
54 		| DISP_AL_CAPTURE_IRQ_STATE_RCQ_ACCEPT
55 		| DISP_AL_CAPTURE_IRQ_STATE_RCQ_FINISH,
56 };
57 
58 struct lcd_clk_info {
59 	enum disp_lcd_if lcd_if;
60 	int tcon_div;
61 	int lcd_div;
62 	int dsi_div;
63 	int dsi_rate;
64 };
65 
66 int disp_al_manager_init(unsigned int disp);
67 int disp_al_manager_exit(unsigned int disp);
68 extern int disp_al_manager_apply(unsigned int disp,
69 				 struct disp_manager_data *data);
70 extern int disp_al_layer_apply(unsigned int disp,
71 			       struct disp_layer_config_data *data,
72 			       unsigned int layer_num);
73 extern int disp_init_al(struct disp_bsp_init_para *para);
74 extern int disp_al_manager_sync(unsigned int disp);
75 extern int disp_al_manager_update_regs(unsigned int disp);
76 int disp_al_manager_query_irq(unsigned int disp);
77 
78 int disp_al_enhance_apply(unsigned int disp,
79 			  struct disp_enhance_config *config);
80 int disp_al_enhance_update_regs(unsigned int disp);
81 int disp_al_enhance_sync(unsigned int disp);
82 int disp_al_enhance_tasklet(unsigned int disp);
83 
84 int disp_al_smbl_apply(unsigned int disp, struct disp_smbl_info *info);
85 int disp_al_smbl_update_regs(unsigned int disp);
86 int disp_al_smbl_sync(unsigned int disp);
87 int disp_al_smbl_get_status(unsigned int disp);
88 int disp_al_smbl_tasklet(unsigned int disp);
89 
90 int disp_al_capture_init(unsigned int disp);
91 int disp_al_capture_exit(unsigned int disp);
92 int disp_al_capture_sync(u32 disp);
93 int disp_al_capture_apply(unsigned int disp, struct disp_capture_config *cfg);
94 int disp_al_capture_get_status(unsigned int disp);
95 
96 int disp_al_lcd_cfg(u32 screen_id, struct disp_panel_para *panel,
97 		    struct panel_extend_para *extend_panel);
98 int disp_al_lcd_cfg_ext(u32 screen_id, struct panel_extend_para *extend_panel);
99 int disp_al_lcd_enable(u32 screen_id, struct disp_panel_para *panel);
100 int disp_al_lcd_disable(u32 screen_id, struct disp_panel_para *panel);
101 int disp_al_lcd_query_irq(u32 screen_id, __lcd_irq_id_t irq_id,
102 			  struct disp_panel_para *panel);
103 int disp_al_lcd_tri_busy(u32 screen_id, struct disp_panel_para *panel);
104 int disp_al_lcd_tri_start(u32 screen_id, struct disp_panel_para *panel);
105 int disp_al_lcd_io_cfg(u32 screen_id, u32 enable,
106 		       struct disp_panel_para *panel);
107 int disp_al_lcd_get_cur_line(u32 screen_id, struct disp_panel_para *panel);
108 int disp_al_lcd_get_start_delay(u32 screen_id, struct disp_panel_para *panel);
109 int disp_al_lcd_get_clk_info(u32 screen_id, struct lcd_clk_info *info,
110 			     struct disp_panel_para *panel);
111 int disp_al_lcd_enable_irq(u32 screen_id, __lcd_irq_id_t irq_id,
112 			   struct disp_panel_para *panel);
113 int disp_al_lcd_disable_irq(u32 screen_id, __lcd_irq_id_t irq_id,
114 			    struct disp_panel_para *panel);
115 
116 int disp_al_hdmi_enable(u32 screen_id);
117 int disp_al_hdmi_disable(u32 screen_id);
118 int disp_al_hdmi_cfg(u32 screen_id, struct disp_video_timings *video_info);
119 
120 int disp_al_vdevice_cfg(u32 screen_id, struct disp_video_timings *video_info,
121 			struct disp_vdevice_interface_para *para,
122 			u8 config_tcon_only);
123 int disp_al_vdevice_enable(u32 screen_id);
124 int disp_al_vdevice_disable(u32 screen_id);
125 
126 int disp_al_device_get_cur_line(u32 screen_id);
127 int disp_al_device_get_start_delay(u32 screen_id);
128 int disp_al_device_query_irq(u32 screen_id);
129 int disp_al_device_enable_irq(u32 screen_id);
130 int disp_al_device_disable_irq(u32 screen_id);
131 int disp_al_device_get_status(u32 screen_id);
132 
133 int disp_al_get_fb_info(unsigned int sel, struct disp_layer_info *info);
134 int disp_al_get_display_size(unsigned int sel, unsigned int *width,
135 			     unsigned int *height);
136 
137 int disp_exit_al(void);
138 bool disp_al_get_direct_show_state(unsigned int disp);
139 void disp_al_show_builtin_patten(u32 hwdev_index, u32 patten);
140 int disp_al_lcd_get_status(u32 screen_id, struct disp_panel_para *panel);
141 
disp_al_capture_set_rcq_update(u32 disp,u32 en)142 static inline s32 disp_al_capture_set_rcq_update(u32 disp, u32 en) { return 0; }
143 
disp_al_capture_query_irq_state(u32 disp,u32 irq_state)144 static inline u32 disp_al_capture_query_irq_state(u32 disp, u32 irq_state) { return 0; }
145 
disp_al_capture_set_all_rcq_head_dirty(u32 disp,u32 dirty)146 static inline s32 disp_al_capture_set_all_rcq_head_dirty(u32 disp, u32 dirty) { return 0; }
147 
disp_al_capture_set_irq_enable(u32 disp,u32 irq_flag,u32 en)148 static inline s32 disp_al_capture_set_irq_enable(u32 disp, u32 irq_flag, u32 en) { return 0; }
149 
disp_al_manager_set_rcq_update(u32 disp,u32 en)150 static inline s32 disp_al_manager_set_rcq_update(u32 disp, u32 en) { return 0; }
151 
disp_al_manager_set_all_rcq_head_dirty(u32 disp,u32 dirty)152 static inline s32 disp_al_manager_set_all_rcq_head_dirty(u32 disp, u32 dirty) { return 0; }
153 
disp_al_manager_set_irq_enable(u32 disp,u32 irq_flag,u32 en)154 static inline s32 disp_al_manager_set_irq_enable(u32 disp, u32 irq_flag, u32 en) { return 0; }
155 
disp_al_manager_query_irq_state(u32 disp,u32 irq_state)156 static inline u32 disp_al_manager_query_irq_state(u32 disp, u32 irq_state) { return 0; }
157 
disp_al_device_set_de_id(u32 screen_id,u32 de_id)158 static inline int disp_al_device_set_de_id(u32 screen_id, u32 de_id) { return 0; }
159 
disp_al_device_set_de_use_rcq(u32 screen_id,u32 use_rcq)160 static inline int disp_al_device_set_de_use_rcq(u32 screen_id, u32 use_rcq) { return 0; }
161 
disp_al_device_set_output_type(u32 screen_id,u32 output_type)162 static inline int disp_al_device_set_output_type(u32 screen_id, u32 output_type) { return 0; }
163 #endif
164