blob: 0331d34458ae42d7411cada92fe971de3b85907c [file] [log] [blame]
Mike Rapoport4cf26d82015-09-22 12:01:17 +03001#include <linux/sizes.h>
2
Sudip Mukherjee81dee672015-03-03 16:21:06 +05303#include "ddk750_help.h"
4#include "ddk750_reg.h"
5#include "ddk750_chip.h"
6#include "ddk750_power.h"
Sudip Mukherjee81dee672015-03-03 16:21:06 +05307
Supriya Karanth6fa7db82015-03-12 01:11:00 +09008logical_chip_type_t getChipType(void)
Sudip Mukherjee81dee672015-03-03 16:21:06 +05309{
10 unsigned short physicalID;
11 char physicalRev;
12 logical_chip_type_t chip;
13
Juston Li5ee35ea2015-06-12 03:17:22 -070014 physicalID = devId750; /* either 0x718 or 0x750 */
Sudip Mukherjee81dee672015-03-03 16:21:06 +053015 physicalRev = revId750;
16
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070017 if (physicalID == 0x718)
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070018 chip = SM718;
Helen Fornazier9767fc52015-03-26 14:09:14 -030019 else if (physicalID == 0x750) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070020 chip = SM750;
Sudip Mukherjee81dee672015-03-03 16:21:06 +053021 /* SM750 and SM750LE are different in their revision ID only. */
Helen Fornazier9767fc52015-03-26 14:09:14 -030022 if (physicalRev == SM750LE_REVISION_ID)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053023 chip = SM750LE;
Helen Fornazier9767fc52015-03-26 14:09:14 -030024 } else
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070025 chip = SM_UNKNOWN;
Sudip Mukherjee81dee672015-03-03 16:21:06 +053026
27 return chip;
28}
29
Mike Rapoport7092d762015-10-13 09:26:45 +030030static unsigned int get_mxclk_freq(void)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053031{
Mike Rapoport7751e0e2015-10-13 09:26:44 +030032 unsigned int pll_reg;
33 unsigned int M, N, OD, POD;
34
Helen Fornazier82736d22015-03-26 14:09:16 -030035 if (getChipType() == SM750LE)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053036 return MHz(130);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053037
Mike Rapoport7751e0e2015-10-13 09:26:44 +030038 pll_reg = PEEK32(MXCLK_PLL_CTRL);
39 M = FIELD_GET(pll_reg, PANEL_PLL_CTRL, M);
40 N = FIELD_GET(pll_reg, PANEL_PLL_CTRL, N);
41 OD = FIELD_GET(pll_reg, PANEL_PLL_CTRL, OD);
42 POD = FIELD_GET(pll_reg, PANEL_PLL_CTRL, POD);
43
44 return DEFAULT_INPUT_CLOCK * M / N / (1 << OD) / (1 << POD);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053045}
46
Sudip Mukherjee81dee672015-03-03 16:21:06 +053047/*
48 * This function set up the main chip clock.
49 *
50 * Input: Frequency to be set.
51 */
Mike Rapoportfb6f37a2015-09-30 08:24:54 +030052static void setChipClock(unsigned int frequency)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053053{
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070054 pll_value_t pll;
55 unsigned int ulActualMxClk;
Mike Rapoportcfac7d62015-10-22 09:38:39 +030056
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070057 /* Cheok_0509: For SM750LE, the chip clock is fixed. Nothing to set. */
58 if (getChipType() == SM750LE)
59 return;
Sudip Mukherjee81dee672015-03-03 16:21:06 +053060
Amitoj Kaur Chawla59f08402015-04-02 23:01:04 +053061 if (frequency) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070062 /*
63 * Set up PLL, a structure to hold the value to be set in clocks.
64 */
65 pll.inputFreq = DEFAULT_INPUT_CLOCK; /* Defined in CLOCK.H */
66 pll.clockType = MXCLK_PLL;
Sudip Mukherjee81dee672015-03-03 16:21:06 +053067
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070068 /*
69 * Call calcPllValue() to fill up the other fields for PLL structure.
70 * Sometime, the chip cannot set up the exact clock required by User.
71 * Return value from calcPllValue() gives the actual possible clock.
72 */
73 ulActualMxClk = calcPllValue(frequency, &pll);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053074
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070075 /* Master Clock Control: MXCLK_PLL */
76 POKE32(MXCLK_PLL_CTRL, formatPllReg(&pll));
77 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +053078}
79
Mike Rapoportfb6f37a2015-09-30 08:24:54 +030080static void setMemoryClock(unsigned int frequency)
Sudip Mukherjee81dee672015-03-03 16:21:06 +053081{
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070082 unsigned int ulReg, divisor;
Mike Rapoportcfac7d62015-10-22 09:38:39 +030083
Sudip Mukherjee81dee672015-03-03 16:21:06 +053084 /* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
85 if (getChipType() == SM750LE)
86 return;
Mike Rapoportcfac7d62015-10-22 09:38:39 +030087
Amitoj Kaur Chawla59f08402015-04-02 23:01:04 +053088 if (frequency) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070089 /* Set the frequency to the maximum frequency that the DDR Memory can take
90 which is 336MHz. */
91 if (frequency > MHz(336))
92 frequency = MHz(336);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053093
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070094 /* Calculate the divisor */
Mike Rapoportb02f9242015-10-13 09:26:46 +030095 divisor = roundedDiv(get_mxclk_freq(), frequency);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053096
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -070097 /* Set the corresponding divisor in the register. */
98 ulReg = PEEK32(CURRENT_GATE);
Helen Fornazierc1072432015-03-26 14:09:17 -030099 switch (divisor) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700100 default:
101 case 1:
102 ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_1);
103 break;
104 case 2:
105 ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_2);
106 break;
107 case 3:
108 ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_3);
109 break;
110 case 4:
111 ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_4);
112 break;
113 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530114
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700115 setCurrentGate(ulReg);
116 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530117}
118
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530119/*
120 * This function set up the master clock (MCLK).
121 *
122 * Input: Frequency to be set.
123 *
124 * NOTE:
125 * The maximum frequency the engine can run is 168MHz.
126 */
Mike Rapoportfb6f37a2015-09-30 08:24:54 +0300127static void setMasterClock(unsigned int frequency)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530128{
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700129 unsigned int ulReg, divisor;
Mike Rapoportcfac7d62015-10-22 09:38:39 +0300130
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530131 /* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
132 if (getChipType() == SM750LE)
133 return;
Mike Rapoportcfac7d62015-10-22 09:38:39 +0300134
Amitoj Kaur Chawla59f08402015-04-02 23:01:04 +0530135 if (frequency) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700136 /* Set the frequency to the maximum frequency that the SM750 engine can
137 run, which is about 190 MHz. */
138 if (frequency > MHz(190))
139 frequency = MHz(190);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530140
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700141 /* Calculate the divisor */
Mike Rapoportb02f9242015-10-13 09:26:46 +0300142 divisor = roundedDiv(get_mxclk_freq(), frequency);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530143
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700144 /* Set the corresponding divisor in the register. */
145 ulReg = PEEK32(CURRENT_GATE);
Helen Fornazierc1072432015-03-26 14:09:17 -0300146 switch (divisor) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700147 default:
148 case 3:
149 ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_3);
150 break;
151 case 4:
152 ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_4);
153 break;
154 case 6:
155 ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_6);
156 break;
157 case 8:
158 ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_8);
159 break;
160 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530161
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700162 setCurrentGate(ulReg);
163 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530164}
165
Supriya Karanth6fa7db82015-03-12 01:11:00 +0900166unsigned int ddk750_getVMSize(void)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530167{
168 unsigned int reg;
169 unsigned int data;
170
171 /* sm750le only use 64 mb memory*/
Helen Fornazier82736d22015-03-26 14:09:16 -0300172 if (getChipType() == SM750LE)
Mike Rapoport4cf26d82015-09-22 12:01:17 +0300173 return SZ_64M;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530174
175 /* for 750,always use power mode0*/
176 reg = PEEK32(MODE0_GATE);
Helen Fornazierc04051f2015-03-26 14:09:18 -0300177 reg = FIELD_SET(reg, MODE0_GATE, GPIO, ON);
178 POKE32(MODE0_GATE, reg);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530179
180 /* get frame buffer size from GPIO */
Helen Fornazierc04051f2015-03-26 14:09:18 -0300181 reg = FIELD_GET(PEEK32(MISC_CTRL), MISC_CTRL, LOCALMEM_SIZE);
Helen Fornazierc1072432015-03-26 14:09:17 -0300182 switch (reg) {
Helen Fornazierae59c462015-03-26 14:09:19 -0300183 case MISC_CTRL_LOCALMEM_SIZE_8M:
Mike Rapoport4cf26d82015-09-22 12:01:17 +0300184 data = SZ_8M; break; /* 8 Mega byte */
Helen Fornazierae59c462015-03-26 14:09:19 -0300185 case MISC_CTRL_LOCALMEM_SIZE_16M:
Mike Rapoport4cf26d82015-09-22 12:01:17 +0300186 data = SZ_16M; break; /* 16 Mega byte */
Helen Fornazierae59c462015-03-26 14:09:19 -0300187 case MISC_CTRL_LOCALMEM_SIZE_32M:
Mike Rapoport4cf26d82015-09-22 12:01:17 +0300188 data = SZ_32M; break; /* 32 Mega byte */
Helen Fornazierae59c462015-03-26 14:09:19 -0300189 case MISC_CTRL_LOCALMEM_SIZE_64M:
Mike Rapoport4cf26d82015-09-22 12:01:17 +0300190 data = SZ_64M; break; /* 64 Mega byte */
Helen Fornazierae59c462015-03-26 14:09:19 -0300191 default:
Amitoj Kaur Chawlae261e692015-04-02 22:57:55 +0530192 data = 0;
193 break;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530194 }
195 return data;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530196}
197
Helen Fornazierf8da0552015-03-26 14:09:20 -0300198int ddk750_initHw(initchip_param_t *pInitParam)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530199{
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530200 unsigned int ulReg;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530201
Juston Li8332d942015-07-14 21:14:32 -0700202 if (pInitParam->powerMode != 0)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530203 pInitParam->powerMode = 0;
204 setPowerMode(pInitParam->powerMode);
205
206 /* Enable display power gate & LOCALMEM power gate*/
207 ulReg = PEEK32(CURRENT_GATE);
208 ulReg = FIELD_SET(ulReg, CURRENT_GATE, DISPLAY, ON);
Helen Fornazierc04051f2015-03-26 14:09:18 -0300209 ulReg = FIELD_SET(ulReg, CURRENT_GATE, LOCALMEM, ON);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530210 setCurrentGate(ulReg);
211
Helen Fornazier82736d22015-03-26 14:09:16 -0300212 if (getChipType() != SM750LE) {
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530213 /* set panel pll and graphic mode via mmio_88 */
214 ulReg = PEEK32(VGA_CONFIGURATION);
Helen Fornazierc04051f2015-03-26 14:09:18 -0300215 ulReg = FIELD_SET(ulReg, VGA_CONFIGURATION, PLL, PANEL);
216 ulReg = FIELD_SET(ulReg, VGA_CONFIGURATION, MODE, GRAPHIC);
217 POKE32(VGA_CONFIGURATION, ulReg);
Helen Fornazier9767fc52015-03-26 14:09:14 -0300218 } else {
Amitoj Kaur Chawla31296ba2015-04-08 22:25:06 +0530219#if defined(__i386__) || defined(__x86_64__)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530220 /* set graphic mode via IO method */
Helen Fornazierc04051f2015-03-26 14:09:18 -0300221 outb_p(0x88, 0x3d4);
222 outb_p(0x06, 0x3d5);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530223#endif
224 }
225
226 /* Set the Main Chip Clock */
227 setChipClock(MHz((unsigned int)pInitParam->chipClock));
228
229 /* Set up memory clock. */
230 setMemoryClock(MHz(pInitParam->memClock));
231
232 /* Set up master clock */
233 setMasterClock(MHz(pInitParam->masterClock));
234
235
236 /* Reset the memory controller. If the memory controller is not reset in SM750,
237 the system might hang when sw accesses the memory.
238 The memory should be resetted after changing the MXCLK.
239 */
Helen Fornazier9767fc52015-03-26 14:09:14 -0300240 if (pInitParam->resetMemory == 1) {
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530241 ulReg = PEEK32(MISC_CTRL);
242 ulReg = FIELD_SET(ulReg, MISC_CTRL, LOCALMEM_RESET, RESET);
243 POKE32(MISC_CTRL, ulReg);
244
245 ulReg = FIELD_SET(ulReg, MISC_CTRL, LOCALMEM_RESET, NORMAL);
246 POKE32(MISC_CTRL, ulReg);
247 }
248
Helen Fornazier9767fc52015-03-26 14:09:14 -0300249 if (pInitParam->setAllEngOff == 1) {
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530250 enable2DEngine(0);
251
252 /* Disable Overlay, if a former application left it on */
253 ulReg = PEEK32(VIDEO_DISPLAY_CTRL);
254 ulReg = FIELD_SET(ulReg, VIDEO_DISPLAY_CTRL, PLANE, DISABLE);
255 POKE32(VIDEO_DISPLAY_CTRL, ulReg);
256
257 /* Disable video alpha, if a former application left it on */
258 ulReg = PEEK32(VIDEO_ALPHA_DISPLAY_CTRL);
259 ulReg = FIELD_SET(ulReg, VIDEO_ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
260 POKE32(VIDEO_ALPHA_DISPLAY_CTRL, ulReg);
261
262 /* Disable alpha plane, if a former application left it on */
263 ulReg = PEEK32(ALPHA_DISPLAY_CTRL);
264 ulReg = FIELD_SET(ulReg, ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
265 POKE32(ALPHA_DISPLAY_CTRL, ulReg);
266
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530267 /* Disable DMA Channel, if a former application left it on */
268 ulReg = PEEK32(DMA_ABORT_INTERRUPT);
269 ulReg = FIELD_SET(ulReg, DMA_ABORT_INTERRUPT, ABORT_1, ABORT);
270 POKE32(DMA_ABORT_INTERRUPT, ulReg);
271
272 /* Disable DMA Power, if a former application left it on */
273 enableDMA(0);
274 }
275
276 /* We can add more initialization as needed. */
277
278 return 0;
279}
280
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530281/*
282 monk liu @ 4/6/2011:
283 re-write the calculatePLL function of ddk750.
284 the original version function does not use some mathematics tricks and shortcut
285 when it doing the calculation of the best N,M,D combination
286 I think this version gives a little upgrade in speed
287
288 750 pll clock formular:
289 Request Clock = (Input Clock * M )/(N * X)
290
291 Input Clock = 14318181 hz
292 X = 2 power D
293 D ={0,1,2,3,4,5,6}
294 M = {1,...,255}
295 N = {2,...,15}
296*/
Helen Fornazierc04051f2015-03-26 14:09:18 -0300297unsigned int calcPllValue(unsigned int request_orig, pll_value_t *pll)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530298{
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700299 /* as sm750 register definition, N located in 2,15 and M located in 1,255 */
Helen Fornazierc04051f2015-03-26 14:09:18 -0300300 int N, M, X, d;
Amitoj Kaur Chawla43ce0b52015-10-10 02:14:27 +0530301 int mini_diff;
Helen Fornazierc04051f2015-03-26 14:09:18 -0300302 unsigned int RN, quo, rem, fl_quo;
303 unsigned int input, request;
304 unsigned int tmpClock, ret;
Mike Rapoporta61dc132015-10-22 09:38:40 +0300305 const int max_OD = 3;
306 int max_d;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530307
Helen Fornazier9767fc52015-03-26 14:09:14 -0300308 if (getChipType() == SM750LE) {
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700309 /* SM750LE don't have prgrammable PLL and M/N values to work on.
310 Just return the requested clock. */
311 return request_orig;
312 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530313
314 ret = 0;
Amitoj Kaur Chawla43ce0b52015-10-10 02:14:27 +0530315 mini_diff = ~0;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530316 request = request_orig / 1000;
317 input = pll->inputFreq / 1000;
318
319 /* for MXCLK register , no POD provided, so need be treated differently */
Mike Rapoporta61dc132015-10-22 09:38:40 +0300320 if (pll->clockType == MXCLK_PLL)
321 max_d = 3;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530322
Helen Fornazierce02a16a2015-03-26 14:09:15 -0300323 for (N = 15; N > 1; N--) {
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530324 /* RN will not exceed maximum long if @request <= 285 MHZ (for 32bit cpu) */
325 RN = N * request;
326 quo = RN / input;
327 rem = RN % input;/* rem always small than 14318181 */
Juston Li6ab5b6d2015-07-14 21:14:40 -0700328 fl_quo = (rem * 10000 / input);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530329
Mike Rapoporta61dc132015-10-22 09:38:40 +0300330 for (d = max_d; d >= 0; d--) {
331 X = (1 << d);
Amitoj Kaur Chawlaf40917e2015-10-04 20:12:30 +0530332 M = quo * X;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530333 M += fl_quo * X / 10000;
334 /* round step */
Amitoj Kaur Chawla07387cb2015-10-04 20:18:32 +0530335 M += (fl_quo * X % 10000) > 5000 ? 1 : 0;
Helen Fornazier82736d22015-03-26 14:09:16 -0300336 if (M < 256 && M > 0) {
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530337 unsigned int diff;
Juston Li40403c12015-07-14 21:14:48 -0700338
Juston Li6ab5b6d2015-07-14 21:14:40 -0700339 tmpClock = pll->inputFreq * M / N / X;
Helen Fornazierc04051f2015-03-26 14:09:18 -0300340 diff = absDiff(tmpClock, request_orig);
Amitoj Kaur Chawla43ce0b52015-10-10 02:14:27 +0530341 if (diff < mini_diff) {
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530342 pll->M = M;
343 pll->N = N;
Mike Rapoporta61dc132015-10-22 09:38:40 +0300344 pll->POD = 0;
345 if (d > max_OD)
346 pll->POD = d - max_OD;
347 pll->OD = d - pll->POD;
Amitoj Kaur Chawla43ce0b52015-10-10 02:14:27 +0530348 mini_diff = diff;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530349 ret = tmpClock;
350 }
351 }
352 }
353 }
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530354 return ret;
355}
356
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530357unsigned int formatPllReg(pll_value_t *pPLL)
358{
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700359 unsigned int ulPllReg = 0;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530360
361 /* Note that all PLL's have the same format. Here, we just use Panel PLL parameter
362 to work out the bit fields in the register.
363 On returning a 32 bit number, the value can be applied to any PLL in the calling function.
364 */
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700365 ulPllReg =
Juston Li7f0ebcc2015-07-14 21:14:31 -0700366 FIELD_SET(0, PANEL_PLL_CTRL, BYPASS, OFF)
367 | FIELD_SET(0, PANEL_PLL_CTRL, POWER, ON)
368 | FIELD_SET(0, PANEL_PLL_CTRL, INPUT, OSC)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530369#ifndef VALIDATION_CHIP
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700370 | FIELD_VALUE(0, PANEL_PLL_CTRL, POD, pPLL->POD)
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530371#endif
Ragavendra Nagrajde99bef2015-03-18 02:37:42 -0700372 | FIELD_VALUE(0, PANEL_PLL_CTRL, OD, pPLL->OD)
373 | FIELD_VALUE(0, PANEL_PLL_CTRL, N, pPLL->N)
374 | FIELD_VALUE(0, PANEL_PLL_CTRL, M, pPLL->M);
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530375
Isaac Assegai63de0eb2015-05-24 22:48:42 -0700376 return ulPllReg;
Sudip Mukherjee81dee672015-03-03 16:21:06 +0530377}
378
379