1 #include "ddk750_help.h"
2 #include "ddk750_reg.h"
3 #include "ddk750_power.h"
5 void ddk750_setDPMS(DPMS_t state)
9 if (getChipType() == SM750LE) {
10 value = PEEK32(CRT_DISPLAY_CTRL);
11 POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(value, CRT_DISPLAY_CTRL,
14 value = PEEK32(SYSTEM_CTRL);
15 value = FIELD_VALUE(value, SYSTEM_CTRL, DPMS, state);
16 POKE32(SYSTEM_CTRL, value);
20 unsigned int getPowerMode(void)
22 if (getChipType() == SM750LE)
24 return FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE);
29 * SM50x can operate in one of three modes: 0, 1 or Sleep.
30 * On hardware reset, power mode 0 is default.
32 void setPowerMode(unsigned int powerMode)
34 unsigned int control_value = 0;
36 control_value = PEEK32(POWER_MODE_CTRL);
38 if (getChipType() == SM750LE)
42 case POWER_MODE_CTRL_MODE_MODE0:
43 control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
47 case POWER_MODE_CTRL_MODE_MODE1:
48 control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
52 case POWER_MODE_CTRL_MODE_SLEEP:
53 control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
61 /* Set up other fields in Power Control Register */
62 if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) {
64 #ifdef VALIDATION_CHIP
65 FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, OFF) |
67 FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT, OFF);
70 #ifdef VALIDATION_CHIP
71 FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, ON) |
73 FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT, ON);
76 /* Program new power mode. */
77 POKE32(POWER_MODE_CTRL, control_value);
80 void setCurrentGate(unsigned int gate)
82 unsigned int gate_reg;
85 /* Get current power mode. */
86 mode = getPowerMode();
89 case POWER_MODE_CTRL_MODE_MODE0:
90 gate_reg = MODE0_GATE;
93 case POWER_MODE_CTRL_MODE_MODE1:
94 gate_reg = MODE1_GATE;
98 gate_reg = MODE0_GATE;
101 POKE32(gate_reg, gate);
107 * This function enable/disable the 2D engine.
109 void enable2DEngine(unsigned int enable)
113 gate = PEEK32(CURRENT_GATE);
115 gate = FIELD_SET(gate, CURRENT_GATE, DE, ON);
116 gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
118 gate = FIELD_SET(gate, CURRENT_GATE, DE, OFF);
119 gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
122 setCurrentGate(gate);
127 * This function enable/disable the ZV Port.
129 void enableZVPort(unsigned int enable)
133 /* Enable ZV Port Gate */
134 gate = PEEK32(CURRENT_GATE);
136 gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, ON);
138 /* Using Software I2C */
139 gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
141 /* Using Hardware I2C */
142 gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
145 /* Disable ZV Port Gate. There is no way to know whether the
146 GPIO pins are being used or not. Therefore, do not disable the
148 gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, OFF);
151 setCurrentGate(gate);
155 void enableSSP(unsigned int enable)
159 /* Enable SSP Gate */
160 gate = PEEK32(CURRENT_GATE);
162 gate = FIELD_SET(gate, CURRENT_GATE, SSP, ON);
164 gate = FIELD_SET(gate, CURRENT_GATE, SSP, OFF);
166 setCurrentGate(gate);
169 void enableDMA(unsigned int enable)
173 /* Enable DMA Gate */
174 gate = PEEK32(CURRENT_GATE);
176 gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
178 gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
180 setCurrentGate(gate);
184 * This function enable/disable the GPIO Engine
186 void enableGPIO(unsigned int enable)
190 /* Enable GPIO Gate */
191 gate = PEEK32(CURRENT_GATE);
193 gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
195 gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
197 setCurrentGate(gate);
201 * This function enable/disable the PWM Engine
203 void enablePWM(unsigned int enable)
207 /* Enable PWM Gate */
208 gate = PEEK32(CURRENT_GATE);
210 gate = FIELD_SET(gate, CURRENT_GATE, PWM, ON);
212 gate = FIELD_SET(gate, CURRENT_GATE, PWM, OFF);
214 setCurrentGate(gate);
218 * This function enable/disable the I2C Engine
220 void enableI2C(unsigned int enable)
224 /* Enable I2C Gate */
225 gate = PEEK32(CURRENT_GATE);
227 gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
229 gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
231 setCurrentGate(gate);