aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/twl-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/twl-core.c')
-rw-r--r--drivers/mfd/twl-core.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
index 5d0fb60a4c14..35275ba7096f 100644
--- a/drivers/mfd/twl-core.c
+++ b/drivers/mfd/twl-core.c
@@ -115,6 +115,12 @@
115#define twl_has_codec() false 115#define twl_has_codec() false
116#endif 116#endif
117 117
118#if defined(CONFIG_CHARGER_TWL4030) || defined(CONFIG_CHARGER_TWL4030_MODULE)
119#define twl_has_bci() true
120#else
121#define twl_has_bci() false
122#endif
123
118/* Triton Core internal information (BEGIN) */ 124/* Triton Core internal information (BEGIN) */
119 125
120/* Last - for index max*/ 126/* Last - for index max*/
@@ -202,12 +208,6 @@
202 208
203/* Few power values */ 209/* Few power values */
204#define R_CFG_BOOT 0x05 210#define R_CFG_BOOT 0x05
205#define R_PROTECT_KEY 0x0E
206
207/* access control values for R_PROTECT_KEY */
208#define KEY_UNLOCK1 0xce
209#define KEY_UNLOCK2 0xec
210#define KEY_LOCK 0x00
211 211
212/* some fields in R_CFG_BOOT */ 212/* some fields in R_CFG_BOOT */
213#define HFCLK_FREQ_19p2_MHZ (1 << 0) 213#define HFCLK_FREQ_19p2_MHZ (1 << 0)
@@ -255,7 +255,7 @@ struct twl_mapping {
255 unsigned char sid; /* Slave ID */ 255 unsigned char sid; /* Slave ID */
256 unsigned char base; /* base address */ 256 unsigned char base; /* base address */
257}; 257};
258struct twl_mapping *twl_map; 258static struct twl_mapping *twl_map;
259 259
260static struct twl_mapping twl4030_map[TWL4030_MODULE_LAST + 1] = { 260static struct twl_mapping twl4030_map[TWL4030_MODULE_LAST + 1] = {
261 /* 261 /*
@@ -832,6 +832,17 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
832 return PTR_ERR(child); 832 return PTR_ERR(child);
833 } 833 }
834 834
835 if (twl_has_bci() && pdata->bci &&
836 !(features & (TPS_SUBSET | TWL5031))) {
837 child = add_child(3, "twl4030_bci",
838 pdata->bci, sizeof(*pdata->bci), false,
839 /* irq0 = CHG_PRES, irq1 = BCI */
840 pdata->irq_base + BCI_PRES_INTR_OFFSET,
841 pdata->irq_base + BCI_INTR_OFFSET);
842 if (IS_ERR(child))
843 return PTR_ERR(child);
844 }
845
835 return 0; 846 return 0;
836} 847}
837 848
@@ -846,8 +857,8 @@ static inline int __init protect_pm_master(void)
846{ 857{
847 int e = 0; 858 int e = 0;
848 859
849 e = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, KEY_LOCK, 860 e = twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0,
850 R_PROTECT_KEY); 861 TWL4030_PM_MASTER_PROTECT_KEY);
851 return e; 862 return e;
852} 863}
853 864
@@ -855,10 +866,13 @@ static inline int __init unprotect_pm_master(void)
855{ 866{
856 int e = 0; 867 int e = 0;
857 868
858 e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, KEY_UNLOCK1, 869 e |= twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER,
859 R_PROTECT_KEY); 870 TWL4030_PM_MASTER_KEY_CFG1,
860 e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, KEY_UNLOCK2, 871 TWL4030_PM_MASTER_PROTECT_KEY);
861 R_PROTECT_KEY); 872 e |= twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER,
873 TWL4030_PM_MASTER_KEY_CFG2,
874 TWL4030_PM_MASTER_PROTECT_KEY);
875
862 return e; 876 return e;
863} 877}
864 878