📄 usb_otg.h.rej
字号:
****************** 0 ****--- 1,118 ----+ // include/linux/usb_otg.h + + /*+ * These APIs may be used between USB controllers. USB device drivers+ * (for either host or peripheral roles) don't use these calls; they+ * continue to use just usb_device and usb_gadget.+ */+ + + /* OTG defines lots of enumeration states before device reset */+ enum usb_otg_state {+ OTG_STATE_UNDEFINED = 0,+ + /* single-role peripheral, and dual-role default-b */+ OTG_STATE_B_IDLE,+ OTG_STATE_B_SRP_INIT,+ OTG_STATE_B_PERIPHERAL,+ + /* extra dual-role default-b states */+ OTG_STATE_B_WAIT_ACON,+ OTG_STATE_B_HOST,+ + /* dual-role default-a */+ OTG_STATE_A_IDLE,+ OTG_STATE_A_WAIT_VRISE,+ OTG_STATE_A_WAIT_BCON,+ OTG_STATE_A_HOST,+ OTG_STATE_A_SUSPEND,+ OTG_STATE_A_PERIPHERAL,+ OTG_STATE_A_WAIT_VFALL,+ OTG_STATE_A_VBUS_ERR,+ };+ + /*+ * the otg driver needs to interact with both device side and host side+ * usb controllers. it decides which controller is active at a given+ * moment, using the transceiver, ID signal, HNP and sometimes static+ * configuration information (including "board isn't wired for otg").+ */+ struct otg_transceiver {+ struct device *dev;+ const char *label;+ + u8 default_a;+ enum usb_otg_state state;+ + struct usb_bus *host;+ struct usb_gadget *gadget;+ + /* to pass extra port status to the root hub */+ u16 port_status;+ u16 port_change;+ + /* bind/unbind the host controller */+ int (*set_host)(struct otg_transceiver *otg,+ struct usb_bus *host);+ + /* bind/unbind the peripheral controller */+ int (*set_peripheral)(struct otg_transceiver *otg,+ struct usb_gadget *gadget);+ + /* effective for B devices, ignored for A-peripheral */+ int (*set_power)(struct otg_transceiver *otg,+ unsigned mA);+ + /* for B devices only: start session with A-Host */+ int (*start_srp)(struct otg_transceiver *otg);+ + /* start or continue HNP role switch */+ int (*start_hnp)(struct otg_transceiver *otg);+ + };+ + + /* for board-specific init logic */+ extern int otg_set_transceiver(struct otg_transceiver *);+ + + /* for usb host and peripheral controller drivers */+ extern struct otg_transceiver *otg_get_transceiver(void);+ + static inline int+ otg_start_hnp(struct otg_transceiver *otg)+ {+ return otg->start_hnp(otg);+ }+ + + /* for HCDs */+ static inline int+ otg_set_host(struct otg_transceiver *otg, struct usb_bus *host)+ {+ return otg->set_host(otg, host);+ }+ + + /* for usb peripheral controller drivers */+ static inline int+ otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph)+ {+ return otg->set_peripheral(otg, periph);+ }+ + static inline int+ otg_set_power(struct otg_transceiver *otg, unsigned mA)+ {+ return otg->set_power(otg, mA);+ }+ + static inline int+ otg_start_srp(struct otg_transceiver *otg)+ {+ return otg->start_srp(otg);+ }+ + + /* for OTG controller drivers (and maybe other stuff) */+ extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -