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 #include "include.h"
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     struct disp_health_info health_info;
28     hal_work tasklet;
29     bool vsync_event_en;
30     bool dvi_enable;
31     u32 flag_lock;
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 s32 bsp_disp_get_fps(u32 disp);
61 s32 bsp_disp_get_health_info(u32 disp, struct disp_health_info *info);
62 
63 s32 bsp_disp_init(struct disp_bsp_init_para *para);
64 s32 bsp_disp_exit(u32 mode);
65 s32 bsp_disp_open(void);
66 s32 bsp_disp_close(void);
67 s32 bsp_disp_feat_get_num_screens(void);
68 s32 bsp_disp_feat_get_num_channels(u32 disp);
69 s32 bsp_disp_feat_get_num_layers(u32 screen_id);
70 s32 bsp_disp_feat_get_num_layers_by_chn(u32 disp, u32 chn);
71 s32 bsp_disp_feat_is_supported_output_types(u32 screen_id, u32 output_type);
72 s32 bsp_disp_get_screen_physical_width(u32 disp);
73 s32 bsp_disp_get_screen_physical_height(u32 disp);
74 s32 bsp_disp_get_screen_width(u32 disp);
75 s32 bsp_disp_get_screen_height(u32 disp);
76 s32 bsp_disp_get_screen_width_from_output_type(u32 disp, u32 output_type,
77                            u32 output_mode);
78 s32 bsp_disp_get_screen_height_from_output_type(u32 disp, u32 output_type,
79                         u32 output_mode);
80 s32 bsp_disp_get_lcd_registered(u32 disp);
81 s32 bsp_disp_get_hdmi_registered(void);
82 s32 bsp_disp_get_tv_registered(void);
83 
84 s32 bsp_disp_get_output_type(u32 disp);
85 s32 bsp_disp_device_switch(int disp, enum disp_output_type output_type,
86                enum disp_output_type mode);
87 s32 bsp_disp_device_set_config(int disp, struct disp_device_config *config);
88 s32 bsp_disp_set_hdmi_func(struct disp_device_func *func);
89 s32 bsp_disp_set_vdpo_func(struct disp_tv_func *func);
90 s32 bsp_disp_hdmi_check_support_mode(u32 disp, enum disp_output_type mode);
91 s32 bsp_disp_hdmi_set_detect(bool hpd);
92 s32 bsp_disp_hdmi_cec_standby_request(void);
93 s32 bsp_disp_hdmi_cec_send_one_touch_play(void);
94 s32 bsp_disp_tv_register(struct disp_tv_func *func);
95 s32 bsp_disp_tv_set_hpd(u32 state);
96 
97 /* lcd */
98 s32 bsp_disp_lcd_set_panel_funs(char *name, struct disp_lcd_panel_fun *lcd_cfg);
99 s32 bsp_disp_lcd_backlight_enable(u32 disp);
100 s32 bsp_disp_lcd_backlight_disable(u32 disp);
101 s32 bsp_disp_lcd_pwm_enable(u32 disp);
102 s32 bsp_disp_lcd_pwm_disable(u32 disp);
103 s32 bsp_disp_lcd_power_enable(u32 disp, u32 power_id);
104 s32 bsp_disp_lcd_power_disable(u32 disp, u32 power_id);
105 s32 bsp_disp_lcd_set_bright(u32 disp, u32 bright);
106 s32 bsp_disp_lcd_get_bright(u32 disp);
107 void bsp_disp_lcd_tcon_enable(u32 disp);
108 void bsp_disp_lcd_tcon_disable(u32 disp);
109 s32 bsp_disp_lcd_pin_cfg(u32 disp, u32 en);
110 s32 bsp_disp_lcd_gpio_set_value(u32 disp, u32 io_index, u32 value);
111 s32 bsp_disp_lcd_gpio_set_direction(u32 disp, u32 io_index,
112                     u32 direction);
113 struct disp_lcd_flow *bsp_disp_lcd_get_open_flow(u32 disp);
114 struct disp_lcd_flow *bsp_disp_lcd_get_close_flow(u32 disp);
115 s32 bsp_disp_get_panel_info(u32 disp, struct disp_panel_para *info);
116 
117 s32 bsp_disp_vsync_event_enable(u32 disp, bool enable);
118 s32 bsp_disp_tv_suspend(void);
119 s32 bsp_disp_tv_resume(void);
120 
121 int bsp_disp_get_fb_info(unsigned int disp, struct disp_layer_info *info);
122 int bsp_disp_get_display_size(u32 disp, unsigned int *width,
123                   unsigned int *height);
124 
125 s32 bsp_disp_lcd_dsi_clk_enable(u32 disp, u32 en);
126 s32 bsp_disp_lcd_dsi_dcs_wr(u32 disp, u8 command, u8 *para, u32 para_num);
127 s32 bsp_disp_lcd_dsi_gen_wr(u32 disp, u8 command, u8 *para, u32 para_num);
128 s32 bsp_disp_set_edp_func(struct disp_tv_func *func);
129 
130 
131 #endif
132