1 #include "ddk750_chip.h"
2 #include "ddk750_reg.h"
3 #include "ddk750_power.h"
5 void ddk750_set_dpms(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 get_power_mode(void)
22 if (sm750_get_chip_type() == SM750LE)
24 return peek32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK;
28 * SM50x can operate in one of three modes: 0, 1 or Sleep.
29 * On hardware reset, power mode 0 is default.
31 void sm750_set_power_mode(unsigned int mode)
33 unsigned int ctrl = 0;
35 ctrl = peek32(POWER_MODE_CTRL) & ~POWER_MODE_CTRL_MODE_MASK;
37 if (sm750_get_chip_type() == SM750LE)
41 case POWER_MODE_CTRL_MODE_MODE0:
42 ctrl |= POWER_MODE_CTRL_MODE_MODE0;
45 case POWER_MODE_CTRL_MODE_MODE1:
46 ctrl |= POWER_MODE_CTRL_MODE_MODE1;
49 case POWER_MODE_CTRL_MODE_SLEEP:
50 ctrl |= POWER_MODE_CTRL_MODE_SLEEP;
57 /* Set up other fields in Power Control Register */
58 if (mode == POWER_MODE_CTRL_MODE_SLEEP) {
59 ctrl &= ~POWER_MODE_CTRL_OSC_INPUT;
60 #ifdef VALIDATION_CHIP
61 ctrl &= ~POWER_MODE_CTRL_336CLK;
64 ctrl |= POWER_MODE_CTRL_OSC_INPUT;
65 #ifdef VALIDATION_CHIP
66 ctrl |= POWER_MODE_CTRL_336CLK;
70 /* Program new power mode. */
71 poke32(POWER_MODE_CTRL, ctrl);
74 void sm750_set_current_gate(unsigned int gate)
76 if (get_power_mode() == POWER_MODE_CTRL_MODE_MODE1)
77 poke32(MODE1_GATE, gate);
79 poke32(MODE0_GATE, gate);
83 * This function enable/disable the 2D engine.
85 void sm750_enable_2d_engine(unsigned int enable)
89 gate = peek32(CURRENT_GATE);
91 gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC);
93 gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC);
95 sm750_set_current_gate(gate);
98 void sm750_enable_dma(unsigned int enable)
102 /* Enable DMA Gate */
103 gate = peek32(CURRENT_GATE);
105 gate |= CURRENT_GATE_DMA;
107 gate &= ~CURRENT_GATE_DMA;
109 sm750_set_current_gate(gate);
113 * This function enable/disable the GPIO Engine
115 void sm750_enable_gpio(unsigned int enable)
119 /* Enable GPIO Gate */
120 gate = peek32(CURRENT_GATE);
122 gate |= CURRENT_GATE_GPIO;
124 gate &= ~CURRENT_GATE_GPIO;
126 sm750_set_current_gate(gate);
130 * This function enable/disable the I2C Engine
132 void sm750_enable_i2c(unsigned int enable)
136 /* Enable I2C Gate */
137 gate = peek32(CURRENT_GATE);
139 gate |= CURRENT_GATE_I2C;
141 gate &= ~CURRENT_GATE_I2C;
143 sm750_set_current_gate(gate);