• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Allwinner SoCs display driver.
3  *
4  * Copyright (c) 2007-2017 Allwinnertech Co., Ltd.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16 
17 
18 #ifndef __DISP_DISPLAY_H__
19 #define __DISP_DISPLAY_H__
20 
21 #include "disp_private.h"
22 
23 struct disp_screen_t {
24 	bool have_cfg_reg;
25 	u32 cache_flag;
26 	u32 cfg_cnt;
27 	spinlock_t flag_lock;
28 	struct tasklet_struct tasklet;
29 	struct disp_health_info health_info;
30 	bool vsync_event_en;
31 	bool dvi_enable;
32 };
33 
34 struct disp_dev_t {
35 	struct disp_bsp_init_para init_para;	/* para from driver */
36 	struct disp_screen_t screen[3];
37 	u32 print_level;
38 	u32 lcd_registered[3];
39 	u32 hdmi_registered;
40 	u32 tv_registered;
41 	u32 vdpo_registered;
42 	u32 edp_registered;
43 };
44 extern struct disp_dev_t gdisp;
45 s32 disp_init_connections(struct disp_bsp_init_para *para);
46 s32 bsp_disp_shadow_protect(u32 disp, bool protect);
47 void sync_event_proc(u32 disp, bool timeout);
48 s32 disp_device_attached(int disp_mgr, int disp_dev,
49 			struct disp_device_config *config);
50 
51 s32 disp_device_attached_and_enable(int disp_mgr, int disp_dev,
52 				    struct disp_device_config *config);
53 s32 disp_device_detach(int disp_mgr, int disp_dev,
54 		       enum disp_output_type output_type);
55 void LCD_OPEN_FUNC(u32 screen_id, LCD_FUNC func, u32 delay);
56 void LCD_CLOSE_FUNC(u32 screen_id, LCD_FUNC func, u32 delay);
57 s32 bsp_disp_sync_with_hw(struct disp_bsp_init_para *para);
58 
59 /*s32 bsp_disp_check_device_enabled(struct disp_bsp_init_para *para);*/
60 void disp_tasklet(unsigned long data);
61 s32 bsp_disp_get_fps(u32 disp);
62 s32 bsp_disp_get_health_info(u32 disp, struct disp_health_info *info);
63 
64 s32 bsp_disp_init(struct disp_bsp_init_para *para);
65 s32 bsp_disp_exit(u32 mode);
66 s32 bsp_disp_open(void);
67 s32 bsp_disp_close(void);
68 s32 bsp_disp_feat_get_num_screens(void);
69 s32 bsp_disp_feat_get_num_channels(u32 disp);
70 s32 bsp_disp_feat_get_num_layers(u32 screen_id);
71 s32 bsp_disp_feat_get_num_layers_by_chn(u32 disp, u32 chn);
72 s32 bsp_disp_feat_is_supported_output_types(u32 screen_id, u32 output_type);
73 s32 bsp_disp_get_screen_physical_width(u32 disp);
74 s32 bsp_disp_get_screen_physical_height(u32 disp);
75 s32 bsp_disp_get_screen_width(u32 disp);
76 s32 bsp_disp_get_screen_height(u32 disp);
77 s32 bsp_disp_get_screen_width_from_output_type(u32 disp, u32 output_type,
78 					       u32 output_mode);
79 s32 bsp_disp_get_screen_height_from_output_type(u32 disp, u32 output_type,
80 						u32 output_mode);
81 s32 bsp_disp_get_lcd_registered(u32 disp);
82 s32 bsp_disp_get_hdmi_registered(void);
83 s32 bsp_disp_get_tv_registered(void);
84 
85 s32 bsp_disp_get_output_type(u32 disp);
86 s32 bsp_disp_device_switch(int disp, enum disp_output_type output_type,
87 			   enum disp_output_type mode);
88 s32 bsp_disp_device_set_config(int disp, struct disp_device_config *config);
89 s32 bsp_disp_set_hdmi_func(struct disp_device_func *func);
90 s32 bsp_disp_set_vdpo_func(struct disp_tv_func *func);
91 s32 bsp_disp_hdmi_check_support_mode(u32 disp, enum disp_output_type mode);
92 s32 bsp_disp_hdmi_set_detect(bool hpd);
93 s32 bsp_disp_hdmi_cec_standby_request(void);
94 s32 bsp_disp_hdmi_cec_send_one_touch_play(void);
95 s32 bsp_disp_hdmi_get_color_format(void);
96 
97 s32 bsp_disp_tv_register(struct disp_tv_func *func);
98 s32 bsp_disp_tv_set_hpd(u32 state);
99 
100 /* lcd */
101 s32 bsp_disp_lcd_set_panel_funs(char *name, struct disp_lcd_panel_fun *lcd_cfg);
102 s32 bsp_disp_lcd_backlight_enable(u32 disp);
103 s32 bsp_disp_lcd_backlight_disable(u32 disp);
104 s32 bsp_disp_lcd_pwm_enable(u32 disp);
105 s32 bsp_disp_lcd_pwm_disable(u32 disp);
106 s32 bsp_disp_lcd_power_enable(u32 disp, u32 power_id);
107 s32 bsp_disp_lcd_power_disable(u32 disp, u32 power_id);
108 s32 bsp_disp_lcd_set_bright(u32 disp, u32 bright);
109 s32 bsp_disp_lcd_get_bright(u32 disp);
110 s32 bsp_disp_lcd_tcon_enable(u32 disp);
111 s32 bsp_disp_lcd_tcon_disable(u32 disp);
112 s32 bsp_disp_lcd_pin_cfg(u32 disp, u32 en);
113 s32 bsp_disp_lcd_gpio_set_value(u32 disp, u32 io_index, u32 value);
114 s32 bsp_disp_lcd_gpio_set_direction(u32 disp, unsigned int io_index,
115 				    u32 direction);
116 struct disp_lcd_flow *bsp_disp_lcd_get_open_flow(u32 disp);
117 struct disp_lcd_flow *bsp_disp_lcd_get_close_flow(u32 disp);
118 s32 bsp_disp_get_panel_info(u32 disp, struct disp_panel_para *info);
119 
120 s32 bsp_disp_vsync_event_enable(u32 disp, bool enable);
121 s32 bsp_disp_tv_suspend(void);
122 s32 bsp_disp_tv_resume(void);
123 
124 int bsp_disp_get_fb_info(unsigned int disp, struct disp_layer_info *info);
125 int bsp_disp_get_display_size(u32 disp, unsigned int *width,
126 			      unsigned int *height);
127 
128 s32 bsp_disp_lcd_dsi_clk_enable(u32 disp, u32 en);
129 s32 bsp_disp_lcd_dsi_dcs_wr(u32 disp, u8 command, u8 *para, u32 para_num);
130 s32 bsp_disp_lcd_dsi_gen_wr(u32 disp, u8 command, u8 *para, u32 para_num);
131 s32 bsp_disp_set_edp_func(struct disp_tv_func *func);
132 
133 #ifdef CONFIG_DEVFREQ_DRAM_FREQ_IN_VSYNC
134 /* dramfreq interface */
135 s32 bsp_disp_get_vb_time(void);
136 s32 bsp_disp_get_next_vb_time(void);
137 s32 bsp_disp_is_in_vb(void);
138 #endif
139 
140 #endif
141