162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/arm/mach-omap1/board-sx1-mmc.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT 662306a36Sopenharmony_ci * Author: Carlos Eduardo Aguiar <carlos.aguiar@indt.org.br> 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * This code is based on linux/arch/arm/mach-omap1/board-h2-mmc.c, which is: 962306a36Sopenharmony_ci * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/platform_device.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include "hardware.h" 1562306a36Sopenharmony_ci#include "board-sx1.h" 1662306a36Sopenharmony_ci#include "mmc.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_MMC_OMAP) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic int mmc_set_power(struct device *dev, int slot, int power_on, 2162306a36Sopenharmony_ci int vdd) 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci int err; 2462306a36Sopenharmony_ci u8 dat = 0; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci err = sx1_i2c_read_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, &dat); 2762306a36Sopenharmony_ci if (err < 0) 2862306a36Sopenharmony_ci return err; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci if (power_on) 3162306a36Sopenharmony_ci dat |= SOFIA_MMC_POWER; 3262306a36Sopenharmony_ci else 3362306a36Sopenharmony_ci dat &= ~SOFIA_MMC_POWER; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci return sx1_i2c_write_byte(SOFIA_I2C_ADDR, SOFIA_POWER1_REG, dat); 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci/* Cover switch is at OMAP_MPUIO(3) */ 3962306a36Sopenharmony_cistatic struct omap_mmc_platform_data mmc1_data = { 4062306a36Sopenharmony_ci .nr_slots = 1, 4162306a36Sopenharmony_ci .slots[0] = { 4262306a36Sopenharmony_ci .set_power = mmc_set_power, 4362306a36Sopenharmony_ci .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 4462306a36Sopenharmony_ci .name = "mmcblk", 4562306a36Sopenharmony_ci }, 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistatic struct omap_mmc_platform_data *mmc_data[OMAP15XX_NR_MMC]; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_civoid __init sx1_mmc_init(void) 5162306a36Sopenharmony_ci{ 5262306a36Sopenharmony_ci mmc_data[0] = &mmc1_data; 5362306a36Sopenharmony_ci omap1_init_mmc(mmc_data, OMAP15XX_NR_MMC); 5462306a36Sopenharmony_ci} 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#else 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_civoid __init sx1_mmc_init(void) 5962306a36Sopenharmony_ci{ 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#endif 63