uboot/cmd/rockusb.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (C) 2017 Eddie Cai <eddie.cai.linux@gmail.com>
   4 */
   5
   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>
  12
  13static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
  14{
  15        int controller_index, dev_index;
  16        char *usb_controller;
  17        char *devtype;
  18        char *devnum;
  19        int ret;
  20
  21        if (argc < 2)
  22                return CMD_RET_USAGE;
  23
  24        usb_controller = argv[1];
  25        controller_index = simple_strtoul(usb_controller, NULL, 0);
  26
  27        if (argc >= 4) {
  28                devtype = argv[2];
  29                devnum  = argv[3];
  30        } else {
  31                return CMD_RET_USAGE;
  32        }
  33        dev_index = simple_strtoul(devnum, NULL, 0);
  34        rockusb_dev_init(devtype, dev_index);
  35
  36        ret = usb_gadget_initialize(controller_index);
  37        if (ret) {
  38                printf("USB init failed: %d\n", ret);
  39                return CMD_RET_FAILURE;
  40        }
  41
  42        g_dnl_clear_detach();
  43        ret = g_dnl_register("usb_dnl_rockusb");
  44        if (ret)
  45                return CMD_RET_FAILURE;
  46
  47        if (!g_dnl_board_usb_cable_connected()) {
  48                puts("\rUSB cable not detected, Command exit.\n");
  49                ret = CMD_RET_FAILURE;
  50                goto exit;
  51        }
  52
  53        while (1) {
  54                if (g_dnl_detach())
  55                        break;
  56                if (ctrlc())
  57                        break;
  58                usb_gadget_handle_interrupts(controller_index);
  59        }
  60        ret = CMD_RET_SUCCESS;
  61
  62exit:
  63        g_dnl_unregister();
  64        g_dnl_clear_detach();
  65        usb_gadget_release(controller_index);
  66
  67        return ret;
  68}
  69
  70U_BOOT_CMD(rockusb, 4, 1, do_rockusb,
  71           "use the rockusb protocol",
  72           "<USB_controller> <devtype> <dev[:part]>  e.g. rockusb 0 mmc 0\n"
  73);
  74