Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134/* SPDX-License-Identifier: GPL-2.0 *//* USB OTG (On The Go) defines *//* * * 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. */
#ifndef __LINUX_USB_OTG_H#define __LINUX_USB_OTG_H
#include <linux/phy/phy.h>#include <linux/usb/phy.h>
struct usb_otg { u8 default_a;
struct phy *phy; /* old usb_phy interface */ struct usb_phy *usb_phy; struct usb_bus *host; struct usb_gadget *gadget;
enum usb_otg_state state;
/* bind/unbind the host controller */ int (*set_host)(struct usb_otg *otg, struct usb_bus *host);
/* bind/unbind the peripheral controller */ int (*set_peripheral)(struct usb_otg *otg, struct usb_gadget *gadget);
/* effective for A-peripheral, ignored for B devices */ int (*set_vbus)(struct usb_otg *otg, bool enabled);
/* for B devices only: start session with A-Host */ int (*start_srp)(struct usb_otg *otg);
/* start or continue HNP role switch */ int (*start_hnp)(struct usb_otg *otg);
};
/** * struct usb_otg_caps - describes the otg capabilities of the device * @otg_rev: The OTG revision number the device is compliant with, it's * in binary-coded decimal (i.e. 2.0 is 0200H). * @hnp_support: Indicates if the device supports HNP. * @srp_support: Indicates if the device supports SRP. * @adp_support: Indicates if the device supports ADP. */struct usb_otg_caps { u16 otg_rev; bool hnp_support; bool srp_support; bool adp_support;};
extern const char *usb_otg_state_string(enum usb_otg_state state);
/* Context: can sleep */static inline intotg_start_hnp(struct usb_otg *otg){ if (otg && otg->start_hnp) return otg->start_hnp(otg);
return -ENOTSUPP;}
/* Context: can sleep */static inline intotg_set_vbus(struct usb_otg *otg, bool enabled){ if (otg && otg->set_vbus) return otg->set_vbus(otg, enabled);
return -ENOTSUPP;}
/* for HCDs */static inline intotg_set_host(struct usb_otg *otg, struct usb_bus *host){ if (otg && otg->set_host) return otg->set_host(otg, host);
return -ENOTSUPP;}
/* for usb peripheral controller drivers */
/* Context: can sleep */static inline intotg_set_peripheral(struct usb_otg *otg, struct usb_gadget *periph){ if (otg && otg->set_peripheral) return otg->set_peripheral(otg, periph);
return -ENOTSUPP;}
static inline intotg_start_srp(struct usb_otg *otg){ if (otg && otg->start_srp) return otg->start_srp(otg);
return -ENOTSUPP;}
/* for OTG controller drivers (and maybe other stuff) */extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
enum usb_dr_mode { USB_DR_MODE_UNKNOWN, USB_DR_MODE_HOST, USB_DR_MODE_PERIPHERAL, USB_DR_MODE_OTG,};
/** * usb_get_dr_mode - Get dual role mode for given device * @dev: Pointer to the given device * * The function gets phy interface string from property 'dr_mode', * and returns the corresponding enum usb_dr_mode */extern enum usb_dr_mode usb_get_dr_mode(struct device *dev);extern enum usb_dr_mode usb_get_role_switch_default_mode(struct device *dev);
#endif /* __LINUX_USB_OTG_H */