2007-11-30 01:52:53 -04:00
/*
* linux / arch / arm / mach - omap1 / board - sx1 - mmc . c
*
* Copyright ( C ) 2007 Instituto Nokia de Tecnologia - INdT
* Author : Carlos Eduardo Aguiar < carlos . aguiar @ indt . org . br >
*
* This code is based on linux / arch / arm / mach - omap1 / board - h2 - mmc . c , which is :
* Copyright ( C ) 2007 Instituto Nokia de Tecnologia - INdT
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
2008-12-10 17:37:16 -08:00
# include <linux/platform_device.h>
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
# include <mach/mmc.h>
# include <mach/gpio.h>
2007-11-30 01:52:53 -04:00
2008-12-10 17:37:16 -08:00
# if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
2007-11-30 01:52:53 -04:00
2008-12-10 17:37:16 -08:00
static int mmc_set_power ( struct device * dev , int slot , int power_on ,
2007-11-30 01:52:53 -04:00
int vdd )
{
int err ;
u8 dat = 0 ;
err = sx1_i2c_read_byte ( SOFIA_I2C_ADDR , SOFIA_POWER1_REG , & dat ) ;
if ( err < 0 )
return err ;
if ( power_on )
dat | = SOFIA_MMC_POWER ;
else
dat & = ~ SOFIA_MMC_POWER ;
return sx1_i2c_write_byte ( SOFIA_I2C_ADDR , SOFIA_POWER1_REG , dat ) ;
}
2008-12-10 17:37:16 -08:00
/* Cover switch is at OMAP_MPUIO(3) */
static struct omap_mmc_platform_data mmc1_data = {
2007-11-30 01:52:53 -04:00
. nr_slots = 1 ,
. slots [ 0 ] = {
2008-12-10 17:37:16 -08:00
. set_power = mmc_set_power ,
2007-11-30 01:52:53 -04:00
. ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 |
MMC_VDD_32_33 | MMC_VDD_33_34 ,
. name = " mmcblk " ,
} ,
} ;
2008-12-10 17:37:16 -08:00
static struct omap_mmc_platform_data * mmc_data [ OMAP15XX_NR_MMC ] ;
2007-11-30 01:52:53 -04:00
void __init sx1_mmc_init ( void )
{
2008-12-10 17:37:16 -08:00
mmc_data [ 0 ] = & mmc1_data ;
omap1_init_mmc ( mmc_data , OMAP15XX_NR_MMC ) ;
2007-11-30 01:52:53 -04:00
}
# else
void __init sx1_mmc_init ( void )
{
}
# endif