linux/arch/arm/mach-omap1/board-h2-mmc.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-omap1/board-h2-mmc.c
   3 *
   4 * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT
   5 * Author: Felipe Balbi <felipe.lima@indt.org.br>
   6 *
   7 * This code is based on linux/arch/arm/mach-omap2/board-n800-mmc.c, which is:
   8 * Copyright (C) 2006 Nokia Corporation
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License version 2 as
  12 * published by the Free Software Foundation.
  13 */
  14#include <linux/gpio.h>
  15#include <linux/platform_device.h>
  16#include <linux/platform_data/gpio-omap.h>
  17#include <linux/i2c/tps65010.h>
  18
  19#include "board-h2.h"
  20#include "mmc.h"
  21
  22#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
  23
  24static int mmc_set_power(struct device *dev, int slot, int power_on,
  25                                int vdd)
  26{
  27        gpio_set_value(H2_TPS_GPIO_MMC_PWR_EN, power_on);
  28        return 0;
  29}
  30
  31static int mmc_late_init(struct device *dev)
  32{
  33        int ret = gpio_request(H2_TPS_GPIO_MMC_PWR_EN, "MMC power");
  34        if (ret < 0)
  35                return ret;
  36
  37        gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);
  38
  39        return ret;
  40}
  41
  42static void mmc_cleanup(struct device *dev)
  43{
  44        gpio_free(H2_TPS_GPIO_MMC_PWR_EN);
  45}
  46
  47/*
  48 * H2 could use the following functions tested:
  49 * - mmc_get_cover_state that uses OMAP_MPUIO(1)
  50 * - mmc_get_wp that uses OMAP_MPUIO(3)
  51 */
  52static struct omap_mmc_platform_data mmc1_data = {
  53        .nr_slots                       = 1,
  54        .init                           = mmc_late_init,
  55        .cleanup                        = mmc_cleanup,
  56        .slots[0]       = {
  57                .set_power              = mmc_set_power,
  58                .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
  59                .name                   = "mmcblk",
  60        },
  61};
  62
  63static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC];
  64
  65void __init h2_mmc_init(void)
  66{
  67        mmc_data[0] = &mmc1_data;
  68        omap1_init_mmc(mmc_data, OMAP16XX_NR_MMC);
  69}
  70
  71#else
  72
  73void __init h2_mmc_init(void)
  74{
  75}
  76
  77#endif
  78