Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[deliverable/linux.git] / drivers / staging / sm750fb / ddk750_power.c
CommitLineData
81dee67e
SM
1#include "ddk750_help.h"
2#include "ddk750_reg.h"
3#include "ddk750_power.h"
4
5void 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 20static 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 */
32void 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
75void 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 */
104void enable2DEngine(unsigned int enable)
105{
f741554e 106 u32 gate;
78376535
JL
107
108 gate = PEEK32(CURRENT_GATE);
69988ba2 109 if (enable)
90946e52 110 gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC);
69988ba2 111 else
90946e52 112 gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC);
78376535
JL
113
114 setCurrentGate(gate);
81dee67e
SM
115}
116
81dee67e
SM
117void 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 */
134void 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 */
151void 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
This page took 0.302399 seconds and 5 git commands to generate.