import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / dispsys / mt8127 / ddp_tdshp.c
1 #include <linux/kernel.h>
2 #include <linux/types.h>
3 #include <linux/xlog.h>
4 #include <mach/mt_clkmgr.h>
5 #include <mach/mt_gpio.h>
6
7 #include "ddp_drv.h"
8 #include "ddp_reg.h"
9 #include "ddp_path.h"
10 #include "ddp_tdshp.h"
11
12
13 unsigned int sharpGain = 0;
14
15 static DISPLAY_TDSHP_T g_TDSHP_Index;
16
17 DISPLAY_TDSHP_T *get_TDSHP_index(void)
18 {
19 return &g_TDSHP_Index;
20 }
21
22
23 void DpEngine_SHARPonInit(void)
24 {
25 //XLOGD("init SHARP \n");
26
27
28
29 DISP_REG_SET((DISPSYS_TDSHP_BASE + 0xf00) ,0x00000001);
30
31 //wrapper color matrix index
32 DISP_REG_SET(DISPSYS_TDSHP_BASE + TDS_HSYNC_WIDTH , 0x00000040 );
33 DISP_REG_SET(DISPSYS_TDSHP_BASE + TDS_ACTIVE_WIDTH_IN_VBLANK , 0x00000040 );
34 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C00 , 0x00000132 );
35 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C01 , 0x00000259 );
36 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C02 , 0x00000075 );
37 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C10 , 0x00001F53 );
38 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C11 , 0x00001EAD );
39 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C12 , 0x00000200 );
40 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C20 , 0x00000200 );
41 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C21 , 0x00001E53 );
42 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_C22 , 0x00001FAD );
43 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_IN_OFFSET0 , 0x00000000 );
44 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_IN_OFFSET1 , 0x00000000 );
45 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_IN_OFFSET2 , 0x00000000 );
46 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_OUT_OFFSET0 , 0x00000000 );
47 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_OUT_OFFSET1 , 0x00000080 );
48 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_IN_MTX_OUT_OFFSET2 , 0x00000080 );
49 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C00 , 0x00000400 );
50 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C01 , 0x00001FFF );
51 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C02 , 0x0000059C );
52 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C10 , 0x00000400 );
53 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C11 , 0x00001E9F );
54 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C12 , 0x00001D25 );
55 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C20 , 0x00000400 );
56 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C21 , 0x00000716 );
57 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_C22 , 0x00000001 );
58 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_IN_OFFSET0 , 0x00000000 );
59 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_IN_OFFSET1 , 0x00000180 );
60 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_IN_OFFSET2 , 0x00000180 );
61 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_OUT_OFFSET0 , 0x00000000 );
62 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_OUT_OFFSET1 , 0x00000000 );
63 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_OUT_MTX_OUT_OFFSET2 , 0x00000000 );
64 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x350 , 0); //bypass off
65
66 }
67
68
69 void DpEngine_SHARPonConfig(unsigned int srcWidth,unsigned int srcHeight)
70 {
71 // XLOGD("config SHARP %d %d \n", srcWidth, srcHeight);
72 DISP_REG_SET((DISPSYS_TDSHP_BASE + 0xf40), srcWidth);
73 DISP_REG_SET((DISPSYS_TDSHP_BASE + 0xf44), srcHeight);
74
75 // enable R2Y/Y2R in Color Wrapper
76 DISP_REG_SET(DISPSYS_TDSHP_BASE + DTDS_CONFIG ,0x00000006);
77
78 if(sharpGain >= SHARP_TUNING_INDEX)
79 {
80 //XLOGD("SHARP Tuning index range error !\n");
81 return;
82 }
83
84 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x000,0); // turn off TDSHP
85 /*
86 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x000 , TDSHP_Param[ sharpGain][0]<< 30
87 | TDSHP_Param[ sharpGain][1]<< 29
88 | TDSHP_Param[ sharpGain][2]<< 21
89 | TDSHP_Param[ sharpGain][3]<< 20
90 | 1 << 31
91 | TDSHP_Param[ sharpGain][5]<< 3
92 | TDSHP_Param[ sharpGain][6]<< 1
93 | TDSHP_Param[ sharpGain][7]<< 8
94 | TDSHP_Param[ sharpGain][8]<< 7
95 | TDSHP_Param[ sharpGain][9]<< 19
96 | TDSHP_Param[ sharpGain][10]<< 18
97 | TDSHP_Param[ sharpGain][11]<< 11
98 | TDSHP_Param[ sharpGain][12]<< 9
99 | TDSHP_Param[ sharpGain][13]<< 4 );
100 */
101 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x014 , TDSHP_Param[ sharpGain][14]<< 31
102 | TDSHP_Param[ sharpGain][15]<< 16
103 | TDSHP_Param[ sharpGain][16]<< 26 );
104 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x020 , TDSHP_Param[ sharpGain][17]<< 24
105 | TDSHP_Param[ sharpGain][18]<< 16);
106 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x02C , TDSHP_Param[ sharpGain][19]<< 28
107 | TDSHP_Param[ sharpGain][20]<< 24
108 | TDSHP_Param[ sharpGain][21]<< 24
109 | TDSHP_Param[ sharpGain][22]<< 16 );
110 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x040 , TDSHP_Param[ sharpGain][23]<< 24
111 | TDSHP_Param[ sharpGain][24]<< 16 );
112 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x04C , TDSHP_Param[ sharpGain][25]<< 24
113 | TDSHP_Param[ sharpGain][26]<< 16 );
114 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x058 , TDSHP_Param[ sharpGain][27]<< 24
115 | TDSHP_Param[ sharpGain][28]<< 16 );
116 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x064 , TDSHP_Param[ sharpGain][29]<< 28
117 | TDSHP_Param[ sharpGain][30]<< 24 );
118 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x068 , TDSHP_Param[ sharpGain][31]<< 10
119 | TDSHP_Param[ sharpGain][32]<< 9 );
120 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x06C , TDSHP_Param[ sharpGain][33]<< 24
121 | TDSHP_Param[ sharpGain][34]<< 16 );
122 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x078 , TDSHP_Param[ sharpGain][35]<< 24
123 | TDSHP_Param[ sharpGain][36]<< 16 );
124 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x028 , TDSHP_Param[ sharpGain][37]<< 16
125 | TDSHP_Param[ sharpGain][38]<< 8 );
126 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x030 , TDSHP_Param[ sharpGain][39]<< 24
127 | TDSHP_Param[ sharpGain][40]<< 20 );
128 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x034 , TDSHP_Param[ sharpGain][21]<< 16
129 | TDSHP_Param[ sharpGain][22]<< 24 );
130 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x03C , TDSHP_Param[ sharpGain][41]<< 16
131 | TDSHP_Param[ sharpGain][42]<< 8 );
132 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x048 , TDSHP_Param[ sharpGain][43]<< 16
133 | TDSHP_Param[ sharpGain][44]<< 8 );
134 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x054 , TDSHP_Param[ sharpGain][45]<< 16
135 | TDSHP_Param[ sharpGain][46]<< 8 );
136 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x060 , TDSHP_Param[ sharpGain][47]<< 16
137 | TDSHP_Param[ sharpGain][48]<< 8 );
138 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x068 , TDSHP_Param[ sharpGain][49]<< 1
139 | TDSHP_Param[ sharpGain][50]<< 24
140 | TDSHP_Param[ sharpGain][51]<< 0
141 | TDSHP_Param[ sharpGain][52]<< 20 );
142 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x074 , TDSHP_Param[ sharpGain][53]<< 16
143 | TDSHP_Param[ sharpGain][54]<< 8 );
144 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x080 , TDSHP_Param[ sharpGain][55]<< 16
145 | TDSHP_Param[ sharpGain][56]<< 8 );
146 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x084 , TDSHP_Param[ sharpGain][57]<< 31
147 | TDSHP_Param[ sharpGain][58]<< 8
148 | TDSHP_Param[ sharpGain][59]<< 16
149 | TDSHP_Param[ sharpGain][60]<< 24
150 | TDSHP_Param[ sharpGain][61]<< 30 );
151 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x088 , TDSHP_Param[ sharpGain][62]<< 31
152 | TDSHP_Param[ sharpGain][63]<< 8
153 | TDSHP_Param[ sharpGain][64]<< 16
154 | TDSHP_Param[ sharpGain][65]<< 24
155 | TDSHP_Param[ sharpGain][66]<< 30 );
156 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x094 , TDSHP_Param[ sharpGain][67]<< 31
157 | TDSHP_Param[ sharpGain][68]<< 8
158 | TDSHP_Param[ sharpGain][69]<< 16
159 | TDSHP_Param[ sharpGain][70]<< 24
160 | TDSHP_Param[ sharpGain][71]<< 30 );
161 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x098 , TDSHP_Param[ sharpGain][72]<< 31
162 | TDSHP_Param[ sharpGain][73]<< 8
163 | TDSHP_Param[ sharpGain][74]<< 16
164 | TDSHP_Param[ sharpGain][75]<< 24
165 | TDSHP_Param[ sharpGain][76]<< 30 );
166 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x09C , TDSHP_Param[ sharpGain][77]<< 24
167 | TDSHP_Param[ sharpGain][78]<< 16
168 | TDSHP_Param[ sharpGain][79]<< 4
169 | TDSHP_Param[ sharpGain][80]<< 12
170 | TDSHP_Param[ sharpGain][81]<< 00 );
171 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0A0 , TDSHP_Param[ sharpGain][82]<< 0
172 | TDSHP_Param[ sharpGain][83]<< 16
173 | TDSHP_Param[ sharpGain][84]<< 8
174 | TDSHP_Param[ sharpGain][85]<< 24);
175 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0A4 , TDSHP_Param[ sharpGain][86]<< 31
176 | TDSHP_Param[ sharpGain][87]<< 8
177 | TDSHP_Param[ sharpGain][88]<< 16
178 | TDSHP_Param[ sharpGain][89]<< 24
179 | TDSHP_Param[ sharpGain][90]<< 30
180 | TDSHP_Param[ sharpGain][91]<< 0 );
181 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x01C , TDSHP_Param[ sharpGain][92]<< 0 );
182 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0A8 , TDSHP_Param[ sharpGain][93]<< 24
183 | TDSHP_Param[ sharpGain][94]<< 8
184 | TDSHP_Param[ sharpGain][95]<< 0
185 | TDSHP_Param[ sharpGain][96]<< 16 );
186 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0AC , TDSHP_Param[ sharpGain][97]<< 24
187 | TDSHP_Param[ sharpGain][98]<< 16
188 | TDSHP_Param[ sharpGain][99]<< 8
189 | TDSHP_Param[ sharpGain][100]<< 00 );
190 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0B0 , TDSHP_Param[ sharpGain][101]<< 24
191 | TDSHP_Param[ sharpGain][102]<< 16
192 | TDSHP_Param[ sharpGain][103]<< 8
193 | TDSHP_Param[ sharpGain][104]<< 00 );
194 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0B4 , TDSHP_Param[ sharpGain][105]<< 24
195 | TDSHP_Param[ sharpGain][106]<< 16
196 | TDSHP_Param[ sharpGain][107]<< 8
197 | TDSHP_Param[ sharpGain][108]<< 0 );
198 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x0B8 , TDSHP_Param[ sharpGain][109]<< 16
199 | TDSHP_Param[ sharpGain][110]<< 14
200 | TDSHP_Param[ sharpGain][111]<< 24
201 | TDSHP_Param[ sharpGain][112]<< 15 );
202 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x278 , TDSHP_Param[ sharpGain][113]<< 3 );
203
204 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x208 , TDSHP_Param[ sharpGain][129]<< 20
205 | TDSHP_Param[ sharpGain][117]<< 19
206 | TDSHP_Param[ sharpGain][118]<< 0
207 | TDSHP_Param[ sharpGain][119]<< 8 );
208 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x20C , TDSHP_Param[ sharpGain][120]<< 24
209 | TDSHP_Param[ sharpGain][121]<< 15
210 | TDSHP_Param[ sharpGain][122]<< 16 );
211 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x200 , TDSHP_Param[ sharpGain][114]<< 31
212 | TDSHP_Param[ sharpGain][123]<< 16
213 | TDSHP_Param[ sharpGain][124]<< 0
214 | TDSHP_Param[ sharpGain][125]<< 8 );
215 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x204 , TDSHP_Param[ sharpGain][126]<< 0
216 | TDSHP_Param[ sharpGain][127]<< 12
217 | TDSHP_Param[ sharpGain][128]<< 22 );
218 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x218 , TDSHP_Param[ sharpGain][130]<< 24
219 | TDSHP_Param[ sharpGain][131]<< 16 );
220 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x210 , TDSHP_Param[ sharpGain][132]<< 24
221 | TDSHP_Param[ sharpGain][133]<< 16 );
222 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x220 , TDSHP_Param[ sharpGain][134]<< 24
223 | TDSHP_Param[ sharpGain][135]<< 16 );
224 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x230 , TDSHP_Param[ sharpGain][148]<< 20
225 | TDSHP_Param[ sharpGain][136]<< 19
226 | TDSHP_Param[ sharpGain][137]<< 0
227 | TDSHP_Param[ sharpGain][138]<< 8 );
228 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x234 , TDSHP_Param[ sharpGain][139]<< 24
229 | TDSHP_Param[ sharpGain][140]<< 15
230 | TDSHP_Param[ sharpGain][141]<< 16 );
231 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x228 , TDSHP_Param[ sharpGain][115]<< 31
232 | TDSHP_Param[ sharpGain][142]<< 16
233 | TDSHP_Param[ sharpGain][143]<< 0
234 | TDSHP_Param[ sharpGain][144]<< 8 );
235 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x22C , TDSHP_Param[ sharpGain][145]<< 0
236 | TDSHP_Param[ sharpGain][146]<< 12
237 | TDSHP_Param[ sharpGain][147]<< 22 );
238 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x240 , TDSHP_Param[ sharpGain][149]<< 24
239 | TDSHP_Param[ sharpGain][150]<< 16 );
240 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x238 , TDSHP_Param[ sharpGain][151]<< 24
241 | TDSHP_Param[ sharpGain][152]<< 16 );
242 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x248 , TDSHP_Param[ sharpGain][153]<< 24
243 | TDSHP_Param[ sharpGain][154]<< 16 );
244 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x258 , TDSHP_Param[ sharpGain][167]<< 20
245 | TDSHP_Param[ sharpGain][155]<< 19
246 | TDSHP_Param[ sharpGain][156]<< 0
247 | TDSHP_Param[ sharpGain][157]<< 8 );
248 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x25C , TDSHP_Param[ sharpGain][158]<< 24
249 | TDSHP_Param[ sharpGain][159]<< 15
250 | TDSHP_Param[ sharpGain][160]<< 16 );
251 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x250 , TDSHP_Param[ sharpGain][116]<< 31
252 | TDSHP_Param[ sharpGain][161]<< 16
253 | TDSHP_Param[ sharpGain][162]<< 0
254 | TDSHP_Param[ sharpGain][163]<< 8 );
255 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x254 , TDSHP_Param[ sharpGain][164]<< 0
256 | TDSHP_Param[ sharpGain][165]<< 12
257 | TDSHP_Param[ sharpGain][166]<< 22 );
258 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x268 , TDSHP_Param[ sharpGain][168]<< 24
259 | TDSHP_Param[ sharpGain][169]<< 16 );
260 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x260 , TDSHP_Param[ sharpGain][170]<< 24
261 | TDSHP_Param[ sharpGain][171]<< 16 );
262 DISP_REG_SET(DISPSYS_TDSHP_BASE+0x270 , TDSHP_Param[ sharpGain][172]<< 24
263 | TDSHP_Param[ sharpGain][173]<< 16 );
264
265 }
266
267
268
269
270