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 <plat/mmc.h> 20 #include <plat/board-sx1.h> 21 22 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) 23 24 static int mmc_set_power(struct device *dev, int slot, int power_on, 25 int vdd) 26 { 27 int err; 28 u8 dat = 0; 29 30 err = sx1_i2c_read_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, &dat); 31 if (err < 0) 32 return err; 33 34 if (power_on) 35 dat |= SOFIA_MMC_POWER; 36 else 37 dat &= ~SOFIA_MMC_POWER; 38 39 return sx1_i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat); 40 } 41 42 /* Cover switch is at OMAP_MPUIO(3) */ 43 static struct omap_mmc_platform_data mmc1_data = { 44 .nr_slots = 1, 45 .slots[0] = { 46 .set_power = mmc_set_power, 47 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 48 .name = "mmcblk", 49 }, 50 }; 51 52 static struct omap_mmc_platform_data *mmc_data[OMAP15XX_NR_MMC]; 53 54 void __init sx1_mmc_init(void) 55 { 56 mmc_data[0] = &mmc1_data; 57 omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC); 58 } 59 60 #else 61 62 void __init sx1_mmc_init(void) 63 { 64 } 65 66 #endif 67