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 /******************************************************************************
12  *  All Winner Tech, All Right Reserved. 2014-2015 Copyright (c)
13  *
14  *  File name   :   de_enhance.h
15  *
16  *  Description :   display engine 2.0 enhance basic function declaration
17  *
18  *  History     :   2014/04/02  vito cheng  v0.1  Initial version
19  *                  2014/04/29  vito cheng  v0.2  Add disp_enhance_config_data
20  *                                                struct delcaration
21  ******************************************************************************/
22 #ifndef __DE_ENHANCE_H__
23 #define __DE_ENHANCE_H__
24 
25 #include "de_fce_type.h"
26 #include "de_peak_type.h"
27 #include "de_lti_type.h"
28 #include "de_ase_type.h"
29 #include "de_fcc_type.h"
30 #include "de_bws_type.h"
31 
32 #define MODE_NUM 4
33 #define PARA_NUM 6
34 #define FORMAT_NUM 2
35 #define ENHANCE_MODE_NUM 3
36 
37 #define ENAHNCE_MIN_WIDTH  32
38 #define ENAHNCE_MIN_HEIGHT 4
39 
40 #define PEAK_OFST 0xA6000   /* PEAKING offset based on RTMX */
41 #define LTI_OFST  0xA4000   /* LTI offset based on RTMX */
42 #define FCE_OFST  0xA0000   /* FCE offset based on RTMX */
43 #define ASE_OFST  0xA8000   /* ASE offset based on RTMX */
44 #define FCC_OFST  0xAA000   /* FCC offset based on RTMX */
45 
46 extern struct __ce_status_t *g_ce_status[DE_NUM][CHN_NUM];
47 
48 struct vep_config_data {
49     struct __fce_config_data fce_para;
50     struct __lti_config_data lti_para;
51     struct __peak_config_data peak_para;
52     struct __ase_config_data ase_para;
53     struct __fcc_config_data fcc_para;
54 };
55 
56 extern struct __hist_status_t *g_hist_status[DE_NUM][CHN_NUM];
57 extern struct __ce_status_t *g_ce_status[DE_NUM][CHN_NUM];
58 extern unsigned int *g_hist[DE_NUM][CHN_NUM];
59 extern unsigned int g_sum[DE_NUM][CHN_NUM];
60 extern unsigned int *g_hist_p[DE_NUM][CHN_NUM];
61 extern unsigned int g_format[DE_NUM];
62 extern unsigned int g_size_bypass[DE_NUM];
63 /* size too small to enable vep */
64 
65 /* peak function declaration */
66 int de_peak_set_reg_base(unsigned int sel, unsigned int chno, void *base);
67 int de_peak_update_regs(unsigned int sel, unsigned int chno);
68 int de_peak_init(unsigned int sel, unsigned int chno, uintptr_t reg_base);
69 int de_peak_exit(unsigned int sel, unsigned int chno);
70 int de_peak_enable(unsigned int sel, unsigned int chno, unsigned int en);
71 int de_peak_set_size(unsigned int sel, unsigned int chno, unsigned int width,
72              unsigned int height);
73 int de_peak_set_window(unsigned int sel, unsigned int chno,
74                unsigned int win_enable, struct de_rect window);
75 int de_peak_set_para(unsigned int sel, unsigned int chno, unsigned int gain,
76              unsigned int hp_ratio, unsigned int bp0_ratio);
77 int de_peak_info2para(unsigned int sharp, struct de_rect window,
78               struct __peak_config_data *para);
79 
80 /* /LTI function declaration */
81 int de_lti_set_reg_base(unsigned int sel, unsigned int chno, void *base);
82 int de_lti_update_regs(unsigned int sel, unsigned int chno);
83 int de_lti_init(unsigned int sel, unsigned int chno, uintptr_t reg_base);
84 int de_lti_exit(unsigned int sel, unsigned int chno);
85 int de_lti_enable(unsigned int sel, unsigned int chno, unsigned int en);
86 int de_lti_set_size(unsigned int sel, unsigned int chno, unsigned int width,
87             unsigned int height);
88 int de_lti_set_window(unsigned int sel, unsigned int chno,
89               unsigned int win_enable, struct de_rect window);
90 int de_lti_set_para(unsigned int sel, unsigned int chno, unsigned int gain);
91 int de_lti_info2para(unsigned int gain, struct de_rect window,
92              struct __lti_config_data *para);
93 
94 /* FCE function declaration */
95 int de_fce_set_reg_base(unsigned int sel, unsigned int chno, void *base);
96 int de_fce_update_regs(unsigned int sel, unsigned int chno);
97 int de_fce_init(unsigned int sel, unsigned int chno, uintptr_t reg_base);
98 int de_fce_exit(unsigned int sel, unsigned int chno);
99 int de_fce_enable(unsigned int sel, unsigned int chno, unsigned int en);
100 int de_fce_set_size(unsigned int sel, unsigned int chno, unsigned int width,
101             unsigned int height);
102 int de_fce_set_window(unsigned int sel, unsigned int chno,
103               unsigned int win_enable, struct de_rect window);
104 int de_fce_set_para(unsigned int sel, unsigned int chno,
105             struct __fce_config_data fce_para);
106 int de_fce_csc_en(unsigned int sel, unsigned int chno, unsigned int csc_enable);
107 int de_fce_info2para(unsigned int detail, unsigned int auto_contrast,
108              unsigned int auto_color, struct de_rect window,
109              struct __fce_config_data *para);
110 int de_fce_get_hist(unsigned int sel, unsigned int chno, unsigned int hist[256],
111             unsigned int *sum);
112 int de_fce_set_ce(unsigned int sel, unsigned int chno,
113           unsigned char ce_lut[256]);
114 int de_fce_info2para(unsigned int sharp, unsigned int auto_contrast,
115              unsigned int auto_color, struct de_rect window,
116              struct __fce_config_data *para);
117 int de_hist_apply(unsigned int screen_id, unsigned int chno,
118           unsigned int hist_en, unsigned int auto_contrast_dirty);
119 int de_hist_tasklet(unsigned int screen_id, unsigned int chno,
120             unsigned int frame_cnt);
121 int de_ce_apply(unsigned int screen_id, unsigned int chno, unsigned int ce_en,
122         unsigned int b_automode, unsigned int up_precent_thr,
123         unsigned int down_precent_thr, unsigned int update_diff_thr,
124         unsigned int black_slope_lmt, unsigned int white_slope_lmt,
125         unsigned int auto_contrast_dirty);
126 int de_ce_tasklet(unsigned int screen_id, unsigned int chno,
127           unsigned int frame_cnt);
128 
129 /* ASE function declaration */
130 int de_ase_set_reg_base(unsigned int sel, unsigned int chno, void *base);
131 int de_ase_update_regs(unsigned int sel, unsigned int chno);
132 int de_ase_init(unsigned int sel, unsigned int chno, uintptr_t reg_base);
133 int de_ase_exit(unsigned int sel, unsigned int chno);
134 int de_ase_enable(unsigned int sel, unsigned int chno, unsigned int en);
135 int de_ase_set_size(unsigned int sel, unsigned int chno, unsigned int width,
136             unsigned int height);
137 int de_ase_set_window(unsigned int sel, unsigned int chno,
138               unsigned int win_enable, struct de_rect window);
139 int de_ase_set_para(unsigned int sel, unsigned int chno, unsigned int gain);
140 int de_ase_info2para(unsigned int auto_color, struct de_rect window,
141              struct __ase_config_data *para);
142 
143 /* FCC function declaration */
144 int de_fcc_set_reg_base(unsigned int sel, unsigned int chno, void *base);
145 int de_fcc_init(unsigned int sel, unsigned int chno, uintptr_t reg_base);
146 int de_fcc_exit(unsigned int sel, unsigned int chno);
147 int de_fcc_enable(unsigned int sel, unsigned int chno, unsigned int en);
148 int de_fcc_set_size(unsigned int sel, unsigned int chno, unsigned int width,
149             unsigned int height);
150 int de_fcc_set_window(unsigned int sel, unsigned int chno, unsigned int win_en,
151               struct de_rect window);
152 int de_fcc_set_para(unsigned int sel, unsigned int chno, unsigned int sgain[6]);
153 int de_fcc_csc_set(unsigned int sel, unsigned int chno, unsigned int en,
154            unsigned int mode);
155 int de_fcc_info2para(unsigned int sgain0, unsigned int sgain1,
156         unsigned int sgain2, unsigned int sgain3,
157         unsigned int sgain4, unsigned int sgain5,
158         struct de_rect window, struct __fcc_config_data *para);
159 int de_fcc_update_regs(unsigned int sel, unsigned int chno);
160 
161 int de_enhance_apply(unsigned int screen_id,
162              struct disp_enhance_config *config);
163 int de_enhance_sync(unsigned int screen_id);
164 int de_enhance_tasklet(unsigned int screen_id);
165 int de_enhance_update_regs(unsigned int screen_id);
166 int de_enhance_init(struct disp_bsp_init_para *para);
167 int de_enhance_exit(void);
168 int de_enhance_info2data(struct disp_enhance_config *config,
169              struct vep_config_data *data, unsigned int bypass);
170 int de_enhance_set_mode(unsigned int format,
171             struct disp_enhance_config *config);
172 int de_enhance_set_format(unsigned int screen_id, unsigned int format);
173 
174 int de_enhance_set_size(unsigned int screen_id, struct disp_rect *size);
175 int de_enhance_demo_enable(unsigned int screen_id, unsigned int enable);
176 
177 int de_bws_set_reg_base(unsigned int sel, unsigned int chno, void *base);
178 int de_bws_update_regs(unsigned int sel, unsigned int chno);
179 int de_bws_init(unsigned int sel, unsigned int chno, uintptr_t reg_base);
180 int de_bws_enable(unsigned int sel, unsigned int chno, unsigned int en);
181 int de_bws_set_size(unsigned int sel, unsigned int chno, unsigned int width,
182         unsigned int height);
183 int de_bws_set_window(unsigned int sel, unsigned int chno,
184         unsigned int win_enable, struct de_rect window);
185 int de_bws_set_para(unsigned int sel, unsigned int chno,
186         unsigned int min, unsigned int black, unsigned int white,
187         unsigned int max, unsigned int slope0, unsigned int slope1,
188         unsigned int slope2, unsigned int slope3);
189 int de_bws_info2para(unsigned int auto_contrast, struct de_rect window,
190         struct __bws_config_data *para);
191 int de_bws_apply(unsigned int screen_id, unsigned int chno, unsigned int bws_en,
192          unsigned int auto_contrast_dirty);
193 int de_bws_tasklet(unsigned int screen_id, unsigned int chno,
194            unsigned int frame_cnt);
195 
196 
197 #endif
198