diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 18:54:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 18:54:04 -0400 |
commit | b779b332d0e1ef68f40867948ae5526a3e925163 (patch) | |
tree | d2fc8bb455d696fbdb288055ce0a4f0cfcee31fd /drivers/mfd/twl-core.c | |
parent | a0cadc2777a71b1fde62e6417284b38e52128e88 (diff) | |
parent | 0f48285755991b73c14b6eeeee464590f490ac25 (diff) |
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: (73 commits)
power: Revert "power_supply: Mark twl4030_charger as broken"
mfd: Fix a memory leak when unload mc13xxx-core module
mfd: Fix resource reclaim for max8998
mfd: Remove unneeded ret value checking for max8998 register updates
mfd: Add free max8998->ono irq in max8998_irq_exit()
mfd: Fix resource reclaim in pcf50633_remove()
omap4: pandaboard: fix up mmc card detect logic
mfd: Fix ezx_pcap_probe error path
mfd: Fix off-by-one value range checking for tps6507x
mfd: Remove __devinitdata from tc6393xb_mmc_resources
mfd: Add WM831x SPI support
mfd: Factor out WM831x I2C I/O from the core driver
mfd: Remove DEBUG defines from mc13xxx-core
mfd: Fix jz4740_adc_set_enabled
mfd: Add TPS658621C device ID
mfd: Fix twl-irq function declaration warnings
regulator: max8998 BUCK1/2 voltage change with use of GPIOs
mfd: Voltages and GPIOs platform_data definitions for max8998
regulator: max8998 BUCK1/2 internal voltages and indexes defined
mfd: Support for ICs compliant with max8998
...
Diffstat (limited to 'drivers/mfd/twl-core.c')
-rw-r--r-- | drivers/mfd/twl-core.c | 40 |
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 | }; |
258 | struct twl_mapping *twl_map; | 258 | static struct twl_mapping *twl_map; |
259 | 259 | ||
260 | static struct twl_mapping twl4030_map[TWL4030_MODULE_LAST + 1] = { | 260 | static 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 | ||