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