Commit | Line | Data |
---|---|---|
81dee67e SM |
1 | #include "ddk750_help.h" |
2 | #include "ddk750_reg.h" | |
3 | #include "ddk750_power.h" | |
4 | ||
5 | void ddk750_setDPMS(DPMS_t state) | |
6 | { | |
7 | unsigned int value; | |
40403c1b | 8 | |
8c11f5a2 | 9 | if (getChipType() == SM750LE) { |
cdce1f18 MR |
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); | |
6338a781 | 13 | } else { |
81dee67e | 14 | value = PEEK32(SYSTEM_CTRL); |
a8856ff8 | 15 | value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state; |
81dee67e SM |
16 | POKE32(SYSTEM_CTRL, value); |
17 | } | |
18 | } | |
19 | ||
228a4cf8 | 20 | static unsigned int getPowerMode(void) |
81dee67e | 21 | { |
9ccc5f44 | 22 | if (getChipType() == SM750LE) |
81dee67e | 23 | return 0; |
f41b17fc | 24 | return PEEK32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK; |
81dee67e SM |
25 | } |
26 | ||
27 | ||
28 | /* | |
29 | * SM50x can operate in one of three modes: 0, 1 or Sleep. | |
30 | * On hardware reset, power mode 0 is default. | |
31 | */ | |
32 | void setPowerMode(unsigned int powerMode) | |
33 | { | |
78376535 | 34 | unsigned int control_value = 0; |
81dee67e | 35 | |
f41b17fc | 36 | control_value = PEEK32(POWER_MODE_CTRL) & ~POWER_MODE_CTRL_MODE_MASK; |
81dee67e | 37 | |
9ccc5f44 | 38 | if (getChipType() == SM750LE) |
81dee67e SM |
39 | return; |
40 | ||
259fef35 | 41 | switch (powerMode) { |
78376535 | 42 | case POWER_MODE_CTRL_MODE_MODE0: |
f41b17fc | 43 | control_value |= POWER_MODE_CTRL_MODE_MODE0; |
78376535 | 44 | break; |
81dee67e | 45 | |
78376535 | 46 | case POWER_MODE_CTRL_MODE_MODE1: |
f41b17fc | 47 | control_value |= POWER_MODE_CTRL_MODE_MODE1; |
78376535 | 48 | break; |
81dee67e | 49 | |
78376535 | 50 | case POWER_MODE_CTRL_MODE_SLEEP: |
f41b17fc | 51 | control_value |= POWER_MODE_CTRL_MODE_SLEEP; |
78376535 | 52 | break; |
81dee67e | 53 | |
78376535 JL |
54 | default: |
55 | break; | |
56 | } | |
81dee67e | 57 | |
78376535 | 58 | /* Set up other fields in Power Control Register */ |
259fef35 | 59 | if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) { |
776980cf | 60 | control_value &= ~POWER_MODE_CTRL_OSC_INPUT; |
81dee67e | 61 | #ifdef VALIDATION_CHIP |
776980cf | 62 | control_value &= ~POWER_MODE_CTRL_336CLK; |
81dee67e | 63 | #endif |
259fef35 | 64 | } else { |
776980cf | 65 | control_value |= POWER_MODE_CTRL_OSC_INPUT; |
81dee67e | 66 | #ifdef VALIDATION_CHIP |
776980cf | 67 | control_value |= POWER_MODE_CTRL_336CLK; |
81dee67e | 68 | #endif |
78376535 | 69 | } |
81dee67e | 70 | |
78376535 JL |
71 | /* Program new power mode. */ |
72 | POKE32(POWER_MODE_CTRL, control_value); | |
81dee67e SM |
73 | } |
74 | ||
75 | void setCurrentGate(unsigned int gate) | |
76 | { | |
78376535 JL |
77 | unsigned int gate_reg; |
78 | unsigned int mode; | |
79 | ||
80 | /* Get current power mode. */ | |
81 | mode = getPowerMode(); | |
82 | ||
259fef35 | 83 | switch (mode) { |
78376535 JL |
84 | case POWER_MODE_CTRL_MODE_MODE0: |
85 | gate_reg = MODE0_GATE; | |
86 | break; | |
87 | ||
88 | case POWER_MODE_CTRL_MODE_MODE1: | |
89 | gate_reg = MODE1_GATE; | |
90 | break; | |
91 | ||
92 | default: | |
93 | gate_reg = MODE0_GATE; | |
94 | break; | |
95 | } | |
96 | POKE32(gate_reg, gate); | |
81dee67e SM |
97 | } |
98 | ||
99 | ||
100 | ||
101 | /* | |
102 | * This function enable/disable the 2D engine. | |
103 | */ | |
104 | void enable2DEngine(unsigned int enable) | |
105 | { | |
f741554e | 106 | u32 gate; |
78376535 JL |
107 | |
108 | gate = PEEK32(CURRENT_GATE); | |
a5975238 | 109 | if (enable) |
90946e52 | 110 | gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC); |
a5975238 | 111 | else |
90946e52 | 112 | gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC); |
78376535 JL |
113 | |
114 | setCurrentGate(gate); | |
81dee67e SM |
115 | } |
116 | ||
81dee67e SM |
117 | void enableDMA(unsigned int enable) |
118 | { | |
f741554e | 119 | u32 gate; |
81dee67e | 120 | |
78376535 JL |
121 | /* Enable DMA Gate */ |
122 | gate = PEEK32(CURRENT_GATE); | |
123 | if (enable) | |
90946e52 | 124 | gate |= CURRENT_GATE_DMA; |
78376535 | 125 | else |
90946e52 | 126 | gate &= ~CURRENT_GATE_DMA; |
81dee67e | 127 | |
78376535 | 128 | setCurrentGate(gate); |
81dee67e SM |
129 | } |
130 | ||
131 | /* | |
132 | * This function enable/disable the GPIO Engine | |
133 | */ | |
134 | void enableGPIO(unsigned int enable) | |
135 | { | |
f741554e | 136 | u32 gate; |
81dee67e | 137 | |
78376535 JL |
138 | /* Enable GPIO Gate */ |
139 | gate = PEEK32(CURRENT_GATE); | |
140 | if (enable) | |
90946e52 | 141 | gate |= CURRENT_GATE_GPIO; |
78376535 | 142 | else |
90946e52 | 143 | gate &= ~CURRENT_GATE_GPIO; |
81dee67e | 144 | |
78376535 | 145 | setCurrentGate(gate); |
81dee67e SM |
146 | } |
147 | ||
81dee67e SM |
148 | /* |
149 | * This function enable/disable the I2C Engine | |
150 | */ | |
151 | void enableI2C(unsigned int enable) | |
152 | { | |
f741554e | 153 | u32 gate; |
81dee67e | 154 | |
78376535 JL |
155 | /* Enable I2C Gate */ |
156 | gate = PEEK32(CURRENT_GATE); | |
157 | if (enable) | |
90946e52 | 158 | gate |= CURRENT_GATE_I2C; |
78376535 | 159 | else |
90946e52 | 160 | gate &= ~CURRENT_GATE_I2C; |
81dee67e | 161 | |
78376535 | 162 | setCurrentGate(gate); |
81dee67e SM |
163 | } |
164 | ||
165 |