Skip to content

Commit

Permalink
Merge branch 'hsmmc-init' of git://git.kernel.org/pub/scm/linux/kerne…
Browse files Browse the repository at this point in the history
…l/git/tmlind/linux-omap-2.6 into devel
  • Loading branch information
Russell King authored and Russell King committed Dec 17, 2008
2 parents 7e1548a + 917fa28 commit cd43483
Show file tree
Hide file tree
Showing 33 changed files with 1,282 additions and 548 deletions.
89 changes: 32 additions & 57 deletions arch/arm/mach-omap1/board-h2-mmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,90 +12,68 @@
* published by the Free Software Foundation.
*/

#include <linux/platform_device.h>

#include <linux/i2c/tps65010.h>

#include <mach/mmc.h>
#include <mach/gpio.h>

#ifdef CONFIG_MMC_OMAP
static int slot_cover_open;
static struct device *mmc_device;
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)

static int h2_mmc_set_power(struct device *dev, int slot, int power_on,
static int 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;
}
if (power_on)
gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 1);
else
gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);

return 0;
}

static int h2_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode)
static int mmc_late_init(struct device *dev)
{
#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;
}
int ret;

return 0;
}
ret = gpio_request(H2_TPS_GPIO_MMC_PWR_EN, "MMC power");
if (ret < 0)
return ret;

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;
gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);

return ret;
}

static void h2_mmc_cleanup(struct device *dev)
static void mmc_shutdown(struct device *dev)
{
gpio_free(H2_TPS_GPIO_MMC_PWR_EN);
}

static struct omap_mmc_platform_data h2_mmc_data = {
/*
* 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 = {
.nr_slots = 1,
.switch_slot = NULL,
.init = h2_mmc_late_init,
.cleanup = h2_mmc_cleanup,
.init = mmc_late_init,
.shutdown = mmc_shutdown,
.dma_mask = 0xffffffff,
.slots[0] = {
.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,
.set_power = mmc_set_power,
.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)
{
omap_set_mmc_info(1, &h2_mmc_data);
mmc_data[0] = &mmc1_data;
omap1_init_mmc(mmc_data, OMAP16XX_NR_MMC);
}

#else
Expand All @@ -104,7 +82,4 @@ void __init h2_mmc_init(void)
{
}

void h2_mmc_slot_cover_handler(void *arg, int state)
{
}
#endif
25 changes: 15 additions & 10 deletions arch/arm/mach-omap1/board-h2.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,10 +345,25 @@ 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),
Expand Down Expand Up @@ -378,15 +393,6 @@ static struct omap_usb_config h2_usb_config __initdata = {
.pins[1] = 3,
};

static struct omap_mmc_config h2_mmc_config __initdata = {
.mmc[0] = {
.enabled = 1,
.wire4 = 1,
},
};

extern struct omap_mmc_platform_data h2_mmc_data;

static struct omap_uart_config h2_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
};
Expand All @@ -397,7 +403,6 @@ static struct omap_lcd_config h2_lcd_config __initdata = {

static struct omap_board_config_kernel h2_config[] __initdata = {
{ OMAP_TAG_USB, &h2_usb_config },
{ OMAP_TAG_MMC, &h2_mmc_config },
{ OMAP_TAG_UART, &h2_uart_config },
{ OMAP_TAG_LCD, &h2_lcd_config },
};
Expand Down
100 changes: 29 additions & 71 deletions arch/arm/mach-omap1/board-h3-mmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,94 +12,55 @@
* published by the Free Software Foundation.
*/

#include <linux/platform_device.h>

#include <linux/i2c/tps65010.h>

#include <mach/mmc.h>
#include <mach/gpio.h>

#ifdef CONFIG_MMC_OMAP
static int slot_cover_open;
static struct device *mmc_device;
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)

static int h3_mmc_set_power(struct device *dev, int slot, int power_on,
static int 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;
}
if (power_on)
gpio_direction_output(H3_TPS_GPIO_MMC_PWR_EN, 1);
else
gpio_direction_output(H3_TPS_GPIO_MMC_PWR_EN, 0);

return 0;
}

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 = {
/*
* 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 = {
.nr_slots = 1,
.switch_slot = NULL,
.init = h3_mmc_late_init,
.cleanup = h3_mmc_cleanup,
.dma_mask = 0xffffffff,
.slots[0] = {
.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,
.set_power = mmc_set_power,
.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)
{
omap_set_mmc_info(1, &h3_mmc_data);
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);
}

#else
Expand All @@ -108,7 +69,4 @@ void __init h3_mmc_init(void)
{
}

void h3_mmc_slot_cover_handler(void *arg, int state)
{
}
#endif
10 changes: 0 additions & 10 deletions arch/arm/mach-omap1/board-h3.c
Original file line number Diff line number Diff line change
Expand Up @@ -447,15 +447,6 @@ static struct omap_usb_config h3_usb_config __initdata = {
.pins[1] = 3,
};

static struct omap_mmc_config h3_mmc_config __initdata = {
.mmc[0] = {
.enabled = 1,
.wire4 = 1,
},
};

extern struct omap_mmc_platform_data h3_mmc_data;

static struct omap_uart_config h3_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
};
Expand All @@ -466,7 +457,6 @@ static struct omap_lcd_config h3_lcd_config __initdata = {

static struct omap_board_config_kernel h3_config[] __initdata = {
{ OMAP_TAG_USB, &h3_usb_config },
{ OMAP_TAG_MMC, &h3_mmc_config },
{ OMAP_TAG_UART, &h3_uart_config },
{ OMAP_TAG_LCD, &h3_lcd_config },
};
Expand Down
Loading

0 comments on commit cd43483

Please sign in to comment.