twl4030: regulator driver
PATCH 2/4 twl4030: regulator driver
From: David Brownell <[email protected]>
Initial twl4030 "regulator framework" support. Costs a bit over 2KB memory at runtime, mostly data. (Plus about 11KB for that framework.)
This only exports the LDO regulators for now, not the buck converters. (Two of those buck converters should interact with cpufreq to reduce voltage along with frequencies ...)
Signed-off-by David Brownell <[email protected]>
---
This has been lightly tested, except for the regulator_set_mode() support which hasn't been tested at all. Seems suitable for an initial merge though.
drivers/regulator/Kconfig | 7 drivers/regulator/Makefile | 1 drivers/regulator/twl4030-regulator.c | 516 ++++++++++++++++++++++++++++++++ include/linux/i2c/twl4030.h | 35 ++ 4 files changed, 559 insertions(+)
drivers/regulator/Kconfig +7 -0
@@ -56,6 +56,13 @@ config REGULATOR_BQ24022 charging select between 100 mA and 500 mA charging current limit. +config REGULATOR_TWL4030 + bool "TI TWL4030/TWL5030/TPS695x0 PMIC" + depends on TWL4030_CORE + help + This driver supports the voltage regulators provided by + this family of companion chips. + config REGULATOR_WM8350 tristate "Wolfson Microelectroncis WM8350 AudioPlus PMIC" depends on MFD_WM8350
drivers/regulator/Makefile +1 -0
@@ -8,6 +8,7 @@ obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o obj-$(CONFIG_REGULATOR_BQ24022) += bq24022.o +obj-$(CONFIG_REGULATOR_TWL4030) += twl4030-regulator.o obj-$(CONFIG_REGULATOR_WM8350) += wm8350-regulator.o obj-$(CONFIG_REGULATOR_WM8400) += wm8400-regulator.o obj-$(CONFIG_REGULATOR_DA903X) += da903x.o
drivers/regulator/twl4030-regulator.c new file +516 -0
516 lines not on this page · raw message
include/linux/i2c/twl4030.h +35 -0
@@ -401,4 +401,39 @@ int twl4030_sih_setup(int module);static inline int twl4030charger_usb_en (int enable) {return 0 ; }#endif +/*----------------------------------------------------------------------*/ + +/* Linux-specific regulator identifiers ... for now, we only support +* the LDOs, and leave the three buck converters alone. VDD1 and VDD2 +* need to tie into hardware based voltage scaling (cpufreq etc), while +* VIO is generally fixed. +*/ + +/* EXTERNAL dc-to-dc buck converters */ +#define TWL4030_REG_VDD1 0 +#define TWL4030_REG_VDD2 1 +#define TWL4030_REG_VIO 2 + +/* EXTERNAL LDOs */ +#define TWL4030_REG_VDAC 3 +#define TWL4030_REG_VPLL1 4 +#define TWL4030_REG_VPLL2 5/* not on all chips */ +#define TWL4030_REG_VMMC1 6 +#define TWL4030_REG_VMMC2 7/* not on all chips */ +#define TWL4030_REG_VSIM 8/* not on all chips */ +#define TWL4030_REG_VAUX1 9/* not on all chips */ +#define TWL4030_REG_VAUX2_4030 10/* (twl4030-specific) */ +#define TWL4030_REG_VAUX2 11/* (twl5030 and newer) */ +#define TWL4030_REG_VAUX3 12/* not on all chips */ +#define TWL4030_REG_VAUX4 13/* not on all chips */ + +/* INTERNAL LDOs */ +#define TWL4030_REG_VINTANA1 14 +#define TWL4030_REG_VINTANA2 15 +#define TWL4030_REG_VINTDIG 16 +#define TWL4030_REG_VUSB1V5 17 +#define TWL4030_REG_VUSB1V8 18 +#define TWL4030_REG_VUSB3V1 19 +#define TWL4030_REG_VUSBCP 20 +#endif /* End of __TWL4030_H */