]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ti-u-boot/ti-u-boot.git/blob - cmd/rockusb.c
Prepare v2024.04
[ti-u-boot/ti-u-boot.git] / cmd / rockusb.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2017 Eddie Cai <eddie.cai.linux@gmail.com>
4  */
6 #include <common.h>
7 #include <command.h>
8 #include <console.h>
9 #include <g_dnl.h>
10 #include <usb.h>
11 #include <asm/arch-rockchip/f_rockusb.h>
13 static int do_rockusb(struct cmd_tbl *cmdtp, int flag, int argc,
14                       char *const argv[])
15 {
16         int controller_index, dev_index;
17         char *usb_controller;
18         char *devtype;
19         char *devnum;
20         int ret;
22         if (argc < 2)
23                 return CMD_RET_USAGE;
25         usb_controller = argv[1];
26         controller_index = simple_strtoul(usb_controller, NULL, 0);
28         if (argc >= 4) {
29                 devtype = argv[2];
30                 devnum  = argv[3];
31         } else {
32                 return CMD_RET_USAGE;
33         }
34         dev_index = simple_strtoul(devnum, NULL, 0);
35         rockusb_dev_init(devtype, dev_index);
37         ret = usb_gadget_initialize(controller_index);
38         if (ret) {
39                 printf("USB init failed: %d\n", ret);
40                 return CMD_RET_FAILURE;
41         }
43         g_dnl_clear_detach();
44         ret = g_dnl_register("usb_dnl_rockusb");
45         if (ret)
46                 return CMD_RET_FAILURE;
48         if (!g_dnl_board_usb_cable_connected()) {
49                 puts("\rUSB cable not detected, Command exit.\n");
50                 ret = CMD_RET_FAILURE;
51                 goto exit;
52         }
54         while (1) {
55                 if (g_dnl_detach())
56                         break;
57                 if (ctrlc())
58                         break;
59                 usb_gadget_handle_interrupts(controller_index);
60         }
61         ret = CMD_RET_SUCCESS;
63 exit:
64         g_dnl_unregister();
65         g_dnl_clear_detach();
66         usb_gadget_release(controller_index);
68         return ret;
69 }
71 U_BOOT_CMD(rockusb, 4, 1, do_rockusb,
72            "use the rockusb protocol",
73            "<USB_controller> <devtype> <dev[:part]>  e.g. rockusb 0 mmc 0\n"
74 );