uboot/drivers/usb/gadget/udc/udc-uclass.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com
   4 * Written by Jean-Jacques Hiblot <jjhiblot@ti.com>
   5 */
   6
   7#include <common.h>
   8#include <dm.h>
   9#include <dm/device-internal.h>
  10#include <linux/usb/gadget.h>
  11
  12#if CONFIG_IS_ENABLED(DM_USB_GADGET)
  13#define MAX_UDC_DEVICES 4
  14static struct udevice *dev_array[MAX_UDC_DEVICES];
  15int usb_gadget_initialize(int index)
  16{
  17        int ret;
  18        struct udevice *dev = NULL;
  19
  20        if (index < 0 || index >= ARRAY_SIZE(dev_array))
  21                return -EINVAL;
  22        if (dev_array[index])
  23                return 0;
  24        ret = uclass_get_device_by_seq(UCLASS_USB_GADGET_GENERIC, index, &dev);
  25        if (!dev || ret) {
  26                ret = uclass_get_device(UCLASS_USB_GADGET_GENERIC, index, &dev);
  27                if (!dev || ret) {
  28                        pr_err("No USB device found\n");
  29                        return -ENODEV;
  30                }
  31        }
  32        dev_array[index] = dev;
  33        return 0;
  34}
  35
  36int usb_gadget_release(int index)
  37{
  38#if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)
  39        int ret;
  40        if (index < 0 || index >= ARRAY_SIZE(dev_array))
  41                return -EINVAL;
  42
  43        ret = device_remove(dev_array[index], DM_REMOVE_NORMAL);
  44        if (!ret)
  45                dev_array[index] = NULL;
  46        return ret;
  47#else
  48        return -ENOTSUPP;
  49#endif
  50}
  51
  52int usb_gadget_handle_interrupts(int index)
  53{
  54        if (index < 0 || index >= ARRAY_SIZE(dev_array))
  55                return -EINVAL;
  56        return dm_usb_gadget_handle_interrupts(dev_array[index]);
  57}
  58#endif
  59
  60UCLASS_DRIVER(usb_gadget_generic) = {
  61        .id             = UCLASS_USB_GADGET_GENERIC,
  62        .name           = "usb",
  63        .flags          = DM_UC_FLAG_SEQ_ALIAS,
  64};
  65