Commit e1c49d7d authored by Tony Lindgren's avatar Tony Lindgren

Revert "ARM: OMAP: Get rid of controller vs slot confusion, initialize MMC devices dynamically"

This reverts commit c434c15d.

Will re-apply once the MMC breakage on 3430 has been sorted out.
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 4e87836b
......@@ -12,56 +12,93 @@
* published by the Free Software Foundation.
*/
#include <linux/platform_device.h>
#include <linux/i2c/tps65010.h>
#include <mach/mmc.h>
#include <mach/gpio.h>
#include <mach/mmc.h>
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
#ifdef CONFIG_MMC_OMAP
static int slot_cover_open;
static struct device *mmc_device;
static int mmc_set_power(struct device *dev, int slot, int power_on,
static int h2_mmc_set_power(struct device *dev, int slot, int power_on,
int vdd)
{
if (power_on)
gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 1);
else
gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);
#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;
}
/*
* H2 could use the following functions tested:
* - mmc_get_cover_state that uses OMAP_MPUIO(1)
* - mmc_get_wp that uses OMAP_MPUIO(3)
*/
static struct omap_mmc_platform_data mmc1_data = {
static int h2_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 h2_mmc_get_cover_state(struct device *dev, int slot)
{
BUG_ON(slot != 0);
return slot_cover_open;
}
void h2_mmc_slot_cover_handler(void *arg, int state)
{
if (mmc_device == NULL)
return;
slot_cover_open = state;
omap_mmc_notify_cover_event(mmc_device, 0, state);
}
static int h2_mmc_late_init(struct device *dev)
{
int ret = 0;
mmc_device = dev;
return ret;
}
static void h2_mmc_cleanup(struct device *dev)
{
}
static struct omap_mmc_platform_data h2_mmc_data = {
.nr_slots = 1,
.dma_mask = 0xffffffff,
.switch_slot = NULL,
.init = h2_mmc_late_init,
.cleanup = h2_mmc_cleanup,
.slots[0] = {
.set_power = mmc_set_power,
.enabled = 1,
.wire4 = 1,
.set_power = h2_mmc_set_power,
.set_bus_mode = h2_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state = h2_mmc_get_cover_state,
.ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 |
MMC_VDD_32_33 | MMC_VDD_33_34,
.name = "mmcblk",
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC];
void __init h2_mmc_init(void)
{
int ret;
ret = gpio_request(H2_TPS_GPIO_MMC_PWR_EN, "MMC power");
if (ret < 0)
return;
gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);
mmc_data[0] = &mmc1_data;
omap1_init_mmc(mmc_data, OMAP16XX_NR_MMC);
omap1_init_mmc(&h2_mmc_data);
}
#else
......@@ -70,4 +107,7 @@ void __init h2_mmc_init(void)
{
}
void h2_mmc_slot_cover_handler(void *arg, int state)
{
}
#endif
......@@ -437,25 +437,10 @@ static void __init h2_init_smc91x(void)
}
}
static int tps_setup(struct i2c_client *client, void *context)
{
tps65010_config_vregs1(TPS_LDO2_ENABLE | TPS_VLDO2_3_0V |
TPS_LDO1_ENABLE | TPS_VLDO1_3_0V);
return 0;
}
static struct tps65010_board tps_board = {
.base = H2_TPS_GPIO_BASE,
.outmask = 0x0f,
.setup = tps_setup,
};
static struct i2c_board_info __initdata h2_i2c_board_info[] = {
{
I2C_BOARD_INFO("tps65010", 0x48),
.irq = OMAP_GPIO_IRQ(58),
.platform_data = &tps_board,
}, {
I2C_BOARD_INFO("isp1301_omap", 0x2d),
.irq = OMAP_GPIO_IRQ(2),
......@@ -499,6 +484,18 @@ static struct omap_board_config_kernel h2_config[] __initdata = {
{ OMAP_TAG_LCD, &h2_lcd_config },
};
static struct omap_gpio_switch h2_gpio_switches[] __initdata = {
{
.name = "mmc_slot",
.gpio = OMAP_MPUIO(1),
.type = OMAP_GPIO_SWITCH_TYPE_COVER,
.debounce_rising = 100,
.debounce_falling = 0,
.notify = h2_mmc_slot_cover_handler,
.notify_data = NULL,
},
};
#define H2_NAND_RB_GPIO_PIN 62
static int h2_nand_dev_ready(struct omap_nand_platform_data *data)
......@@ -550,6 +547,8 @@ static void __init h2_init(void)
omap_register_i2c_bus(1, 100, h2_i2c_board_info,
ARRAY_SIZE(h2_i2c_board_info));
h2_mmc_init();
omap_register_gpio_switches(h2_gpio_switches,
ARRAY_SIZE(h2_gpio_switches));
}
static void __init h2_map_io(void)
......
......@@ -12,56 +12,97 @@
* published by the Free Software Foundation.
*/
#include <linux/platform_device.h>
#include <linux/i2c/tps65010.h>
#include <mach/mmc.h>
#include <mach/gpio.h>
#include <mach/mmc.h>
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
#ifdef CONFIG_MMC_OMAP
static int slot_cover_open;
static struct device *mmc_device;
static int mmc_set_power(struct device *dev, int slot, int power_on,
static int h3_mmc_set_power(struct device *dev, int slot, int power_on,
int vdd)
{
if (power_on)
gpio_direction_output(H3_TPS_GPIO_MMC_PWR_EN, 1);
else
gpio_direction_output(H3_TPS_GPIO_MMC_PWR_EN, 0);
#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;
}
/*
* H3 could use the following functions tested:
* - mmc_get_cover_state that uses OMAP_MPUIO(1)
* - mmc_get_wp that maybe uses OMAP_MPUIO(3)
*/
static struct omap_mmc_platform_data mmc1_data = {
static int h3_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode)
{
int ret = 0;
#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;
}
/* Treated on upper level */
return bus_mode;
}
static int h3_mmc_get_cover_state(struct device *dev, int slot)
{
BUG_ON(slot != 0);
return slot_cover_open;
}
void h3_mmc_slot_cover_handler(void *arg, int state)
{
if (mmc_device == NULL)
return;
slot_cover_open = state;
omap_mmc_notify_cover_event(mmc_device, 0, state);
}
static int h3_mmc_late_init(struct device *dev)
{
int ret = 0;
mmc_device = dev;
return ret;
}
static void h3_mmc_cleanup(struct device *dev)
{
}
static struct omap_mmc_platform_data h3_mmc_data = {
.nr_slots = 1,
.dma_mask = 0xffffffff,
.switch_slot = NULL,
.init = h3_mmc_late_init,
.cleanup = h3_mmc_cleanup,
.slots[0] = {
.set_power = mmc_set_power,
.enabled = 1,
.wire4 = 1,
.set_power = h3_mmc_set_power,
.set_bus_mode = h3_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state = h3_mmc_get_cover_state,
.ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 |
MMC_VDD_32_33 | MMC_VDD_33_34,
.name = "mmcblk",
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC];
void __init h3_mmc_init(void)
{
int ret;
ret = gpio_request(H3_TPS_GPIO_MMC_PWR_EN, "MMC power");
if (ret < 0)
return;
gpio_direction_output(H3_TPS_GPIO_MMC_PWR_EN, 0);
mmc_data[0] = &mmc1_data;
omap1_init_mmc(mmc_data, OMAP16XX_NR_MMC);
omap1_init_mmc(&h3_mmc_data);
}
#else
......@@ -70,4 +111,7 @@ void __init h3_mmc_init(void)
{
}
void h3_mmc_slot_cover_handler(void *arg, int state)
{
}
#endif
......@@ -476,6 +476,18 @@ static struct omap_board_config_kernel h3_config[] __initdata = {
{ OMAP_TAG_LCD, &h3_lcd_config },
};
static struct omap_gpio_switch h3_gpio_switches[] __initdata = {
{
.name = "mmc_slot",
.gpio = OMAP_MPUIO(1),
.type = OMAP_GPIO_SWITCH_TYPE_COVER,
.debounce_rising = 100,
.debounce_falling = 0,
.notify = h3_mmc_slot_cover_handler,
.notify_data = NULL,
},
};
#define H3_NAND_RB_GPIO_PIN 10
static int nand_dev_ready(struct omap_nand_platform_data *data)
......@@ -631,6 +643,8 @@ static void __init h3_init(void)
omap_register_i2c_bus(1, 100, h3_i2c_board_info,
ARRAY_SIZE(h3_i2c_board_info));
h3_mmc_init();
omap_register_gpio_switches(h3_gpio_switches,
ARRAY_SIZE(h3_gpio_switches));
}
static void __init h3_init_smc91x(void)
......
......@@ -361,49 +361,18 @@ static struct omap_lcd_config innovator1610_lcd_config __initdata = {
};
#endif
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
static int mmc_set_power(struct device *dev, int slot, int power_on,
int vdd)
{
if (power_on)
fpga_write(fpga_read(OMAP1510_FPGA_POWER) | (1 << 3),
OMAP1510_FPGA_POWER);
else
fpga_write(fpga_read(OMAP1510_FPGA_POWER) & ~(1 << 3),
OMAP1510_FPGA_POWER);
return 0;
}
/*
* Innovator could use the following functions tested:
* - mmc_get_wp that uses OMAP_MPUIO(3)
* - mmc_get_cover_state that uses FPGA F4 UIO43
*/
static struct omap_mmc_platform_data mmc1_data = {
static struct omap_mmc_platform_data innovator_mmc_data = {
.nr_slots = 1,
.slots[0] = {
.set_power = mmc_set_power,
.enabled = 1,
.wire4 = 1,
.wp_pin = OMAP_MPUIO(3),
.power_pin = -1, /* FPGA F3 UIO42 */
.switch_pin = -1, /* FPGA F4 UIO43 */
.name = "mmcblk",
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC];
void __init innovator_mmc_init(void)
{
mmc_data[0] = &mmc1_data;
omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC);
}
#else
static inline void innovator_mmc_init(void)
{
}
#endif
static struct omap_uart_config innovator_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
};
......@@ -445,7 +414,7 @@ static void __init innovator_init(void)
omap_board_config_size = ARRAY_SIZE(innovator_config);
omap_serial_init();
omap_register_i2c_bus(1, 100, NULL, 0);
innovator_mmc_init();
omap1_init_mmc(&innovator_mmc_data);
}
static void __init innovator_map_io(void)
......
......@@ -216,65 +216,26 @@ static struct omap_usb_config nokia770_usb_config __initdata = {
.pins[0] = 6,
};
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
#define NOKIA770_GPIO_MMC_POWER 41
#define NOKIA770_GPIO_MMC_SWITCH 23
static int nokia770_mmc_set_power(struct device *dev, int slot, int power_on,
int vdd)
{
if (power_on)
gpio_set_value(NOKIA770_GPIO_MMC_POWER, 1);
else
gpio_set_value(NOKIA770_GPIO_MMC_POWER, 0);
return 0;
}
static int nokia770_mmc_get_cover_state(struct device *dev, int slot)
{
return gpio_get_value(NOKIA770_GPIO_MMC_SWITCH);
}
static struct omap_mmc_platform_data nokia770_mmc2_data = {
.nr_slots = 1,
.dma_mask = 0xffffffff,
static struct omap_mmc_platform_data nokia770_mmc_data = {
.nr_slots = 2,
.slots[0] = {
.set_power = nokia770_mmc_set_power,
.get_cover_state = nokia770_mmc_get_cover_state,
.enabled = 0,
.wire4 = 0,
.wp_pin = -1,
.power_pin = -1,
.switch_pin = -1,
.name = "mmcblk",
},
.slots[1] = {
.enabled = 0,
.wire4 = 0,
.wp_pin = -1,
.power_pin = -1,
.switch_pin = -1,
.name = "mmcblk",
},
};
static struct omap_mmc_platform_data *nokia770_mmc_data[OMAP16XX_NR_MMC];
static void __init nokia770_mmc_init(void)
{
int ret;
ret = gpio_request(NOKIA770_GPIO_MMC_POWER, "MMC power");
if (ret < 0)
return;
gpio_direction_output(NOKIA770_GPIO_MMC_POWER, 0);
ret = gpio_request(NOKIA770_GPIO_MMC_SWITCH, "MMC cover");
if (ret < 0) {
gpio_free(NOKIA770_GPIO_MMC_POWER);
return;
}
gpio_direction_input(NOKIA770_GPIO_MMC_SWITCH);
/* Only the second MMC controller is used */
nokia770_mmc_data[1] = &nokia770_mmc2_data;
omap1_init_mmc(nokia770_mmc_data, OMAP16XX_NR_MMC);
}
#else
static inline void nokia770_mmc_init(void)
{
}
#endif
};
static struct omap_board_config_kernel nokia770_config[] __initdata = {
{ OMAP_TAG_USB, NULL },
......@@ -421,7 +382,7 @@ static void __init omap_nokia770_init(void)
hwa742_dev_init();
ads7846_dev_init();
mipid_dev_init();
nokia770_mmc_init();
omap1_init_mmc(&nokia770_mmc_data);
}
static void __init omap_nokia770_map_io(void)
......
......@@ -45,6 +45,7 @@
#include <mach/mcbsp.h>
#include <mach/omap-alsa.h>
#include <mach/gpio-switch.h>
#include <mach/mmc.h>
static void __init omap_palmte_init_irq(void)
{
......@@ -196,6 +197,17 @@ static struct omap_usb_config palmte_usb_config __initdata = {
.pins[0] = 2,
};
static struct omap_mmc_platform_data palmzte_mmc_data = {
.nr_slots = 1,
.slots[0] = {
.enabled = 1,
.wp_pin = PALMTE_MMC_WP_GPIO,
.power_pin = PALMTE_MMC_POWER_GPIO,
.switch_pin = PALMTE_MMC_SWITCH_GPIO,
.name = "mmcblk",
},
};
static struct omap_lcd_config palmte_lcd_config __initdata = {
.ctrl_name = "internal",
};
......@@ -398,6 +410,7 @@ static void __init omap_palmte_init(void)
palmte_misc_gpio_setup();
omap_serial_init();
omap_register_i2c_bus(1, 100, NULL, 0);
omap1_init_mmc(&palmte_mmc_data);
}
static void __init omap_palmte_map_io(void)
......
......@@ -43,6 +43,7 @@
#include <mach/keypad.h>
#include <mach/common.h>
#include <mach/omap-alsa.h>
#include <mach/mmc.h>
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
......@@ -267,6 +268,18 @@ static struct omap_usb_config palmz71_usb_config __initdata = {
.pins[0] = 2,
};
static struct omap_mmc_platform_data palmz71_mmc_data = {
.nr_slots = 1,
.slots[0] = {
.enabled = 1,
.wire4 = 0,
.wp_pin = PALMZ71_MMC_WP_GPIO,
.power_pin = -1,
.switch_pin = PALMZ71_MMC_IN_GPIO,
.name = "mmcblk",
},
};
static struct omap_lcd_config palmz71_lcd_config __initdata = {
.ctrl_name = "internal",
};
......@@ -354,6 +367,7 @@ omap_palmz71_init(void)
omap_serial_init();
omap_register_i2c_bus(1, 100, NULL, 0);
palmz71_gpio_setup(0);
omap1_init_mmc(&palmz71_mmc_data);
}
static void __init
......
......@@ -18,14 +18,26 @@
#include <mach/mmc.h>
#include <mach/gpio.h>
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
#ifdef CONFIG_MMC_OMAP
static int slot_cover_open;
static struct device *mmc_device;
static int mmc_set_power(struct device *dev, int slot, int power_on,
static int sx1_mmc_set_power(struct device *dev, int slot, int power_on,
int vdd)
{
int err;
u8 dat = 0;
#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;
}
err = sx1_i2c_read_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, &dat);
if (err < 0)
return err;
......@@ -38,23 +50,70 @@ static int mmc_set_power(struct device *dev, int slot, int power_on,
return sx1_i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat);
}
/* Cover switch is at OMAP_MPUIO(3) */
static struct omap_mmc_platform_data mmc1_data = {
static int sx1_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 sx1_mmc_get_cover_state(struct device *dev, int slot)
{
BUG_ON(slot != 0);
return slot_cover_open;
}
void sx1_mmc_slot_cover_handler(void *arg, int state)
{
if (mmc_device == NULL)
return;
slot_cover_open = state;
omap_mmc_notify_cover_event(mmc_device, 0, state);
}
static int sx1_mmc_late_init(struct device *dev)
{
int ret = 0;
mmc_device = dev;
return ret;
}
static void sx1_mmc_cleanup(struct device *dev)
{
}
static struct omap_mmc_platform_data sx1_mmc_data = {
.nr_slots = 1,
.switch_slot = NULL,
.init = sx1_mmc_late_init,
.cleanup = sx1_mmc_cleanup,
.slots[0] = {
.set_power = mmc_set_power,
.enabled = 1,
.wire4 = 0,
.set_power = sx1_mmc_set_power,
.set_bus_mode = sx1_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state = sx1_mmc_get_cover_state,
.ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 |
MMC_VDD_32_33 | MMC_VDD_33_34,
.name = "mmcblk",
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP15XX_NR_MMC];
void __init sx1_mmc_init(void)
{
mmc_data[0] = &mmc1_data;
omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC);
omap1_init_mmc(&sx1_mmc_data);
}
#else
......@@ -63,4 +122,7 @@ void __init sx1_mmc_init(void)
{
}
void sx1_mmc_slot_cover_handler(void *arg, int state)
{
}
#endif
......@@ -410,6 +410,18 @@ static struct omap_board_config_kernel sx1_config[] __initdata = {
{ OMAP_TAG_UART, &sx1_uart_config },
};
static struct omap_gpio_switch sx1_gpio_switches[] __initdata = {
{
.name = "mmc_slot",
.gpio = OMAP_MPUIO(3),
.type = OMAP_GPIO_SWITCH_TYPE_COVER,
.debounce_rising = 100,
.debounce_falling = 0,
.notify = sx1_mmc_slot_cover_handler,
.notify_data = NULL,
},
};
/*-----------------------------------------*/
static void __init omap_sx1_init(void)
......@@ -421,6 +433,8 @@ static void __init omap_sx1_init(void)
omap_serial_init();
omap_register_i2c_bus(1, 100, NULL, 0);
sx1_mmc_init();
omap_register_gpio_switches(sx1_gpio_switches,
ARRAY_SIZE(sx1_gpio_switches));
/* turn on USB power */
/* sx1_setusbpower(1); cant do it here because i2c is not ready */
......
......@@ -34,6 +34,7 @@
#include <mach/mux.h>
#include <mach/tc.h>
#include <mach/usb.h>
#include <mach/mmc.h>
static struct plat_serial8250_port voiceblue_ports[] = {
{
......@@ -140,6 +141,16 @@ static struct omap_usb_config voiceblue_usb_config __initdata = {
.pins[2] = 6,
};
static struct omap_mmc_platform_data voiceblue_mmc_data = {
.nr_slots = 1,
.slots[0] = {
.enabled = 1,
.power_pin = 2,
.switch_pin = -1,
.name = "mmcblk",
},
};
static struct omap_uart_config voiceblue_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
};
......@@ -193,6 +204,8 @@ static void __init voiceblue_init(void)
* (it is connected through invertor) */
omap_writeb(0x00, OMAP_LPG1_LCR);
omap_writeb(0x00, OMAP_LPG1_PMR); /* Disable clock */
omap1_init_mmc(&voiceblue_mmc_data);
}
static void __init voiceblue_map_io(void)
......
......@@ -703,6 +703,7 @@ static struct clk bclk_16xx = {
static struct clk mmc1_ck = {
.name = "mmc_ck",
.id = 1,
/* Functional clock is direct from ULPD, interface clock is ARMPER */
.parent = &armper_ck.clk,
.rate = 48000000,
......@@ -717,7 +718,7 @@ static struct clk mmc1_ck = {
static struct clk mmc2_ck = {
.name = "mmc_ck",
.id = 1,
.id = 2,
/* Functional clock is direct from ULPD, interface clock is ARMPER */
.parent = &armper_ck.clk,
.rate = 48000000,
......
......@@ -104,10 +104,71 @@ static inline void omap_init_mbox(void) { }
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
static inline void omap1_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
int controller_nr)
#define OMAP1_MMC1_BASE 0xfffb7800
#define OMAP1_MMC1_END (OMAP1_MMC1_BASE + 0x7f)
#define OMAP1_MMC1_INT INT_MMC
#define OMAP1_MMC2_BASE 0xfffb7c00 /* omap16xx only */
#define OMAP1_MMC2_END (OMAP1_MMC2_BASE + 0x7f)
#define OMAP1_MMC2_INT INT_1610_MMC2
static u64 omap1_mmc1_dmamask = 0xffffffff;
static struct resource omap1_mmc1_resources[] = {
{
.start = OMAP1_MMC1_BASE,
.end = OMAP1_MMC1_END,
.flags = IORESOURCE_MEM,
},
{
.start = OMAP1_MMC1_INT,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device omap1_mmc1_device = {
.name = "mmci-omap",
.id = 1,
.dev = {
.dma_mask = &omap1_mmc1_dmamask,
},
.num_resources = ARRAY_SIZE(omap1_mmc1_resources),
.resource = omap1_mmc1_resources,
};
#if defined(CONFIG_ARCH_OMAP16XX)
static u64 omap1_mmc2_dmamask = 0xffffffff;
static struct resource omap1_mmc2_resources[] = {
{
.start = OMAP1_MMC2_BASE,
.end = OMAP1_MMC2_END,
.flags = IORESOURCE_MEM,
},
{
.start = OMAP1_MMC2_INT,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device omap1_mmc2_device = {
.name = "mmci-omap",
.id = 2,
.dev = {
.dma_mask = &omap1_mmc2_dmamask,
},
.num_resources = ARRAY_SIZE(omap1_mmc2_resources),
.resource = omap1_mmc2_resources,
};
#define OMAP1_MMC2_DEVICE &omap1_mmc2_device
#else
#define OMAP1_MMC2_DEVICE &omap1_mmc1_device /* Dummy */
#endif
static inline void omap1_mmc_mux(struct omap_mmc_platform_data *info)
{
if (controller_nr == 0) {
if (info->slots[0].enabled) {
omap_cfg_reg(MMC_CMD);
omap_cfg_reg(MMC_CLK);
omap_cfg_reg(MMC_DAT0);
......@@ -116,23 +177,23 @@ static inline void omap1_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
omap_cfg_reg(P19_1710_MMC_CMDDIR);
omap_cfg_reg(P20_1710_MMC_DATDIR0);
}
if (mmc_controller->slots[0].wire4) {
if (info->slots[0].wire4) {
omap_cfg_reg(MMC_DAT1);
/* NOTE: DAT2 can be on W10 (here) or M15 */
if (!mmc_controller->slots[0].nomux)
if (!info->slots[0].nomux)
omap_cfg_reg(MMC_DAT2);
omap_cfg_reg(MMC_DAT3);
}
}
/* Block 2 is on newer chips, and has many pinout options */
if (cpu_is_omap16xx() && controller_nr == 1) {
if (!mmc_controller->slots[1].nomux) {
if (cpu_is_omap16xx() && info->slots[1].enabled) {
if (!info->slots[1].nomux) {
omap_cfg_reg(Y8_1610_MMC2_CMD);
omap_cfg_reg(Y10_1610_MMC2_CLK);
omap_cfg_reg(R18_1610_MMC2_CLKIN);
omap_cfg_reg(W8_1610_MMC2_DAT0);
if (mmc_controller->slots[1].wire4) {
if (info->slots[1].wire4) {
omap_cfg_reg(V8_1610_MMC2_DAT1);
omap_cfg_reg(W15_1610_MMC2_DAT2);
omap_cfg_reg(R10_1610_MMC2_DAT3);
......@@ -151,38 +212,18 @@ static inline void omap1_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
}
}
void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers)
void omap1_init_mmc(struct omap_mmc_platform_data *info)
{
int i;
for (i = 0; i < nr_controllers; i++) {
unsigned long base, size;
unsigned int irq = 0;
if (!mmc_data[i])
continue;
if (!info)
return;
omap1_mmc_mux(mmc_data[i], i);
omap1_mmc_mux(info);
platform_set_drvdata(&omap1_mmc1_device, info);
switch (i) {
case 0:
base = OMAP1_MMC1_BASE;
irq = INT_MMC;
break;
case 1:
if (!cpu_is_omap16xx())
return;
base = OMAP1_MMC2_BASE;
irq = INT_1610_MMC2;
break;
default:
continue;
}
size = OMAP1_MMC_SIZE;
if (cpu_is_omap16xx())
platform_set_drvdata(OMAP1_MMC2_DEVICE, info);
omap_mmc_add(i, base, size, irq, mmc_data[i]);
};
omap_init_mmc(info, &omap1_mmc1_device, OMAP1_MMC2_DEVICE);
}
#endif
......
......@@ -62,12 +62,13 @@ static void apollon_mmc_cleanup(struct device *dev)
/*
* Note: If you want to detect card feature, please assign GPIO 37
*/
static struct omap_mmc_platform_data mmc1_data = {
static struct omap_mmc_platform_data apollon_mmc_data = {
.nr_slots = 1,
.switch_slot = NULL,
.init = apollon_mmc_late_init,
.cleanup = apollon_mmc_cleanup,
.dma_mask = 0xffffffff,
.slots[0] = {
.enabled = 1,
.wire4 = 1,
/*
......@@ -78,18 +79,17 @@ static struct omap_mmc_platform_data mmc1_data = {
.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",
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
void __init apollon_mmc_init(void)
{
mmc_data[0] = &mmc1_data;
omap2_init_mmc(mmc_data, OMAP24XX_NR_MMC);
omap2_init_mmc(&apollon_mmc_data);
}
#else /* !CONFIG_MMC_OMAP */
......
......@@ -224,16 +224,17 @@ static void h4_mmc_cleanup(struct device *dev)
menelaus_unregister_mmc_callback();
}
static struct omap_mmc_platform_data mmc1_data = {
static struct omap_mmc_platform_data h4_mmc_data = {
.nr_slots = 2,
.switch_slot = h4_mmc_switch_slot,
.init = h4_mmc_late_init,
.cleanup = h4_mmc_cleanup,
.dma_mask = 0xffffffff,
.slots[0] = {
.enabled = 1,
.wire4 = 1,
.set_power = h4_mmc_set_power,
.set_bus_mode = h4_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state= h4_mmc_slot1_cover_state,
.ocr_mask = MMC_VDD_165_195 |
MMC_VDD_28_29 | MMC_VDD_30_31 |
......@@ -241,9 +242,11 @@ static struct omap_mmc_platform_data mmc1_data = {
.name = "slot1",
},
.slots[1] = {
.enabled = 1,
.wire4 = 1,
.set_power = h4_mmc_set_power,
.set_bus_mode = h4_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state= h4_mmc_slot2_cover_state,
.ocr_mask = MMC_VDD_165_195 | MMC_VDD_20_21 |
MMC_VDD_21_22 | MMC_VDD_22_23 | MMC_VDD_23_24 |
......@@ -254,12 +257,9 @@ static struct omap_mmc_platform_data mmc1_data = {
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
void __init h4_mmc_init(void)
{
mmc_data[0] = &mmc1_data;
omap2_init_mmc(mmc_data, OMAP24XX_NR_MMC);
omap2_init_mmc(&h4_mmc_data);
}
#else
......
......@@ -19,7 +19,7 @@
#include <mach/gpio.h>
#include <mach/mmc.h>
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
#ifdef CONFIG_MMC_OMAP
static const int slot_switch_gpio = 96;
......@@ -296,22 +296,19 @@ static void n800_mmc_cleanup(struct device *dev)
}
}
/*
* MMC controller1 has two slots that are multiplexed via I2C.
* MMC controller2 is not in use.
*/
static struct omap_mmc_platform_data mmc1_data = {
static struct omap_mmc_platform_data n800_mmc_data = {
.nr_slots = 2,
.switch_slot = n800_mmc_switch_slot,
.init = n800_mmc_late_init,
.cleanup = n800_mmc_cleanup,
.shutdown = n800_mmc_shutdown,
.max_freq = 24000000,
.dma_mask = 0xffffffff,
.slots[0] = {
.enabled = 1,
.wire4 = 1,
.set_power = n800_mmc_set_power,
.set_bus_mode = n800_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state= n800_mmc_get_cover_state,
.ocr_mask = MMC_VDD_165_195 | MMC_VDD_30_31 |
MMC_VDD_32_33 | MMC_VDD_33_34,
......@@ -320,6 +317,7 @@ static struct omap_mmc_platform_data mmc1_data = {
.slots[1] = {
.set_power = n800_mmc_set_power,
.set_bus_mode = n800_mmc_set_bus_mode,
.get_ro = NULL,
.get_cover_state= n800_mmc_get_cover_state,
.ocr_mask = MMC_VDD_165_195 | MMC_VDD_20_21 |
MMC_VDD_21_22 | MMC_VDD_22_23 | MMC_VDD_23_24 |
......@@ -330,13 +328,11 @@ static struct omap_mmc_platform_data mmc1_data = {
},
};
static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
void __init n800_mmc_init(void)
{
if (machine_is_nokia_n810()) {
n800_mmc1_data.slots[0].name = "external";
n800_mmc_data.slots[0].name = "external";
/*
* Some Samsung Movinand chips do not like open-ended
......@@ -344,8 +340,8 @@ void __init n800_mmc_init(void)
* while doing so. Reducing the number of blocks in
* the transfer or delays in clock disable do not help
*/
n800_mmc1_data.slots[1].name = "internal";
n800_mmc1_data.slots[1].ban_openended = 1;
n800_mmc_data.slots[1].name = "internal";
n800_mmc_data.slots[1].ban_openended = 1;
}
if (omap_request_gpio(slot_switch_gpio) < 0)
......@@ -365,8 +361,7 @@ void __init n800_mmc_init(void)
omap_set_gpio_direction(n810_slot2_pw_vdd, 0);
}
mmc_data[0] = &mmc1_data;
omap2_init_mmc(mmc_data, OMAP24XX_NR_MMC);
omap2_init_mmc(&n800_mmc_data);
}
#else
......
......@@ -2812,6 +2812,7 @@ static struct clk mdm_intc_ick = {
static struct clk mmchsdb1_fck = {
.name = "mmchsdb_fck",
.id = 1,
.parent = &func_32k_ck,
.prcm_mod = CORE_MOD,
.flags = CLOCK_IN_OMAP243X,
......@@ -2823,7 +2824,7 @@ static struct clk mmchsdb1_fck = {
static struct clk mmchsdb2_fck = {
.name = "mmchsdb_fck",
.id = 1,
.id = 2,
.parent = &func_32k_ck,
.prcm_mod = CORE_MOD,
.flags = CLOCK_IN_OMAP243X,
......
......@@ -1411,7 +1411,7 @@ static struct clk core_96m_fck = {
static struct clk mmchs3_fck = {
.name = "mmchs_fck",
.id = 2,
.id = 3,
.parent = &core_96m_fck,
.prcm_mod = CORE_MOD,
.enable_reg = CM_FCLKEN1,
......@@ -1424,7 +1424,7 @@ static struct clk mmchs3_fck = {
static struct clk mmchs2_fck = {
.name = "mmchs_fck",
.id = 1,
.id = 2,
.parent = &core_96m_fck,
.prcm_mod = CORE_MOD,
.enable_reg = CM_FCLKEN1,
......@@ -1449,6 +1449,7 @@ static struct clk mspro_fck = {
static struct clk mmchs1_fck = {
.name = "mmchs_fck",
.id = 1,
.parent = &core_96m_fck,
.prcm_mod = CORE_MOD,
.enable_reg = CM_FCLKEN1,
......@@ -1867,7 +1868,7 @@ static struct clk usbtll_ick = {
static struct clk mmchs3_ick = {
.name = "mmchs_ick",
.id = 2,
.id = 3,
.parent = &core_l4_ick,
.prcm_mod = CORE_MOD,
.enable_reg = CM_ICLKEN1,
......@@ -1929,7 +1930,7 @@ static struct clk des2_ick = {
static struct clk mmchs2_ick = {
.name = "mmchs_ick",
.id = 1,
.id = 2,
.parent = &core_l4_ick,
.prcm_mod = CORE_MOD,
.enable_reg = CM_ICLKEN1,
......@@ -1942,6 +1943,7 @@ static struct clk mmchs2_ick = {
static struct clk mmchs1_ick = {
.name = "mmchs_ick",
.id = 1,
.parent = &core_l4_ick,
.prcm_mod = CORE_MOD,
.enable_reg = CM_ICLKEN1,
......
......@@ -361,17 +361,75 @@ static inline void omap_init_sha1_md5(void) { }
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
static inline void omap2_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
int controller_nr)
#define OMAP2_MMC1_BASE 0x4809c000
#define OMAP2_MMC1_END (OMAP2_MMC1_BASE + 0x1fc)
#define OMAP2_MMC1_INT INT_24XX_MMC_IRQ
#define OMAP2_MMC2_BASE 0x480b4000
#define OMAP2_MMC2_END (OMAP2_MMC2_BASE + 0x1fc)
#define OMAP2_MMC2_INT INT_24XX_MMC2_IRQ
static u64 omap2_mmc1_dmamask = 0xffffffff;
static struct resource omap2_mmc1_resources[] = {
{
.start = OMAP2_MMC1_BASE,
.end = OMAP2_MMC1_END,
.flags = IORESOURCE_MEM,
},
{
.start = OMAP2_MMC1_INT,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device omap2_mmc1_device = {
.name = "mmci-omap",
.id = 1,
.dev = {
.dma_mask = &omap2_mmc1_dmamask,
},
.num_resources = ARRAY_SIZE(omap2_mmc1_resources),
.resource = omap2_mmc1_resources,
};
static u64 omap2_mmc2_dmamask = 0xffffffff;
static struct resource omap2_mmc2_resources[] = {
{
.start = OMAP2_MMC2_BASE,
.end = OMAP2_MMC2_END,
.flags = IORESOURCE_MEM,
},
{
.start = OMAP2_MMC2_INT,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device omap2_mmc2_device = {
.name = "mmci-omap",
.id = 2,
.dev = {
.dma_mask = &omap2_mmc2_dmamask,
},
.num_resources = ARRAY_SIZE(omap2_mmc2_resources),
.resource = omap2_mmc2_resources,
};
static inline void omap2_mmc_mux(struct omap_mmc_platform_data *info)
{
if (cpu_is_omap2420() && controller_nr == 0) {
if (!cpu_is_omap2420())
return;
if (info->slots[0].enabled) {
omap_cfg_reg(H18_24XX_MMC_CMD);
omap_cfg_reg(H15_24XX_MMC_CLKI);
omap_cfg_reg(G19_24XX_MMC_CLKO);
omap_cfg_reg(F20_24XX_MMC_DAT0);
omap_cfg_reg(F19_24XX_MMC_DAT_DIR0);
omap_cfg_reg(G18_24XX_MMC_CMD_DIR);
if (mmc_controller->slots[0].wire4) {
if (info->slots[0].wire4) {
omap_cfg_reg(H14_24XX_MMC_DAT1);
omap_cfg_reg(E19_24XX_MMC_DAT2);
omap_cfg_reg(D19_24XX_MMC_DAT3);
......@@ -384,7 +442,7 @@ static inline void omap2_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
* Use internal loop-back in MMC/SDIO Module Input Clock
* selection
*/
if (mmc_controller->slots[0].internal_clock) {
if (info->slots[0].internal_clock) {
u32 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
v |= (1 << 24);
omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
......@@ -392,46 +450,15 @@ static inline void omap2_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
}
}
void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers)
void omap2_init_mmc(struct omap_mmc_platform_data *info)
{
int i;
for (i = 0; i < nr_controllers; i++) {
unsigned long base, size;
unsigned int irq = 0;
if (!mmc_data[i])
continue;
omap2_mmc_mux(mmc_data[i], i);
switch (i) {
case 0:
base = OMAP2_MMC1_BASE;
irq = INT_24XX_MMC_IRQ;
break;
case 1:
base = OMAP2_MMC2_BASE;
irq = INT_24XX_MMC2_IRQ;
break;
case 2:
if (!cpu_is_omap34xx())
if (!info)
return;
base = OMAP3_MMC3_BASE;
irq = INT_34XX_MMC3_IRQ;
break;
default:
continue;
}
if (cpu_is_omap2420())
size = OMAP2420_MMC_SIZE;
else
size = HSMMC_SIZE;
omap_mmc_add(i, base, size, irq, mmc_data[i]);
};
omap2_mmc_mux(info);
omap2_mmc1_device.dev.platform_data = info;
omap2_mmc2_device.dev.platform_data = info;
omap_init_mmc(info, &omap2_mmc1_device, &omap2_mmc2_device);
}
#endif
......
......@@ -255,18 +255,22 @@ err:
return 1;
}
static struct omap_mmc_platform_data mmc1_data = {
static struct omap_mmc_platform_data hsmmc_data = {
.nr_slots = 1,
.switch_slot = NULL,
.init = hsmmc_late_init,
.cleanup = hsmmc_cleanup,
#ifdef CONFIG_PM
.suspend = hsmmc_suspend,
.resume = hsmmc_resume,
#endif
.dma_mask = 0xffffffff,
.slots[0] = {
.enabled = 1,
.wire4 = 1,
.set_power = hsmmc_set_power,
.set_bus_mode = NULL,
.get_ro = NULL,
.get_cover_state = NULL,
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34 |
MMC_VDD_165_195,
.name = "first slot",
......@@ -276,12 +280,9 @@ static struct omap_mmc_platform_data mmc1_data = {
},
};
static struct omap_mmc_platform_data *hsmmc_data[OMAP34XX_NR_MMC];
void __init hsmmc_init(void)
{
hsmmc_data[0] = &mmc1_data;
omap2_init_mmc(hsmmc_data, OMAP34XX_NR_MMC);
omap2_init_mmc(&hsmmc_data);
}
#else
......
......@@ -194,43 +194,20 @@ void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config,
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
#define OMAP_MMC_NR_RES 2
/*
* Register MMC devices. Called from mach-omap1 and mach-omap2 device init.
*/
int __init omap_mmc_add(int id, unsigned long base, unsigned long size,
unsigned int irq, struct omap_mmc_platform_data *data)
void omap_init_mmc(struct omap_mmc_platform_data *info,
struct platform_device *pdev1, struct platform_device *pdev2)
{
struct platform_device *pdev;
struct resource res[OMAP_MMC_NR_RES];
int ret;
if (!info)
return;
pdev = platform_device_alloc("mmci-omap", id);
if (!pdev)
return -ENOMEM;
memset(res, 0, OMAP_MMC_NR_RES * sizeof(struct resource));
res[0].start = base;
res[0].end = base + size - 1;
res[0].flags = IORESOURCE_MEM;
res[1].start = res[1].end = irq;
res[1].flags = IORESOURCE_IRQ;
ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));
if (ret == 0)
ret = platform_device_add_data(pdev, data, sizeof(*data));
if (ret)
goto fail;
ret = platform_device_add(pdev);
if (ret)
goto fail;
return 0;
if (info->slots[0].enabled && pdev1)
(void) platform_device_register(pdev1);
fail:
platform_device_put(pdev);
return ret;
if (info->slots[1].enabled && pdev2)
(void) platform_device_register(pdev2);
}
#endif
......
......@@ -29,13 +29,13 @@
#ifndef __ASM_ARCH_OMAP_H2_H
#define __ASM_ARCH_OMAP_H2_H
/* Placeholder for H2 specific defines */
/* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */
#define OMAP1610_ETHR_START 0x04000300
#define H2_TPS_GPIO_BASE (OMAP_MAX_GPIO_LINES + 16 /* MPUIO */)
# define H2_TPS_GPIO_MMC_PWR_EN (H2_TPS_GPIO_BASE + 3)
extern void h2_mmc_init(void);
extern void h2_mmc_slot_cover_handler(void *arg, int state);
#endif /* __ASM_ARCH_OMAP_H2_H */
......@@ -30,9 +30,7 @@
/* In OMAP1710 H3 the Ethernet is directly connected to CS1 */
#define OMAP1710_ETHR_START 0x04000300
#define H3_TPS_GPIO_BASE (OMAP_MAX_GPIO_LINES + 16 /* MPUIO */)
# define H3_TPS_GPIO_MMC_PWR_EN (H3_TPS_GPIO_BASE + 4)
extern void h3_mmc_init(void);
extern void h3_mmc_slot_cover_handler(void *arg, int state);
#endif /* __ASM_ARCH_OMAP_H3_H */
......@@ -17,25 +17,11 @@
#include <mach/board.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 OMAP34XX_NR_MMC 3
#define OMAP2420_MMC_SIZE OMAP1_MMC_SIZE
#define HSMMC_SIZE 0x200
#define OMAP2_MMC1_BASE 0x4809c000
#define OMAP2_MMC2_BASE 0x480b4000
#define OMAP3_MMC3_BASE 0x480ad000
#define OMAP_MMC_MAX_SLOTS 2
struct omap_mmc_platform_data {
/* number of slots per controller */
/* number of slots on board */
unsigned nr_slots:2;
/* set if your board has components or wiring that limits the
......@@ -54,10 +40,10 @@ struct omap_mmc_platform_data {
int (*suspend)(struct device *dev, int slot);
int (*resume)(struct device *dev, int slot);
u64 dma_mask;
struct omap_mmc_slot_data {
unsigned enabled:1;
/*
* nomux means "standard" muxing is wrong on this board, and
* that board-specific code handled it before common init logic.
......@@ -74,6 +60,7 @@ struct omap_mmc_platform_data {
unsigned internal_clock:1;
s16 power_pin;
s16 switch_pin;
s16 wp_pin;
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);
......@@ -82,8 +69,8 @@ struct omap_mmc_platform_data {
/* return MMC cover switch state, can be NULL if not supported.
*
* possible return values:
* 0 - closed
* 1 - open
* 0 - open
* 1 - closed
*/
int (* get_cover_state)(struct device *dev, int slot);
......@@ -104,25 +91,20 @@ extern void omap_mmc_notify_cover_event(struct device *dev, int slot, int is_clo
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers);
void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers);
int omap_mmc_add(int id, unsigned long base, unsigned long size,
unsigned int irq, struct omap_mmc_platform_data *data);
void omap1_init_mmc(struct omap_mmc_platform_data *info);
void omap2_init_mmc(struct omap_mmc_platform_data *info);
void omap_init_mmc(struct omap_mmc_platform_data *info,
struct platform_device *pdev1, struct platform_device *pdev2);
#else
static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers)
static inline void omap1_init_mmc(struct omap_mmc_platform_data *info)
{
}
static inline void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers)
static inline void omap2_init_mmc(struct omap_mmc_platform_data *info)
{
}
static inline int omap_mmc_add(int id, unsigned long base, unsigned long size,
unsigned int irq, struct omap_mmc_platform_data *data)
static inline void omap_init_mmc(struct omap_mmc_platform_data *info,
struct platform_device *pdev1, struct platform_device *pdev2)
{
return 0;
}
#endif
......
......@@ -1451,7 +1451,6 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
host->irq = irq;
host->use_dma = 1;
host->dev->dma_mask = &pdata->dma_mask;
host->dma_ch = -1;
host->irq = irq;
......
......@@ -816,9 +816,7 @@ static int __init omap_mmc_probe(struct platform_device *pdev)
host = mmc_priv(mmc);
host->mmc = mmc;
host->pdata = pdata;
host->dev = &pdev->dev;
host->use_dma = 1;
host->dev->dma_mask = &pdata->dma_mask;
host->dma_ch = -1;
host->irq = irq;
host->id = pdev->id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment