123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #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);
- }
- }
- static 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)
- {
- u32 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);
- }
- void enableDMA(unsigned int enable)
- {
- u32 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)
- {
- u32 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 I2C Engine
- */
- void enableI2C(unsigned int enable)
- {
- u32 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);
- }
|