]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: Adds MMC multislot for apollon
authorKyungmin Park <kyungmin.park@samsung.com>
Sun, 2 Dec 2007 23:47:50 +0000 (08:47 +0900)
committerTony Lindgren <tony@atomide.com>
Mon, 3 Dec 2007 18:24:20 +0000 (10:24 -0800)
Adds MMC support for apollon using the MMC multislot support code.

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/board-apollon-mmc.c [new file with mode: 0644]
arch/arm/mach-omap2/board-apollon.c
include/asm-arm/arch-omap/board-apollon.h

index 21959914d199bf8c49fadf8d295bf98ef4fe79c7..d4d6d9880a6741ddfc737b7a0cc1c3f784251355 100644 (file)
@@ -28,6 +28,7 @@ obj-$(CONFIG_MACH_OMAP_2430SDP)               += board-2430sdp.o \
 obj-$(CONFIG_MACH_OMAP_2430OSK)                += board-2430osk.o
 obj-$(CONFIG_MACH_OMAP_3430SDP)                += board-3430sdp.o
 obj-$(CONFIG_MACH_OMAP_APOLLON)                += board-apollon.o \
+                                          board-apollon-mmc.o  \
                                           board-apollon-keys.o
 obj-$(CONFIG_MACH_NOKIA_N800)          += board-n800.o board-n800-flash.o \
                                           board-n800-mmc.o board-n800-bt.o \
diff --git a/arch/arm/mach-omap2/board-apollon-mmc.c b/arch/arm/mach-omap2/board-apollon-mmc.c
new file mode 100644 (file)
index 0000000..f77167e
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * linux/arch/arm/mach-omap2/board-apollon-mmc.c
+ *
+ * Copyright (C) 2005-2007 Samsung Electronics
+ * Author: Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+
+#include <asm/arch/gpio.h>
+#include <asm/arch/mmc.h>
+
+#ifdef CONFIG_MMC_OMAP
+
+static struct device *mmc_device;
+
+static int apollon_mmc_set_power(struct device *dev, int slot, int power_on,
+                                       int vdd)
+{
+#ifdef CONFIG_MMC_DEBUG
+       dev_dbg(dev, "Set slot %d power: %s (vdd %d)\n", slot + 1,
+               power_on ? "on" : "off", vdd);
+#endif
+       if (slot != 0) {
+               dev_err(dev, "No such slot %d\n", slot + 1);
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
+static int apollon_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode)
+{
+#ifdef CONFIG_MMC_DEBUG
+       dev_dbg(dev, "Set slot %d bus_mode %s\n", slot + 1,
+               bus_mode == MMC_BUSMODE_OPENDRAIN ? "open-drain" : "push-pull");
+#endif
+       if (slot != 0) {
+               dev_err(dev, "No such slot %d\n", slot + 1);
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
+static int apollon_mmc_late_init(struct device *dev)
+{
+       mmc_device = dev;
+
+       return 0;
+}
+
+static void apollon_mmc_cleanup(struct device *dev)
+{
+}
+
+static struct omap_mmc_platform_data apollon_mmc_data = {
+       .nr_slots                       = 1,
+       .switch_slot                    = NULL,
+       .init                           = apollon_mmc_late_init,
+       .cleanup                        = apollon_mmc_cleanup,
+       .slots[0]       = {
+               .set_power              = apollon_mmc_set_power,
+               .set_bus_mode           = apollon_mmc_set_bus_mode,
+               .get_ro                 = NULL,
+               .get_cover_state        = NULL,
+               .ocr_mask               = MMC_VDD_30_31 | MMC_VDD_31_32 |
+                                         MMC_VDD_32_33 | MMC_VDD_33_34,
+               .name                   = "mmcblk",
+       },
+};
+
+void __init apollon_mmc_init(void)
+{
+       omap_set_mmc_info(1, &apollon_mmc_data);
+}
+
+#else  /* !CONFIG_MMC_OMAP */
+
+void __init apollon_mmc_init(void)
+{
+}
+
+#endif /* CONFIG_MMC_OMAP */
index 9cff0278aa00950d1dddcbf8c7c72d3f2124aad9..d81563564895d801ccf4821f4f75b1128b74109d 100644 (file)
@@ -283,16 +283,15 @@ static struct omap_uart_config apollon_uart_config __initdata = {
        .enabled_uarts = (1 << 0) | (0 << 1) | (0 << 2),
 };
 
+/*
+ * Note: If you want to detect card feature, please assign GPIO 37
+ */
 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 */
-               .switch_pin     = -1,
        },
 };
 
@@ -386,6 +385,8 @@ static void __init omap_apollon_init(void)
 
        spi_register_board_info(apollon_spi_board_info,
                                ARRAY_SIZE(apollon_spi_board_info));
+
+       apollon_mmc_init();
 }
 
 static void __init omap_apollon_map_io(void)
index dcb587b311f18fa038b21c38ff0044861a6a9bab..547125a4695e0bbf94c503c2ad6414f64009616b 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef __ASM_ARCH_OMAP_APOLLON_H
 #define __ASM_ARCH_OMAP_APOLLON_H
 
+extern void apollon_mmc_init(void);
+
 /* Placeholder for APOLLON specific defines */
 #define APOLLON_ETHR_GPIO_IRQ          74