X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fcmd_fastboot.c;h=b9d1c8c02bd9c0c51976271f80c9d98bcd5ef4e1;hb=c1faf0024c9c8b3b39fd41fd08308688e757cb85;hp=909616dcb7f3744f6fb5106f519b39b9564bfb04;hpb=1454ba8e56d88a8b95ac8050cde2c07c651cd0ae;p=u-boot diff --git a/common/cmd_fastboot.c b/common/cmd_fastboot.c index 909616dcb7..b9d1c8c02b 100644 --- a/common/cmd_fastboot.c +++ b/common/cmd_fastboot.c @@ -10,28 +10,59 @@ #include #include #include +#include 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) return ret; + if (!g_dnl_board_usb_cable_connected()) { + puts("\rUSB cable not detected.\n" \ + "Command exit.\n"); + ret = CMD_RET_FAILURE; + goto exit; + } + while (1) { + if (g_dnl_detach()) + break; if (ctrlc()) break; - usb_gadget_handle_interrupts(); + usb_gadget_handle_interrupts(controller_index); } + ret = CMD_RET_SUCCESS; + +exit: g_dnl_unregister(); - return CMD_RET_SUCCESS; + g_dnl_clear_detach(); + 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" + "\n" " - run as a fastboot usb device" );