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 11 #ifndef _DISP_PRIVATE_H_ 12 #define _DISP_PRIVATE_H_ 13 14 #include "disp_features.h" 15 #if defined(DE_VERSION_V33X) || defined(CONFIG_ARCH_SUN50IW9) 16 #include "./lowlevel_v33x/disp_al.h" 17 #elif defined(CONFIG_ARCH_SUN50IW1) 18 #include "./lowlevel_sun50iw1/disp_al.h" 19 #elif defined(CONFIG_ARCH_SUN50IW2) 20 #include "./lowlevel_v2x/disp_al.h" 21 #elif defined(CONFIG_ARCH_SUN50IW8) 22 #include "./lowlevel_v2x/disp_al.h" 23 #elif defined(CONFIG_ARCH_SUN8IW10) 24 #include "./lowlevel_sun8iw10/disp_al.h" 25 #elif defined(CONFIG_ARCH_SUN8IW11) 26 #include "./lowlevel_v2x/disp_al.h" 27 #elif defined(CONFIG_ARCH_SUN8IW12) || defined(CONFIG_ARCH_SUN8IW16)\ 28 || defined(CONFIG_ARCH_SUN8IW19) || defined(CONFIG_ARCH_SUN8IW20)\ 29 || defined(CONFIG_ARCH_SUN20IW1) 30 #include "./lowlevel_v2x/disp_al.h" 31 #elif defined(CONFIG_ARCH_SUN8IW15) 32 #include "./lowlevel_v2x/disp_al.h" 33 #elif defined(CONFIG_ARCH_SUN50IW10) 34 #include "./lowlevel_v2x/disp_al.h" 35 #elif defined(CONFIG_ARCH_SUN8IW6) 36 #include "./lowlevel_v2x/disp_al.h" 37 #elif defined(CONFIG_ARCH_SUN8IW7) || defined(CONFIG_ARCH_SUN8IW17) 38 #include "./lowlevel_v2x/disp_al.h" 39 #elif defined(CONFIG_ARCH_SUN8IW8) 40 #include "./lowlevel_sun8iw8/disp_al.h" 41 #elif defined(CONFIG_ARCH_SUN50IW3) || defined(CONFIG_ARCH_SUN50IW6) 42 #include "./lowlevel_v3x/disp_al.h" 43 #else 44 #error "undefined platform!!!" 45 #endif 46 47 /** 48 * layer identify 49 */ 50 struct disp_layer_id { 51 unsigned int disp; 52 unsigned int channel; 53 unsigned int layer_id; 54 unsigned int type; /*1:layer,2:trd,4:atw*/ 55 }; 56 57 struct disp_layer_address { 58 dma_addr_t dma_addr; 59 dma_addr_t atw_addr; 60 dma_addr_t trd_addr; 61 struct disp_layer_id lyr_id; 62 }; 63 64 struct dmabuf_item { 65 struct list_head list; 66 struct dma_buf *dmabuf; 67 struct dma_buf_attachment *attachment; 68 struct sg_table *sgt; 69 dma_addr_t dma_addr; 70 unsigned long long id; 71 struct disp_layer_id lyr_id; 72 }; 73 /* fb_addrss_transfer - framebuffer address transfer 74 * 75 * @format: pixel format 76 * @size: size for each plane 77 * @align: align for each plane 78 * @depth: depth perception for stereo image 79 * @dma_addr: the start addrss of this buffer 80 * 81 * @addr[out]: address for each plane 82 * @trd_addr[out]: address for each plane of right eye buffer 83 */ 84 struct fb_address_transfer { 85 enum disp_pixel_format format; 86 struct disp_rectsz size[3]; 87 unsigned int align[3]; 88 int depth; 89 dma_addr_t dma_addr; 90 unsigned long long addr[3]; 91 unsigned long long trd_right_addr[3]; 92 }; 93 94 /* disp_format_attr - display format attribute 95 * 96 * @format: pixel format 97 * @bits: bits of each component 98 * @hor_rsample_u: reciprocal of horizontal sample rate 99 * @hor_rsample_v: reciprocal of horizontal sample rate 100 * @ver_rsample_u: reciprocal of vertical sample rate 101 * @hor_rsample_v: reciprocal of vertical sample rate 102 * @uvc: 1: u & v component combined 103 * @interleave: 0: progressive, 1: interleave 104 * @factor & div: bytes of pixel = factor / div (bytes) 105 * 106 * @addr[out]: address for each plane 107 * @trd_addr[out]: address for each plane of right eye buffer 108 */ 109 struct disp_format_attr { 110 enum disp_pixel_format format; 111 unsigned int bits; 112 unsigned int hor_rsample_u; 113 unsigned int hor_rsample_v; 114 unsigned int ver_rsample_u; 115 unsigned int ver_rsample_v; 116 unsigned int uvc; 117 unsigned int interleave; 118 unsigned int factor; 119 unsigned int div; 120 }; 121 122 struct disp_irq_info { 123 u32 sel; /* select id of disp or wb */ 124 u32 irq_flag; 125 void *ptr; 126 s32 (*irq_handler)(u32 sel, u32 irq_flag, void *ptr); 127 }; 128 129 130 extern struct disp_device *disp_get_lcd(u32 disp); 131 132 extern struct disp_device *disp_get_hdmi(u32 disp); 133 134 extern struct disp_manager *disp_get_layer_manager(u32 disp); 135 136 extern struct disp_layer *disp_get_layer(u32 disp, u32 chn, u32 layer_id); 137 extern struct disp_layer *disp_get_layer_1(u32 disp, u32 layer_id); 138 extern struct disp_smbl *disp_get_smbl(u32 disp); 139 extern struct disp_enhance *disp_get_enhance(u32 disp); 140 extern struct disp_capture *disp_get_capture(u32 disp); 141 142 extern s32 disp_delay_ms(u32 ms); 143 extern s32 disp_delay_us(u32 us); 144 extern s32 disp_init_lcd(struct disp_bsp_init_para *para); 145 extern s32 disp_exit_lcd(void); 146 extern s32 disp_init_hdmi(struct disp_bsp_init_para *para); 147 extern s32 disp_exit_hdmi(void); 148 extern s32 disp_init_tv(void); /* (struct disp_bsp_init_para * para); */ 149 extern s32 disp_exit_tv(void); /* (struct disp_bsp_init_para * para); */ 150 extern s32 disp_exit_vdpo(void); 151 extern s32 disp_tv_set_func(struct disp_device *ptv, struct disp_tv_func *func); 152 extern s32 disp_init_tv_para(struct disp_bsp_init_para *para); 153 extern s32 disp_exit_tv_para(void); 154 extern s32 disp_tv_set_hpd(struct disp_device *ptv, u32 state); 155 extern s32 disp_init_vga(void); 156 extern s32 disp_exit_vga(void); 157 extern s32 disp_init_vdpo(struct disp_bsp_init_para *para); 158 extern s32 disp_init_edp(struct disp_bsp_init_para *para); 159 160 extern s32 disp_init_feat(struct disp_feat_init *feat_init); 161 extern s32 disp_exit_feat(void); 162 extern s32 disp_init_mgr(struct disp_bsp_init_para *para); 163 extern s32 disp_exit_mgr(void); 164 extern s32 disp_init_enhance(struct disp_bsp_init_para *para); 165 extern s32 disp_exit_enhance(void); 166 extern s32 disp_init_smbl(struct disp_bsp_init_para *para); 167 extern s32 disp_exit_smbl(void); 168 extern s32 disp_init_capture(struct disp_bsp_init_para *para); 169 extern s32 disp_exit_capture(void); 170 171 #ifdef CONFIG_EINK_PANEL_USED 172 extern s32 disp_init_eink(struct disp_bsp_init_para *para); 173 extern s32 disp_exit_eink(void); 174 extern s32 write_edma(struct disp_eink_manager *manager); 175 extern s32 disp_init_format_convert_manager(struct disp_bsp_init_para *para); 176 extern void disp_exit_format_convert_manager(void); 177 178 extern struct disp_eink_manager *disp_get_eink_manager(unsigned int disp); 179 extern int eink_display_one_frame(struct disp_eink_manager *manager); 180 #endif 181 extern void sync_event_proc(u32 disp, bool timeout); 182 183 #include "disp_device.h" 184 185 u32 dump_layer_config(struct disp_layer_config_data *data); 186 void *disp_vmap(unsigned long phys_addr, unsigned long size); 187 void disp_vunmap(const void *vaddr); 188 189 struct dmabuf_item *disp_dma_map(int fd); 190 void disp_dma_unmap(struct dmabuf_item *item); 191 s32 disp_set_fb_info(struct fb_address_transfer *fb, bool left_eye); 192 s32 disp_set_fb_base_on_depth(struct fb_address_transfer *fb); 193 extern s32 disp_init_rotation_sw(struct disp_bsp_init_para *para); 194 extern struct disp_rotation_sw *disp_get_rotation_sw(u32 disp); 195 196 s32 disp_init_irq_util(u32 irq_no); 197 s32 disp_register_irq(u32 id, struct disp_irq_info *irq_info); 198 s32 disp_unregister_irq(u32 id, struct disp_irq_info *irq_info); 199 200 #endif 201