root/drivers/usb/isp1760/isp1760-udc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. isp1760_udc_register
  2. isp1760_udc_unregister

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Driver for the NXP ISP1761 device controller
   4  *
   5  * Copyright 2014 Ideas on Board Oy
   6  *
   7  * Contacts:
   8  *      Laurent Pinchart <laurent.pinchart@ideasonboard.com>
   9  */
  10 
  11 #ifndef _ISP1760_UDC_H_
  12 #define _ISP1760_UDC_H_
  13 
  14 #include <linux/ioport.h>
  15 #include <linux/list.h>
  16 #include <linux/spinlock.h>
  17 #include <linux/timer.h>
  18 #include <linux/usb/gadget.h>
  19 
  20 struct isp1760_device;
  21 struct isp1760_udc;
  22 
  23 enum isp1760_ctrl_state {
  24         ISP1760_CTRL_SETUP,             /* Waiting for a SETUP transaction */
  25         ISP1760_CTRL_DATA_IN,           /* Setup received, data IN stage */
  26         ISP1760_CTRL_DATA_OUT,          /* Setup received, data OUT stage */
  27         ISP1760_CTRL_STATUS,            /* 0-length request in status stage */
  28 };
  29 
  30 struct isp1760_ep {
  31         struct isp1760_udc *udc;
  32         struct usb_ep ep;
  33 
  34         struct list_head queue;
  35 
  36         unsigned int addr;
  37         unsigned int maxpacket;
  38         char name[7];
  39 
  40         const struct usb_endpoint_descriptor *desc;
  41 
  42         bool rx_pending;
  43         bool halted;
  44         bool wedged;
  45 };
  46 
  47 /**
  48  * struct isp1760_udc - UDC state information
  49  * irq: IRQ number
  50  * irqname: IRQ name (as passed to request_irq)
  51  * regs: Base address of the UDC registers
  52  * driver: Gadget driver
  53  * gadget: Gadget device
  54  * lock: Protects driver, vbus_timer, ep, ep0_*, DC_EPINDEX register
  55  * ep: Array of endpoints
  56  * ep0_state: Control request state for endpoint 0
  57  * ep0_dir: Direction of the current control request
  58  * ep0_length: Length of the current control request
  59  * connected: Tracks gadget driver bus connection state
  60  */
  61 struct isp1760_udc {
  62 #ifdef CONFIG_USB_ISP1761_UDC
  63         struct isp1760_device *isp;
  64 
  65         int irq;
  66         char *irqname;
  67         void __iomem *regs;
  68 
  69         struct usb_gadget_driver *driver;
  70         struct usb_gadget gadget;
  71 
  72         spinlock_t lock;
  73         struct timer_list vbus_timer;
  74 
  75         struct isp1760_ep ep[15];
  76 
  77         enum isp1760_ctrl_state ep0_state;
  78         u8 ep0_dir;
  79         u16 ep0_length;
  80 
  81         bool connected;
  82 
  83         unsigned int devstatus;
  84 #endif
  85 };
  86 
  87 #ifdef CONFIG_USB_ISP1761_UDC
  88 int isp1760_udc_register(struct isp1760_device *isp, int irq,
  89                          unsigned long irqflags);
  90 void isp1760_udc_unregister(struct isp1760_device *isp);
  91 #else
  92 static inline int isp1760_udc_register(struct isp1760_device *isp, int irq,
  93                                        unsigned long irqflags)
  94 {
  95         return 0;
  96 }
  97 
  98 static inline void isp1760_udc_unregister(struct isp1760_device *isp)
  99 {
 100 }
 101 #endif
 102 
 103 #endif

/* [<][>][^][v][top][bottom][index][help] */