@ -17,10 +17,18 @@
# define CONFIG_ZYNQ_SDHCI_MIN_FREQ 0
# define CONFIG_ZYNQ_SDHCI_MIN_FREQ 0
# endif
# endif
struct arasan_sdhci_plat {
struct mmc_config cfg ;
struct mmc mmc ;
} ;
static int arasan_sdhci_probe ( struct udevice * dev )
static int arasan_sdhci_probe ( struct udevice * dev )
{
{
struct arasan_sdhci_plat * plat = dev_get_platdata ( dev ) ;
struct mmc_uclass_priv * upriv = dev_get_uclass_priv ( dev ) ;
struct mmc_uclass_priv * upriv = dev_get_uclass_priv ( dev ) ;
struct sdhci_host * host = dev_get_priv ( dev ) ;
struct sdhci_host * host = dev_get_priv ( dev ) ;
u32 caps ;
int ret ;
host - > quirks = SDHCI_QUIRK_WAIT_SEND_CMD |
host - > quirks = SDHCI_QUIRK_WAIT_SEND_CMD |
SDHCI_QUIRK_BROKEN_R1B ;
SDHCI_QUIRK_BROKEN_R1B ;
@ -31,13 +39,19 @@ static int arasan_sdhci_probe(struct udevice *dev)
host - > version = sdhci_readw ( host , SDHCI_HOST_VERSION ) ;
host - > version = sdhci_readw ( host , SDHCI_HOST_VERSION ) ;
add_sdhci ( host , CONFIG_ZYNQ_SDHCI_MAX_FREQ ,
caps = sdhci_readl ( host , SDHCI_CAPABILITIES ) ;
CONFIG_ZYNQ_SDHCI_MIN_FREQ ) ;
ret = sdhci_setup_cfg ( & plat - > cfg , dev - > name , host - > bus_width ,
caps , CONFIG_ZYNQ_SDHCI_MAX_FREQ ,
upriv - > mmc = host - > mmc ;
CONFIG_ZYNQ_SDHCI_MIN_FREQ , host - > version ,
host - > quirks , 0 ) ;
host - > mmc = & plat - > mmc ;
if ( ret )
return ret ;
host - > mmc - > priv = host ;
host - > mmc - > dev = dev ;
host - > mmc - > dev = dev ;
upriv - > mmc = host - > mmc ;
return 0 ;
return sdhci_probe ( dev ) ;
}
}
static int arasan_sdhci_ofdata_to_platdata ( struct udevice * dev )
static int arasan_sdhci_ofdata_to_platdata ( struct udevice * dev )
@ -50,6 +64,18 @@ static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev)
return 0 ;
return 0 ;
}
}
static int arasan_sdhci_bind ( struct udevice * dev )
{
struct arasan_sdhci_plat * plat = dev_get_platdata ( dev ) ;
int ret ;
ret = sdhci_bind ( dev , & plat - > mmc , & plat - > cfg ) ;
if ( ret )
return ret ;
return 0 ;
}
static const struct udevice_id arasan_sdhci_ids [ ] = {
static const struct udevice_id arasan_sdhci_ids [ ] = {
{ . compatible = " arasan,sdhci-8.9a " } ,
{ . compatible = " arasan,sdhci-8.9a " } ,
{ }
{ }
@ -60,6 +86,9 @@ U_BOOT_DRIVER(arasan_sdhci_drv) = {
. id = UCLASS_MMC ,
. id = UCLASS_MMC ,
. of_match = arasan_sdhci_ids ,
. of_match = arasan_sdhci_ids ,
. ofdata_to_platdata = arasan_sdhci_ofdata_to_platdata ,
. ofdata_to_platdata = arasan_sdhci_ofdata_to_platdata ,
. ops = & sdhci_ops ,
. bind = arasan_sdhci_bind ,
. probe = arasan_sdhci_probe ,
. probe = arasan_sdhci_probe ,
. priv_auto_alloc_size = sizeof ( struct sdhci_host ) ,
. priv_auto_alloc_size = sizeof ( struct sdhci_host ) ,
. platdata_auto_alloc_size = sizeof ( struct arasan_sdhci_plat ) ,
} ;
} ;