ddk750_power.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #include "ddk750_help.h"
  2. #include "ddk750_reg.h"
  3. #include "ddk750_power.h"
  4. void ddk750_setDPMS(DPMS_t state)
  5. {
  6. unsigned int value;
  7. if (getChipType() == SM750LE) {
  8. value = PEEK32(CRT_DISPLAY_CTRL);
  9. POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(value, CRT_DISPLAY_CTRL,
  10. DPMS, state));
  11. } else {
  12. value = PEEK32(SYSTEM_CTRL);
  13. value = FIELD_VALUE(value, SYSTEM_CTRL, DPMS, state);
  14. POKE32(SYSTEM_CTRL, value);
  15. }
  16. }
  17. static unsigned int getPowerMode(void)
  18. {
  19. if (getChipType() == SM750LE)
  20. return 0;
  21. return FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE);
  22. }
  23. /*
  24. * SM50x can operate in one of three modes: 0, 1 or Sleep.
  25. * On hardware reset, power mode 0 is default.
  26. */
  27. void setPowerMode(unsigned int powerMode)
  28. {
  29. unsigned int control_value = 0;
  30. control_value = PEEK32(POWER_MODE_CTRL);
  31. if (getChipType() == SM750LE)
  32. return;
  33. switch (powerMode) {
  34. case POWER_MODE_CTRL_MODE_MODE0:
  35. control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
  36. MODE0);
  37. break;
  38. case POWER_MODE_CTRL_MODE_MODE1:
  39. control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
  40. MODE1);
  41. break;
  42. case POWER_MODE_CTRL_MODE_SLEEP:
  43. control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
  44. SLEEP);
  45. break;
  46. default:
  47. break;
  48. }
  49. /* Set up other fields in Power Control Register */
  50. if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) {
  51. control_value =
  52. #ifdef VALIDATION_CHIP
  53. FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, OFF) |
  54. #endif
  55. FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT, OFF);
  56. } else {
  57. control_value =
  58. #ifdef VALIDATION_CHIP
  59. FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, ON) |
  60. #endif
  61. FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT, ON);
  62. }
  63. /* Program new power mode. */
  64. POKE32(POWER_MODE_CTRL, control_value);
  65. }
  66. void setCurrentGate(unsigned int gate)
  67. {
  68. unsigned int gate_reg;
  69. unsigned int mode;
  70. /* Get current power mode. */
  71. mode = getPowerMode();
  72. switch (mode) {
  73. case POWER_MODE_CTRL_MODE_MODE0:
  74. gate_reg = MODE0_GATE;
  75. break;
  76. case POWER_MODE_CTRL_MODE_MODE1:
  77. gate_reg = MODE1_GATE;
  78. break;
  79. default:
  80. gate_reg = MODE0_GATE;
  81. break;
  82. }
  83. POKE32(gate_reg, gate);
  84. }
  85. /*
  86. * This function enable/disable the 2D engine.
  87. */
  88. void enable2DEngine(unsigned int enable)
  89. {
  90. u32 gate;
  91. gate = PEEK32(CURRENT_GATE);
  92. if (enable) {
  93. gate = FIELD_SET(gate, CURRENT_GATE, DE, ON);
  94. gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
  95. } else {
  96. gate = FIELD_SET(gate, CURRENT_GATE, DE, OFF);
  97. gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
  98. }
  99. setCurrentGate(gate);
  100. }
  101. void enableDMA(unsigned int enable)
  102. {
  103. u32 gate;
  104. /* Enable DMA Gate */
  105. gate = PEEK32(CURRENT_GATE);
  106. if (enable)
  107. gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
  108. else
  109. gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
  110. setCurrentGate(gate);
  111. }
  112. /*
  113. * This function enable/disable the GPIO Engine
  114. */
  115. void enableGPIO(unsigned int enable)
  116. {
  117. u32 gate;
  118. /* Enable GPIO Gate */
  119. gate = PEEK32(CURRENT_GATE);
  120. if (enable)
  121. gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
  122. else
  123. gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
  124. setCurrentGate(gate);
  125. }
  126. /*
  127. * This function enable/disable the I2C Engine
  128. */
  129. void enableI2C(unsigned int enable)
  130. {
  131. u32 gate;
  132. /* Enable I2C Gate */
  133. gate = PEEK32(CURRENT_GATE);
  134. if (enable)
  135. gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
  136. else
  137. gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
  138. setCurrentGate(gate);
  139. }