]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: Define use internal clock field in MMCconfiguration
authorKyungmin Park <kmpark@infradead.org>
Tue, 5 Jun 2007 10:25:32 +0000 (03:25 -0700)
committerTony Lindgren <tony@atomide.com>
Tue, 5 Jun 2007 10:25:32 +0000 (03:25 -0700)
With the recent omap24xx register cleanup, the CONTROL_DEVCONF is only defined
at arch/arm/mach-omap2/pm.c.
So define 24XX_CONTROL_DEVCONF and use internal clock field in MMC
configuration.
I think it's the proper place to set mmc clock instead of  board-specific one.

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
--
b/arch/arm/mach-omap2/board-apollon.c
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/board-apollon.c
arch/arm/plat-omap/devices.c
include/asm-arm/arch-omap/board.h
include/asm-arm/arch-omap/omap24xx.h

index 1276f1f447361e0ef81fb1860b567d608cc73f8d..16428f629020b1d19516d75f54631e51fd13b84c 100644 (file)
@@ -251,6 +251,8 @@ static struct omap_mmc_config apollon_mmc_config __initdata = {
        .mmc [0] = {
                .enabled        = 1,
                .wire4          = 1,
+       /* Use internal loop-back in MMC/SDIO Module Input Clock selection */
+               .internal_clock = 1,
                .wp_pin         = -1,
                .power_pin      = -1,
        /* Note: If you want to detect card feature, please assign 37 */
@@ -311,9 +313,6 @@ static void __init omap_apollon_init(void)
        apollon_flash_init();
        apollon_usb_init();
 
-       /* Use Interal loop-back in MMC/SDIO Module Input Clock selection */
-       CONTROL_DEVCONF |= (1 << 24);
-
        /*
         * Make sure the serial ports are muxed on at this point.
         * You have to mux them off in device drivers later on
index f8a341bdb9d624fc2cea026a2dbad3af9f87d4a6..ba55f4f449c57c0d714aff971366f30e76a4de3e 100644 (file)
@@ -339,6 +339,17 @@ static void __init omap_init_mmc(void)
                                omap_cfg_reg(MMC_DAT3);
                        }
                }
+               if (mmc->internal_clock) {
+                       /*
+                        * Use internal loop-back in MMC/SDIO
+                        * Module Input Clock selection
+                        */
+                       if (cpu_is_omap24xx()) {
+                               u32 v = omap_readl(OMAP24XX_CONTROL_DEVCONF);
+                               v |= (1 << 24);
+                               omap_writel(v, OMAP24XX_CONTROL_DEVCONF);
+                       }
+               }
                mmc1_conf = *mmc;
                (void) platform_device_register(&mmc_omap_device1);
        }
index dccd62bb5e171ae6fe017ab655cdb7d53999dd24..acc168fede28e215d91d65d02afae25a89b53500 100644 (file)
@@ -48,6 +48,8 @@ struct omap_mmc_conf {
        unsigned cover:1;
        /* 4 wire signaling is optional, and is only used for SD/SDIO */
        unsigned wire4:1;
+       /* use the internal clock */
+       unsigned internal_clock:1;
        s16 power_pin;
        s16 switch_pin;
        s16 wp_pin;
index 19b93efae933b0b8d0dc5e1deadd27a5bdd0781d..d78de98e0d988c46045a60afc576d7ae50329b9f 100644 (file)
@@ -16,6 +16,7 @@
 #define OMAP24XX_IVA_INTC_BASE 0x40000000
 #define IRQ_SIR_IRQ            0x0040
 
+#define OMAP24XX_CONTROL_DEVCONF       (L4_24XX_BASE + 0x274)
 #define OMAP24XX_CONTROL_STATUS        (L4_24XX_BASE + 0x2f8)
 
 #define OMAP2420_CTRL_BASE     L4_24XX_BASE