cregit-Linux how code gets into the kernel

Release 4.12 include/linux/usb/phy.h

/*
 * USB PHY 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_PHY_H

#define __LINUX_USB_PHY_H

#include <linux/notifier.h>
#include <linux/usb.h>


enum usb_phy_interface {
	
USBPHY_INTERFACE_MODE_UNKNOWN,
	
USBPHY_INTERFACE_MODE_UTMI,
	
USBPHY_INTERFACE_MODE_UTMIW,
	
USBPHY_INTERFACE_MODE_ULPI,
	
USBPHY_INTERFACE_MODE_SERIAL,
	
USBPHY_INTERFACE_MODE_HSIC,
};


enum usb_phy_events {
	
USB_EVENT_NONE,         /* no events or cable disconnected */
	
USB_EVENT_VBUS,         /* vbus valid event */
	
USB_EVENT_ID,           /* id was grounded */
	
USB_EVENT_CHARGER,      /* usb dedicated charger */
	
USB_EVENT_ENUMERATED,   /* gadget driver enumerated */
};

/* associate a type with PHY */

enum usb_phy_type {
	
USB_PHY_TYPE_UNDEFINED,
	
USB_PHY_TYPE_USB2,
	
USB_PHY_TYPE_USB3,
};

/* 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,
};

struct usb_phy;
struct usb_otg;

/* for phys connected thru an ULPI interface, the user must
 * provide access ops
 */

struct usb_phy_io_ops {
	
int (*read)(struct usb_phy *x, u32 reg);
	
int (*write)(struct usb_phy *x, u32 val, u32 reg);
};


struct usb_phy {
	
struct device		*dev;
	
const char		*label;
	
unsigned int		 flags;

	
enum usb_phy_type	type;
	
enum usb_phy_events	last_event;

	
struct usb_otg		*otg;

	
struct device		*io_dev;
	
struct usb_phy_io_ops	*io_ops;
	
void __iomem		*io_priv;

	/* for notification of usb_phy_events */
	
struct atomic_notifier_head	notifier;

	/* to pass extra port status to the root hub */
	
u16			port_status;
	
u16			port_change;

	/* to support controllers that have multiple phys */
	
struct list_head	head;

	/* initialize/shutdown the phy */
	
int	(*init)(struct usb_phy *x);
	
void	(*shutdown)(struct usb_phy *x);

	/* enable/disable VBUS */
	
int	(*set_vbus)(struct usb_phy *x, int on);

	/* effective for B devices, ignored for A-peripheral */
	
int	(*set_power)(struct usb_phy *x,
				unsigned mA);

	/* Set phy into suspend mode */
	
int	(*set_suspend)(struct usb_phy *x,
				int suspend);

	/*
         * Set wakeup enable for PHY, in that case, the PHY can be
         * woken up from suspend status due to external events,
         * like vbus change, dp/dm change and id.
         */
	
int	(*set_wakeup)(struct usb_phy *x, bool enabled);

	/* notify phy connect status change */
	
int	(*notify_connect)(struct usb_phy *x,
			enum usb_device_speed speed);
	
int	(*notify_disconnect)(struct usb_phy *x,
			enum usb_device_speed speed);
};

/**
 * struct usb_phy_bind - represent the binding for the phy
 * @dev_name: the device name of the device that will bind to the phy
 * @phy_dev_name: the device name of the phy
 * @index: used if a single controller uses multiple phys
 * @phy: reference to the phy
 * @list: to maintain a linked list of the binding information
 */

struct usb_phy_bind {
	
const char	*dev_name;
	
const char	*phy_dev_name;
	
u8		index;
	
struct usb_phy	*phy;
	
struct list_head list;
};

/* for board-specific init logic */
extern int usb_add_phy(struct usb_phy *, enum usb_phy_type type);
extern int usb_add_phy_dev(struct usb_phy *);
extern void usb_remove_phy(struct usb_phy *);

/* helpers for direct access thru low-level io interface */

static inline int usb_phy_io_read(struct usb_phy *x, u32 reg) { if (x && x->io_ops && x->io_ops->read) return x->io_ops->read(x, reg); return -EINVAL; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu4395.56%150.00%
Felipe Balbi24.44%150.00%
Total45100.00%2100.00%


static inline int usb_phy_io_write(struct usb_phy *x, u32 val, u32 reg) { if (x && x->io_ops && x->io_ops->write) return x->io_ops->write(x, val, reg); return -EINVAL; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu4896.00%150.00%
Felipe Balbi24.00%150.00%
Total50100.00%2100.00%


static inline int usb_phy_init(struct usb_phy *x) { if (x && x->init) return x->init(x); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu2993.55%150.00%
Felipe Balbi26.45%150.00%
Total31100.00%2100.00%


static inline void usb_phy_shutdown(struct usb_phy *x) { if (x && x->shutdown) x->shutdown(x); }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu2592.59%150.00%
Felipe Balbi27.41%150.00%
Total27100.00%2100.00%


static inline int usb_phy_vbus_on(struct usb_phy *x) { if (!x || !x->set_vbus) return 0; return x->set_vbus(x, true); }

Contributors

PersonTokensPropCommitsCommitProp
Felipe Balbi35100.00%2100.00%
Total35100.00%2100.00%


static inline int usb_phy_vbus_off(struct usb_phy *x) { if (!x || !x->set_vbus) return 0; return x->set_vbus(x, false); }

Contributors

PersonTokensPropCommitsCommitProp
Felipe Balbi35100.00%2100.00%
Total35100.00%2100.00%

/* for usb host and peripheral controller drivers */ #if IS_ENABLED(CONFIG_USB_PHY) extern struct usb_phy *usb_get_phy(enum usb_phy_type type); extern struct usb_phy *devm_usb_get_phy(struct device *dev, enum usb_phy_type type); extern struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index); extern struct usb_phy *devm_usb_get_phy_dev(struct device *dev, u8 index); extern struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev, const char *phandle, u8 index); extern struct usb_phy *devm_usb_get_phy_by_node(struct device *dev, struct device_node *node, struct notifier_block *nb); extern void usb_put_phy(struct usb_phy *); extern void devm_usb_put_phy(struct device *dev, struct usb_phy *x); extern int usb_bind_phy(const char *dev_name, u8 index, const char *phy_dev_name); extern void usb_phy_set_event(struct usb_phy *x, unsigned long event); #else
static inline struct usb_phy *usb_get_phy(enum usb_phy_type type) { return ERR_PTR(-ENXIO); }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu1575.00%150.00%
Felipe Balbi525.00%150.00%
Total20100.00%2100.00%


static inline struct usb_phy *devm_usb_get_phy(struct device *dev, enum usb_phy_type type) { return ERR_PTR(-ENXIO); }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu2080.00%150.00%
Felipe Balbi520.00%150.00%
Total25100.00%2100.00%


static inline struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index) { return ERR_PTR(-ENXIO); }

Contributors

PersonTokensPropCommitsCommitProp
Kishon Vijay Abraham I1979.17%150.00%
Felipe Balbi520.83%150.00%
Total24100.00%2100.00%


static inline struct usb_phy *devm_usb_get_phy_dev(struct device *dev, u8 index) { return ERR_PTR(-ENXIO); }

Contributors

PersonTokensPropCommitsCommitProp
Kishon Vijay Abraham I1979.17%150.00%
Felipe Balbi520.83%150.00%
Total24100.00%2100.00%


static inline struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev, const char *phandle, u8 index) { return ERR_PTR(-ENXIO); }

Contributors

PersonTokensPropCommitsCommitProp
Kishon Vijay Abraham I2482.76%150.00%
Felipe Balbi517.24%150.00%
Total29100.00%2100.00%


static inline struct usb_phy *devm_usb_get_phy_by_node(struct device *dev, struct device_node *node, struct notifier_block *nb) { return ERR_PTR(-ENXIO); }

Contributors

PersonTokensPropCommitsCommitProp
Arnd Bergmann31100.00%1100.00%
Total31100.00%1100.00%


static inline void usb_put_phy(struct usb_phy *x) { }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu11100.00%1100.00%
Total11100.00%1100.00%


static inline void devm_usb_put_phy(struct device *dev, struct usb_phy *x) { }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu16100.00%1100.00%
Total16100.00%1100.00%


static inline int usb_bind_phy(const char *dev_name, u8 index, const char *phy_dev_name) { return -EOPNOTSUPP; }

Contributors

PersonTokensPropCommitsCommitProp
Kishon Vijay Abraham I24100.00%1100.00%
Total24100.00%1100.00%


static inline void usb_phy_set_event(struct usb_phy *x, unsigned long event) { }

Contributors

PersonTokensPropCommitsCommitProp
Kiran Raparthy15100.00%1100.00%
Total15100.00%1100.00%

#endif
static inline int usb_phy_set_power(struct usb_phy *x, unsigned mA) { if (x && x->set_power) return x->set_power(x, mA); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu36100.00%1100.00%
Total36100.00%1100.00%

/* Context: can sleep */
static inline int usb_phy_set_suspend(struct usb_phy *x, int suspend) { if (x && x->set_suspend != NULL) return x->set_suspend(x, suspend); else return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu3794.87%150.00%
Felipe Balbi25.13%150.00%
Total39100.00%2100.00%


static inline int usb_phy_set_wakeup(struct usb_phy *x, bool enabled) { if (x && x->set_wakeup) return x->set_wakeup(x, enabled); else return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Chen3491.89%150.00%
Venu Byravarasu38.11%150.00%
Total37100.00%2100.00%


static inline int usb_phy_notify_connect(struct usb_phy *x, enum usb_device_speed speed) { if (x && x->notify_connect) return x->notify_connect(x, speed); else return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu2976.32%125.00%
Peter Chen718.42%250.00%
Felipe Balbi25.26%125.00%
Total38100.00%4100.00%


static inline int usb_phy_notify_disconnect(struct usb_phy *x, enum usb_device_speed speed) { if (x && x->notify_disconnect) return x->notify_disconnect(x, speed); else return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu3284.21%133.33%
Peter Chen410.53%133.33%
Felipe Balbi25.26%133.33%
Total38100.00%3100.00%

/* notifiers */
static inline int usb_register_notifier(struct usb_phy *x, struct notifier_block *nb) { return atomic_notifier_chain_register(&x->notifier, nb); }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu28100.00%1100.00%
Total28100.00%1100.00%


static inline void usb_unregister_notifier(struct usb_phy *x, struct notifier_block *nb) { atomic_notifier_chain_unregister(&x->notifier, nb); }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu27100.00%1100.00%
Total27100.00%1100.00%


static inline const char *usb_phy_type_string(enum usb_phy_type type) { switch (type) { case USB_PHY_TYPE_USB2: return "USB2 PHY"; case USB_PHY_TYPE_USB3: return "USB3 PHY"; default: return "UNKNOWN PHY TYPE"; } }

Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu35100.00%1100.00%
Total35100.00%1100.00%

#endif /* __LINUX_USB_PHY_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Venu Byravarasu78661.36%211.76%
Kishon Vijay Abraham I19114.91%317.65%
Felipe Balbi13110.23%423.53%
Peter Chen755.85%423.53%
Arnd Bergmann312.42%15.88%
Kiran Raparthy292.26%15.88%
Neil Brown221.72%15.88%
Michael Grzeschik161.25%15.88%
Total1281100.00%17100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.