]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
ARM: OMAP: Split plat/mmc.h into local headers and platform_data
authorTony Lindgren <tony@atomide.com>
Mon, 15 Oct 2012 19:09:43 +0000 (12:09 -0700)
committerTony Lindgren <tony@atomide.com>
Mon, 15 Oct 2012 19:09:43 +0000 (12:09 -0700)
We need to remove this from plat for ARM common zImage
support.

Also remove includes not needed by the omap_hsmmc.c driver.

Cc: linux-mmc@vger.kernel.org
Acked-by: Chris Ball <cjb@laptop.org>
Acked-by: Venkatraman S <svenkatr@ti.com>
[tony@atomide.com: fold in removal of unused driver includes]
Signed-off-by: Tony Lindgren <tony@atomide.com>
25 files changed:
arch/arm/mach-omap1/board-h2-mmc.c
arch/arm/mach-omap1/board-h3-mmc.c
arch/arm/mach-omap1/board-htcherald.c
arch/arm/mach-omap1/board-innovator.c
arch/arm/mach-omap1/board-nokia770.c
arch/arm/mach-omap1/board-sx1-mmc.c
arch/arm/mach-omap1/devices.c
arch/arm/mach-omap1/mmc.h [new file with mode: 0644]
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-n8x0.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/board-rm680.c
arch/arm/mach-omap2/hsmmc.c
arch/arm/mach-omap2/mmc.h [new file with mode: 0644]
arch/arm/mach-omap2/msdi.c
arch/arm/mach-omap2/omap4-common.c
arch/arm/mach-omap2/omap_hwmod_2420_data.c
arch/arm/mach-omap2/omap_hwmod_2430_data.c
arch/arm/mach-omap2/omap_hwmod_33xx_data.c
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
arch/arm/plat-omap/include/plat/mmc.h [deleted file]
drivers/mmc/host/omap.c
drivers/mmc/host/omap_hsmmc.c
include/linux/platform_data/mmc-omap.h [new file with mode: 0644]

index e1362ce48497e53bc60ef3d81e9ee309f0601bfe..7119ef28e0adf2e7869da0d4238fe0b30ea677c7 100644 (file)
  */
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
-
+#include <linux/platform_data/gpio-omap.h>
 #include <linux/i2c/tps65010.h>
 
-#include <plat/mmc.h>
-
 #include "board-h2.h"
+#include "mmc.h"
 
 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
 
index c74daace8cd686482d3c440eb6a4d1a0472947c7..17d77914d769233d4c1360ef5159a3df98cda596 100644 (file)
@@ -16,9 +16,8 @@
 
 #include <linux/i2c/tps65010.h>
 
-#include <plat/mmc.h>
-
 #include "board-h3.h"
+#include "mmc.h"
 
 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
 
index 87ab2086ef9653a4dce67b93f0cc6d1916048b2e..f23200ceb43ddde23c2bb07fed393cc72e8606af 100644 (file)
@@ -43,7 +43,7 @@
 #include <asm/mach/arch.h>
 
 #include <mach/omap7xx.h>
-#include <plat/mmc.h>
+#include "mmc.h"
 
 #include <mach/irqs.h>
 #include <mach/usb.h>
index db5f7d2976e7286af4d89e52d2c3d7ba02d5a4c0..411cc5b14ce3809b344c9e7e9f21f575cb563e6f 100644 (file)
 #include <plat/fpga.h>
 #include <plat/tc.h>
 #include <linux/platform_data/keypad-omap.h>
-#include <plat/mmc.h>
 
 #include <mach/hardware.h>
 #include <mach/usb.h>
 
 #include "iomap.h"
 #include "common.h"
+#include "mmc.h"
 
 /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */
 #define INNOVATOR1610_ETHR_START       0x04000300
index 7d5c06d6a52a4428cf9243d44f4239ee92616c98..cb72f247443011d67226971b684c7a21b20e36bd 100644 (file)
 #include <asm/mach/map.h>
 
 #include <mach/mux.h>
-#include <plat/mmc.h>
 #include <plat/clock.h>
 
 #include <mach/hardware.h>
 #include <mach/usb.h>
 
 #include "common.h"
+#include "mmc.h"
 
 #define ADS7846_PENDOWN_GPIO   15
 
index 5932d56e17bf559642b397f7df96deea24eaaf26..4fcf19c78a086e2c4a0529ca5ad85ef85dda3050 100644 (file)
 #include <linux/platform_device.h>
 
 #include <mach/hardware.h>
-#include <plat/mmc.h>
 #include <mach/board-sx1.h>
 
+#include "mmc.h"
+
 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
 
 static int mmc_set_power(struct device *dev, int slot, int power_on,
index d3fec92c54cb5d5d852974c9e9c3ec7ad58e72bc..f85836ae669180a279d1d558fdc85179982d3ee4 100644 (file)
@@ -22,7 +22,6 @@
 #include <plat/tc.h>
 #include <mach/mux.h>
 #include <plat/dma.h>
-#include <plat/mmc.h>
 
 #include <mach/omap7xx.h>
 #include <mach/camera.h>
@@ -30,6 +29,7 @@
 
 #include "common.h"
 #include "clock.h"
+#include "mmc.h"
 
 #if defined(CONFIG_SND_SOC) || defined(CONFIG_SND_SOC_MODULE)
 
diff --git a/arch/arm/mach-omap1/mmc.h b/arch/arm/mach-omap1/mmc.h
new file mode 100644 (file)
index 0000000..39c2b13
--- /dev/null
@@ -0,0 +1,18 @@
+#include <linux/mmc/host.h>
+#include <linux/platform_data/mmc-omap.h>
+
+#define OMAP15XX_NR_MMC                1
+#define OMAP16XX_NR_MMC                2
+#define OMAP1_MMC_SIZE         0x080
+#define OMAP1_MMC1_BASE                0xfffb7800
+#define OMAP1_MMC2_BASE                0xfffb7c00      /* omap16xx only */
+
+#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
+void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
+                               int nr_controllers);
+#else
+static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
+                               int nr_controllers)
+{
+}
+#endif
index 3669c120c7e8a7b29628273ea4dbf2d3bfac39b7..2ab267ec3b75e8922e2895a9e001267c27d18e32 100644 (file)
@@ -35,7 +35,6 @@
 
 #include "common.h"
 #include <plat/usb.h>
-#include <plat/mmc.h>
 #include "omap4-keypad.h"
 #include <video/omapdss.h>
 #include <video/omap-panel-nokia-dsi.h>
@@ -45,6 +44,7 @@
 
 #include "soc.h"
 #include "mux.h"
+#include "mmc.h"
 #include "hsmmc.h"
 #include "control.h"
 #include "common-board-devices.h"
index d95f727ca39a1c2297c98ff9f2aca78e170b1feb..f865ace5cf85bc0cc4dc81e2412fa15ede944cf2 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "common.h"
 #include <plat/menelaus.h>
-#include <plat/mmc.h>
+#include "mmc.h"
 
 #include "mux.h"
 
index bfcd397e233c8750ee2d92f85b025d70c02c0699..e9ce9fb9ffaccfdcb0d6bcfead798a6746e4591b 100644 (file)
 
 #include "common.h"
 #include <plat/usb.h>
-#include <plat/mmc.h>
 #include <video/omap-panel-tfp410.h>
 
 #include "soc.h"
+#include "mmc.h"
 #include "hsmmc.h"
 #include "control.h"
 #include "mux.h"
index 45997bfbcbd2e8b14eb94930eb9e227180a3b286..f4b3c288e16b3b7dacfc04d0c1dce93448aec748 100644 (file)
 #include <asm/mach-types.h>
 
 #include <plat/i2c.h>
-#include <plat/mmc.h>
 #include <plat/usb.h>
 #include <plat/gpmc.h>
 #include "common.h"
 #include <plat/serial.h>
 
 #include "mux.h"
+#include "mmc.h"
 #include "hsmmc.h"
 #include "sdram-nokia.h"
 #include "common-board-devices.h"
index 4d3a6324155f95de768fd1416f81ad068e80c3bd..ec6c2230cb381d53da4fd1b92685e074f1e8035c 100644 (file)
 #include <mach/hardware.h>
 #include <linux/platform_data/gpio-omap.h>
 
-#include <plat/mmc.h>
 #include <plat/omap-pm.h>
 #include <plat/omap_device.h>
 
 #include "mux.h"
+#include "mmc.h"
 #include "hsmmc.h"
 #include "control.h"
 
diff --git a/arch/arm/mach-omap2/mmc.h b/arch/arm/mach-omap2/mmc.h
new file mode 100644 (file)
index 0000000..0cd4b08
--- /dev/null
@@ -0,0 +1,23 @@
+#include <linux/mmc/host.h>
+#include <linux/platform_data/mmc-omap.h>
+
+#define OMAP24XX_NR_MMC                2
+#define OMAP2420_MMC_SIZE      OMAP1_MMC_SIZE
+#define OMAP2_MMC1_BASE                0x4809c000
+
+#define OMAP4_MMC_REG_OFFSET   0x100
+
+#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
+void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data);
+#else
+static inline void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data)
+{
+}
+#endif
+
+struct omap_hwmod;
+int omap_msdi_reset(struct omap_hwmod *oh);
+
+/* called from board-specific card detection service routine */
+extern void omap_mmc_notify_cover_event(struct device *dev, int slot,
+                                       int is_closed);
index 9e57b4aadb0694bedc233599ddeb30c8d45a2567..a6020d7504312de90d15f89c8561fe3ca004b98f 100644 (file)
 
 #include <plat/omap_hwmod.h>
 #include <plat/omap_device.h>
-#include <plat/mmc.h>
 
 #include "common.h"
 #include "control.h"
 #include "mux.h"
+#include "mmc.h"
 
 /*
  * MSDI_CON_OFFSET: offset in bytes of the MSDI IP block's CON register
index e1f289748c5d5d7021b8f079c878bb723466785e..de89d382f52cf060a1428357fb64be305f37b183 100644 (file)
 
 #include <plat/sram.h>
 #include <plat/omap-secure.h>
-#include <plat/mmc.h>
 
 #include "omap-wakeupgen.h"
 
 #include "soc.h"
 #include "common.h"
+#include "mmc.h"
 #include "hsmmc.h"
 #include "omap4-sar-layout.h"
 
index b5db6007c523413cfd0e2b4f1063b5451a231f00..82ad9a57661ec8153886972832549192e5049a8f 100644 (file)
 #include <plat/dmtimer.h>
 #include "l3_2xxx.h"
 #include "l4_2xxx.h"
-#include <plat/mmc.h>
 
 #include "omap_hwmod_common_data.h"
 
 #include "cm-regbits-24xx.h"
 #include "prm-regbits-24xx.h"
+#include "mmc.h"
 #include "wd_timer.h"
 
 /*
index c455e41b02374ce7028a2bb3b9c0f8c45a57f1eb..5c833fb35d21f6f2d8b29f402b3fbda6cf80765d 100644 (file)
@@ -20,7 +20,7 @@
 #include <plat/serial.h>
 #include <plat/i2c.h>
 #include <plat/dmtimer.h>
-#include <plat/mmc.h>
+#include "mmc.h"
 #include "l3_2xxx.h"
 
 #include "soc.h"
index 59d5c1cd316d5eb71c924b3b945ff166e94b9088..d023a99cfd7ac2371485662aea9bb778387fb84a 100644 (file)
@@ -19,7 +19,6 @@
 #include <linux/platform_data/gpio-omap.h>
 #include <linux/platform_data/spi-omap2-mcspi.h>
 #include <plat/dma.h>
-#include <plat/mmc.h>
 #include <plat/i2c.h>
 
 #include "omap_hwmod_common_data.h"
@@ -28,6 +27,7 @@
 #include "cm33xx.h"
 #include "prm33xx.h"
 #include "prm-regbits-33xx.h"
+#include "mmc.h"
 
 /*
  * IP blocks
index f67b7ee07dd4f5575e206c2098bb67c88fa32873..509e8ba3fe7597aa2e6c8284226801e2ca1d5b7a 100644 (file)
@@ -23,7 +23,6 @@
 #include "l3_3xxx.h"
 #include "l4_3xxx.h"
 #include <plat/i2c.h>
-#include <plat/mmc.h>
 #include <linux/platform_data/asoc-ti-mcbsp.h>
 #include <linux/platform_data/spi-omap2-mcspi.h>
 #include <plat/dmtimer.h>
@@ -35,6 +34,7 @@
 #include "omap_hwmod_common_data.h"
 #include "prm-regbits-34xx.h"
 #include "cm-regbits-34xx.h"
+#include "mmc.h"
 #include "wd_timer.h"
 
 /*
index 652d0285bd6dd7b1a445bcbab02e395e04c5e11a..f87d781c4ebbbbf29fd2059c60a264ff68b4e62f 100644 (file)
@@ -27,7 +27,6 @@
 #include <plat/dma.h>
 #include <linux/platform_data/spi-omap2-mcspi.h>
 #include <linux/platform_data/asoc-ti-mcbsp.h>
-#include <plat/mmc.h>
 #include <plat/dmtimer.h>
 #include <plat/common.h>
 #include <plat/iommu.h>
@@ -37,6 +36,7 @@
 #include "cm2_44xx.h"
 #include "prm44xx.h"
 #include "prm-regbits-44xx.h"
+#include "mmc.h"
 #include "wd_timer.h"
 
 /* Base offset for all OMAP4 interrupts external to MPUSS */
diff --git a/arch/arm/plat-omap/include/plat/mmc.h b/arch/arm/plat-omap/include/plat/mmc.h
deleted file mode 100644 (file)
index 8b4e4f2..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * MMC definitions for OMAP2
- *
- * Copyright (C) 2006 Nokia Corporation
- *
- * 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.
- */
-
-#ifndef __OMAP2_MMC_H
-#define __OMAP2_MMC_H
-
-#include <linux/types.h>
-#include <linux/device.h>
-#include <linux/mmc/host.h>
-
-#include <plat/omap_hwmod.h>
-
-#define OMAP15XX_NR_MMC                1
-#define OMAP16XX_NR_MMC                2
-#define OMAP1_MMC_SIZE         0x080
-#define OMAP1_MMC1_BASE                0xfffb7800
-#define OMAP1_MMC2_BASE                0xfffb7c00      /* omap16xx only */
-
-#define OMAP24XX_NR_MMC                2
-#define OMAP2420_MMC_SIZE      OMAP1_MMC_SIZE
-#define OMAP2_MMC1_BASE                0x4809c000
-
-#define OMAP4_MMC_REG_OFFSET   0x100
-
-#define OMAP_MMC_MAX_SLOTS     2
-
-/*
- * struct omap_mmc_dev_attr.flags possibilities
- *
- * OMAP_HSMMC_SUPPORTS_DUAL_VOLT: Some HSMMC controller instances can
- *    operate with either 1.8Vdc or 3.0Vdc card voltages; this flag
- *    should be set if this is the case.  See for example Section 22.5.3
- *    "MMC/SD/SDIO1 Bus Voltage Selection" of the OMAP34xx Multimedia
- *    Device Silicon Revision 3.1.x Revision ZR (July 2011) (SWPU223R).
- *
- * OMAP_HSMMC_BROKEN_MULTIBLOCK_READ: Multiple-block read transfers
- *    don't work correctly on some MMC controller instances on some
- *    OMAP3 SoCs; this flag should be set if this is the case.  See
- *    for example Advisory 2.1.1.128 "MMC: Multiple Block Read
- *    Operation Issue" in _OMAP3530/3525/3515/3503 Silicon Errata_
- *    Revision F (October 2010) (SPRZ278F).
- */
-#define OMAP_HSMMC_SUPPORTS_DUAL_VOLT          BIT(0)
-#define OMAP_HSMMC_BROKEN_MULTIBLOCK_READ      BIT(1)
-
-struct omap_mmc_dev_attr {
-       u8 flags;
-};
-
-struct omap_mmc_platform_data {
-       /* back-link to device */
-       struct device *dev;
-
-       /* number of slots per controller */
-       unsigned nr_slots:2;
-
-       /* set if your board has components or wiring that limits the
-        * maximum frequency on the MMC bus */
-       unsigned int max_freq;
-
-       /* switch the bus to a new slot */
-       int (*switch_slot)(struct device *dev, int slot);
-       /* initialize board-specific MMC functionality, can be NULL if
-        * not supported */
-       int (*init)(struct device *dev);
-       void (*cleanup)(struct device *dev);
-       void (*shutdown)(struct device *dev);
-
-       /* To handle board related suspend/resume functionality for MMC */
-       int (*suspend)(struct device *dev, int slot);
-       int (*resume)(struct device *dev, int slot);
-
-       /* Return context loss count due to PM states changing */
-       int (*get_context_loss_count)(struct device *dev);
-
-       /* Integrating attributes from the omap_hwmod layer */
-       u8 controller_flags;
-
-       /* Register offset deviation */
-       u16 reg_offset;
-
-       struct omap_mmc_slot_data {
-
-               /*
-                * 4/8 wires and any additional host capabilities
-                * need to OR'd all capabilities (ref. linux/mmc/host.h)
-                */
-               u8  wires;      /* Used for the MMC driver on omap1 and 2420 */
-               u32 caps;       /* Used for the MMC driver on 2430 and later */
-               u32 pm_caps;    /* PM capabilities of the mmc */
-
-               /*
-                * nomux means "standard" muxing is wrong on this board, and
-                * that board-specific code handled it before common init logic.
-                */
-               unsigned nomux:1;
-
-               /* switch pin can be for card detect (default) or card cover */
-               unsigned cover:1;
-
-               /* use the internal clock */
-               unsigned internal_clock:1;
-
-               /* nonremovable e.g. eMMC */
-               unsigned nonremovable:1;
-
-               /* Try to sleep or power off when possible */
-               unsigned power_saving:1;
-
-               /* If using power_saving and the MMC power is not to go off */
-               unsigned no_off:1;
-
-               /* eMMC does not handle power off when not in sleep state */
-               unsigned no_regulator_off_init:1;
-
-               /* Regulator off remapped to sleep */
-               unsigned vcc_aux_disable_is_sleep:1;
-
-               /* we can put the features above into this variable */
-#define HSMMC_HAS_PBIAS                (1 << 0)
-#define HSMMC_HAS_UPDATED_RESET        (1 << 1)
-               unsigned features;
-
-               int switch_pin;                 /* gpio (card detect) */
-               int gpio_wp;                    /* gpio (write protect) */
-
-               int (*set_bus_mode)(struct device *dev, int slot, int bus_mode);
-               int (*set_power)(struct device *dev, int slot,
-                                int power_on, int vdd);
-               int (*get_ro)(struct device *dev, int slot);
-               void (*remux)(struct device *dev, int slot, int power_on);
-               /* Call back before enabling / disabling regulators */
-               void (*before_set_reg)(struct device *dev, int slot,
-                                      int power_on, int vdd);
-               /* Call back after enabling / disabling regulators */
-               void (*after_set_reg)(struct device *dev, int slot,
-                                     int power_on, int vdd);
-               /* if we have special card, init it using this callback */
-               void (*init_card)(struct mmc_card *card);
-
-               /* return MMC cover switch state, can be NULL if not supported.
-                *
-                * possible return values:
-                *   0 - closed
-                *   1 - open
-                */
-               int (*get_cover_state)(struct device *dev, int slot);
-
-               const char *name;
-               u32 ocr_mask;
-
-               /* Card detection IRQs */
-               int card_detect_irq;
-               int (*card_detect)(struct device *dev, int slot);
-
-               unsigned int ban_openended:1;
-
-       } slots[OMAP_MMC_MAX_SLOTS];
-};
-
-/* called from board-specific card detection service routine */
-extern void omap_mmc_notify_cover_event(struct device *dev, int slot,
-                                       int is_closed);
-
-#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
-void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
-                               int nr_controllers);
-void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data);
-#else
-static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
-                               int nr_controllers)
-{
-}
-static inline void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data)
-{
-}
-#endif
-
-extern int omap_msdi_reset(struct omap_hwmod *oh);
-
-#endif
index 48ad361613efb2ebaca728ac53f87a147e8beb45..e7c61b9b044cd9285c9606c78bba70863c2ec76f 100644 (file)
@@ -28,8 +28,9 @@
 #include <linux/clk.h>
 #include <linux/scatterlist.h>
 #include <linux/slab.h>
+#include <linux/platform_data/mmc-omap.h>
 
-#include <plat/mmc.h>
+#include <plat/cpu.h>
 #include <plat/dma.h>
 
 #define        OMAP_MMC_REG_CMD        0x00
index 54bfd0cc106b92280cd75818310d81aa56c48ccb..9b24bd46aad3ea5fd26d887e91eef1f46bdb76b5 100644 (file)
@@ -38,9 +38,7 @@
 #include <linux/gpio.h>
 #include <linux/regulator/consumer.h>
 #include <linux/pm_runtime.h>
-#include <mach/hardware.h>
-#include <plat/mmc.h>
-#include <plat/cpu.h>
+#include <linux/platform_data/mmc-omap.h>
 
 /* OMAP HSMMC Host Controller Registers */
 #define OMAP_HSMMC_SYSSTATUS   0x0014
diff --git a/include/linux/platform_data/mmc-omap.h b/include/linux/platform_data/mmc-omap.h
new file mode 100644 (file)
index 0000000..39a7abc
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * MMC definitions for OMAP2
+ *
+ * Copyright (C) 2006 Nokia Corporation
+ *
+ * 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.
+ */
+
+#define OMAP_MMC_MAX_SLOTS     2
+
+/*
+ * struct omap_mmc_dev_attr.flags possibilities
+ *
+ * OMAP_HSMMC_SUPPORTS_DUAL_VOLT: Some HSMMC controller instances can
+ *    operate with either 1.8Vdc or 3.0Vdc card voltages; this flag
+ *    should be set if this is the case.  See for example Section 22.5.3
+ *    "MMC/SD/SDIO1 Bus Voltage Selection" of the OMAP34xx Multimedia
+ *    Device Silicon Revision 3.1.x Revision ZR (July 2011) (SWPU223R).
+ *
+ * OMAP_HSMMC_BROKEN_MULTIBLOCK_READ: Multiple-block read transfers
+ *    don't work correctly on some MMC controller instances on some
+ *    OMAP3 SoCs; this flag should be set if this is the case.  See
+ *    for example Advisory 2.1.1.128 "MMC: Multiple Block Read
+ *    Operation Issue" in _OMAP3530/3525/3515/3503 Silicon Errata_
+ *    Revision F (October 2010) (SPRZ278F).
+ */
+#define OMAP_HSMMC_SUPPORTS_DUAL_VOLT          BIT(0)
+#define OMAP_HSMMC_BROKEN_MULTIBLOCK_READ      BIT(1)
+
+struct mmc_card;
+
+struct omap_mmc_dev_attr {
+       u8 flags;
+};
+
+struct omap_mmc_platform_data {
+       /* back-link to device */
+       struct device *dev;
+
+       /* number of slots per controller */
+       unsigned nr_slots:2;
+
+       /* set if your board has components or wiring that limits the
+        * maximum frequency on the MMC bus */
+       unsigned int max_freq;
+
+       /* switch the bus to a new slot */
+       int (*switch_slot)(struct device *dev, int slot);
+       /* initialize board-specific MMC functionality, can be NULL if
+        * not supported */
+       int (*init)(struct device *dev);
+       void (*cleanup)(struct device *dev);
+       void (*shutdown)(struct device *dev);
+
+       /* To handle board related suspend/resume functionality for MMC */
+       int (*suspend)(struct device *dev, int slot);
+       int (*resume)(struct device *dev, int slot);
+
+       /* Return context loss count due to PM states changing */
+       int (*get_context_loss_count)(struct device *dev);
+
+       /* Integrating attributes from the omap_hwmod layer */
+       u8 controller_flags;
+
+       /* Register offset deviation */
+       u16 reg_offset;
+
+       struct omap_mmc_slot_data {
+
+               /*
+                * 4/8 wires and any additional host capabilities
+                * need to OR'd all capabilities (ref. linux/mmc/host.h)
+                */
+               u8  wires;      /* Used for the MMC driver on omap1 and 2420 */
+               u32 caps;       /* Used for the MMC driver on 2430 and later */
+               u32 pm_caps;    /* PM capabilities of the mmc */
+
+               /*
+                * nomux means "standard" muxing is wrong on this board, and
+                * that board-specific code handled it before common init logic.
+                */
+               unsigned nomux:1;
+
+               /* switch pin can be for card detect (default) or card cover */
+               unsigned cover:1;
+
+               /* use the internal clock */
+               unsigned internal_clock:1;
+
+               /* nonremovable e.g. eMMC */
+               unsigned nonremovable:1;
+
+               /* Try to sleep or power off when possible */
+               unsigned power_saving:1;
+
+               /* If using power_saving and the MMC power is not to go off */
+               unsigned no_off:1;
+
+               /* eMMC does not handle power off when not in sleep state */
+               unsigned no_regulator_off_init:1;
+
+               /* Regulator off remapped to sleep */
+               unsigned vcc_aux_disable_is_sleep:1;
+
+               /* we can put the features above into this variable */
+#define HSMMC_HAS_PBIAS                (1 << 0)
+#define HSMMC_HAS_UPDATED_RESET        (1 << 1)
+               unsigned features;
+
+               int switch_pin;                 /* gpio (card detect) */
+               int gpio_wp;                    /* gpio (write protect) */
+
+               int (*set_bus_mode)(struct device *dev, int slot, int bus_mode);
+               int (*set_power)(struct device *dev, int slot,
+                                int power_on, int vdd);
+               int (*get_ro)(struct device *dev, int slot);
+               void (*remux)(struct device *dev, int slot, int power_on);
+               /* Call back before enabling / disabling regulators */
+               void (*before_set_reg)(struct device *dev, int slot,
+                                      int power_on, int vdd);
+               /* Call back after enabling / disabling regulators */
+               void (*after_set_reg)(struct device *dev, int slot,
+                                     int power_on, int vdd);
+               /* if we have special card, init it using this callback */
+               void (*init_card)(struct mmc_card *card);
+
+               /* return MMC cover switch state, can be NULL if not supported.
+                *
+                * possible return values:
+                *   0 - closed
+                *   1 - open
+                */
+               int (*get_cover_state)(struct device *dev, int slot);
+
+               const char *name;
+               u32 ocr_mask;
+
+               /* Card detection IRQs */
+               int card_detect_irq;
+               int (*card_detect)(struct device *dev, int slot);
+
+               unsigned int ban_openended:1;
+
+       } slots[OMAP_MMC_MAX_SLOTS];
+};