2009-11-17 08:41:23 +01:00
/* linux/arch/arm/mach-s5pc100/setup-sdhci.c
*
* Copyright 2008 Samsung Electronics
*
* S5PC100 - Helper functions for settign up SDHCI device ( s ) ( HSMMC )
*
* Based on mach - s3c6410 / setup - sdhci . c
*
* 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 .
*/
# include <linux/kernel.h>
# include <linux/types.h>
# include <linux/interrupt.h>
# include <linux/platform_device.h>
# include <linux/io.h>
# include <linux/mmc/card.h>
# include <linux/mmc/host.h>
# include <plat/regs-sdhci.h>
# include <plat/sdhci.h>
/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
char * s5pc100_hsmmc_clksrcs [ 4 ] = {
[ 0 ] = " hsmmc " ,
[ 1 ] = " hsmmc " ,
2009-12-18 15:40:41 -05:00
/* [2] = "mmc_bus", not yet successfully used yet */
/* [3] = "48m", - note not successfully used yet */
2009-11-17 08:41:23 +01:00
} ;
void s5pc100_setup_sdhci0_cfg_card ( struct platform_device * dev ,
void __iomem * r ,
struct mmc_ios * ios ,
struct mmc_card * card )
{
u32 ctrl2 , ctrl3 ;
/* don't need to alter anything acording to card-type */
writel ( S3C64XX_SDHCI_CONTROL4_DRIVE_9mA , r + S3C64XX_SDHCI_CONTROL4 ) ;
ctrl2 = readl ( r + S3C_SDHCI_CONTROL2 ) ;
ctrl2 & = S3C_SDHCI_CTRL2_SELBASECLK_MASK ;
ctrl2 | = ( S3C64XX_SDHCI_CTRL2_ENSTAASYNCCLR |
S3C64XX_SDHCI_CTRL2_ENCMDCNFMSK |
S3C_SDHCI_CTRL2_ENFBCLKRX |
S3C_SDHCI_CTRL2_DFCNT_NONE |
S3C_SDHCI_CTRL2_ENCLKOUTHOLD ) ;
if ( ios - > clock < 25 * 1000000 )
ctrl3 = ( S3C_SDHCI_CTRL3_FCSEL3 |
S3C_SDHCI_CTRL3_FCSEL2 |
S3C_SDHCI_CTRL3_FCSEL1 |
S3C_SDHCI_CTRL3_FCSEL0 ) ;
else
ctrl3 = ( S3C_SDHCI_CTRL3_FCSEL1 | S3C_SDHCI_CTRL3_FCSEL0 ) ;
writel ( ctrl2 , r + S3C_SDHCI_CONTROL2 ) ;
writel ( ctrl3 , r + S3C_SDHCI_CONTROL3 ) ;
}