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