Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 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; | ||||
Juston Li | 40403c1 | 2015-07-14 21:14:48 -0700 | [diff] [blame] | 8 | |
Juston Li | 8c11f5a | 2015-07-14 21:14:35 -0700 | [diff] [blame] | 9 | if (getChipType() == SM750LE) { |
Mike Rapoport | cdce1f1 | 2016-02-10 18:34:19 +0200 | [diff] [blame] | 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); | ||||
Juston Li | 6338a781 | 2015-07-14 21:14:36 -0700 | [diff] [blame] | 13 | } else { |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 14 | value = PEEK32(SYSTEM_CTRL); |
Mike Rapoport | a8856ff | 2016-01-17 20:04:19 +0200 | [diff] [blame] | 15 | value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 16 | POKE32(SYSTEM_CTRL, value); |
17 | } | ||||
18 | } | ||||
19 | |||||
Mike Rapoport | 228a4cf8 | 2015-09-30 08:24:58 +0300 | [diff] [blame] | 20 | static unsigned int getPowerMode(void) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 21 | { |
Juston Li | 9ccc5f4 | 2015-07-14 21:14:33 -0700 | [diff] [blame] | 22 | if (getChipType() == SM750LE) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 23 | return 0; |
Mike Rapoport | f41b17f | 2016-01-17 20:04:31 +0200 | [diff] [blame] | 24 | return PEEK32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 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 | { | ||||
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 34 | unsigned int control_value = 0; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 35 | |
Mike Rapoport | f41b17f | 2016-01-17 20:04:31 +0200 | [diff] [blame] | 36 | control_value = PEEK32(POWER_MODE_CTRL) & ~POWER_MODE_CTRL_MODE_MASK; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 37 | |
Juston Li | 9ccc5f4 | 2015-07-14 21:14:33 -0700 | [diff] [blame] | 38 | if (getChipType() == SM750LE) |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 39 | return; |
40 | |||||
Juston Li | 259fef3 | 2015-07-14 21:14:45 -0700 | [diff] [blame] | 41 | switch (powerMode) { |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 42 | case POWER_MODE_CTRL_MODE_MODE0: |
Mike Rapoport | f41b17f | 2016-01-17 20:04:31 +0200 | [diff] [blame] | 43 | control_value |= POWER_MODE_CTRL_MODE_MODE0; |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 44 | break; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 45 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 46 | case POWER_MODE_CTRL_MODE_MODE1: |
Mike Rapoport | f41b17f | 2016-01-17 20:04:31 +0200 | [diff] [blame] | 47 | control_value |= POWER_MODE_CTRL_MODE_MODE1; |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 48 | break; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 49 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 50 | case POWER_MODE_CTRL_MODE_SLEEP: |
Mike Rapoport | f41b17f | 2016-01-17 20:04:31 +0200 | [diff] [blame] | 51 | control_value |= POWER_MODE_CTRL_MODE_SLEEP; |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 52 | break; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 53 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 54 | default: |
55 | break; | ||||
56 | } | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 57 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 58 | /* Set up other fields in Power Control Register */ |
Juston Li | 259fef3 | 2015-07-14 21:14:45 -0700 | [diff] [blame] | 59 | if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) { |
Mike Rapoport | 776980c | 2016-01-17 20:04:30 +0200 | [diff] [blame] | 60 | control_value &= ~POWER_MODE_CTRL_OSC_INPUT; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 61 | #ifdef VALIDATION_CHIP |
Mike Rapoport | 776980c | 2016-01-17 20:04:30 +0200 | [diff] [blame] | 62 | control_value &= ~POWER_MODE_CTRL_336CLK; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 63 | #endif |
Juston Li | 259fef3 | 2015-07-14 21:14:45 -0700 | [diff] [blame] | 64 | } else { |
Mike Rapoport | 776980c | 2016-01-17 20:04:30 +0200 | [diff] [blame] | 65 | control_value |= POWER_MODE_CTRL_OSC_INPUT; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 66 | #ifdef VALIDATION_CHIP |
Mike Rapoport | 776980c | 2016-01-17 20:04:30 +0200 | [diff] [blame] | 67 | control_value |= POWER_MODE_CTRL_336CLK; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 68 | #endif |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 69 | } |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 70 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 71 | /* Program new power mode. */ |
72 | POKE32(POWER_MODE_CTRL, control_value); | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 73 | } |
74 | |||||
75 | void setCurrentGate(unsigned int gate) | ||||
76 | { | ||||
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 77 | unsigned int gate_reg; |
78 | unsigned int mode; | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 79 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 80 | /* Get current power mode. */ |
81 | mode = getPowerMode(); | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 82 | |
Juston Li | 259fef3 | 2015-07-14 21:14:45 -0700 | [diff] [blame] | 83 | switch (mode) { |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 84 | case POWER_MODE_CTRL_MODE_MODE0: |
85 | gate_reg = MODE0_GATE; | ||||
86 | break; | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 87 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 88 | case POWER_MODE_CTRL_MODE_MODE1: |
89 | gate_reg = MODE1_GATE; | ||||
90 | break; | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 91 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 92 | default: |
93 | gate_reg = MODE0_GATE; | ||||
94 | break; | ||||
95 | } | ||||
96 | POKE32(gate_reg, gate); | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 97 | } |
98 | |||||
99 | |||||
100 | |||||
101 | /* | ||||
102 | * This function enable/disable the 2D engine. | ||||
103 | */ | ||||
104 | void enable2DEngine(unsigned int enable) | ||||
105 | { | ||||
Amitoj Kaur Chawla | f741554 | 2015-10-18 21:27:57 +0530 | [diff] [blame] | 106 | u32 gate; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 107 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 108 | gate = PEEK32(CURRENT_GATE); |
Sandhya Bankar | 69988ba | 2016-03-06 15:07:44 +0530 | [diff] [blame] | 109 | if (enable) |
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 110 | gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC); |
Sandhya Bankar | 69988ba | 2016-03-06 15:07:44 +0530 | [diff] [blame] | 111 | else |
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 112 | gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC); |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 113 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 114 | setCurrentGate(gate); |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 115 | } |
116 | |||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 117 | void enableDMA(unsigned int enable) |
118 | { | ||||
Amitoj Kaur Chawla | f741554 | 2015-10-18 21:27:57 +0530 | [diff] [blame] | 119 | u32 gate; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 120 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 121 | /* Enable DMA Gate */ |
122 | gate = PEEK32(CURRENT_GATE); | ||||
123 | if (enable) | ||||
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 124 | gate |= CURRENT_GATE_DMA; |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 125 | else |
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 126 | gate &= ~CURRENT_GATE_DMA; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 127 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 128 | setCurrentGate(gate); |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 129 | } |
130 | |||||
131 | /* | ||||
132 | * This function enable/disable the GPIO Engine | ||||
133 | */ | ||||
134 | void enableGPIO(unsigned int enable) | ||||
135 | { | ||||
Amitoj Kaur Chawla | f741554 | 2015-10-18 21:27:57 +0530 | [diff] [blame] | 136 | u32 gate; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 137 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 138 | /* Enable GPIO Gate */ |
139 | gate = PEEK32(CURRENT_GATE); | ||||
140 | if (enable) | ||||
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 141 | gate |= CURRENT_GATE_GPIO; |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 142 | else |
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 143 | gate &= ~CURRENT_GATE_GPIO; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 144 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 145 | setCurrentGate(gate); |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 146 | } |
147 | |||||
148 | /* | ||||
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 149 | * This function enable/disable the I2C Engine |
150 | */ | ||||
151 | void enableI2C(unsigned int enable) | ||||
152 | { | ||||
Amitoj Kaur Chawla | f741554 | 2015-10-18 21:27:57 +0530 | [diff] [blame] | 153 | u32 gate; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 154 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 155 | /* Enable I2C Gate */ |
156 | gate = PEEK32(CURRENT_GATE); | ||||
157 | if (enable) | ||||
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 158 | gate |= CURRENT_GATE_I2C; |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 159 | else |
Mike Rapoport | 90946e5 | 2016-01-17 20:04:25 +0200 | [diff] [blame] | 160 | gate &= ~CURRENT_GATE_I2C; |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 161 | |
Juston Li | 7837653 | 2015-07-14 21:14:30 -0700 | [diff] [blame] | 162 | setCurrentGate(gate); |
Sudip Mukherjee | 81dee67 | 2015-03-03 16:21:06 +0530 | [diff] [blame] | 163 | } |
164 | |||||
165 |