rkpm sleep support
[firefly-linux-kernel-4.4.55.git] / include / dt-bindings / suspend / rockchip-pm.h
1 /*
2  * Header providing constants for Rockchip pinctrl bindings.
3  *
4  * Copyright (c) 2013 MundoReader S.L.
5  * Author: Heiko Stuebner <heiko@sntech.de>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  */
17
18 #ifndef __DT_BINDINGS_ROCKCHIP_PM_H__
19 #define __DT_BINDINGS_ROCKCHIP_PM_H__
20 /******************************bits ops************************************/
21
22 #ifndef BIT
23 #define BIT(nr)                 (1 << (nr))
24 #endif
25
26 #define RKPM_BITS_W_MSK(bits_shift, msk)        ((msk) << ((bits_shift) + 16))
27
28 #define RKPM_BITS_CLR_VAL(val, bits_shift, msk) (val&~(msk<<bits_shift))
29
30 #define RKPM_SETBITS(bits, bits_shift, msk)     (((bits)&(msk)) << (bits_shift))
31
32 #define RKPM_W_MSK_SETBITS(bits, bits_shift, msk) \
33     (RKPM_BITS_W_MSK(bits_shift, msk) | RKPM_SETBITS(bits, bits_shift, msk))
34
35 #define RKPM_VAL_SETBITS(val,bits, bits_shift, msk) \
36     (RKPM_BITS_CLR_VAL(val,bits_shift, msk) | RKPM_SETBITS(bits, bits_shift, msk))
37
38 #define RKPM_GETBITS(val, bits_shift, msk)      (((val)>> (bits_shift))&(msk))
39
40 /*********************CTRBIT DEFINE*****************************/
41 #define RKPM_CTR_PWR_DMNS BIT(0)
42 #define RKPM_CTR_GTCLKS BIT(1)
43 #define RKPM_CTR_PLLS BIT(2)
44 #define RKPM_CTR_VOLTS BIT(3)
45 #define RKPM_CTR_GPIOS BIT(4)
46 #define RKPM_CTR_DDR BIT(5)
47 #define RKPM_CTR_PMIC BIT(6)
48
49 /*************************************************************
50 *sys_clk 24M div , it is mutex for 
51 **RKPM_CTR_SYSCLK_DIV and RKPM_CTR_SYSCLK_32K and RKPM_CTR_SYSCLK_OSC_DIS.
52 **you can select only one
53 ************************************************************/
54 #define RKPM_CTR_SYSCLK_DIV BIT(7)// system clk is 24M,and div to min
55 #define RKPM_CTR_SYSCLK_32K BIT(8)// switch sysclk to 32k,need hardwart susport. and div to min
56 #define RKPM_CTR_SYSCLK_OSC_DIS BIT(9) // switch sysclk to 32k,disable 24M OSC,need hardwart susport. and div to min
57
58 //Low Power Function Selection
59 #define RKPM_CTR_IDLESRAM_MD BIT(16) // ddr reslf by soft // nor low power
60 #define RKPM_CTR_IDLEAUTO_MD BIT(17) // ddr reslf by soc // nor low power
61 #define RKPM_CTR_ARMDP_LPMD BIT(18) // arm enter deep sleep,not off power supply  
62 #define RKPM_CTR_ARMOFF_LPMD BIT(19) // arm enter deep sleep,off power supply
63 #define RKPM_CTR_ARMLOGDP_LPMD BIT(20)// arm and logic enter deep sleep,both is not off power supply  
64 #define RKPM_CTR_ARMOFF_LOGDP_LPMD BIT(21)// arm off ,logic enter deep sleep,but it is not off power supply  
65 #define RKPM_CTR_ARMLOGOFF_DLPMD BIT(22) //// arm and logic enter deep sleep,both is off power supply  
66     
67         //debug ctrl Selection
68 #define RKPM_CTR_RET_DIRT BIT(24)
69 #define RKPM_CTR_SRAM_NO_WFI BIT(26)
70 #define RKPM_CTR_WAKE_UP_KEY BIT(27)
71 #define RKPM_CTR_ALL BIT(31)
72
73 /*********************CTRBIT DEFINE END*****************************/
74
75
76 //RKPM_IDX_TO_BITS
77 #define RKPM_OR_2BITS(bit1,bit2) ((RKPM_CTR_##bit1)|(RKPM_CTR_##bit2))
78 #define RKPM_OR_3BITS(bit1,bit2,bit3) ((RKPM_CTR_##bit1)|RKPM_OR_2BITS(bit2,bit3))
79 #define RKPM_OR_4BITS(bit1,bit2,bit3,bit4) ((RKPM_CTR_##bit1)|RKPM_OR_3BITS(bit2,bit3,bit4))
80 #define RKPM_OR_5BITS(bit1,bit2,bit3,bit4,bit5) ((RKPM_CTR_##bit1)|RKPM_OR_4BITS(bit2,bit3,bit4,bit5))
81
82 /*********************CTRBIT DEFINE END*****************************/
83
84 //pin=0x0a21  gpio0a2,port=0,bank=a,b_gpio=2,fun=1
85 #define RKPM_PINBITS_BGPIO(pins) RKPM_GETBITS(pins,4,0xf)
86 #define RKPM_PINBITS_BANK(pins) RKPM_GETBITS(pins,8,0xf) // a,b,c,d
87 #define RKPM_PINBITS_PORT(pins) RKPM_GETBITS(pins,0xc,0xf)
88 #define RKPM_PINBITS_FUN(pins) RKPM_GETBITS(pins,0,0xf)
89
90 //#define RKPM_PINBITS(port,bank,bgpio,fun) 0
91
92 #if 1
93 #define RKPM_PINBITS(port,bank,bgpio,fun) (0\
94                                                                             |RKPM_SETBITS(fun,0,0xf)\
95                                                                             |RKPM_SETBITS(bgpio,0x4,0xf)\
96                                                                             |RKPM_SETBITS(bank,0x8,0xf)\
97                                                                             |RKPM_SETBITS(port,0xc,0xf)\
98                                                                             )
99 #endif
100 #define RKPM_PINBITS_SET_FUN(pins,fun) RKPM_VAL_SETBITS(pins,fun,0,0xf)
101
102 #define RKPM_PINGPIO_PIN (0)
103 #define RKPM_PINGPIO_PIN_MSK (0xffff)
104
105 #define RKPM_PINGPIO_PULL (24)
106 #define RKPM_PINGPIO_PULL_MSK (0x3)
107
108 #define RKPM_PINGPIO_INOUT (26)
109 #define RKPM_PINGPIO_INOUT_MSK (0x3)
110
111 #define RKPM_PINGPIO_LEVEL (28)
112 #define RKPM_PINGPIO_LEVEL_MSK (0x3)
113
114 #define RKPM_GPIO_INPUT (0)
115 #define RKPM_GPIO_OUTPUT (1)
116
117 #define RKPM_GPIO_OUT_L (0)
118 #define RKPM_GPIO_OUT_H (1)
119
120 #define RKPM_GPIO_PULL_Z (0)
121 #define RKPM_GPIO_PULL_UP (0x1)
122 #define RKPM_GPIO_PULL_DN (0x2)
123 #define RKPM_GPIO_PULL_RPTR (0x3)
124
125 #define RKPM_PINGPIO_BITS(pin,pull,inout,_level) (0\
126                                                                          |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
127                                                                          |RKPM_SETBITS(inout,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)\
128                                                                          |RKPM_SETBITS(pull,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)\
129                                                                          |RKPM_SETBITS(_level,RKPM_PINGPIO_LEVEL,RKPM_PINGPIO_LEVEL_MSK)\
130                                                                         )
131                                                              
132 #define RKPM_PINGPIO_BITS_OUTPUT(pin,_level) (0\
133                                                                          |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
134                                                                          |RKPM_SETBITS(RKPM_GPIO_OUTPUT,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)\
135                                                                          |RKPM_SETBITS(_level,RKPM_PINGPIO_LEVEL,RKPM_PINGPIO_LEVEL_MSK)\
136                                                                         )
137                                                                         
138 #define RKPM_PINGPIO_BITS_INTPUT(pin,pull) (0\
139                                                                              |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
140                                                                              |RKPM_SETBITS(RKPM_GPIO_INPUT,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)\
141                                                                              |RKPM_SETBITS(pull,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)\
142                                                                             )
143  #define RKPM_PINGPIO_BITS_FUN(pin,pull) (0\
144                                                                              |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
145                                                                              |RKPM_SETBITS(pull,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)\
146                                                                             )    
147
148 #define RKPM_PINGPIO_BITS_PIN(bits)  RKPM_GETBITS(bits,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)
149 #define RKPM_PINGPIO_BITS_LEVEL(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)  
150 #define RKPM_PINGPIO_BITS_PULL(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)   
151 #define RKPM_PINGPIO_BITS_INOUT(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_LEVEL,RKPM_PINGPIO_LEVEL_MSK)   
152
153
154 #endif