diff options
24 files changed, 91 insertions, 78 deletions
diff --git a/arch/arm/mach-omap1/board-h2-mmc.c b/arch/arm/mach-omap1/board-h2-mmc.c index e1362ce4849..7119ef28e0a 100644 --- a/arch/arm/mach-omap1/board-h2-mmc.c +++ b/arch/arm/mach-omap1/board-h2-mmc.c @@ -13,12 +13,11 @@   */  #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) diff --git a/arch/arm/mach-omap1/board-h3-mmc.c b/arch/arm/mach-omap1/board-h3-mmc.c index c74daace8cd..17d77914d76 100644 --- a/arch/arm/mach-omap1/board-h3-mmc.c +++ b/arch/arm/mach-omap1/board-h3-mmc.c @@ -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) diff --git a/arch/arm/mach-omap1/board-htcherald.c b/arch/arm/mach-omap1/board-htcherald.c index 87ab2086ef9..f23200ceb43 100644 --- a/arch/arm/mach-omap1/board-htcherald.c +++ b/arch/arm/mach-omap1/board-htcherald.c @@ -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> diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index db5f7d2976e..411cc5b14ce 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c @@ -36,13 +36,13 @@  #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 diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index 7d5c06d6a52..cb72f247443 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c @@ -29,13 +29,13 @@  #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 diff --git a/arch/arm/mach-omap1/board-sx1-mmc.c b/arch/arm/mach-omap1/board-sx1-mmc.c index 5932d56e17b..4fcf19c78a0 100644 --- a/arch/arm/mach-omap1/board-sx1-mmc.c +++ b/arch/arm/mach-omap1/board-sx1-mmc.c @@ -16,9 +16,10 @@  #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, diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index 894e7c9b57f..8e32d50d275 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c @@ -21,7 +21,6 @@  #include <plat/tc.h>  #include <mach/mux.h> -#include <plat/mmc.h>  #include <mach/omap7xx.h>  #include <mach/camera.h> @@ -30,6 +29,7 @@  #include "common.h"  #include "clock.h"  #include "dma.h" +#include "mmc.h"  #if defined(CONFIG_SND_SOC) || defined(CONFIG_SND_SOC_MODULE) @@ -175,6 +175,13 @@ static int __init omap_mmc_add(const char *name, int id, unsigned long base,  	res[3].name = "tx";  	res[3].flags = IORESOURCE_DMA; +	if (cpu_is_omap7xx()) +		data->slots[0].features = MMC_OMAP7XX; +	if (cpu_is_omap15xx()) +		data->slots[0].features = MMC_OMAP15XX; +	if (cpu_is_omap16xx()) +		data->slots[0].features = MMC_OMAP16XX; +  	ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));  	if (ret == 0)  		ret = platform_device_add_data(pdev, data, sizeof(*data)); diff --git a/arch/arm/mach-omap1/mmc.h b/arch/arm/mach-omap1/mmc.h new file mode 100644 index 00000000000..39c2b13de88 --- /dev/null +++ b/arch/arm/mach-omap1/mmc.h @@ -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 diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 3669c120c7e..2ab267ec3b7 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -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" diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index 92b19166aac..cea433b9b7b 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c @@ -29,7 +29,7 @@  #include "common.h"  #include <plat/menelaus.h> -#include <plat/mmc.h> +#include "mmc.h"  #include "mux.h"  #include "gpmc-onenand.h" diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index bfcd397e233..e9ce9fb9ffa 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -40,10 +40,10 @@  #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" diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c index 3c3a47317f8..208a7a239db 100644 --- a/arch/arm/mach-omap2/board-rm680.c +++ b/arch/arm/mach-omap2/board-rm680.c @@ -23,13 +23,13 @@  #include <asm/mach-types.h>  #include <plat/i2c.h> -#include <plat/mmc.h>  #include <plat/usb.h>  #include "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" diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index 4d3a6324155..ec6c2230cb3 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c @@ -17,11 +17,11 @@  #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 index 00000000000..0cd4b089da9 --- /dev/null +++ b/arch/arm/mach-omap2/mmc.h @@ -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); diff --git a/arch/arm/mach-omap2/msdi.c b/arch/arm/mach-omap2/msdi.c index 9e57b4aadb0..a6020d75043 100644 --- a/arch/arm/mach-omap2/msdi.c +++ b/arch/arm/mach-omap2/msdi.c @@ -27,11 +27,11 @@  #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 diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index e1f289748c5..de89d382f52 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -27,12 +27,12 @@  #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" diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index 917b1f47598..80bbbee5764 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c @@ -21,12 +21,12 @@  #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"  /* diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index 2a6d1ab31bd..dff04f948a2 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c @@ -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" diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index f7f3c2dfa0a..44a661882a7 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c @@ -18,8 +18,6 @@  #include <plat/cpu.h>  #include <linux/platform_data/gpio-omap.h>  #include <linux/platform_data/spi-omap2-mcspi.h> -#include <plat-omap/dma-omap.h> -#include <plat/mmc.h>  #include <plat/i2c.h>  #include "omap_hwmod_common_data.h" @@ -28,6 +26,7 @@  #include "cm33xx.h"  #include "prm33xx.h"  #include "prm-regbits-33xx.h" +#include "mmc.h"  /*   * IP blocks diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 76ef2adc683..2aaf3ce8062 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -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> @@ -37,6 +36,7 @@  #include "cm-regbits-34xx.h"  #include "dma.h" +#include "mmc.h"  #include "wd_timer.h"  /* diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index 5f59b16978f..f47a57fa1f3 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c @@ -27,7 +27,6 @@  #include <plat-omap/dma-omap.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/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c index c59c4d25165..ae115c01283 100644 --- a/drivers/mmc/host/omap.c +++ b/drivers/mmc/host/omap.c @@ -28,9 +28,8 @@  #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-omap/dma-omap.h>  #define	OMAP_MMC_REG_CMD	0x00  #define	OMAP_MMC_REG_ARGL	0x01 @@ -72,6 +71,13 @@  #define	OMAP_MMC_STAT_CARD_BUSY		(1 <<  2)  #define	OMAP_MMC_STAT_END_OF_CMD	(1 <<  0) +#define mmc_omap7xx()	(host->features & MMC_OMAP7XX) +#define mmc_omap15xx()	(host->features & MMC_OMAP15XX) +#define mmc_omap16xx()	(host->features & MMC_OMAP16XX) +#define MMC_OMAP1_MASK	(MMC_OMAP7XX | MMC_OMAP15XX | MMC_OMAP16XX) +#define mmc_omap1()	(host->features & MMC_OMAP1_MASK) +#define mmc_omap2()	(!mmc_omap1()) +  #define OMAP_MMC_REG(host, reg)		(OMAP_MMC_REG_##reg << (host)->reg_shift)  #define OMAP_MMC_READ(host, reg)	__raw_readw((host)->virt_base + OMAP_MMC_REG(host, reg))  #define OMAP_MMC_WRITE(host, reg, val)	__raw_writew((val), (host)->virt_base + OMAP_MMC_REG(host, reg)) @@ -157,6 +163,7 @@ struct mmc_omap_host {  	u32			buffer_bytes_left;  	u32			total_bytes_left; +	unsigned		features;  	unsigned		use_dma:1;  	unsigned		brs_received:1, dma_done:1;  	unsigned		dma_in_use:1; @@ -998,7 +1005,7 @@ mmc_omap_prepare_data(struct mmc_omap_host *host, struct mmc_request *req)  		 * blocksize is at least that large. Blocksize is  		 * usually 512 bytes; but not for some SD reads.  		 */ -		burst = cpu_is_omap15xx() ? 32 : 64; +		burst = mmc_omap15xx() ? 32 : 64;  		if (burst > data->blksz)  			burst = data->blksz; @@ -1114,8 +1121,7 @@ static void mmc_omap_set_power(struct mmc_omap_slot *slot, int power_on,  	if (slot->pdata->set_power != NULL)  		slot->pdata->set_power(mmc_dev(slot->mmc), slot->id, power_on,  					vdd); - -	if (cpu_is_omap24xx()) { +	if (mmc_omap2()) {  		u16 w;  		if (power_on) { @@ -1249,7 +1255,7 @@ static int __devinit mmc_omap_new_slot(struct mmc_omap_host *host, int id)  	mmc->ops = &mmc_omap_ops;  	mmc->f_min = 400000; -	if (cpu_class_is_omap2()) +	if (mmc_omap2())  		mmc->f_max = 48000000;  	else  		mmc->f_max = 24000000; @@ -1369,6 +1375,7 @@ static int __devinit mmc_omap_probe(struct platform_device *pdev)  	init_waitqueue_head(&host->slot_wq);  	host->pdata = pdata; +	host->features = host->pdata->slots[0].features;  	host->dev = &pdev->dev;  	platform_set_drvdata(pdev, host); @@ -1401,7 +1408,7 @@ static int __devinit mmc_omap_probe(struct platform_device *pdev)  	host->dma_tx_burst = -1;  	host->dma_rx_burst = -1; -	if (cpu_is_omap24xx()) +	if (mmc_omap2())  		sig = host->id == 0 ? OMAP24XX_DMA_MMC1_TX : OMAP24XX_DMA_MMC2_TX;  	else  		sig = host->id == 0 ? OMAP_DMA_MMC_TX : OMAP_DMA_MMC2_TX; @@ -1417,7 +1424,7 @@ static int __devinit mmc_omap_probe(struct platform_device *pdev)  		dev_warn(host->dev, "unable to obtain TX DMA engine channel %u\n",  			sig);  #endif -	if (cpu_is_omap24xx()) +	if (mmc_omap2())  		sig = host->id == 0 ? OMAP24XX_DMA_MMC1_RX : OMAP24XX_DMA_MMC2_RX;  	else  		sig = host->id == 0 ? OMAP_DMA_MMC_RX : OMAP_DMA_MMC2_RX; @@ -1445,7 +1452,7 @@ static int __devinit mmc_omap_probe(struct platform_device *pdev)  	}  	host->nr_slots = pdata->nr_slots; -	host->reg_shift = (cpu_is_omap7xx() ? 1 : 2); +	host->reg_shift = (mmc_omap7xx() ? 1 : 2);  	host->mmc_omap_wq = alloc_workqueue("mmc_omap", 0, 0);  	if (!host->mmc_omap_wq) diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 54bfd0cc106..9b24bd46aad 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -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/arch/arm/plat-omap/include/plat/mmc.h b/include/linux/platform_data/mmc-omap.h index 8b4e4f2da2f..2bf6ea82ff9 100644 --- a/arch/arm/plat-omap/include/plat/mmc.h +++ b/include/linux/platform_data/mmc-omap.h @@ -8,27 +8,6 @@   * 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  /* @@ -50,6 +29,8 @@  #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;  }; @@ -126,6 +107,9 @@ struct omap_mmc_platform_data {  		/* we can put the features above into this variable */  #define HSMMC_HAS_PBIAS		(1 << 0)  #define HSMMC_HAS_UPDATED_RESET	(1 << 1) +#define MMC_OMAP7XX		(1 << 2) +#define MMC_OMAP15XX		(1 << 3) +#define MMC_OMAP16XX		(1 << 4)  		unsigned features;  		int switch_pin;			/* gpio (card detect) */ @@ -164,25 +148,3 @@ struct omap_mmc_platform_data {  	} 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  |