]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/power/twl4030.c
power: twl4030: Power off support
[karo-tx-uboot.git] / drivers / power / twl4030.c
index 7f1fdd1534c079638d16f2e8967ad0b4571276e0..8866bf1b19edb4ae4731eabacf434c501435a3d2 100644 (file)
@@ -45,6 +45,66 @@ void twl4030_power_reset_init(void)
        }
 }
 
+/*
+ * Power off
+ */
+void twl4030_power_off(void)
+{
+       u8 data;
+
+       /* PM master unlock (CFG and TST keys) */
+
+       data = 0xCE;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_PROTECT_KEY, data);
+       data = 0xEC;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_PROTECT_KEY, data);
+
+       /* VBAT start disable */
+
+       twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
+                           TWL4030_PM_MASTER_CFG_P1_TRANSITION, &data);
+       data &= ~TWL4030_PM_MASTER_CFG_TRANSITION_STARTON_VBAT;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_CFG_P1_TRANSITION, data);
+
+       twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
+                           TWL4030_PM_MASTER_CFG_P2_TRANSITION, &data);
+       data &= ~TWL4030_PM_MASTER_CFG_TRANSITION_STARTON_VBAT;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_CFG_P2_TRANSITION, data);
+
+       twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
+                           TWL4030_PM_MASTER_CFG_P3_TRANSITION, &data);
+       data &= ~TWL4030_PM_MASTER_CFG_TRANSITION_STARTON_VBAT;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_CFG_P3_TRANSITION, data);
+
+       /* High jitter for PWRANA2 */
+
+       twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
+                           TWL4030_PM_MASTER_CFG_PWRANA2, &data);
+       data &= ~(TWL4030_PM_MASTER_CFG_PWRANA2_LOJIT0_LOWV |
+                 TWL4030_PM_MASTER_CFG_PWRANA2_LOJIT1_LOWV);
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_CFG_PWRANA2, data);
+
+       /* PM master lock */
+
+       data = 0xFF;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_PROTECT_KEY, data);
+
+       /* Power off */
+
+       twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
+                           TWL4030_PM_MASTER_P1_SW_EVENTS, &data);
+       data |= TWL4030_PM_MASTER_SW_EVENTS_DEVOFF;
+       twl4030_i2c_write_u8(TWL4030_CHIP_PM_MASTER,
+                            TWL4030_PM_MASTER_P1_SW_EVENTS, data);
+}
+
 /*
  * Set Device Group and Voltage
  */