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