• 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 
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