aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap1
diff options
context:
space:
mode:
authorCory Maccarrone <darkstar6262@gmail.com>2009-11-22 13:10:50 -0500
committerTony Lindgren <tony@atomide.com>2009-11-22 13:24:32 -0500
commit490a56652295825e3006f8703d96da2ef6580318 (patch)
tree03cd6a5ac46ddad12a1a57c67d72cdb84c26ce9f /arch/arm/mach-omap1
parentd9f5007491e3b6693dd00487981676b6b3005d72 (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.c3
-rw-r--r--arch/arm/mach-omap1/clock.h12
-rw-r--r--arch/arm/mach-omap1/devices.c15
-rw-r--r--arch/arm/mach-omap1/mux.c5
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
640static 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
640static struct clk virtual_ck_mpu = { 652static 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)
51MUX_CFG_7XX("AA17_7XX_USB_DM", 2, 21, 0, 20, 0, 0) 51MUX_CFG_7XX("AA17_7XX_USB_DM", 2, 21, 0, 20, 0, 0)
52MUX_CFG_7XX("W16_7XX_USB_PU_EN", 2, 25, 0, 24, 0, 0) 52MUX_CFG_7XX("W16_7XX_USB_PU_EN", 2, 25, 0, 24, 0, 0)
53MUX_CFG_7XX("W17_7XX_USB_VBUSI", 2, 29, 0, 28, 0, 0) 53MUX_CFG_7XX("W17_7XX_USB_VBUSI", 2, 29, 0, 28, 0, 0)
54
55/* MMC Pins */
56MUX_CFG_7XX("MMC_7XX_CMD", 2, 9, 0, 8, 1, 0)
57MUX_CFG_7XX("MMC_7XX_CLK", 2, 13, 0, 12, 1, 0)
58MUX_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