xref: /freebsd/sys/contrib/device-tree/Bindings/regulator/ti-abb-regulator.txt (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel VadotAdaptive Body Bias(ABB) SoC internal LDO regulator for Texas Instruments SoCs
2*c66ec88fSEmmanuel Vadot
3*c66ec88fSEmmanuel VadotRequired Properties:
4*c66ec88fSEmmanuel Vadot- compatible: Should be one of:
5*c66ec88fSEmmanuel Vadot  - "ti,abb-v1" for older SoCs like OMAP3
6*c66ec88fSEmmanuel Vadot  - "ti,abb-v2" for newer SoCs like OMAP4, OMAP5
7*c66ec88fSEmmanuel Vadot  - "ti,abb-v3" for a generic definition where setup and control registers are
8*c66ec88fSEmmanuel Vadot     provided (example: DRA7)
9*c66ec88fSEmmanuel Vadot- reg: Address and length of the register set for the device. It contains
10*c66ec88fSEmmanuel Vadot  the information of registers in the same order as described by reg-names
11*c66ec88fSEmmanuel Vadot- reg-names: Should contain the reg names
12*c66ec88fSEmmanuel Vadot  - "base-address"	- contains base address of ABB module (ti,abb-v1,ti,abb-v2)
13*c66ec88fSEmmanuel Vadot  - "control-address"	- contains control register address of ABB module (ti,abb-v3)
14*c66ec88fSEmmanuel Vadot  - "setup-address"	- contains setup register address of ABB module (ti,abb-v3)
15*c66ec88fSEmmanuel Vadot  - "int-address"	- contains address of interrupt register for ABB module
16*c66ec88fSEmmanuel Vadot  (also see Optional properties)
17*c66ec88fSEmmanuel Vadot- #address-cells: should be 0
18*c66ec88fSEmmanuel Vadot- #size-cells: should be 0
19*c66ec88fSEmmanuel Vadot- clocks: should point to the clock node used by ABB module
20*c66ec88fSEmmanuel Vadot- ti,settling-time: Settling time in uSecs from SoC documentation for ABB module
21*c66ec88fSEmmanuel Vadot	to settle down(target time for SR2_WTCNT_VALUE).
22*c66ec88fSEmmanuel Vadot- ti,clock-cycles: SoC specific data about count of system ti,clock-cycles used for
23*c66ec88fSEmmanuel Vadot	computing settling time from SoC Documentation for ABB module(clock
24*c66ec88fSEmmanuel Vadot	cycles for SR2_WTCNT_VALUE).
25*c66ec88fSEmmanuel Vadot- ti,tranxdone-status-mask: Mask to the int-register to write-to-clear mask
26*c66ec88fSEmmanuel Vadot	indicating LDO tranxdone (operation complete).
27*c66ec88fSEmmanuel Vadot- ti,abb_info: An array of 6-tuples u32 items providing information about ABB
28*c66ec88fSEmmanuel Vadot	configuration needed per operational voltage of the device.
29*c66ec88fSEmmanuel Vadot	Each item consists of the following in the same order:
30*c66ec88fSEmmanuel Vadot	volt: voltage in uV - Only used to index ABB information.
31*c66ec88fSEmmanuel Vadot	ABB mode: one of the following:
32*c66ec88fSEmmanuel Vadot		0-bypass
33*c66ec88fSEmmanuel Vadot		1-Forward Body Bias(FBB)
34*c66ec88fSEmmanuel Vadot		3-Reverse Body Bias(RBB)
35*c66ec88fSEmmanuel Vadot	efuse:	(see Optional properties)
36*c66ec88fSEmmanuel Vadot	RBB enable efuse Mask:	(See Optional properties)
37*c66ec88fSEmmanuel Vadot	FBB enable efuse Mask:	(See Optional properties)
38*c66ec88fSEmmanuel Vadot	Vset value efuse Mask:	(See Optional properties)
39*c66ec88fSEmmanuel Vadot
40*c66ec88fSEmmanuel Vadot	NOTE: If more than 1 entry is present, then regulator is setup to change
41*c66ec88fSEmmanuel Vadot	      voltage, allowing for various modes to be selected indexed off
42*c66ec88fSEmmanuel Vadot	      the regulator. Further, ABB LDOs are considered always-on by
43*c66ec88fSEmmanuel Vadot	      default.
44*c66ec88fSEmmanuel Vadot
45*c66ec88fSEmmanuel VadotOptional Properties:
46*c66ec88fSEmmanuel Vadot- reg-names: In addition to the required properties, the following are optional
47*c66ec88fSEmmanuel Vadot  - "efuse-address"	- Contains efuse base address used to pick up ABB info.
48*c66ec88fSEmmanuel Vadot  - "ldo-address"	- Contains address of ABB LDO override register.
49*c66ec88fSEmmanuel Vadot	"efuse-address" is required for this.
50*c66ec88fSEmmanuel Vadot- ti,ldovbb-vset-mask	- Required if ldo-address is set, mask for LDO override
51*c66ec88fSEmmanuel Vadot	register to provide override vset value.
52*c66ec88fSEmmanuel Vadot- ti,ldovbb-override-mask - Required if ldo-address is set, mask for LDO
53*c66ec88fSEmmanuel Vadot	override register to enable override vset value.
54*c66ec88fSEmmanuel Vadot- ti,abb_opp_sel: Addendum to the description in required properties
55*c66ec88fSEmmanuel Vadot	efuse: Mandatory if 'efuse-address' register is defined. Provides offset
56*c66ec88fSEmmanuel Vadot	       from efuse-address to pick up ABB characteristics. Set to 0 if
57*c66ec88fSEmmanuel Vadot	       'efuse-address' is not defined.
58*c66ec88fSEmmanuel Vadot	RBB enable efuse Mask:	Optional if 'efuse-address' register is defined.
59*c66ec88fSEmmanuel Vadot		'ABB mode' is force set to RBB mode if value at "efuse-address"
60*c66ec88fSEmmanuel Vadot		+ efuse maps to RBB mask. Set to 0 to ignore this.
61*c66ec88fSEmmanuel Vadot	FBB enable efuse Mask:	Optional if 'efuse-address' register is defined.
62*c66ec88fSEmmanuel Vadot		'ABB mode' is force set to FBB mode if value at "efuse-address"
63*c66ec88fSEmmanuel Vadot		+ efuse maps to FBB mask (valid only if RBB mask does not match)
64*c66ec88fSEmmanuel Vadot		Set to 0 to ignore this.
65*c66ec88fSEmmanuel Vadot	Vset value efuse Mask:	Mandatory if ldo-address is set. Picks up from
66*c66ec88fSEmmanuel Vadot		efuse the value to set in 'ti,ldovbb-vset-mask' at ldo-address.
67*c66ec88fSEmmanuel Vadot
68*c66ec88fSEmmanuel VadotExample #1: Simplest configuration (no efuse data, hard coded ABB table):
69*c66ec88fSEmmanuel Vadotabb_x: regulator-abb-x {
70*c66ec88fSEmmanuel Vadot	compatible = "ti,abb-v1";
71*c66ec88fSEmmanuel Vadot	regulator-name = "abb_x";
72*c66ec88fSEmmanuel Vadot	#address-cells = <0>;
73*c66ec88fSEmmanuel Vadot	#size-cells = <0>;
74*c66ec88fSEmmanuel Vadot	reg = <0x483072f0 0x8>, <0x48306818 0x4>;
75*c66ec88fSEmmanuel Vadot	reg-names = "base-address", "int-address";
76*c66ec88fSEmmanuel Vadot	ti,tranxdone-status-mask = <0x4000000>;
77*c66ec88fSEmmanuel Vadot	clocks = <&sysclk>;
78*c66ec88fSEmmanuel Vadot	ti,settling-time = <30>;
79*c66ec88fSEmmanuel Vadot	ti,clock-cycles = <8>;
80*c66ec88fSEmmanuel Vadot	ti,abb_info = <
81*c66ec88fSEmmanuel Vadot	/* uV		ABB	efuse	rbb_m	fbb_m	vset_m */
82*c66ec88fSEmmanuel Vadot	1012500		0	0	0	0	0 /* Bypass */
83*c66ec88fSEmmanuel Vadot	1200000		3	0	0	0	0 /* RBB mandatory */
84*c66ec88fSEmmanuel Vadot	1320000		1	0	0	0	0 /* FBB mandatory */
85*c66ec88fSEmmanuel Vadot	>;
86*c66ec88fSEmmanuel Vadot};
87*c66ec88fSEmmanuel Vadot
88*c66ec88fSEmmanuel VadotExample #2: Efuse bits contain ABB mode setting (no LDO override capability)
89*c66ec88fSEmmanuel Vadotabb_y: regulator-abb-y {
90*c66ec88fSEmmanuel Vadot	compatible = "ti,abb-v2";
91*c66ec88fSEmmanuel Vadot	regulator-name = "abb_y";
92*c66ec88fSEmmanuel Vadot	#address-cells = <0>;
93*c66ec88fSEmmanuel Vadot	#size-cells = <0>;
94*c66ec88fSEmmanuel Vadot	reg = <0x4a307bd0 0x8>, <0x4a306014 0x4>, <0x4A002268 0x8>;
95*c66ec88fSEmmanuel Vadot	reg-names = "base-address", "int-address", "efuse-address";
96*c66ec88fSEmmanuel Vadot	ti,tranxdone-status-mask = <0x4000000>;
97*c66ec88fSEmmanuel Vadot	clocks = <&sysclk>;
98*c66ec88fSEmmanuel Vadot	ti,settling-time = <50>;
99*c66ec88fSEmmanuel Vadot	ti,clock-cycles = <16>;
100*c66ec88fSEmmanuel Vadot	ti,abb_info = <
101*c66ec88fSEmmanuel Vadot	/* uV		ABB	efuse	rbb_m	fbb_m	vset_m */
102*c66ec88fSEmmanuel Vadot	975000		0	0	0	0	0 /* Bypass */
103*c66ec88fSEmmanuel Vadot	1012500		0	0	0x40000	0	0 /* RBB optional */
104*c66ec88fSEmmanuel Vadot	1200000		0	0x4	0	0x40000	0 /* FBB optional */
105*c66ec88fSEmmanuel Vadot	1320000		1	0	0	0	0 /* FBB mandatory */
106*c66ec88fSEmmanuel Vadot	>;
107*c66ec88fSEmmanuel Vadot};
108*c66ec88fSEmmanuel Vadot
109*c66ec88fSEmmanuel VadotExample #3: Efuse bits contain ABB mode setting and LDO override capability
110*c66ec88fSEmmanuel Vadotabb_z: regulator-abb-z {
111*c66ec88fSEmmanuel Vadot	compatible = "ti,abb-v2";
112*c66ec88fSEmmanuel Vadot	regulator-name = "abb_z";
113*c66ec88fSEmmanuel Vadot	#address-cells = <0>;
114*c66ec88fSEmmanuel Vadot	#size-cells = <0>;
115*c66ec88fSEmmanuel Vadot	reg = <0x4ae07ce4 0x8>, <0x4ae06010 0x4>,
116*c66ec88fSEmmanuel Vadot	      <0x4a002194 0x8>, <0x4ae0C314 0x4>;
117*c66ec88fSEmmanuel Vadot	reg-names = "base-address", "int-address",
118*c66ec88fSEmmanuel Vadot		    "efuse-address", "ldo-address";
119*c66ec88fSEmmanuel Vadot	ti,tranxdone-status-mask = <0x8000000>;
120*c66ec88fSEmmanuel Vadot	/* LDOVBBMM_MUX_CTRL */
121*c66ec88fSEmmanuel Vadot	ti,ldovbb-override-mask = <0x400>;
122*c66ec88fSEmmanuel Vadot	/* LDOVBBMM_VSET_OUT */
123*c66ec88fSEmmanuel Vadot	ti,ldovbb-vset-mask = <0x1F>;
124*c66ec88fSEmmanuel Vadot	clocks = <&sysclk>;
125*c66ec88fSEmmanuel Vadot	ti,settling-time = <50>;
126*c66ec88fSEmmanuel Vadot	ti,clock-cycles = <16>;
127*c66ec88fSEmmanuel Vadot	ti,abb_info = <
128*c66ec88fSEmmanuel Vadot	/* uV	ABB	efuse	rbb_m	fbb_m	vset_m */
129*c66ec88fSEmmanuel Vadot	975000	0	0	0	0	0	/* Bypass */
130*c66ec88fSEmmanuel Vadot	1200000	0	0x4	0	0x40000	0x1f00	/* FBB optional, vset */
131*c66ec88fSEmmanuel Vadot	>;
132*c66ec88fSEmmanuel Vadot};
133