diff options
-rw-r--r-- | arch/arm/mach-omap1/mux.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-omap2/mux.c | 69 | ||||
-rw-r--r-- | arch/arm/plat-omap/mux.c | 4 | ||||
-rw-r--r-- | include/asm-arm/arch-omap/mux.h | 13 |
4 files changed, 63 insertions, 51 deletions
diff --git a/arch/arm/mach-omap1/mux.c b/arch/arm/mach-omap1/mux.c index cf3bdc00cfdb..e207bf7cb853 100644 --- a/arch/arm/mach-omap1/mux.c +++ b/arch/arm/mach-omap1/mux.c | |||
@@ -3,9 +3,9 @@ | |||
3 | * | 3 | * |
4 | * OMAP1 pin multiplexing configurations | 4 | * OMAP1 pin multiplexing configurations |
5 | * | 5 | * |
6 | * Copyright (C) 2003 - 2005 Nokia Corporation | 6 | * Copyright (C) 2003 - 2008 Nokia Corporation |
7 | * | 7 | * |
8 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | 8 | * Written by Tony Lindgren |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License as published by | 11 | * it under the terms of the GNU General Public License as published by |
@@ -35,7 +35,7 @@ | |||
35 | static struct omap_mux_cfg arch_mux_cfg; | 35 | static struct omap_mux_cfg arch_mux_cfg; |
36 | 36 | ||
37 | #ifdef CONFIG_ARCH_OMAP730 | 37 | #ifdef CONFIG_ARCH_OMAP730 |
38 | struct pin_config __initdata_or_module omap730_pins[] = { | 38 | static struct pin_config __initdata_or_module omap730_pins[] = { |
39 | MUX_CFG_730("E2_730_KBR0", 12, 21, 0, 20, 1, 0) | 39 | MUX_CFG_730("E2_730_KBR0", 12, 21, 0, 20, 1, 0) |
40 | MUX_CFG_730("J7_730_KBR1", 12, 25, 0, 24, 1, 0) | 40 | MUX_CFG_730("J7_730_KBR1", 12, 25, 0, 24, 1, 0) |
41 | MUX_CFG_730("E1_730_KBR2", 12, 29, 0, 28, 1, 0) | 41 | MUX_CFG_730("E1_730_KBR2", 12, 29, 0, 28, 1, 0) |
@@ -51,10 +51,14 @@ MUX_CFG_730("AA17_730_USB_DM", 2, 21, 0, 20, 0, 0) | |||
51 | MUX_CFG_730("W16_730_USB_PU_EN", 2, 25, 0, 24, 0, 0) | 51 | MUX_CFG_730("W16_730_USB_PU_EN", 2, 25, 0, 24, 0, 0) |
52 | MUX_CFG_730("W17_730_USB_VBUSI", 2, 29, 0, 28, 0, 0) | 52 | MUX_CFG_730("W17_730_USB_VBUSI", 2, 29, 0, 28, 0, 0) |
53 | }; | 53 | }; |
54 | #endif | 54 | #define OMAP730_PINS_SZ ARRAY_SIZE(omap730_pins) |
55 | #else | ||
56 | #define omap730_pins NULL | ||
57 | #define OMAP730_PINS_SZ 0 | ||
58 | #endif /* CONFIG_ARCH_OMAP730 */ | ||
55 | 59 | ||
56 | #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX) | 60 | #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX) |
57 | struct pin_config __initdata_or_module omap1xxx_pins[] = { | 61 | static struct pin_config __initdata_or_module omap1xxx_pins[] = { |
58 | /* | 62 | /* |
59 | * description mux mode mux pull pull pull pu_pd pu dbg | 63 | * description mux mode mux pull pull pull pu_pd pu dbg |
60 | * reg offset mode reg bit ena reg | 64 | * reg offset mode reg bit ena reg |
@@ -308,8 +312,11 @@ MUX_CFG("Y12_1610_CCP_CLKP", 8, 18, 6, 1, 24, 1, 1, 0, 0) | |||
308 | MUX_CFG("W13_1610_CCP_CLKM", 9, 0, 6, 1, 28, 1, 1, 0, 0) | 312 | MUX_CFG("W13_1610_CCP_CLKM", 9, 0, 6, 1, 28, 1, 1, 0, 0) |
309 | MUX_CFG("W14_1610_CCP_DATAP", 9, 24, 6, 2, 4, 1, 2, 0, 0) | 313 | MUX_CFG("W14_1610_CCP_DATAP", 9, 24, 6, 2, 4, 1, 2, 0, 0) |
310 | MUX_CFG("Y14_1610_CCP_DATAM", 9, 21, 6, 2, 3, 1, 2, 0, 0) | 314 | MUX_CFG("Y14_1610_CCP_DATAM", 9, 21, 6, 2, 3, 1, 2, 0, 0) |
311 | |||
312 | }; | 315 | }; |
316 | #define OMAP1XXX_PINS_SZ ARRAY_SIZE(omap1xxx_pins) | ||
317 | #else | ||
318 | #define omap1xxx_pins NULL | ||
319 | #define OMAP1XXX_PINS_SZ 0 | ||
313 | #endif /* CONFIG_ARCH_OMAP15XX || CONFIG_ARCH_OMAP16XX */ | 320 | #endif /* CONFIG_ARCH_OMAP15XX || CONFIG_ARCH_OMAP16XX */ |
314 | 321 | ||
315 | int __init_or_module omap1_cfg_reg(const struct pin_config *cfg) | 322 | int __init_or_module omap1_cfg_reg(const struct pin_config *cfg) |
@@ -422,22 +429,17 @@ int __init_or_module omap1_cfg_reg(const struct pin_config *cfg) | |||
422 | 429 | ||
423 | int __init omap1_mux_init(void) | 430 | int __init omap1_mux_init(void) |
424 | { | 431 | { |
425 | |||
426 | #ifdef CONFIG_ARCH_OMAP730 | ||
427 | if (cpu_is_omap730()) { | 432 | if (cpu_is_omap730()) { |
428 | arch_mux_cfg.pins = omap730_pins; | 433 | arch_mux_cfg.pins = omap730_pins; |
429 | arch_mux_cfg.size = ARRAY_SIZE(omap730_pins); | 434 | arch_mux_cfg.size = OMAP730_PINS_SZ; |
430 | arch_mux_cfg.cfg_reg = omap1_cfg_reg; | 435 | arch_mux_cfg.cfg_reg = omap1_cfg_reg; |
431 | } | 436 | } |
432 | #endif | ||
433 | 437 | ||
434 | #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX) | ||
435 | if (cpu_is_omap15xx() || cpu_is_omap16xx()) { | 438 | if (cpu_is_omap15xx() || cpu_is_omap16xx()) { |
436 | arch_mux_cfg.pins = omap1xxx_pins; | 439 | arch_mux_cfg.pins = omap1xxx_pins; |
437 | arch_mux_cfg.size = ARRAY_SIZE(omap1xxx_pins); | 440 | arch_mux_cfg.size = OMAP1XXX_PINS_SZ; |
438 | arch_mux_cfg.cfg_reg = omap1_cfg_reg; | 441 | arch_mux_cfg.cfg_reg = omap1_cfg_reg; |
439 | } | 442 | } |
440 | #endif | ||
441 | 443 | ||
442 | return omap_mux_register(&arch_mux_cfg); | 444 | return omap_mux_register(&arch_mux_cfg); |
443 | } | 445 | } |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index 5cba3a2a2392..0cf7562ff88f 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -1,11 +1,12 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/arm/mach-omap2/mux.c | 2 | * linux/arch/arm/mach-omap2/mux.c |
3 | * | 3 | * |
4 | * OMAP1 pin multiplexing configurations | 4 | * OMAP2 pin multiplexing configurations |
5 | * | 5 | * |
6 | * Copyright (C) 2003 - 2005 Nokia Corporation | 6 | * Copyright (C) 2004 - 2008 Texas Instruments Inc. |
7 | * Copyright (C) 2003 - 2008 Nokia Corporation | ||
7 | * | 8 | * |
8 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | 9 | * Written by Tony Lindgren |
9 | * | 10 | * |
10 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License as published by | 12 | * it under the terms of the GNU General Public License as published by |
@@ -36,7 +37,8 @@ static struct omap_mux_cfg arch_mux_cfg; | |||
36 | 37 | ||
37 | /* NOTE: See mux.h for the enumeration */ | 38 | /* NOTE: See mux.h for the enumeration */ |
38 | 39 | ||
39 | struct pin_config __initdata_or_module omap24xx_pins[] = { | 40 | #ifdef CONFIG_ARCH_OMAP24XX |
41 | static struct pin_config __initdata_or_module omap24xx_pins[] = { | ||
40 | /* | 42 | /* |
41 | * description mux mux pull pull debug | 43 | * description mux mux pull pull debug |
42 | * offset mode ena type | 44 | * offset mode ena type |
@@ -209,54 +211,69 @@ MUX_CFG_24XX("AE13_2430_MCBSP2_DX_OFF", 0x0130, 0, 0, 0, 1) | |||
209 | MUX_CFG_24XX("AD13_2430_MCBSP2_DR_OFF", 0x0131, 0, 0, 0, 1) | 211 | MUX_CFG_24XX("AD13_2430_MCBSP2_DR_OFF", 0x0131, 0, 0, 0, 1) |
210 | }; | 212 | }; |
211 | 213 | ||
212 | #ifdef CONFIG_ARCH_OMAP24XX | 214 | #define OMAP24XX_PINS_SZ ARRAY_SIZE(omap24xx_pins) |
215 | |||
216 | #else | ||
217 | #define omap24xx_pins NULL | ||
218 | #define OMAP24XX_PINS_SZ 0 | ||
219 | #endif /* CONFIG_ARCH_OMAP24XX */ | ||
213 | 220 | ||
214 | #define OMAP24XX_L4_BASE 0x48000000 | 221 | #define OMAP24XX_L4_BASE 0x48000000 |
215 | #define OMAP24XX_PULL_ENA (1 << 3) | 222 | #define OMAP24XX_PULL_ENA (1 << 3) |
216 | #define OMAP24XX_PULL_UP (1 << 4) | 223 | #define OMAP24XX_PULL_UP (1 << 4) |
217 | 224 | ||
218 | /* REVISIT: Convert this code to use ctrl_{read,write}_reg */ | 225 | /* REVISIT: Convert this code to use ctrl_{read,write}_reg */ |
226 | #if defined(CONFIG_OMAP_MUX_DEBUG) || defined(CONFIG_OMAP_MUX_WARNINGS) | ||
227 | void __init_or_module omap2_cfg_debug(const struct pin_config *cfg, u8 reg) | ||
228 | { | ||
229 | u16 orig; | ||
230 | u8 warn = 0, debug = 0; | ||
231 | |||
232 | orig = omap_readb(OMAP24XX_L4_BASE + cfg->mux_reg); | ||
233 | |||
234 | #ifdef CONFIG_OMAP_MUX_DEBUG | ||
235 | debug = cfg->debug; | ||
236 | #endif | ||
237 | warn = (orig != reg); | ||
238 | if (debug || warn) | ||
239 | printk(KERN_WARNING | ||
240 | "MUX: setup %s (0x%08x): 0x%02x -> 0x%02x\n", | ||
241 | cfg->name, omap_readb(OMAP24XX_L4_BASE + cfg->mux_reg)); | ||
242 | } | ||
243 | #else | ||
244 | #define omap2_cfg_debug(x, y) do {} while (0) | ||
245 | #endif | ||
246 | |||
247 | #ifdef CONFIG_ARCH_OMAP24XX | ||
219 | int __init_or_module omap24xx_cfg_reg(const struct pin_config *cfg) | 248 | int __init_or_module omap24xx_cfg_reg(const struct pin_config *cfg) |
220 | { | 249 | { |
250 | static DEFINE_SPINLOCK(mux_spin_lock); | ||
251 | unsigned long flags; | ||
221 | u8 reg = 0; | 252 | u8 reg = 0; |
222 | unsigned int warn = 0; | ||
223 | 253 | ||
254 | spin_lock_irqsave(&mux_spin_lock, flags); | ||
224 | reg |= cfg->mask & 0x7; | 255 | reg |= cfg->mask & 0x7; |
225 | if (cfg->pull_val) | 256 | if (cfg->pull_val) |
226 | reg |= OMAP24XX_PULL_ENA; | 257 | reg |= OMAP24XX_PULL_ENA; |
227 | if(cfg->pu_pd_val) | 258 | if (cfg->pu_pd_val) |
228 | reg |= OMAP24XX_PULL_UP; | 259 | reg |= OMAP24XX_PULL_UP; |
229 | #if defined(CONFIG_OMAP_MUX_DEBUG) || defined(CONFIG_OMAP_MUX_WARNINGS) | 260 | omap2_cfg_debug(cfg, reg); |
230 | { | ||
231 | u8 orig = omap_readb(OMAP24XX_L4_BASE + cfg->mux_reg); | ||
232 | u8 debug = 0; | ||
233 | |||
234 | #ifdef CONFIG_OMAP_MUX_DEBUG | ||
235 | debug = cfg->debug; | ||
236 | #endif | ||
237 | warn = (orig != reg); | ||
238 | if (debug || warn) | ||
239 | printk("MUX: setup %s (0x%08x): 0x%02x -> 0x%02x\n", | ||
240 | cfg->name, OMAP24XX_L4_BASE + cfg->mux_reg, | ||
241 | orig, reg); | ||
242 | } | ||
243 | #endif | ||
244 | omap_writeb(reg, OMAP24XX_L4_BASE + cfg->mux_reg); | 261 | omap_writeb(reg, OMAP24XX_L4_BASE + cfg->mux_reg); |
262 | spin_unlock_irqrestore(&mux_spin_lock, flags); | ||
245 | 263 | ||
246 | return 0; | 264 | return 0; |
247 | } | 265 | } |
266 | #else | ||
267 | #define omap24xx_cfg_reg 0 | ||
248 | #endif | 268 | #endif |
249 | 269 | ||
250 | int __init omap2_mux_init(void) | 270 | int __init omap2_mux_init(void) |
251 | { | 271 | { |
252 | |||
253 | #ifdef CONFIG_ARCH_OMAP24XX | ||
254 | if (cpu_is_omap24xx()) { | 272 | if (cpu_is_omap24xx()) { |
255 | arch_mux_cfg.pins = omap24xx_pins; | 273 | arch_mux_cfg.pins = omap24xx_pins; |
256 | arch_mux_cfg.size = ARRAY_SIZE(omap24xx_pins); | 274 | arch_mux_cfg.size = OMAP24XX_PINS_SZ; |
257 | arch_mux_cfg.cfg_reg = omap24xx_cfg_reg; | 275 | arch_mux_cfg.cfg_reg = omap24xx_cfg_reg; |
258 | } | 276 | } |
259 | #endif | ||
260 | 277 | ||
261 | return omap_mux_register(&arch_mux_cfg); | 278 | return omap_mux_register(&arch_mux_cfg); |
262 | } | 279 | } |
diff --git a/arch/arm/plat-omap/mux.c b/arch/arm/plat-omap/mux.c index 4de18b9ffb16..6f3f459731c8 100644 --- a/arch/arm/plat-omap/mux.c +++ b/arch/arm/plat-omap/mux.c | |||
@@ -3,9 +3,9 @@ | |||
3 | * | 3 | * |
4 | * Utility to set the Omap MUX and PULL_DWN registers from a table in mux.h | 4 | * Utility to set the Omap MUX and PULL_DWN registers from a table in mux.h |
5 | * | 5 | * |
6 | * Copyright (C) 2003 - 2005 Nokia Corporation | 6 | * Copyright (C) 2003 - 2008 Nokia Corporation |
7 | * | 7 | * |
8 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | 8 | * Written by Tony Lindgren |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License as published by | 11 | * it under the terms of the GNU General Public License as published by |
diff --git a/include/asm-arm/arch-omap/mux.h b/include/asm-arm/arch-omap/mux.h index 68dd93685f69..ff9a5b5575fd 100644 --- a/include/asm-arm/arch-omap/mux.h +++ b/include/asm-arm/arch-omap/mux.h | |||
@@ -4,9 +4,10 @@ | |||
4 | * Table of the Omap register configurations for the FUNC_MUX and | 4 | * Table of the Omap register configurations for the FUNC_MUX and |
5 | * PULL_DWN combinations. | 5 | * PULL_DWN combinations. |
6 | * | 6 | * |
7 | * Copyright (C) 2003 - 2005 Nokia Corporation | 7 | * Copyright (C) 2004 - 2008 Texas Instruments Inc. |
8 | * Copyright (C) 2003 - 2008 Nokia Corporation | ||
8 | * | 9 | * |
9 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | 10 | * Written by Tony Lindgren |
10 | * | 11 | * |
11 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License as published by | 13 | * it under the terms of the GNU General Public License as published by |
@@ -27,14 +28,6 @@ | |||
27 | * - W8 = ball | 28 | * - W8 = ball |
28 | * - 1610 = 1510 or 1610, none if common for both 1510 and 1610 | 29 | * - 1610 = 1510 or 1610, none if common for both 1510 and 1610 |
29 | * - MMC2_DAT0 = function | 30 | * - MMC2_DAT0 = function |
30 | * | ||
31 | * Change log: | ||
32 | * Added entry for the I2C interface. (02Feb 2004) | ||
33 | * Copyright (C) 2004 Texas Instruments | ||
34 | * | ||
35 | * Added entry for the keypad and uwire CS1. (09Mar 2004) | ||
36 | * Copyright (C) 2004 Texas Instruments | ||
37 | * | ||
38 | */ | 31 | */ |
39 | 32 | ||
40 | #ifndef __ASM_ARCH_MUX_H | 33 | #ifndef __ASM_ARCH_MUX_H |