2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2007-11-27 00:01:45 -04:00
/*
* linux / arch / arm / mach - omap1 / board - h2 - mmc . c
*
* Copyright ( C ) 2007 Instituto Nokia de Tecnologia - INdT
* Author : Felipe Balbi < felipe . lima @ indt . org . br >
*
* This code is based on linux / arch / arm / mach - omap2 / board - n800 - mmc . c , which is :
* Copyright ( C ) 2006 Nokia Corporation
*/
2011-07-26 10:53:52 +01:00
# include <linux/gpio.h>
2008-12-10 17:37:16 -08:00
# include <linux/platform_device.h>
2012-10-15 12:09:43 -07:00
# include <linux/platform_data/gpio-omap.h>
2017-08-14 18:34:23 +02:00
# include <linux/mfd/tps65010.h>
2008-12-10 17:37:16 -08:00
2009-03-23 18:07:33 -07:00
# include "board-h2.h"
2012-10-15 12:09:43 -07:00
# include "mmc.h"
2009-03-23 18:07:33 -07:00
2016-08-11 15:29:44 -04:00
# if IS_ENABLED(CONFIG_MMC_OMAP)
2008-12-10 17:37:16 -08:00
static int mmc_set_power ( struct device * dev , int slot , int power_on ,
int vdd )
{
2009-04-23 11:10:47 -07:00
gpio_set_value ( H2_TPS_GPIO_MMC_PWR_EN , power_on ) ;
2008-12-10 17:37:16 -08:00
return 0 ;
}
static int mmc_late_init ( struct device * dev )
{
2009-04-23 11:10:47 -07:00
int ret = gpio_request ( H2_TPS_GPIO_MMC_PWR_EN , " MMC power " ) ;
2008-12-10 17:37:16 -08:00
if ( ret < 0 )
return ret ;
gpio_direction_output ( H2_TPS_GPIO_MMC_PWR_EN , 0 ) ;
return ret ;
}
2009-04-23 11:10:47 -07:00
static void mmc_cleanup ( struct device * dev )
2008-12-10 17:37:16 -08:00
{
gpio_free ( H2_TPS_GPIO_MMC_PWR_EN ) ;
}
/*
* H2 could use the following functions tested :
* - mmc_get_cover_state that uses OMAP_MPUIO ( 1 )
* - mmc_get_wp that uses OMAP_MPUIO ( 3 )
*/
static struct omap_mmc_platform_data mmc1_data = {
. nr_slots = 1 ,
. init = mmc_late_init ,
2009-04-23 11:10:47 -07:00
. cleanup = mmc_cleanup ,
2008-12-10 17:37:16 -08:00
. slots [ 0 ] = {
. set_power = mmc_set_power ,
2010-10-12 16:07:51 -07:00
. ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34 ,
2008-12-10 17:37:16 -08:00
. name = " mmcblk " ,
} ,
} ;
static struct omap_mmc_platform_data * mmc_data [ OMAP16XX_NR_MMC ] ;
2007-11-27 00:01:45 -04:00
void __init h2_mmc_init ( void )
{
2008-12-10 17:37:16 -08:00
mmc_data [ 0 ] = & mmc1_data ;
omap1_init_mmc ( mmc_data , OMAP16XX_NR_MMC ) ;
2007-11-27 00:01:45 -04:00
}
2008-12-10 17:37:16 -08:00
# else
void __init h2_mmc_init ( void )
2007-11-27 00:01:45 -04:00
{
}
2008-12-10 17:37:16 -08:00
# endif