| #include "ddk750_help.h" |
| #include "ddk750_reg.h" |
| #include "ddk750_power.h" |
| |
| void ddk750_setDPMS(DPMS_t state) |
| { |
| unsigned int value; |
| |
| if (getChipType() == SM750LE) { |
| value = PEEK32(CRT_DISPLAY_CTRL) & ~CRT_DISPLAY_CTRL_DPMS_MASK; |
| value |= (state << CRT_DISPLAY_CTRL_DPMS_SHIFT); |
| POKE32(CRT_DISPLAY_CTRL, value); |
| } else { |
| value = PEEK32(SYSTEM_CTRL); |
| value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state; |
| POKE32(SYSTEM_CTRL, value); |
| } |
| } |
| |
| static unsigned int getPowerMode(void) |
| { |
| if (getChipType() == SM750LE) |
| return 0; |
| return PEEK32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK; |
| } |
| |
| |
| /* |
| * SM50x can operate in one of three modes: 0, 1 or Sleep. |
| * On hardware reset, power mode 0 is default. |
| */ |
| void setPowerMode(unsigned int powerMode) |
| { |
| unsigned int control_value = 0; |
| |
| control_value = PEEK32(POWER_MODE_CTRL) & ~POWER_MODE_CTRL_MODE_MASK; |
| |
| if (getChipType() == SM750LE) |
| return; |
| |
| switch (powerMode) { |
| case POWER_MODE_CTRL_MODE_MODE0: |
| control_value |= POWER_MODE_CTRL_MODE_MODE0; |
| break; |
| |
| case POWER_MODE_CTRL_MODE_MODE1: |
| control_value |= POWER_MODE_CTRL_MODE_MODE1; |
| break; |
| |
| case POWER_MODE_CTRL_MODE_SLEEP: |
| control_value |= POWER_MODE_CTRL_MODE_SLEEP; |
| break; |
| |
| default: |
| break; |
| } |
| |
| /* Set up other fields in Power Control Register */ |
| if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) { |
| control_value &= ~POWER_MODE_CTRL_OSC_INPUT; |
| #ifdef VALIDATION_CHIP |
| control_value &= ~POWER_MODE_CTRL_336CLK; |
| #endif |
| } else { |
| control_value |= POWER_MODE_CTRL_OSC_INPUT; |
| #ifdef VALIDATION_CHIP |
| control_value |= POWER_MODE_CTRL_336CLK; |
| #endif |
| } |
| |
| /* Program new power mode. */ |
| POKE32(POWER_MODE_CTRL, control_value); |
| } |
| |
| void setCurrentGate(unsigned int gate) |
| { |
| unsigned int gate_reg; |
| unsigned int mode; |
| |
| /* Get current power mode. */ |
| mode = getPowerMode(); |
| |
| switch (mode) { |
| case POWER_MODE_CTRL_MODE_MODE0: |
| gate_reg = MODE0_GATE; |
| break; |
| |
| case POWER_MODE_CTRL_MODE_MODE1: |
| gate_reg = MODE1_GATE; |
| break; |
| |
| default: |
| gate_reg = MODE0_GATE; |
| break; |
| } |
| POKE32(gate_reg, gate); |
| } |
| |
| |
| |
| /* |
| * This function enable/disable the 2D engine. |
| */ |
| void enable2DEngine(unsigned int enable) |
| { |
| u32 gate; |
| |
| gate = PEEK32(CURRENT_GATE); |
| if (enable) |
| gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC); |
| else |
| gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC); |
| |
| setCurrentGate(gate); |
| } |
| |
| void enableDMA(unsigned int enable) |
| { |
| u32 gate; |
| |
| /* Enable DMA Gate */ |
| gate = PEEK32(CURRENT_GATE); |
| if (enable) |
| gate |= CURRENT_GATE_DMA; |
| else |
| gate &= ~CURRENT_GATE_DMA; |
| |
| setCurrentGate(gate); |
| } |
| |
| /* |
| * This function enable/disable the GPIO Engine |
| */ |
| void enableGPIO(unsigned int enable) |
| { |
| u32 gate; |
| |
| /* Enable GPIO Gate */ |
| gate = PEEK32(CURRENT_GATE); |
| if (enable) |
| gate |= CURRENT_GATE_GPIO; |
| else |
| gate &= ~CURRENT_GATE_GPIO; |
| |
| setCurrentGate(gate); |
| } |
| |
| /* |
| * This function enable/disable the I2C Engine |
| */ |
| void enableI2C(unsigned int enable) |
| { |
| u32 gate; |
| |
| /* Enable I2C Gate */ |
| gate = PEEK32(CURRENT_GATE); |
| if (enable) |
| gate |= CURRENT_GATE_I2C; |
| else |
| gate &= ~CURRENT_GATE_I2C; |
| |
| setCurrentGate(gate); |
| } |
| |
| |