diff options
Diffstat (limited to 'common/cmd_mmc.c')
| -rw-r--r-- | common/cmd_mmc.c | 61 | 
1 files changed, 56 insertions, 5 deletions
| diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index ee94470da..f1fa32f75 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -26,19 +26,70 @@  #include <mmc.h>  #ifndef CONFIG_GENERIC_MMC +int curr_device = -1; +  int do_mmc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  { -	if (mmc_legacy_init (1) != 0) { -		printf ("No MMC card found\n"); +	int dev; + +	if (argc < 2) { +		cmd_usage(cmdtp); +		return 1; +	} + +	if (strcmp(argv[1], "init") == 0) { +		if (argc == 2) { +			if (curr_device < 0) +				dev = 1; +			else +				dev = curr_device; +		} else if (argc == 3) { +			dev = (int)simple_strtoul(argv[2], NULL, 10); +		} else { +			cmd_usage(cmdtp); +			return 1; +		} + +		if (mmc_legacy_init(dev) != 0) { +			puts("No MMC card found\n"); +			return 1; +		} + +		curr_device = dev; +		printf("mmc%d is available\n", curr_device); +	} else if (strcmp(argv[1], "device") == 0) { +		if (argc == 2) { +			if (curr_device < 0) { +				puts("No MMC device available\n"); +				return 1; +			} +		} else if (argc == 3) { +			dev = (int)simple_strtoul(argv[2], NULL, 10); + +#ifdef CONFIG_SYS_MMC_SET_DEV +			if (mmc_set_dev(dev) != 0) +				return 1; +#endif +			curr_device = dev; +		} else { +			cmd_usage(cmdtp); +			return 1; +		} + +		printf("mmc%d is current device\n", curr_device); +	} else { +		cmd_usage(cmdtp);  		return 1;  	} +  	return 0;  }  U_BOOT_CMD( -	mmcinit,	1,	0,	do_mmc, -	"init mmc card", -	NULL +	mmc, 3, 1, do_mmc, +	"MMC sub-system", +	"init [dev] - init MMC sub system\n" +	"mmc device [dev] - show or set current device\n"  );  #else /* !CONFIG_GENERIC_MMC */ |