1 #include "ddk750_help.h"
2 #include "ddk750_reg.h"
3 #include "ddk750_power.h"
5 void ddk750_setDPMS(DPMS_t state)
9 if (sm750_get_chip_type() == SM750LE) {
10 value = PEEK32(CRT_DISPLAY_CTRL) & ~CRT_DISPLAY_CTRL_DPMS_MASK;
11 value |= (state << CRT_DISPLAY_CTRL_DPMS_SHIFT);
12 POKE32(CRT_DISPLAY_CTRL, value);
14 value = PEEK32(SYSTEM_CTRL);
15 value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state;
16 POKE32(SYSTEM_CTRL, value);
20 static unsigned int getPowerMode(void)
22 if (sm750_get_chip_type() == SM750LE)
24 return PEEK32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK;
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) & ~POWER_MODE_CTRL_MODE_MASK;
38 if (sm750_get_chip_type() == SM750LE)
42 case POWER_MODE_CTRL_MODE_MODE0:
43 control_value |= POWER_MODE_CTRL_MODE_MODE0;
46 case POWER_MODE_CTRL_MODE_MODE1:
47 control_value |= POWER_MODE_CTRL_MODE_MODE1;
50 case POWER_MODE_CTRL_MODE_SLEEP:
51 control_value |= POWER_MODE_CTRL_MODE_SLEEP;
58 /* Set up other fields in Power Control Register */
59 if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) {
60 control_value &= ~POWER_MODE_CTRL_OSC_INPUT;
61 #ifdef VALIDATION_CHIP
62 control_value &= ~POWER_MODE_CTRL_336CLK;
65 control_value |= POWER_MODE_CTRL_OSC_INPUT;
66 #ifdef VALIDATION_CHIP
67 control_value |= POWER_MODE_CTRL_336CLK;
71 /* Program new power mode. */
72 POKE32(POWER_MODE_CTRL, control_value);
75 void setCurrentGate(unsigned int gate)
77 unsigned int gate_reg;
80 /* Get current power mode. */
81 mode = getPowerMode();
84 case POWER_MODE_CTRL_MODE_MODE0:
85 gate_reg = MODE0_GATE;
88 case POWER_MODE_CTRL_MODE_MODE1:
89 gate_reg = MODE1_GATE;
93 gate_reg = MODE0_GATE;
96 POKE32(gate_reg, gate);
102 * This function enable/disable the 2D engine.
104 void enable2DEngine(unsigned int enable)
108 gate = PEEK32(CURRENT_GATE);
110 gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC);
112 gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC);
114 setCurrentGate(gate);
117 void enableDMA(unsigned int enable)
121 /* Enable DMA Gate */
122 gate = PEEK32(CURRENT_GATE);
124 gate |= CURRENT_GATE_DMA;
126 gate &= ~CURRENT_GATE_DMA;
128 setCurrentGate(gate);
132 * This function enable/disable the GPIO Engine
134 void enableGPIO(unsigned int enable)
138 /* Enable GPIO Gate */
139 gate = PEEK32(CURRENT_GATE);
141 gate |= CURRENT_GATE_GPIO;
143 gate &= ~CURRENT_GATE_GPIO;
145 setCurrentGate(gate);
149 * This function enable/disable the I2C Engine
151 void enableI2C(unsigned int enable)
155 /* Enable I2C Gate */
156 gate = PEEK32(CURRENT_GATE);
158 gate |= CURRENT_GATE_I2C;
160 gate &= ~CURRENT_GATE_I2C;
162 setCurrentGate(gate);