1 #include "ddk750_help.h"
2 #include "ddk750_reg.h"
3 #include "ddk750_power.h"
4 
ddk750_setDPMS(DPMS_t state)5 void ddk750_setDPMS(DPMS_t state)
6 {
7 	unsigned int value;
8 	if(getChipType() == SM750LE){
9 		value = PEEK32(CRT_DISPLAY_CTRL);
10 		POKE32(CRT_DISPLAY_CTRL,FIELD_VALUE(value,CRT_DISPLAY_CTRL,DPMS,state));
11 	}else{
12 		value = PEEK32(SYSTEM_CTRL);
13 		value= FIELD_VALUE(value,SYSTEM_CTRL,DPMS,state);
14 		POKE32(SYSTEM_CTRL, value);
15 	}
16 }
17 
getPowerMode(void)18 unsigned int getPowerMode(void)
19 {
20 	if(getChipType() == SM750LE)
21 		return 0;
22     return (FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE));
23 }
24 
25 
26 /*
27  * SM50x can operate in one of three modes: 0, 1 or Sleep.
28  * On hardware reset, power mode 0 is default.
29  */
setPowerMode(unsigned int powerMode)30 void setPowerMode(unsigned int powerMode)
31 {
32     unsigned int control_value = 0;
33 
34     control_value = PEEK32(POWER_MODE_CTRL);
35 
36 	if(getChipType() == SM750LE)
37 		return;
38 
39     switch (powerMode)
40     {
41         case POWER_MODE_CTRL_MODE_MODE0:
42             control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE0);
43             break;
44 
45         case POWER_MODE_CTRL_MODE_MODE1:
46             control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE1);
47             break;
48 
49         case POWER_MODE_CTRL_MODE_SLEEP:
50             control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, SLEEP);
51             break;
52 
53         default:
54             break;
55     }
56 
57     /* Set up other fields in Power Control Register */
58     if (powerMode == POWER_MODE_CTRL_MODE_SLEEP)
59     {
60         control_value =
61 #ifdef VALIDATION_CHIP
62             FIELD_SET(  control_value, POWER_MODE_CTRL, 336CLK, OFF) |
63 #endif
64             FIELD_SET(  control_value, POWER_MODE_CTRL, OSC_INPUT,  OFF);
65     }
66     else
67     {
68         control_value =
69 #ifdef VALIDATION_CHIP
70             FIELD_SET(  control_value, POWER_MODE_CTRL, 336CLK, ON) |
71 #endif
72             FIELD_SET(  control_value, POWER_MODE_CTRL, OSC_INPUT,  ON);
73     }
74 
75     /* Program new power mode. */
76     POKE32(POWER_MODE_CTRL, control_value);
77 }
78 
setCurrentGate(unsigned int gate)79 void setCurrentGate(unsigned int gate)
80 {
81     unsigned int gate_reg;
82     unsigned int mode;
83 
84     /* Get current power mode. */
85     mode = getPowerMode();
86 
87     switch (mode)
88     {
89         case POWER_MODE_CTRL_MODE_MODE0:
90             gate_reg = MODE0_GATE;
91             break;
92 
93         case POWER_MODE_CTRL_MODE_MODE1:
94             gate_reg = MODE1_GATE;
95             break;
96 
97         default:
98             gate_reg = MODE0_GATE;
99             break;
100     }
101     POKE32(gate_reg, gate);
102 }
103 
104 
105 
106 /*
107  * This function enable/disable the 2D engine.
108  */
enable2DEngine(unsigned int enable)109 void enable2DEngine(unsigned int enable)
110 {
111     uint32_t gate;
112 
113     gate = PEEK32(CURRENT_GATE);
114     if (enable)
115     {
116         gate = FIELD_SET(gate, CURRENT_GATE, DE,  ON);
117         gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
118     }
119     else
120     {
121         gate = FIELD_SET(gate, CURRENT_GATE, DE,  OFF);
122         gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
123     }
124 
125     setCurrentGate(gate);
126 }
127 
128 
129 /*
130  * This function enable/disable the ZV Port.
131  */
enableZVPort(unsigned int enable)132 void enableZVPort(unsigned int enable)
133 {
134     uint32_t gate;
135 
136     /* Enable ZV Port Gate */
137     gate = PEEK32(CURRENT_GATE);
138     if (enable)
139     {
140         gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, ON);
141 #if 1
142         /* Using Software I2C */
143         gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
144 #else
145         /* Using Hardware I2C */
146         gate = FIELD_SET(gate, CURRENT_GATE, I2C,    ON);
147 #endif
148     }
149     else
150     {
151         /* Disable ZV Port Gate. There is no way to know whether the GPIO pins are being used
152            or not. Therefore, do not disable the GPIO gate. */
153         gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, OFF);
154     }
155 
156     setCurrentGate(gate);
157 }
158 
159 
enableSSP(unsigned int enable)160 void enableSSP(unsigned int enable)
161 {
162     uint32_t gate;
163 
164     /* Enable SSP Gate */
165     gate = PEEK32(CURRENT_GATE);
166     if (enable)
167         gate = FIELD_SET(gate, CURRENT_GATE, SSP, ON);
168     else
169         gate = FIELD_SET(gate, CURRENT_GATE, SSP, OFF);
170 
171     setCurrentGate(gate);
172 }
173 
enableDMA(unsigned int enable)174 void enableDMA(unsigned int enable)
175 {
176     uint32_t gate;
177 
178     /* Enable DMA Gate */
179     gate = PEEK32(CURRENT_GATE);
180     if (enable)
181         gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
182     else
183         gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
184 
185     setCurrentGate(gate);
186 }
187 
188 /*
189  * This function enable/disable the GPIO Engine
190  */
enableGPIO(unsigned int enable)191 void enableGPIO(unsigned int enable)
192 {
193     uint32_t gate;
194 
195     /* Enable GPIO Gate */
196     gate = PEEK32(CURRENT_GATE);
197     if (enable)
198         gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
199     else
200         gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
201 
202     setCurrentGate(gate);
203 }
204 
205 /*
206  * This function enable/disable the PWM Engine
207  */
enablePWM(unsigned int enable)208 void enablePWM(unsigned int enable)
209 {
210     uint32_t gate;
211 
212     /* Enable PWM Gate */
213     gate = PEEK32(CURRENT_GATE);
214     if (enable)
215         gate = FIELD_SET(gate, CURRENT_GATE, PWM, ON);
216     else
217         gate = FIELD_SET(gate, CURRENT_GATE, PWM, OFF);
218 
219     setCurrentGate(gate);
220 }
221 
222 /*
223  * This function enable/disable the I2C Engine
224  */
enableI2C(unsigned int enable)225 void enableI2C(unsigned int enable)
226 {
227     uint32_t gate;
228 
229     /* Enable I2C Gate */
230     gate = PEEK32(CURRENT_GATE);
231     if (enable)
232         gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
233     else
234         gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
235 
236     setCurrentGate(gate);
237 }
238 
239 
240