#ifndef __LINUX_USB_PHY_H
#define __LINUX_USB_PHY_H
#include <linux/extcon.h>
#include <linux/notifier.h>
#include <linux/usb.h>
#include <uapi/linux/usb/charger.h>
enum usb_phy_interface { … };
enum usb_phy_events { … };
enum usb_phy_type { … };
enum usb_otg_state { … };
struct usb_phy;
struct usb_otg;
struct usb_phy_io_ops { … };
struct usb_charger_current { … };
struct usb_phy { … };
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 *);
static inline int usb_phy_io_read(struct usb_phy *x, u32 reg)
{ … }
static inline int usb_phy_io_write(struct usb_phy *x, u32 val, u32 reg)
{ … }
static inline int
usb_phy_init(struct usb_phy *x)
{ … }
static inline void
usb_phy_shutdown(struct usb_phy *x)
{ … }
static inline int
usb_phy_vbus_on(struct usb_phy *x)
{ … }
static inline int
usb_phy_vbus_off(struct usb_phy *x)
{ … }
#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 *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 void usb_phy_set_event(struct usb_phy *x, unsigned long event);
extern void usb_phy_set_charger_current(struct usb_phy *usb_phy,
unsigned int mA);
extern void usb_phy_get_charger_current(struct usb_phy *usb_phy,
unsigned int *min, unsigned int *max);
extern void usb_phy_set_charger_state(struct usb_phy *usb_phy,
enum usb_charger_state state);
#else
static inline struct usb_phy *usb_get_phy(enum usb_phy_type type)
{
return ERR_PTR(-ENXIO);
}
static inline struct usb_phy *devm_usb_get_phy(struct device *dev,
enum usb_phy_type type)
{
return ERR_PTR(-ENXIO);
}
static inline struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev,
const char *phandle, u8 index)
{
return ERR_PTR(-ENXIO);
}
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);
}
static inline void usb_put_phy(struct usb_phy *x)
{
}
static inline void devm_usb_put_phy(struct device *dev, struct usb_phy *x)
{
}
static inline void usb_phy_set_event(struct usb_phy *x, unsigned long event)
{
}
static inline void usb_phy_set_charger_current(struct usb_phy *usb_phy,
unsigned int mA)
{
}
static inline void usb_phy_get_charger_current(struct usb_phy *usb_phy,
unsigned int *min,
unsigned int *max)
{
}
static inline void usb_phy_set_charger_state(struct usb_phy *usb_phy,
enum usb_charger_state state)
{
}
#endif
static inline int
usb_phy_set_power(struct usb_phy *x, unsigned mA)
{ … }
static inline int
usb_phy_set_suspend(struct usb_phy *x, int suspend)
{ … }
static inline int
usb_phy_set_wakeup(struct usb_phy *x, bool enabled)
{ … }
static inline int
usb_phy_notify_connect(struct usb_phy *x, enum usb_device_speed speed)
{ … }
static inline int
usb_phy_notify_disconnect(struct usb_phy *x, enum usb_device_speed speed)
{ … }
static inline int
usb_register_notifier(struct usb_phy *x, struct notifier_block *nb)
{ … }
static inline void
usb_unregister_notifier(struct usb_phy *x, struct notifier_block *nb)
{ … }
static inline const char *usb_phy_type_string(enum usb_phy_type type)
{ … }
#endif