diff options
author | Philipp Zabel <philipp.zabel@gmail.com> | 2009-06-05 12:31:01 -0400 |
---|---|---|
committer | Samuel Ortiz <sameol@linux.intel.com> | 2009-06-17 13:41:39 -0400 |
commit | 6483c1b5e1a6e3489640a1376e951395982e9615 (patch) | |
tree | 48dfc13997457dfbd7927762909c9b4dcab5643c | |
parent | 9e5aca58c2d2202937939dad8f9ce5d789ae4de8 (diff) |
mfd: asic3: add asic3_set_register common operation
Used to configure single bits of the SDHWCTRL_SDCONF and EXTCF_RESET/SELECT
registers needed for DS1WM, MMC/SDIO and PCMCIA functionality.
Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r-- | drivers/mfd/asic3.c | 15 | ||||
-rw-r--r-- | include/linux/mfd/asic3.h | 10 |
2 files changed, 20 insertions, 5 deletions
diff --git a/drivers/mfd/asic3.c b/drivers/mfd/asic3.c index 9e485459f63b..ad3c59135990 100644 --- a/drivers/mfd/asic3.c +++ b/drivers/mfd/asic3.c | |||
@@ -52,6 +52,21 @@ static inline u32 asic3_read_register(struct asic3 *asic, | |||
52 | (reg >> asic->bus_shift)); | 52 | (reg >> asic->bus_shift)); |
53 | } | 53 | } |
54 | 54 | ||
55 | void asic3_set_register(struct asic3 *asic, u32 reg, u32 bits, bool set) | ||
56 | { | ||
57 | unsigned long flags; | ||
58 | u32 val; | ||
59 | |||
60 | spin_lock_irqsave(&asic->lock, flags); | ||
61 | val = asic3_read_register(asic, reg); | ||
62 | if (set) | ||
63 | val |= bits; | ||
64 | else | ||
65 | val &= ~bits; | ||
66 | asic3_write_register(asic, reg, val); | ||
67 | spin_unlock_irqrestore(&asic->lock, flags); | ||
68 | } | ||
69 | |||
55 | /* IRQs */ | 70 | /* IRQs */ |
56 | #define MAX_ASIC_ISR_LOOPS 20 | 71 | #define MAX_ASIC_ISR_LOOPS 20 |
57 | #define ASIC3_GPIO_BASE_INCR \ | 72 | #define ASIC3_GPIO_BASE_INCR \ |
diff --git a/include/linux/mfd/asic3.h b/include/linux/mfd/asic3.h index 322cd6deb9f0..6b427ec4b245 100644 --- a/include/linux/mfd/asic3.h +++ b/include/linux/mfd/asic3.h | |||
@@ -227,8 +227,8 @@ struct asic3_platform_data { | |||
227 | 227 | ||
228 | 228 | ||
229 | /* Basic control of the SD ASIC */ | 229 | /* Basic control of the SD ASIC */ |
230 | #define ASIC3_SDHWCTRL_Base 0x0E00 | 230 | #define ASIC3_SDHWCTRL_BASE 0x0E00 |
231 | #define ASIC3_SDHWCTRL_SDConf 0x00 | 231 | #define ASIC3_SDHWCTRL_SDCONF 0x00 |
232 | 232 | ||
233 | #define ASIC3_SDHWCTRL_SUSPEND (1 << 0) /* 1=suspend all SD operations */ | 233 | #define ASIC3_SDHWCTRL_SUSPEND (1 << 0) /* 1=suspend all SD operations */ |
234 | #define ASIC3_SDHWCTRL_CLKSEL (1 << 1) /* 1=SDICK, 0=HCLK */ | 234 | #define ASIC3_SDHWCTRL_CLKSEL (1 << 1) /* 1=SDICK, 0=HCLK */ |
@@ -242,10 +242,10 @@ struct asic3_platform_data { | |||
242 | /* SD card power supply ctrl 1=enable */ | 242 | /* SD card power supply ctrl 1=enable */ |
243 | #define ASIC3_SDHWCTRL_SDPWR (1 << 6) | 243 | #define ASIC3_SDHWCTRL_SDPWR (1 << 6) |
244 | 244 | ||
245 | #define ASIC3_EXTCF_Base 0x1100 | 245 | #define ASIC3_EXTCF_BASE 0x1100 |
246 | 246 | ||
247 | #define ASIC3_EXTCF_Select 0x00 | 247 | #define ASIC3_EXTCF_SELECT 0x00 |
248 | #define ASIC3_EXTCF_Reset 0x04 | 248 | #define ASIC3_EXTCF_RESET 0x04 |
249 | 249 | ||
250 | #define ASIC3_EXTCF_SMOD0 (1 << 0) /* slot number of mode 0 */ | 250 | #define ASIC3_EXTCF_SMOD0 (1 << 0) /* slot number of mode 0 */ |
251 | #define ASIC3_EXTCF_SMOD1 (1 << 1) /* slot number of mode 1 */ | 251 | #define ASIC3_EXTCF_SMOD1 (1 << 1) /* slot number of mode 1 */ |