1 // SPDX-License-Identifier: GPL-2.0
2 #include "ddk750_chip.h"
3 #include "ddk750_reg.h"
4 #include "ddk750_power.h"
6 void ddk750_set_dpms(DPMS_t state
)
10 if (sm750_get_chip_type() == SM750LE
) {
11 value
= peek32(CRT_DISPLAY_CTRL
) & ~CRT_DISPLAY_CTRL_DPMS_MASK
;
12 value
|= (state
<< CRT_DISPLAY_CTRL_DPMS_SHIFT
);
13 poke32(CRT_DISPLAY_CTRL
, value
);
15 value
= peek32(SYSTEM_CTRL
);
16 value
= (value
& ~SYSTEM_CTRL_DPMS_MASK
) | state
;
17 poke32(SYSTEM_CTRL
, value
);
21 static unsigned int get_power_mode(void)
23 if (sm750_get_chip_type() == SM750LE
)
25 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 sm750_set_power_mode(unsigned int mode
)
34 unsigned int ctrl
= 0;
36 ctrl
= peek32(POWER_MODE_CTRL
) & ~POWER_MODE_CTRL_MODE_MASK
;
38 if (sm750_get_chip_type() == SM750LE
)
42 case POWER_MODE_CTRL_MODE_MODE0
:
43 ctrl
|= POWER_MODE_CTRL_MODE_MODE0
;
46 case POWER_MODE_CTRL_MODE_MODE1
:
47 ctrl
|= POWER_MODE_CTRL_MODE_MODE1
;
50 case POWER_MODE_CTRL_MODE_SLEEP
:
51 ctrl
|= POWER_MODE_CTRL_MODE_SLEEP
;
58 /* Set up other fields in Power Control Register */
59 if (mode
== POWER_MODE_CTRL_MODE_SLEEP
) {
60 ctrl
&= ~POWER_MODE_CTRL_OSC_INPUT
;
61 #ifdef VALIDATION_CHIP
62 ctrl
&= ~POWER_MODE_CTRL_336CLK
;
65 ctrl
|= POWER_MODE_CTRL_OSC_INPUT
;
66 #ifdef VALIDATION_CHIP
67 ctrl
|= POWER_MODE_CTRL_336CLK
;
71 /* Program new power mode. */
72 poke32(POWER_MODE_CTRL
, ctrl
);
75 void sm750_set_current_gate(unsigned int gate
)
77 if (get_power_mode() == POWER_MODE_CTRL_MODE_MODE1
)
78 poke32(MODE1_GATE
, gate
);
80 poke32(MODE0_GATE
, gate
);
84 * This function enable/disable the 2D engine.
86 void sm750_enable_2d_engine(unsigned int enable
)
90 gate
= peek32(CURRENT_GATE
);
92 gate
|= (CURRENT_GATE_DE
| CURRENT_GATE_CSC
);
94 gate
&= ~(CURRENT_GATE_DE
| CURRENT_GATE_CSC
);
96 sm750_set_current_gate(gate
);
99 void sm750_enable_dma(unsigned int enable
)
103 /* Enable DMA Gate */
104 gate
= peek32(CURRENT_GATE
);
106 gate
|= CURRENT_GATE_DMA
;
108 gate
&= ~CURRENT_GATE_DMA
;
110 sm750_set_current_gate(gate
);
114 * This function enable/disable the GPIO Engine
116 void sm750_enable_gpio(unsigned int enable
)
120 /* Enable GPIO Gate */
121 gate
= peek32(CURRENT_GATE
);
123 gate
|= CURRENT_GATE_GPIO
;
125 gate
&= ~CURRENT_GATE_GPIO
;
127 sm750_set_current_gate(gate
);
131 * This function enable/disable the I2C Engine
133 void sm750_enable_i2c(unsigned int enable
)
137 /* Enable I2C Gate */
138 gate
= peek32(CURRENT_GATE
);
140 gate
|= CURRENT_GATE_I2C
;
142 gate
&= ~CURRENT_GATE_I2C
;
144 sm750_set_current_gate(gate
);