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)
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
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
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)
73 /*********************CTRBIT DEFINE END*****************************/
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))
82 /*********************CTRBIT DEFINE END*****************************/
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)
90 //#define RKPM_PINBITS(port,bank,bgpio,fun) 0
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)\
100 #define RKPM_PINBITS_SET_FUN(pins,fun) RKPM_VAL_SETBITS(pins,fun,0,0xf)
102 #define RKPM_PINGPIO_PIN (0)
103 #define RKPM_PINGPIO_PIN_MSK (0xffff)
105 #define RKPM_PINGPIO_PULL (24)
106 #define RKPM_PINGPIO_PULL_MSK (0x3)
108 #define RKPM_PINGPIO_INOUT (26)
109 #define RKPM_PINGPIO_INOUT_MSK (0x3)
111 #define RKPM_PINGPIO_LEVEL (28)
112 #define RKPM_PINGPIO_LEVEL_MSK (0x3)
114 #define RKPM_GPIO_INPUT (0)
115 #define RKPM_GPIO_OUTPUT (1)
117 #define RKPM_GPIO_OUT_L (0)
118 #define RKPM_GPIO_OUT_H (1)
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)
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)\
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)\
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)\
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)\
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)