]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - common/cmd_usb_mass_storage.c
usb: ums: allows using every mmc device with ums.
[karo-tx-uboot.git] / common / cmd_usb_mass_storage.c
1 /*
2  * Copyright (C) 2011 Samsung Electronics
3  * Lukasz Majewski <l.majewski@samsung.com>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #include <common.h>
9 #include <command.h>
10 #include <g_dnl.h>
11 #include <usb.h>
12 #include <usb_mass_storage.h>
13
14 int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
15                                int argc, char * const argv[])
16 {
17         if (argc < 3)
18                 return CMD_RET_USAGE;
19
20         const char *usb_controller = argv[1];
21         const char *mmc_devstring  = argv[2];
22
23         unsigned int dev_num = simple_strtoul(mmc_devstring, NULL, 0);
24
25         struct ums *ums = ums_init(dev_num);
26         if (!ums)
27                 return CMD_RET_FAILURE;
28
29         unsigned int controller_index = (unsigned int)(simple_strtoul(
30                                         usb_controller, NULL, 0));
31         if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
32                 error("Couldn't init USB controller.");
33                 return CMD_RET_FAILURE;
34         }
35
36         int rc = fsg_init(ums);
37         if (rc) {
38                 error("fsg_init failed");
39                 return CMD_RET_FAILURE;
40         }
41
42         g_dnl_register("ums");
43
44         while (1) {
45                 /* Handle control-c and timeouts */
46                 if (ctrlc()) {
47                         error("The remote end did not respond in time.");
48                         goto exit;
49                 }
50
51                 usb_gadget_handle_interrupts();
52                 /* Check if USB cable has been detached */
53                 if (fsg_main_thread(NULL) == EIO)
54                         goto exit;
55         }
56 exit:
57         g_dnl_unregister();
58         return CMD_RET_SUCCESS;
59 }
60
61 U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
62         "Use the UMS [User Mass Storage]",
63         "ums <USB_controller> <mmc_dev>  e.g. ums 0 0"
64 );