diff options
author | Mike Rapoport <mike@compulab.co.il> | 2009-12-11 19:16:31 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2009-12-11 19:16:31 -0500 |
commit | 92c9f5018997dbc5f5e91eae2400d78ada2760b0 (patch) | |
tree | ab98e9539cd6a554be1cec164ca9528b55cf1cc4 /arch | |
parent | 24ed45aa0776f9f645aa1ac1a88b2e1d5f29a9aa (diff) |
omap2: mux: intoduce omap_mux_{read,write}
intoduce omap_mux_{read,write}
Signed-off-by: Mike Rapoport <mike@compulab.co.il>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-omap2/mux.c | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index c18a94eca641..64250c504c64 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -35,7 +35,27 @@ | |||
35 | 35 | ||
36 | #ifdef CONFIG_OMAP_MUX | 36 | #ifdef CONFIG_OMAP_MUX |
37 | 37 | ||
38 | #define OMAP_MUX_BASE_OFFSET 0x30 /* Offset from CTRL_BASE */ | ||
39 | #define OMAP_MUX_BASE_SZ 0x5ca | ||
40 | |||
38 | static struct omap_mux_cfg arch_mux_cfg; | 41 | static struct omap_mux_cfg arch_mux_cfg; |
42 | static void __iomem *mux_base; | ||
43 | |||
44 | static inline u16 omap_mux_read(u16 reg) | ||
45 | { | ||
46 | if (cpu_is_omap24xx()) | ||
47 | return __raw_readb(mux_base + reg); | ||
48 | else | ||
49 | return __raw_readw(mux_base + reg); | ||
50 | } | ||
51 | |||
52 | static inline void omap_mux_write(u16 val, u16 reg) | ||
53 | { | ||
54 | if (cpu_is_omap24xx()) | ||
55 | __raw_writeb(val, mux_base + reg); | ||
56 | else | ||
57 | __raw_writew(val, mux_base + reg); | ||
58 | } | ||
39 | 59 | ||
40 | /* NOTE: See mux.h for the enumeration */ | 60 | /* NOTE: See mux.h for the enumeration */ |
41 | 61 | ||
@@ -581,10 +601,7 @@ static void __init_or_module omap2_cfg_debug(const struct pin_config *cfg, u16 r | |||
581 | u16 orig; | 601 | u16 orig; |
582 | u8 warn = 0, debug = 0; | 602 | u8 warn = 0, debug = 0; |
583 | 603 | ||
584 | if (cpu_is_omap24xx()) | 604 | orig = omap_mux_read(cfg->mux_reg - OMAP_MUX_BASE_OFFSET); |
585 | orig = omap_ctrl_readb(cfg->mux_reg); | ||
586 | else | ||
587 | orig = omap_ctrl_readw(cfg->mux_reg); | ||
588 | 605 | ||
589 | #ifdef CONFIG_OMAP_MUX_DEBUG | 606 | #ifdef CONFIG_OMAP_MUX_DEBUG |
590 | debug = cfg->debug; | 607 | debug = cfg->debug; |
@@ -614,7 +631,7 @@ static int __init_or_module omap24xx_cfg_reg(const struct pin_config *cfg) | |||
614 | if (cfg->pu_pd_val) | 631 | if (cfg->pu_pd_val) |
615 | reg |= OMAP2_PULL_UP; | 632 | reg |= OMAP2_PULL_UP; |
616 | omap2_cfg_debug(cfg, reg); | 633 | omap2_cfg_debug(cfg, reg); |
617 | omap_ctrl_writeb(reg, cfg->mux_reg); | 634 | omap_mux_write(reg, cfg->mux_reg - OMAP_MUX_BASE_OFFSET); |
618 | spin_unlock_irqrestore(&mux_spin_lock, flags); | 635 | spin_unlock_irqrestore(&mux_spin_lock, flags); |
619 | 636 | ||
620 | return 0; | 637 | return 0; |
@@ -633,7 +650,7 @@ static int __init_or_module omap34xx_cfg_reg(const struct pin_config *cfg) | |||
633 | spin_lock_irqsave(&mux_spin_lock, flags); | 650 | spin_lock_irqsave(&mux_spin_lock, flags); |
634 | reg |= cfg->mux_val; | 651 | reg |= cfg->mux_val; |
635 | omap2_cfg_debug(cfg, reg); | 652 | omap2_cfg_debug(cfg, reg); |
636 | omap_ctrl_writew(reg, cfg->mux_reg); | 653 | omap_mux_write(reg, cfg->mux_reg - OMAP_MUX_BASE_OFFSET); |
637 | spin_unlock_irqrestore(&mux_spin_lock, flags); | 654 | spin_unlock_irqrestore(&mux_spin_lock, flags); |
638 | 655 | ||
639 | return 0; | 656 | return 0; |
@@ -644,6 +661,21 @@ static int __init_or_module omap34xx_cfg_reg(const struct pin_config *cfg) | |||
644 | 661 | ||
645 | int __init omap2_mux_init(void) | 662 | int __init omap2_mux_init(void) |
646 | { | 663 | { |
664 | u32 mux_pbase; | ||
665 | |||
666 | if (cpu_is_omap2420()) | ||
667 | mux_pbase = OMAP2420_CTRL_BASE + OMAP_MUX_BASE_OFFSET; | ||
668 | else if (cpu_is_omap2430()) | ||
669 | mux_pbase = OMAP243X_CTRL_BASE + OMAP_MUX_BASE_OFFSET; | ||
670 | else if (cpu_is_omap34xx()) | ||
671 | mux_pbase = OMAP343X_CTRL_BASE + OMAP_MUX_BASE_OFFSET; | ||
672 | |||
673 | mux_base = ioremap(mux_pbase, OMAP_MUX_BASE_SZ); | ||
674 | if (!mux_base) { | ||
675 | printk(KERN_ERR "mux: Could not ioremap\n"); | ||
676 | return -ENODEV; | ||
677 | } | ||
678 | |||
647 | if (cpu_is_omap24xx()) { | 679 | if (cpu_is_omap24xx()) { |
648 | arch_mux_cfg.pins = omap24xx_pins; | 680 | arch_mux_cfg.pins = omap24xx_pins; |
649 | arch_mux_cfg.size = OMAP24XX_PINS_SZ; | 681 | arch_mux_cfg.size = OMAP24XX_PINS_SZ; |