home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / usb_otg.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.1 KB  |  132 lines

  1. // include/linux/usb_otg.h 
  2.  
  3. /*
  4.  * These APIs may be used between USB controllers.  USB device drivers
  5.  * (for either host or peripheral roles) don't use these calls; they
  6.  * continue to use just usb_device and usb_gadget.
  7.  */
  8.  
  9.  
  10. /* OTG defines lots of enumeration states before device reset */
  11. enum usb_otg_state {
  12.     OTG_STATE_UNDEFINED = 0,
  13.  
  14.     /* single-role peripheral, and dual-role default-b */
  15.     OTG_STATE_B_IDLE,
  16.     OTG_STATE_B_SRP_INIT,
  17.     OTG_STATE_B_PERIPHERAL,
  18.  
  19.     /* extra dual-role default-b states */
  20.     OTG_STATE_B_WAIT_ACON,
  21.     OTG_STATE_B_HOST,
  22.  
  23.     /* dual-role default-a */
  24.     OTG_STATE_A_IDLE,
  25.     OTG_STATE_A_WAIT_VRISE,
  26.     OTG_STATE_A_WAIT_BCON,
  27.     OTG_STATE_A_HOST,
  28.     OTG_STATE_A_SUSPEND,
  29.     OTG_STATE_A_PERIPHERAL,
  30.     OTG_STATE_A_WAIT_VFALL,
  31.     OTG_STATE_A_VBUS_ERR,
  32. };
  33.  
  34. /*
  35.  * the otg driver needs to interact with both device side and host side
  36.  * usb controllers.  it decides which controller is active at a given
  37.  * moment, using the transceiver, ID signal, HNP and sometimes static
  38.  * configuration information (including "board isn't wired for otg").
  39.  */
  40. struct otg_transceiver {
  41.     struct device        *dev;
  42.     const char        *label;
  43.  
  44.     u8            default_a;
  45.     enum usb_otg_state    state;
  46.  
  47.     struct usb_bus        *host;
  48.     struct usb_gadget    *gadget;
  49.  
  50.     /* to pass extra port status to the root hub */
  51.     u16            port_status;
  52.     u16            port_change;
  53.  
  54.     /* bind/unbind the host controller */
  55.     int     (*set_host)(struct otg_transceiver *otg,
  56.                 struct usb_bus *host);
  57.  
  58.     /* bind/unbind the peripheral controller */
  59.     int    (*set_peripheral)(struct otg_transceiver *otg,
  60.                 struct usb_gadget *gadget);
  61.  
  62.     /* effective for B devices, ignored for A-peripheral */
  63.     int    (*set_power)(struct otg_transceiver *otg,
  64.                 unsigned mA);
  65.  
  66.     /* for non-OTG B devices: set transceiver into suspend mode */
  67.     int    (*set_suspend)(struct otg_transceiver *otg,
  68.                 int suspend);
  69.  
  70.     /* for B devices only:  start session with A-Host */
  71.     int    (*start_srp)(struct otg_transceiver *otg);
  72.  
  73.     /* start or continue HNP role switch */
  74.     int    (*start_hnp)(struct otg_transceiver *otg);
  75.  
  76. };
  77.  
  78.  
  79. /* for board-specific init logic */
  80. extern int otg_set_transceiver(struct otg_transceiver *);
  81.  
  82.  
  83. /* for usb host and peripheral controller drivers */
  84. extern struct otg_transceiver *otg_get_transceiver(void);
  85.  
  86. static inline int
  87. otg_start_hnp(struct otg_transceiver *otg)
  88. {
  89.     return otg->start_hnp(otg);
  90. }
  91.  
  92.  
  93. /* for HCDs */
  94. static inline int
  95. otg_set_host(struct otg_transceiver *otg, struct usb_bus *host)
  96. {
  97.     return otg->set_host(otg, host);
  98. }
  99.  
  100.  
  101. /* for usb peripheral controller drivers */
  102. static inline int
  103. otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph)
  104. {
  105.     return otg->set_peripheral(otg, periph);
  106. }
  107.  
  108. static inline int
  109. otg_set_power(struct otg_transceiver *otg, unsigned mA)
  110. {
  111.     return otg->set_power(otg, mA);
  112. }
  113.  
  114. static inline int
  115. otg_set_suspend(struct otg_transceiver *otg, int suspend)
  116. {
  117.     if (otg->set_suspend != NULL)
  118.         return otg->set_suspend(otg, suspend);
  119.     else
  120.         return 0;
  121. }
  122.  
  123. static inline int
  124. otg_start_srp(struct otg_transceiver *otg)
  125. {
  126.     return otg->start_srp(otg);
  127. }
  128.  
  129.  
  130. /* for OTG controller drivers (and maybe other stuff) */
  131. extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
  132.