1 /* 2 * linux/arch/arm/mach-omap1/board-sx1-mmc.c 3 * 4 * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT 5 * Author: Carlos Eduardo Aguiar <carlos.aguiar@indt.org.br> 6 * 7 * This code is based on linux/arch/arm/mach-omap1/board-h2-mmc.c, which is: 8 * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT 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 15 #include <linux/gpio.h> 16 #include <linux/platform_device.h> 17 18 #include <mach/hardware.h> 19 #include "board-sx1.h" 20 21 #include "mmc.h" 22 23 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) 24 25 static int mmc_set_power(struct device *dev, int slot, int power_on, 26 int vdd) 27 { 28 int err; 29 u8 dat = 0; 30 31 err = sx1_i2c_read_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, &dat); 32 if (err < 0) 33 return err; 34 35 if (power_on) 36 dat |= SOFIA_MMC_POWER; 37 else 38 dat &= ~SOFIA_MMC_POWER; 39 40 return sx1_i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat); 41 } 42 43 /* Cover switch is at OMAP_MPUIO(3) */ 44 static struct omap_mmc_platform_data mmc1_data = { 45 .nr_slots = 1, 46 .slots[0] = { 47 .set_power = mmc_set_power, 48 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 49 .name = "mmcblk", 50 }, 51 }; 52 53 static struct omap_mmc_platform_data *mmc_data[OMAP15XX_NR_MMC]; 54 55 void __init sx1_mmc_init(void) 56 { 57 mmc_data[0] = &mmc1_data; 58 omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC); 59 } 60 61 #else 62 63 void __init sx1_mmc_init(void) 64 { 65 } 66 67 #endif 68