root/drivers/staging/sm750fb/ddk750_power.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ddk750_set_dpms
  2. get_power_mode
  3. sm750_set_power_mode
  4. sm750_set_current_gate
  5. sm750_enable_2d_engine
  6. sm750_enable_dma
  7. sm750_enable_gpio
  8. sm750_enable_i2c

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include "ddk750_chip.h"
   3 #include "ddk750_reg.h"
   4 #include "ddk750_power.h"
   5 
   6 void ddk750_set_dpms(enum dpms state)
   7 {
   8         unsigned int value;
   9 
  10         if (sm750_get_chip_type() == SM750LE) {
  11                 value = peek32(CRT_DISPLAY_CTRL) & ~CRT_DISPLAY_CTRL_DPMS_MASK;
  12                 value |= (state << CRT_DISPLAY_CTRL_DPMS_SHIFT);
  13                 poke32(CRT_DISPLAY_CTRL, value);
  14         } else {
  15                 value = peek32(SYSTEM_CTRL);
  16                 value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state;
  17                 poke32(SYSTEM_CTRL, value);
  18         }
  19 }
  20 
  21 static unsigned int get_power_mode(void)
  22 {
  23         if (sm750_get_chip_type() == SM750LE)
  24                 return 0;
  25         return peek32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK;
  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 sm750_set_power_mode(unsigned int mode)
  33 {
  34         unsigned int ctrl = 0;
  35 
  36         ctrl = peek32(POWER_MODE_CTRL) & ~POWER_MODE_CTRL_MODE_MASK;
  37 
  38         if (sm750_get_chip_type() == SM750LE)
  39                 return;
  40 
  41         switch (mode) {
  42         case POWER_MODE_CTRL_MODE_MODE0:
  43                 ctrl |= POWER_MODE_CTRL_MODE_MODE0;
  44                 break;
  45 
  46         case POWER_MODE_CTRL_MODE_MODE1:
  47                 ctrl |= POWER_MODE_CTRL_MODE_MODE1;
  48                 break;
  49 
  50         case POWER_MODE_CTRL_MODE_SLEEP:
  51                 ctrl |= POWER_MODE_CTRL_MODE_SLEEP;
  52                 break;
  53 
  54         default:
  55                 break;
  56         }
  57 
  58         /* Set up other fields in Power Control Register */
  59         if (mode == POWER_MODE_CTRL_MODE_SLEEP) {
  60                 ctrl &= ~POWER_MODE_CTRL_OSC_INPUT;
  61 #ifdef VALIDATION_CHIP
  62                 ctrl &= ~POWER_MODE_CTRL_336CLK;
  63 #endif
  64         } else {
  65                 ctrl |= POWER_MODE_CTRL_OSC_INPUT;
  66 #ifdef VALIDATION_CHIP
  67                 ctrl |= POWER_MODE_CTRL_336CLK;
  68 #endif
  69         }
  70 
  71         /* Program new power mode. */
  72         poke32(POWER_MODE_CTRL, ctrl);
  73 }
  74 
  75 void sm750_set_current_gate(unsigned int gate)
  76 {
  77         if (get_power_mode() == POWER_MODE_CTRL_MODE_MODE1)
  78                 poke32(MODE1_GATE, gate);
  79         else
  80                 poke32(MODE0_GATE, gate);
  81 }
  82 
  83 /*
  84  * This function enable/disable the 2D engine.
  85  */
  86 void sm750_enable_2d_engine(unsigned int enable)
  87 {
  88         u32 gate;
  89 
  90         gate = peek32(CURRENT_GATE);
  91         if (enable)
  92                 gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC);
  93         else
  94                 gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC);
  95 
  96         sm750_set_current_gate(gate);
  97 }
  98 
  99 void sm750_enable_dma(unsigned int enable)
 100 {
 101         u32 gate;
 102 
 103         /* Enable DMA Gate */
 104         gate = peek32(CURRENT_GATE);
 105         if (enable)
 106                 gate |= CURRENT_GATE_DMA;
 107         else
 108                 gate &= ~CURRENT_GATE_DMA;
 109 
 110         sm750_set_current_gate(gate);
 111 }
 112 
 113 /*
 114  * This function enable/disable the GPIO Engine
 115  */
 116 void sm750_enable_gpio(unsigned int enable)
 117 {
 118         u32 gate;
 119 
 120         /* Enable GPIO Gate */
 121         gate = peek32(CURRENT_GATE);
 122         if (enable)
 123                 gate |= CURRENT_GATE_GPIO;
 124         else
 125                 gate &= ~CURRENT_GATE_GPIO;
 126 
 127         sm750_set_current_gate(gate);
 128 }
 129 
 130 /*
 131  * This function enable/disable the I2C Engine
 132  */
 133 void sm750_enable_i2c(unsigned int enable)
 134 {
 135         u32 gate;
 136 
 137         /* Enable I2C Gate */
 138         gate = peek32(CURRENT_GATE);
 139         if (enable)
 140                 gate |= CURRENT_GATE_I2C;
 141         else
 142                 gate &= ~CURRENT_GATE_I2C;
 143 
 144         sm750_set_current_gate(gate);
 145 }

/* [<][>][^][v][top][bottom][index][help] */