linux/drivers/regulator
Andrii.Tseglytskyi 40b1936efe regulator: Introduce TI Adaptive Body Bias(ABB) on-chip LDO driver
Adaptive Body Biasing (ABB) modulates transistor bias voltages
dynamically in order to optimize switching speed versus leakage.

Texas Instruments' SmartReflex 2 technology provides support for this
power management technique with Forward Body Biasing (FBB) and Reverse
Body Biasing (RBB). These modulate the body voltage of transistor
cells or blocks dynamically to gain performance and reduce leakage.
TI's SmartReflex white paper[1] has further information for usage in
conjunction with other power management techniques.

The application of FBB/RBB technique is determined for each unique
device in some process nodes, whereas, they are mandated on other
process nodes.

In a nutshell, ABB technique is implemented on TI SoC as an on-chip
LDO which has ABB module controlling the bias voltage. However, the
voltage is unique per device. These vary per SoC family and the manner
in which these techniques are used may vary depending on the Operating
Performance Point (OPP) voltage targeted. For example:
OMAP3630/OMAP4430: certain OPPs mandate usage of FBB independent of
	devices.
OMAP4460/OMAP4470: certain OPPs mandate usage of FBB, while others may
	optionally use FBB or optimization with RBB.
OMAP5: ALL OPPs may optionally use ABB, and ABB biasing voltage is
	influenced by vset fused in s/w and requiring s/w override of
	default values.

Further, two generations of ABB module are used in various TI SoCs.
They have remained mostly register field compatible, however the
register offset had switched between versions.

We introduce ABB LDO support in the form of a regulator which is
controlled by voltages denoting the desired Operating Performance
Point which is targeted. However, since ABB transition is part of OPP
change sequence, the sequencing required to ensure sane operation
w.r.t OPP change is left to the controlling driver (example: cpufreq
SoC driver) using standard regulator operations.

The driver supports all ABB modes and ability to override ABB LDO vset
control efuse based ABB mode detection etc.

Current implementation is heavily influenced by the original patch
series [2][3] from Mike Turquette. However, the current implementation
supports only device tree based information.

[1] http://www.ti.com/pdfs/wtbu/smartreflex_whitepaper.pdf
[2] http://marc.info/?l=linux-omap&m=134931341818379&w=2
[3] http://marc.info/?l=linux-arm-kernel&m=134931402406853&w=2

[nm@ti.com: co-developer]
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Andrii.Tseglytskyi <andrii.tseglytskyi@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-12 18:31:36 +04:00
..
88pm8607.c regulator: 88pm8607: Use enable_is_inverted flag with regulator_enable_regmap and friends APIs 2013-03-05 17:56:40 +08:00
aat2870-regulator.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
ab3100.c regulator: ab3100: Fix regulator register error handling 2013-04-26 16:33:10 +01:00
ab8500-ext.c regulator: ab8500-ext: Remove enable() and disable() functions 2013-04-17 15:08:38 +01:00
ab8500.c regulator: ab8500: Get rid of voltage_shift field from struct ab8500_regulator_info 2013-04-18 18:26:35 +01:00
ad5398.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
anatop-regulator.c regulator: anatop: improve precision of delay time 2013-02-08 11:15:00 +00:00
arizona-ldo1.c regulator: arizona: Increase ramp delay for high current regulators 2013-03-26 13:27:11 +00:00
arizona-micsupp.c regulator: arizona-micsupp: Enable bypass in default constraints 2013-01-13 21:31:02 +09:00
as3711-regulator.c regulator: as3711: Use a static of_regulator_match table for of_regulator_match 2013-04-17 14:41:07 +01:00
core.c Merge remote-tracking branch 'regulator/topic/gpio' into v3.9-rc8 2013-04-28 02:13:40 +01:00
da903x.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
da9052-regulator.c Merge remote-tracking branch 'regulator/topic/of' into regulator-next 2013-02-19 12:42:52 +00:00
da9055-regulator.c Merge remote-tracking branch 'regulator/topic/da9055' into regulator-next 2013-02-19 12:42:33 +00:00
db8500-prcmu.c regulator: db8500-prcmu - remove incorrect __exit markup 2013-03-01 06:04:44 +00:00
dbx500-prcmu.c regulators: db8500: Fix compile failure for drivers/regulator/dbx500-prcmu.c 2013-01-26 15:30:06 +08:00
dbx500-prcmu.h regulator: dbx500-prcmu: Remove operating_point from struct dbx500_regulator_info 2013-04-02 23:05:28 +01:00
dummy.c regulator: remove use of __devinit 2012-11-20 10:31:26 +09:00
dummy.h regulator: fix build when CONFIG_REGULATOR_DUMMY=n 2010-10-28 22:40:32 +01:00
fan53555.c regulator: fan53555: Use PTR_RET function 2013-03-20 14:30:12 +01:00
fixed-helper.c regulator: extend the fixed dummy voltage regulator to accept voltage 2012-06-19 23:22:30 +01:00
fixed.c Drivers: regulator: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
gpio-regulator.c regulator: gpio-regulator: Staticize of_get_gpio_regulator_config() 2013-01-29 00:44:17 +08:00
isl6271a-regulator.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
Kconfig regulator: Introduce TI Adaptive Body Bias(ABB) on-chip LDO driver 2013-05-12 18:31:36 +04:00
lp872x.c regulator: lp872x: Use regulator_map_voltage_ascend 2013-04-25 11:50:23 +01:00
lp3971.c regulator: lp3971: Convert to use regulator_map_voltage_ascend 2013-04-23 11:39:27 +01:00
lp3972.c regulator: lp3972: Convert to use regulator_map_voltage_ascend 2013-04-23 11:39:33 +01:00
lp8755.c regulator: lp8755: Use LP8755_BUCK_MAX instead of magic number 2013-01-27 11:00:25 +08:00
lp8788-buck.c regulator: lp8788-buck: Use regulator_map_voltage_ascend 2013-04-25 11:50:23 +01:00
lp8788-ldo.c regulator: lp8788: Implement list_voltage for lp8788_ldo_voltage_fixed_ops 2013-04-03 18:46:29 +01:00
Makefile regulator: Introduce TI Adaptive Body Bias(ABB) on-chip LDO driver 2013-05-12 18:31:36 +04:00
max1586.c Merge remote-tracking branch 'regulator/topic/max1586' into v3.9-rc8 2013-04-28 02:13:41 +01:00
max8649.c Merge remote-tracking branch 'regulator/topic/enable-invert' into v3.9-rc8 2013-04-28 02:13:37 +01:00
max8660.c regulator: Remove NULL test before calling regulator_unregister() 2013-04-28 02:11:19 +01:00
max8907-regulator.c regulator: Add missing of_node_put() 2013-01-30 18:50:27 +08:00
max8925-regulator.c regulator: max8925: Remove unused parameter from max8925_regulator_dt_init 2013-03-04 10:49:21 +08:00
max8952.c regulator: max8952: Add missing config.of_node setting for regulator register 2013-04-26 18:17:01 +01:00
max8973-regulator.c regulator: max8973: Don't override control1 variable when set ramp delay bits 2013-04-24 10:52:28 +01:00
max8997.c regulator: max8997: Test pdata by NULL checking instead of IS_ERR_OR_NULL 2013-04-15 17:21:18 +01:00
max8998.c regulators: max8998.c: use dev_err() instead of printk() 2013-03-04 10:53:01 +08:00
max77686.c regulator: max77686: Don't update max77686->opmode if update register fails 2013-04-28 02:07:52 +01:00
mc13xxx-regulator-core.c regulator: mc13xxx: Add warning of incorrect names of regulators 2013-04-28 02:10:00 +01:00
mc13xxx.h regulator: mc13xxx: Add warning of incorrect names of regulators 2013-04-28 02:10:00 +01:00
mc13783-regulator.c regulator: mc13783: Add device tree probe support 2013-04-28 02:10:00 +01:00
mc13892-regulator.c Merge remote-tracking branch 'regulator/topic/ascend' into v3.9-rc8 2013-04-28 02:13:36 +01:00
of_regulator.c regulator: clear state each invocation of of_regulator_match 2013-01-30 10:11:06 +08:00
palmas-regulator.c Merge remote-tracking branch 'regulator/topic/palmas' into v3.9-rc8 2013-04-28 02:13:45 +01:00
pcap-regulator.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
pcf50633-regulator.c Merge remote-tracking branch 'regulator/topic/min' into regulator-next 2012-12-10 12:43:00 +09:00
rc5t583-regulator.c regulator: rc5t583: Remove unused fields from struct rc5t583_regulator_info 2013-04-16 12:22:06 +01:00
s2mps11.c regulator: s2mps11: fix incorrect register for buck10 2013-01-31 14:45:11 +08:00
s5m8767.c Merge remote-tracking branch 'regulator/topic/s5m8767' into v3.9-rc8 2013-04-28 02:13:46 +01:00
ti-abb-regulator.c regulator: Introduce TI Adaptive Body Bias(ABB) on-chip LDO driver 2013-05-12 18:31:36 +04:00
tps6105x-regulator.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
tps6507x-regulator.c regulator: tps6507x: Use regulator_map_voltage_ascend 2013-04-25 11:48:37 +01:00
tps6524x-regulator.c Merge remote-tracking branch 'regulator/topic/core' into v3.9-rc8 2013-04-28 02:13:37 +01:00
tps6586x-regulator.c Merge remote-tracking branch 'regulator/topic/tps6586x' into v3.9-rc8 2013-04-28 02:13:48 +01:00
tps51632-regulator.c regulator: tps51632: Use regulator_[get|set]_voltage_sel_regmap 2013-02-13 12:58:40 +00:00
tps62360-regulator.c regulator: tps62360: Fix off-by-one shift for ramp_ctrl 2013-04-23 11:26:56 +01:00
tps65023-regulator.c Merge remote-tracking branch 'regulator/topic/tps65023' into v3.9-rc8 2013-04-28 02:13:47 +01:00
tps65090-regulator.c regulator: tps65090: Fix using wrong dev argument for calling of_regulator_match 2013-01-31 14:42:05 +08:00
tps65217-regulator.c regulator: tps65217: Fix using wrong dev argument for calling of_regulator_match 2013-01-24 18:58:33 +08:00
tps65910-regulator.c regulator: tps65910: Convert to use regulator_map_voltage_ascend 2013-04-23 11:41:06 +01:00
tps65912-regulator.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
tps80031-regulator.c regulator: tps80031: Convert tps80031_dcdc_ops to [get|set]_voltage_sel_regmap 2013-04-23 11:47:38 +01:00
twl-regulator.c Merge remote-tracking branch 'regulator/topic/twl' into v3.9-rc8 2013-04-28 02:13:49 +01:00
userspace-consumer.c regulator: userspace-consumer: Convert to use devm_* APIs 2012-04-18 10:26:24 +01:00
vexpress.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
virtual.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
wm831x-dcdc.c Merge remote-tracking branch 'regulator/topic/wm831x' into regulator-next 2012-12-10 12:43:33 +09:00
wm831x-isink.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
wm831x-ldo.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
wm8350-regulator.c regulator: wm8350: Reuse map_voltage() to get selector of a given uV 2012-06-17 20:53:58 +01:00
wm8400-regulator.c regulator: remove use of __devexit 2012-11-20 10:53:38 +09:00
wm8994-regulator.c regulator: wm8994: Use GPIO parsed from DT when registering regulators 2013-04-11 17:56:21 +01:00