[U-Boot] [PATCH] cmd_mmc: add support device command for selecting mmc device

This patch improves device command for selecting mmc device
Signed-off-by: Minkyu Kang mk7.kang@samsung.com --- common/cmd_mmc.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 64 insertions(+), 5 deletions(-)
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 16c919b..2557892 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -26,20 +26,79 @@ #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"); + switch (argc) { + case 0: + case 1: + cmd_usage(cmdtp); + return 1; + case 2: + if (strncmp(argv[1], "init", 4) == 0) { + if (curr_device < 0) + curr_device = 1; + + if (mmc_legacy_init(curr_device) != 0) { + printf("No MMC card found\n"); + return 1; + } + + printf("mmc%d is available\n", curr_device); + return 0; + } else if (strncmp(argv[1], "dev", 3) == 0) { + if (curr_device < 0) { + printf("no MMC devices available\n"); + return 1; + } + + printf("mmc%d is current device\n", curr_device); + return 0; + } + + cmd_usage(cmdtp); + return 1; + case 3: + if (strncmp(argv[1], "init", 4) == 0) { + int dev = (int)simple_strtoul(argv[2], NULL, 10); + + if (mmc_legacy_init(dev) != 0) { + printf("No MMC card found\n"); + return 1; + } + + curr_device = dev; + + printf("mmc%d is available\n", curr_device); + return 0; + } else if (strncmp(argv[1], "dev", 3) == 0) { + int 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; + + printf("mmc%d is now current device\n", curr_device); + return 0; + } + + 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", + "mmc init [dev] - init MMC sub system\n" + "mmc device [dev] - show or set current device\n" ); + #else /* !CONFIG_GENERIC_MMC */

Minkyu Kang wrote:
This patch improves device command for selecting mmc device
We should add Andy to CC, as it seems that he is the new MMC maintainer :)
Andy: Would be quite nice if you could comment on Minkyu's changes. See [1], [2] and [3] for the history, too.
Dirk
[1] http://lists.denx.de/pipermail/u-boot/2009-March/049660.html
[2] http://lists.denx.de/pipermail/u-boot/2009-March/049694.html
[3] http://lists.denx.de/pipermail/u-boot/2009-March/049707.html
Signed-off-by: Minkyu Kang mk7.kang@samsung.com
common/cmd_mmc.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 64 insertions(+), 5 deletions(-)
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 16c919b..2557892 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -26,20 +26,79 @@ #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");
- switch (argc) {
- case 0:
- case 1:
cmd_usage(cmdtp);
return 1;
- case 2:
if (strncmp(argv[1], "init", 4) == 0) {
if (curr_device < 0)
curr_device = 1;
if (mmc_legacy_init(curr_device) != 0) {
printf("No MMC card found\n");
return 1;
}
printf("mmc%d is available\n", curr_device);
return 0;
} else if (strncmp(argv[1], "dev", 3) == 0) {
if (curr_device < 0) {
printf("no MMC devices available\n");
return 1;
}
printf("mmc%d is current device\n", curr_device);
return 0;
}
cmd_usage(cmdtp);
return 1;
- case 3:
if (strncmp(argv[1], "init", 4) == 0) {
int dev = (int)simple_strtoul(argv[2], NULL, 10);
if (mmc_legacy_init(dev) != 0) {
printf("No MMC card found\n");
return 1;
}
curr_device = dev;
printf("mmc%d is available\n", curr_device);
return 0;
} else if (strncmp(argv[1], "dev", 3) == 0) {
int 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;
printf("mmc%d is now current device\n", curr_device);
return 0;
}
return 1; } return 0;cmd_usage(cmdtp);
}
U_BOOT_CMD(
- mmcinit, 1, 0, do_mmc,
- "init mmc card",
- NULL
- mmc, 3, 1, do_mmc,
- "MMC sub-system",
- "mmc init [dev] - init MMC sub system\n"
- "mmc device [dev] - show or set current device\n"
);
#else /* !CONFIG_GENERIC_MMC */

On Saturday 28 March 2009 01:04:10 Minkyu Kang wrote:
- case 2:
if (strncmp(argv[1], "init", 4) == 0) {
} else if (strncmp(argv[1], "dev", 3) == 0) {
why strncmp ? i dont think it makes sense to support "init", "init.moo" "initaksldfjaksldfjasdf" ...
printf("No MMC card found\n");
no format modifiers -> use puts()
if (curr_device < 0) {
printf("no MMC devices available\n");
puts("No MMC card selected\n");
- case 3:
considering how much code is duplicated with "case 2", seems like it would make sense to unify them and have each piece check the argc
U_BOOT_CMD(
- mmcinit, 1, 0, do_mmc,
- "init mmc card",
- NULL
- mmc, 3, 1, do_mmc,
- "MMC sub-system",
- "mmc init [dev] - init MMC sub system\n"
first usage string should omit the command. run 'help mmc' on the board to see why ... -mike

On Sat, Mar 28, 2009 at 12:04 AM, Minkyu Kang mk7.kang@samsung.com wrote:
This patch improves device command for selecting mmc device
Signed-off-by: Minkyu Kang mk7.kang@samsung.com
Rather than porting features from the generic mmc framework into the legacy system, I'd really prefer if the omap driver were ported to the generic mmc framework. The framework already has support for multiple devices. We can then discuss how to deal with selecting which device is the default device as a side issue.
Andy
participants (4)
-
Andy Fleming
-
Dirk Behme
-
Mike Frysinger
-
Minkyu Kang