diff options
| author | Sudhakar Rajashekhara <sudhakar.raj@ti.com> | 2009-08-13 18:16:28 -0400 | 
|---|---|---|
| committer | Kevin Hilman <khilman@deeprootsystems.com> | 2009-08-26 11:55:57 +0300 | 
| commit | 820c4fe32ea11da338445d225cd51caa4cb69e43 (patch) | |
| tree | a4bf410a458d33e7ad606e3d6ea14ed2e5cc5c4e | |
| parent | 7c5ec6095a7d29c89ee050281faa068a374a5ac6 (diff) | |
davinci: Handle pinmux conflict between mmc/sd and nor flash
On DA850/OMAP-L138 EVM, MMC/SD and NOR Flash share
some of the AEMIF pins. This patch prints out a warning
during booting, if both MMC/SD and NOR Flash are enabled
in kernel menuconfig.
If both MMC/SD and NOR Flash are enabled, only MMC/SD
will work correctly.
Signed-off-by: Sudhakar Rajashekhara <sudhakar.raj@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
| -rw-r--r-- | arch/arm/mach-davinci/board-da850-evm.c | 63 | 
1 files changed, 42 insertions, 21 deletions
| diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index 70a2f487da95..f2946a0cf6f6 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c @@ -244,6 +244,20 @@ static void __init da850_evm_init_nor(void)  	iounmap(aemif_addr);  } +#if defined(CONFIG_MTD_PHYSMAP) || \ +    defined(CONFIG_MTD_PHYSMAP_MODULE) +#define HAS_NOR 1 +#else +#define HAS_NOR 0 +#endif + +#if defined(CONFIG_MMC_DAVINCI) || \ +    defined(CONFIG_MMC_DAVINCI_MODULE) +#define HAS_MMC 1 +#else +#define HAS_MMC 0 +#endif +  static __init void da850_evm_init(void)  {  	struct davinci_soc_info *soc_info = &davinci_soc_info; @@ -298,27 +312,34 @@ static __init void da850_evm_init(void)  		pr_warning("da830_evm_init: watchdog registration failed: %d\n",  				ret); -	ret = da8xx_pinmux_setup(da850_mmcsd0_pins); -	if (ret) -		pr_warning("da850_evm_init: mmcsd0 mux setup failed: %d\n", -				ret); - -	ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n"); -	if (ret) -		pr_warning("da850_evm_init: can not open GPIO %d\n", -				DA850_MMCSD_CD_PIN); -	gpio_direction_input(DA850_MMCSD_CD_PIN); - -	ret = gpio_request(DA850_MMCSD_WP_PIN, "MMC WP\n"); -	if (ret) -		pr_warning("da850_evm_init: can not open GPIO %d\n", -				DA850_MMCSD_WP_PIN); -	gpio_direction_input(DA850_MMCSD_WP_PIN); - -	ret = da8xx_register_mmcsd0(&da850_mmc_config); -	if (ret) -		pr_warning("da850_evm_init: mmcsd0 registration failed: %d\n", -				ret); +	if (HAS_MMC) { +		if (HAS_NOR) +			pr_warning("WARNING: both NOR Flash and MMC/SD are " +				"enabled, but they share AEMIF pins.\n" +				"\tDisable one of them.\n"); + +		ret = da8xx_pinmux_setup(da850_mmcsd0_pins); +		if (ret) +			pr_warning("da850_evm_init: mmcsd0 mux setup failed:" +					" %d\n", ret); + +		ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n"); +		if (ret) +			pr_warning("da850_evm_init: can not open GPIO %d\n", +					DA850_MMCSD_CD_PIN); +		gpio_direction_input(DA850_MMCSD_CD_PIN); + +		ret = gpio_request(DA850_MMCSD_WP_PIN, "MMC WP\n"); +		if (ret) +			pr_warning("da850_evm_init: can not open GPIO %d\n", +					DA850_MMCSD_WP_PIN); +		gpio_direction_input(DA850_MMCSD_WP_PIN); + +		ret = da8xx_register_mmcsd0(&da850_mmc_config); +		if (ret) +			pr_warning("da850_evm_init: mmcsd0 registration failed:" +					" %d\n", ret); +	}  	davinci_serial_init(&da850_evm_uart_config); | 
