#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); POKE32(CRT_DISPLAY_CTRL,FIELD_VALUE(value,CRT_DISPLAY_CTRL,DPMS,state)); }else{ value = PEEK32(SYSTEM_CTRL); value= FIELD_VALUE(value,SYSTEM_CTRL,DPMS,state); POKE32(SYSTEM_CTRL, value); } } unsigned int getPowerMode(void) { if(getChipType() == SM750LE) return 0; return (FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE)); } /* * 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); if(getChipType() == SM750LE) return; switch (powerMode) { case POWER_MODE_CTRL_MODE_MODE0: control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE0); break; case POWER_MODE_CTRL_MODE_MODE1: control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE1); break; case POWER_MODE_CTRL_MODE_SLEEP: control_value = FIELD_SET(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 = #ifdef VALIDATION_CHIP FIELD_SET( control_value, POWER_MODE_CTRL, 336CLK, OFF) | #endif FIELD_SET( control_value, POWER_MODE_CTRL, OSC_INPUT, OFF); } else { control_value = #ifdef VALIDATION_CHIP FIELD_SET( control_value, POWER_MODE_CTRL, 336CLK, ON) | #endif FIELD_SET( control_value, POWER_MODE_CTRL, OSC_INPUT, ON); } /* 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) { uint32_t gate; gate = PEEK32(CURRENT_GATE); if (enable) { gate = FIELD_SET(gate, CURRENT_GATE, DE, ON); gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON); } else { gate = FIELD_SET(gate, CURRENT_GATE, DE, OFF); gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF); } setCurrentGate(gate); } /* * This function enable/disable the ZV Port. */ void enableZVPort(unsigned int enable) { uint32_t gate; /* Enable ZV Port Gate */ gate = PEEK32(CURRENT_GATE); if (enable) { gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, ON); #if 1 /* Using Software I2C */ gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON); #else /* Using Hardware I2C */ gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON); #endif } else { /* Disable ZV Port Gate. There is no way to know whether the GPIO pins are being used or not. Therefore, do not disable the GPIO gate. */ gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, OFF); } setCurrentGate(gate); } void enableSSP(unsigned int enable) { uint32_t gate; /* Enable SSP Gate */ gate = PEEK32(CURRENT_GATE); if (enable) gate = FIELD_SET(gate, CURRENT_GATE, SSP, ON); else gate = FIELD_SET(gate, CURRENT_GATE, SSP, OFF); setCurrentGate(gate); } void enableDMA(unsigned int enable) { uint32_t gate; /* Enable DMA Gate */ gate = PEEK32(CURRENT_GATE); if (enable) gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON); else gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF); setCurrentGate(gate); } /* * This function enable/disable the GPIO Engine */ void enableGPIO(unsigned int enable) { uint32_t gate; /* Enable GPIO Gate */ gate = PEEK32(CURRENT_GATE); if (enable) gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON); else gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF); setCurrentGate(gate); } /* * This function enable/disable the PWM Engine */ void enablePWM(unsigned int enable) { uint32_t gate; /* Enable PWM Gate */ gate = PEEK32(CURRENT_GATE); if (enable) gate = FIELD_SET(gate, CURRENT_GATE, PWM, ON); else gate = FIELD_SET(gate, CURRENT_GATE, PWM, OFF); setCurrentGate(gate); } /* * This function enable/disable the I2C Engine */ void enableI2C(unsigned int enable) { uint32_t gate; /* Enable I2C Gate */ gate = PEEK32(CURRENT_GATE); if (enable) gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON); else gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF); setCurrentGate(gate); }