diff options
author | Cory Maccarrone <darkstar6262@gmail.com> | 2009-11-22 13:10:50 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2009-11-22 13:24:32 -0500 |
commit | 490a56652295825e3006f8703d96da2ef6580318 (patch) | |
tree | 03cd6a5ac46ddad12a1a57c67d72cdb84c26ce9f /arch/arm/mach-omap1 | |
parent | d9f5007491e3b6693dd00487981676b6b3005d72 (diff) |
omap1: mmc: Add platform init for omap7xx
The MMC mux pins normally used by omap chips in devices.c
are different from what is needed by omap7xx chips. This
change adds a conditional around the mux setup code to
enable the correct mux pins.
The omap730 and omap850 both use a different clock for the "fck"
clock of the MMC interface than other omap processors based on the
SOFT_REQ_REG, pin 12. The "ick" clock is the same as that used
by other omap processors.
* Added the missing clock definition as mmc3_ck to clock.h
* Added the clock definition to omap_clks in clock.c
* Added CK_7XX to the mmci-omap.0 "ick" clock already in clock.c
With these changes, it is now possible to initialize and use MMC
cards with omap730 and omap850 devices.
Signed-off-by: Cory Maccarrone <darkstar6262@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r-- | arch/arm/mach-omap1/clock.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap1/clock.h | 12 | ||||
-rw-r--r-- | arch/arm/mach-omap1/devices.c | 15 | ||||
-rw-r--r-- | arch/arm/mach-omap1/mux.c | 5 |
4 files changed, 30 insertions, 5 deletions
diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c index b4fec9a6e89e..7b146c06ca8a 100644 --- a/arch/arm/mach-omap1/clock.c +++ b/arch/arm/mach-omap1/clock.c | |||
@@ -125,7 +125,8 @@ static struct omap_clk omap_clks[] = { | |||
125 | CLK(NULL, "bclk", &bclk_1510, CK_1510 | CK_310), | 125 | CLK(NULL, "bclk", &bclk_1510, CK_1510 | CK_310), |
126 | CLK(NULL, "bclk", &bclk_16xx, CK_16XX), | 126 | CLK(NULL, "bclk", &bclk_16xx, CK_16XX), |
127 | CLK("mmci-omap.0", "fck", &mmc1_ck, CK_16XX | CK_1510 | CK_310), | 127 | CLK("mmci-omap.0", "fck", &mmc1_ck, CK_16XX | CK_1510 | CK_310), |
128 | CLK("mmci-omap.0", "ick", &armper_ck.clk, CK_16XX | CK_1510 | CK_310), | 128 | CLK("mmci-omap.0", "fck", &mmc3_ck, CK_7XX), |
129 | CLK("mmci-omap.0", "ick", &armper_ck.clk, CK_16XX | CK_1510 | CK_310 | CK_7XX), | ||
129 | CLK("mmci-omap.1", "fck", &mmc2_ck, CK_16XX), | 130 | CLK("mmci-omap.1", "fck", &mmc2_ck, CK_16XX), |
130 | CLK("mmci-omap.1", "ick", &armper_ck.clk, CK_16XX), | 131 | CLK("mmci-omap.1", "ick", &armper_ck.clk, CK_16XX), |
131 | /* Virtual clocks */ | 132 | /* Virtual clocks */ |
diff --git a/arch/arm/mach-omap1/clock.h b/arch/arm/mach-omap1/clock.h index 17f874271255..fac921c00bfe 100644 --- a/arch/arm/mach-omap1/clock.h +++ b/arch/arm/mach-omap1/clock.h | |||
@@ -637,6 +637,18 @@ static struct clk mmc2_ck = { | |||
637 | .enable_bit = 20, | 637 | .enable_bit = 20, |
638 | }; | 638 | }; |
639 | 639 | ||
640 | static struct clk mmc3_ck = { | ||
641 | .name = "mmc_ck", | ||
642 | .id = 2, | ||
643 | .ops = &clkops_generic, | ||
644 | /* Functional clock is direct from ULPD, interface clock is ARMPER */ | ||
645 | .parent = &armper_ck.clk, | ||
646 | .rate = 48000000, | ||
647 | .flags = RATE_FIXED | ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT, | ||
648 | .enable_reg = OMAP1_IO_ADDRESS(SOFT_REQ_REG), | ||
649 | .enable_bit = 12, | ||
650 | }; | ||
651 | |||
640 | static struct clk virtual_ck_mpu = { | 652 | static struct clk virtual_ck_mpu = { |
641 | .name = "mpu", | 653 | .name = "mpu", |
642 | .ops = &clkops_null, | 654 | .ops = &clkops_null, |
diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index 6d2f72dcbb04..23ded2d49600 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c | |||
@@ -108,15 +108,22 @@ static inline void omap1_mmc_mux(struct omap_mmc_platform_data *mmc_controller, | |||
108 | int controller_nr) | 108 | int controller_nr) |
109 | { | 109 | { |
110 | if (controller_nr == 0) { | 110 | if (controller_nr == 0) { |
111 | omap_cfg_reg(MMC_CMD); | 111 | if (cpu_is_omap7xx()) { |
112 | omap_cfg_reg(MMC_CLK); | 112 | omap_cfg_reg(MMC_7XX_CMD); |
113 | omap_cfg_reg(MMC_DAT0); | 113 | omap_cfg_reg(MMC_7XX_CLK); |
114 | omap_cfg_reg(MMC_7XX_DAT0); | ||
115 | } else { | ||
116 | omap_cfg_reg(MMC_CMD); | ||
117 | omap_cfg_reg(MMC_CLK); | ||
118 | omap_cfg_reg(MMC_DAT0); | ||
119 | } | ||
120 | |||
114 | if (cpu_is_omap1710()) { | 121 | if (cpu_is_omap1710()) { |
115 | omap_cfg_reg(M15_1710_MMC_CLKI); | 122 | omap_cfg_reg(M15_1710_MMC_CLKI); |
116 | omap_cfg_reg(P19_1710_MMC_CMDDIR); | 123 | omap_cfg_reg(P19_1710_MMC_CMDDIR); |
117 | omap_cfg_reg(P20_1710_MMC_DATDIR0); | 124 | omap_cfg_reg(P20_1710_MMC_DATDIR0); |
118 | } | 125 | } |
119 | if (mmc_controller->slots[0].wires == 4) { | 126 | if (mmc_controller->slots[0].wires == 4 && !cpu_is_omap7xx()) { |
120 | omap_cfg_reg(MMC_DAT1); | 127 | omap_cfg_reg(MMC_DAT1); |
121 | /* NOTE: DAT2 can be on W10 (here) or M15 */ | 128 | /* NOTE: DAT2 can be on W10 (here) or M15 */ |
122 | if (!mmc_controller->slots[0].nomux) | 129 | if (!mmc_controller->slots[0].nomux) |
diff --git a/arch/arm/mach-omap1/mux.c b/arch/arm/mach-omap1/mux.c index 1e6145c9ee93..785371e982fc 100644 --- a/arch/arm/mach-omap1/mux.c +++ b/arch/arm/mach-omap1/mux.c | |||
@@ -51,6 +51,11 @@ MUX_CFG_7XX("E3_7XX_KBC4", 13, 25, 0, 24, 1, 0) | |||
51 | MUX_CFG_7XX("AA17_7XX_USB_DM", 2, 21, 0, 20, 0, 0) | 51 | MUX_CFG_7XX("AA17_7XX_USB_DM", 2, 21, 0, 20, 0, 0) |
52 | MUX_CFG_7XX("W16_7XX_USB_PU_EN", 2, 25, 0, 24, 0, 0) | 52 | MUX_CFG_7XX("W16_7XX_USB_PU_EN", 2, 25, 0, 24, 0, 0) |
53 | MUX_CFG_7XX("W17_7XX_USB_VBUSI", 2, 29, 0, 28, 0, 0) | 53 | MUX_CFG_7XX("W17_7XX_USB_VBUSI", 2, 29, 0, 28, 0, 0) |
54 | |||
55 | /* MMC Pins */ | ||
56 | MUX_CFG_7XX("MMC_7XX_CMD", 2, 9, 0, 8, 1, 0) | ||
57 | MUX_CFG_7XX("MMC_7XX_CLK", 2, 13, 0, 12, 1, 0) | ||
58 | MUX_CFG_7XX("MMC_7XX_DAT0", 2, 17, 0, 16, 1, 0) | ||
54 | }; | 59 | }; |
55 | #define OMAP7XX_PINS_SZ ARRAY_SIZE(omap7xx_pins) | 60 | #define OMAP7XX_PINS_SZ ARRAY_SIZE(omap7xx_pins) |
56 | #else | 61 | #else |