2 * Header providing constants for Rockchip pinctrl bindings.
4 * Copyright (c) 2013 MundoReader S.L.
5 * Author: Heiko Stuebner <heiko@sntech.de>
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.
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.
18 #ifndef __DT_BINDINGS_ROCKCHIP_PM_H__
19 #define __DT_BINDINGS_ROCKCHIP_PM_H__
20 /******************************bits ops************************************/
23 #define BIT(nr) (1 << (nr))
26 #define RKPM_BITS_W_MSK(bits_shift, msk) ((msk) << ((bits_shift) + 16))
28 #define RKPM_BITS_CLR_VAL(val, bits_shift, msk) (val&~(msk<<bits_shift))
30 #define RKPM_SETBITS(bits, bits_shift, msk) (((bits)&(msk)) << (bits_shift))
32 #define RKPM_W_MSK_SETBITS(bits, bits_shift, msk) \
33 (RKPM_BITS_W_MSK(bits_shift, msk) | RKPM_SETBITS(bits, bits_shift, msk))
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))
38 #define RKPM_GETBITS(val, bits_shift, msk) (((val)>> (bits_shift))&(msk))
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 #define RKPM_CTR_VOL_PWM0 BIT(10)
49 #define RKPM_CTR_VOL_PWM1 BIT(11)
50 #define RKPM_CTR_VOL_PWM2 BIT(12)
51 #define RKPM_CTR_VOL_PWM3 BIT(13)
52 #define RKPM_CTR_BUS_IDLE BIT(14)
53 /*************************************************************
54 *sys_clk 24M div , it is mutex for
55 **RKPM_CTR_SYSCLK_DIV and RKPM_CTR_SYSCLK_32K and RKPM_CTR_SYSCLK_OSC_DIS.
56 **you can select only one
57 ************************************************************/
58 #define RKPM_CTR_SYSCLK_DIV BIT(7)// system clk is 24M,and div to min
59 #define RKPM_CTR_SYSCLK_32K BIT(8)// switch sysclk to 32k,need hardwart susport. and div to min
60 #define RKPM_CTR_SYSCLK_OSC_DIS BIT(9) // switch sysclk to 32k,disable 24M OSC,need hardwart susport. and div to min
62 //Low Power Function Selection
63 #define RKPM_CTR_IDLESRAM_MD BIT(16) // ddr reslf by soft // nor low power
64 #define RKPM_CTR_IDLEAUTO_MD BIT(17) // ddr reslf by soc // nor low power
65 #define RKPM_CTR_ARMDP_LPMD BIT(18) // arm enter deep sleep,not off power supply
66 #define RKPM_CTR_ARMOFF_LPMD BIT(19) // arm enter deep sleep,off power supply
67 #define RKPM_CTR_ARMLOGDP_LPMD BIT(20)// arm and logic enter deep sleep,both is not off power supply
68 #define RKPM_CTR_ARMOFF_LOGDP_LPMD BIT(21)// arm off ,logic enter deep sleep,but it is not off power supply
69 #define RKPM_CTR_ARMLOGOFF_DLPMD BIT(22) //// arm and logic enter deep sleep,both is off power supply
71 //debug ctrl Selection
72 #define RKPM_CTR_RET_DIRT BIT(24)
73 #define RKPM_CTR_SRAM_NO_WFI BIT(26)
74 #define RKPM_CTR_WAKE_UP_KEY BIT(27)
75 #define RKPM_CTR_ALL BIT(31)
77 /*********************CTRBIT DEFINE END*****************************/
81 #define RKPM_OR_2BITS(bit1,bit2) ((RKPM_CTR_##bit1)|(RKPM_CTR_##bit2))
82 #define RKPM_OR_3BITS(bit1,bit2,bit3) ((RKPM_CTR_##bit1)|RKPM_OR_2BITS(bit2,bit3))
83 #define RKPM_OR_4BITS(bit1,bit2,bit3,bit4) ((RKPM_CTR_##bit1)|RKPM_OR_3BITS(bit2,bit3,bit4))
84 #define RKPM_OR_5BITS(bit1,bit2,bit3,bit4,bit5) ((RKPM_CTR_##bit1)|RKPM_OR_4BITS(bit2,bit3,bit4,bit5))
86 /*********************CTRBIT DEFINE END*****************************/
88 //pin=0x0a21 gpio0a2,port=0,bank=a,b_gpio=2,fun=1
89 #define RKPM_PINBITS_BGPIO(pins) RKPM_GETBITS(pins,4,0xf)
90 #define RKPM_PINBITS_BANK(pins) RKPM_GETBITS(pins,8,0xf) // a,b,c,d
91 #define RKPM_PINBITS_PORT(pins) RKPM_GETBITS(pins,0xc,0xf)
92 #define RKPM_PINBITS_FUN(pins) RKPM_GETBITS(pins,0,0xf)
94 //#define RKPM_PINBITS(port,bank,bgpio,fun) 0
97 #define RKPM_PINBITS(port,bank,bgpio,fun) (0\
98 |RKPM_SETBITS(fun,0,0xf)\
99 |RKPM_SETBITS(bgpio,0x4,0xf)\
100 |RKPM_SETBITS(bank,0x8,0xf)\
101 |RKPM_SETBITS(port,0xc,0xf)\
104 #define RKPM_PINBITS_SET_FUN(pins,fun) RKPM_VAL_SETBITS(pins,fun,0,0xf)
106 #define RKPM_PINGPIO_PIN (0)
107 #define RKPM_PINGPIO_PIN_MSK (0xffff)
109 #define RKPM_PINGPIO_PULL (24)
110 #define RKPM_PINGPIO_PULL_MSK (0x3)
112 #define RKPM_PINGPIO_INOUT (26)
113 #define RKPM_PINGPIO_INOUT_MSK (0x3)
115 #define RKPM_PINGPIO_LEVEL (28)
116 #define RKPM_PINGPIO_LEVEL_MSK (0x3)
118 #define RKPM_GPIO_INPUT (0)
119 #define RKPM_GPIO_OUTPUT (1)
121 #define RKPM_GPIO_OUT_L (0)
122 #define RKPM_GPIO_OUT_H (1)
124 #define RKPM_GPIO_PULL_Z (0)
125 #define RKPM_GPIO_PULL_UP (0x1)
126 #define RKPM_GPIO_PULL_DN (0x2)
127 #define RKPM_GPIO_PULL_RPTR (0x3)
129 #define RKPM_PINGPIO_BITS(pin,pull,inout,_level) (0\
130 |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
131 |RKPM_SETBITS(inout,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)\
132 |RKPM_SETBITS(pull,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)\
133 |RKPM_SETBITS(_level,RKPM_PINGPIO_LEVEL,RKPM_PINGPIO_LEVEL_MSK)\
136 #define RKPM_PINGPIO_BITS_OUTPUT(pin,_level) (0\
137 |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
138 |RKPM_SETBITS(RKPM_GPIO_OUTPUT,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)\
139 |RKPM_SETBITS(_level,RKPM_PINGPIO_LEVEL,RKPM_PINGPIO_LEVEL_MSK)\
142 #define RKPM_PINGPIO_BITS_INTPUT(pin,pull) (0\
143 |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
144 |RKPM_SETBITS(RKPM_GPIO_INPUT,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_INOUT_MSK)\
145 |RKPM_SETBITS(pull,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)\
147 #define RKPM_PINGPIO_BITS_FUN(pin,pull) (0\
148 |RKPM_SETBITS(pin,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)\
149 |RKPM_SETBITS(pull,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)\
152 #define RKPM_PINGPIO_BITS_PIN(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_PIN,RKPM_PINGPIO_PIN_MSK)
153 #define RKPM_PINGPIO_BITS_LEVEL(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_LEVEL,RKPM_PINGPIO_INOUT_MSK)
154 #define RKPM_PINGPIO_BITS_PULL(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_PULL,RKPM_PINGPIO_PULL_MSK)
155 #define RKPM_PINGPIO_BITS_INOUT(bits) RKPM_GETBITS(bits,RKPM_PINGPIO_INOUT,RKPM_PINGPIO_LEVEL_MSK)