diff options
author | Tom Rini <trini@konsulko.com> | 2015-07-24 16:39:56 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-07-24 16:39:56 -0400 |
commit | 6f4e050639241218987541f4729172e4e0e2ff31 (patch) | |
tree | 0b7555fa699540dc975d179551211dd95c650a46 /common | |
parent | 5a9749ee12bed44ca4dc7f2412b5a340db666954 (diff) | |
parent | 58d6d139c3e7bb923029e7ba18bfec7f420ead0f (diff) | |
download | u-boot-imx-6f4e050639241218987541f4729172e4e0e2ff31.zip u-boot-imx-6f4e050639241218987541f4729172e4e0e2ff31.tar.gz u-boot-imx-6f4e050639241218987541f4729172e4e0e2ff31.tar.bz2 |
Merge git://git.denx.de/u-boot-usb
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_fastboot.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/common/cmd_fastboot.c b/common/cmd_fastboot.c index d52ccfb..b9d1c8c 100644 --- a/common/cmd_fastboot.c +++ b/common/cmd_fastboot.c @@ -10,11 +10,26 @@ #include <common.h> #include <command.h> #include <g_dnl.h> +#include <usb.h> static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { + int controller_index; + char *usb_controller; int ret; + if (argc < 2) + return CMD_RET_USAGE; + + usb_controller = argv[1]; + controller_index = simple_strtoul(usb_controller, NULL, 0); + + ret = board_usb_init(controller_index, USB_INIT_DEVICE); + if (ret) { + error("USB init failed: %d", ret); + return CMD_RET_FAILURE; + } + g_dnl_clear_detach(); ret = g_dnl_register("usb_dnl_fastboot"); if (ret) @@ -23,9 +38,8 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) if (!g_dnl_board_usb_cable_connected()) { puts("\rUSB cable not detected.\n" \ "Command exit.\n"); - g_dnl_unregister(); - g_dnl_clear_detach(); - return CMD_RET_FAILURE; + ret = CMD_RET_FAILURE; + goto exit; } while (1) { @@ -33,17 +47,22 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) break; if (ctrlc()) break; - usb_gadget_handle_interrupts(0); + usb_gadget_handle_interrupts(controller_index); } + ret = CMD_RET_SUCCESS; + +exit: g_dnl_unregister(); g_dnl_clear_detach(); - return CMD_RET_SUCCESS; + board_usb_cleanup(controller_index, USB_INIT_DEVICE); + + return ret; } U_BOOT_CMD( - fastboot, 1, 0, do_fastboot, + fastboot, 2, 1, do_fastboot, "use USB Fastboot protocol", - "\n" + "<USB_controller>\n" " - run as a fastboot usb device" ); |