File Index
Files and directories
Sign in
FILE

otg.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/usb/otg.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* USB OTG (On The Go) defines */
  3/*
  4 *
  5 * These APIs may be used between USB controllers.  USB device drivers
  6 * (for either host or peripheral roles) don't use these calls; they
  7 * continue to use just usb_device and usb_gadget.
  8 */
  9
 10#ifndef __LINUX_USB_OTG_H
 11#define __LINUX_USB_OTG_H
 12
 13#include <linux/phy/phy.h>
 14#include <linux/usb/phy.h>
 15
 16struct usb_otg {
 17	u8			default_a;
 18
 19	struct phy		*phy;
 20	/* old usb_phy interface */
 21	struct usb_phy		*usb_phy;
 22	struct usb_bus		*host;
 23	struct usb_gadget	*gadget;
 24
 25	enum usb_otg_state	state;
 26
 27	/* bind/unbind the host controller */
 28	int	(*set_host)(struct usb_otg *otg, struct usb_bus *host);
 29
 30	/* bind/unbind the peripheral controller */
 31	int	(*set_peripheral)(struct usb_otg *otg,
 32					struct usb_gadget *gadget);
 33
 34	/* effective for A-peripheral, ignored for B devices */
 35	int	(*set_vbus)(struct usb_otg *otg, bool enabled);
 36
 37	/* for B devices only:  start session with A-Host */
 38	int	(*start_srp)(struct usb_otg *otg);
 39
 40	/* start or continue HNP role switch */
 41	int	(*start_hnp)(struct usb_otg *otg);
 42
 43};
 44
 45/**
 46 * struct usb_otg_caps - describes the otg capabilities of the device
 47 * @otg_rev: The OTG revision number the device is compliant with, it's
 48 *		in binary-coded decimal (i.e. 2.0 is 0200H).
 49 * @hnp_support: Indicates if the device supports HNP.
 50 * @srp_support: Indicates if the device supports SRP.
 51 * @adp_support: Indicates if the device supports ADP.
 52 */
 53struct usb_otg_caps {
 54	u16 otg_rev;
 55	bool hnp_support;
 56	bool srp_support;
 57	bool adp_support;
 58};
 59
 60extern const char *usb_otg_state_string(enum usb_otg_state state);
 61
 62/* Context: can sleep */
 63static inline int
 64otg_start_hnp(struct usb_otg *otg)
 65{
 66	if (otg && otg->start_hnp)
 67		return otg->start_hnp(otg);
 68
 69	return -ENOTSUPP;
 70}
 71
 72/* Context: can sleep */
 73static inline int
 74otg_set_vbus(struct usb_otg *otg, bool enabled)
 75{
 76	if (otg && otg->set_vbus)
 77		return otg->set_vbus(otg, enabled);
 78
 79	return -ENOTSUPP;
 80}
 81
 82/* for HCDs */
 83static inline int
 84otg_set_host(struct usb_otg *otg, struct usb_bus *host)
 85{
 86	if (otg && otg->set_host)
 87		return otg->set_host(otg, host);
 88
 89	return -ENOTSUPP;
 90}
 91
 92/* for usb peripheral controller drivers */
 93
 94/* Context: can sleep */
 95static inline int
 96otg_set_peripheral(struct usb_otg *otg, struct usb_gadget *periph)
 97{
 98	if (otg && otg->set_peripheral)
 99		return otg->set_peripheral(otg, periph);
100
101	return -ENOTSUPP;
102}
103
104static inline int
105otg_start_srp(struct usb_otg *otg)
106{
107	if (otg && otg->start_srp)
108		return otg->start_srp(otg);
109
110	return -ENOTSUPP;
111}
112
113/* for OTG controller drivers (and maybe other stuff) */
114extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
115
116enum usb_dr_mode {
117	USB_DR_MODE_UNKNOWN,
118	USB_DR_MODE_HOST,
119	USB_DR_MODE_PERIPHERAL,
120	USB_DR_MODE_OTG,
121};
122
123/**
124 * usb_get_dr_mode - Get dual role mode for given device
125 * @dev: Pointer to the given device
126 *
127 * The function gets phy interface string from property 'dr_mode',
128 * and returns the corresponding enum usb_dr_mode
129 */
130extern enum usb_dr_mode usb_get_dr_mode(struct device *dev);
131extern enum usb_dr_mode usb_get_role_switch_default_mode(struct device *dev);
132
133#endif /* __LINUX_USB_OTG_H */
~/ Read-only file preview.