aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd
diff options
context:
space:
mode:
authorMisael Lopez Cruz <misael.lopez@ti.com>2011-12-22 01:00:38 -0600
committerZiyann <jaraidaniel@gmail.com>2014-10-01 12:58:09 +0200
commite3980f0cab7fbc0f153d31c3bb4b88d11a4e891a (patch)
tree9b97069d27df7d9921e88e41e24044d612ab47bd /drivers/mfd
parent0d71015befd1f4eab792b39dae0a8eba19b7d965 (diff)
downloadkernel_samsung_tuna-e3980f0cab7fbc0f153d31c3bb4b88d11a4e891a.tar.gz
kernel_samsung_tuna-e3980f0cab7fbc0f153d31c3bb4b88d11a4e891a.tar.bz2
kernel_samsung_tuna-e3980f0cab7fbc0f153d31c3bb4b88d11a4e891a.zip
MFD: twl6040-codec: Add register context restore
Add register context restore per supply. Change-Id: I4918efee4fcc83f4998f59f3d376b798822ca3ce Signed-off-by: Misael Lopez Cruz <misael.lopez@ti.com> Signed-off-by: Chris Kelly <c-kelly@ti.com> Signed-off-by: Gabriel M. Beddingfield <gabrbedd@ti.com>
Diffstat (limited to 'drivers/mfd')
-rw-r--r--drivers/mfd/twl6040-codec.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/mfd/twl6040-codec.c b/drivers/mfd/twl6040-codec.c
index 31c484b4684..5f0da1ca58a 100644
--- a/drivers/mfd/twl6040-codec.c
+++ b/drivers/mfd/twl6040-codec.c
@@ -217,6 +217,37 @@ int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask)
}
EXPORT_SYMBOL(twl6040_clear_bits);
+/* Restore context of VDD/VSS or VIO/GND registers */
+static int twl6040_restore_ctx(struct twl6040 *twl6040, int supply)
+{
+ int reg, ret = 0;
+
+ for (reg = 1; reg < TWL6040_CACHEREGNUM; reg++) {
+ /* skip read-only registers */
+ switch (reg) {
+ case TWL6040_REG_ASICID:
+ case TWL6040_REG_ASICREV:
+ case TWL6040_REG_UPCRES:
+ case TWL6040_REG_DNCRES:
+ continue;
+ default:
+ break;
+ }
+
+ if (twl6040_get_reg_supply(reg) == supply) {
+ ret = twl6040_reg_write(twl6040, reg,
+ twl6040_cache_read(twl6040, reg));
+ if (ret) {
+ dev_err(twl6040->dev,
+ "failed to restore context %d\n", ret);
+ break;
+ }
+ }
+ }
+
+ return ret;
+}
+
/* twl6040 codec manual power-up sequence */
static int twl6040_power_up(struct twl6040 *twl6040)
{