diff options
Diffstat (limited to 'drivers/usb/pd/usbpd.h')
-rw-r--r-- | drivers/usb/pd/usbpd.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/drivers/usb/pd/usbpd.h b/drivers/usb/pd/usbpd.h new file mode 100644 index 000000000000..9b6053e940e9 --- /dev/null +++ b/drivers/usb/pd/usbpd.h @@ -0,0 +1,106 @@ +/* Copyright (c) 2016-2017, Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _USBPD_H +#define _USBPD_H + +#include <linux/device.h> + +struct usbpd; + +#if IS_ENABLED(CONFIG_USB_PD_POLICY) +struct usbpd *usbpd_create(struct device *parent); +void usbpd_destroy(struct usbpd *pd); +#else +static inline struct usbpd *usbpd_create(struct device *parent) +{ + return ERR_PTR(-ENODEV); +} +static inline void usbpd_destroy(struct usbpd *pd) { } +#endif + +enum data_role { + DR_NONE = -1, + DR_UFP = 0, + DR_DFP = 1, +}; + +enum power_role { + PR_NONE = -1, + PR_SINK = 0, + PR_SRC = 1, +}; + +enum pd_sig_type { + HARD_RESET_SIG = 0, + CABLE_RESET_SIG, +}; + +enum pd_sop_type { + SOP_MSG = 0, + SOPI_MSG, + SOPII_MSG, +}; + +enum pd_spec_rev { + USBPD_REV_20 = 1, + USBPD_REV_30 = 2, +}; + +/* enable msg and signal to be received by phy */ +#define FRAME_FILTER_EN_SOP BIT(0) +#define FRAME_FILTER_EN_HARD_RESET BIT(5) + +struct pd_phy_params { + void (*signal_cb)(struct usbpd *pd, enum pd_sig_type sig); + void (*msg_rx_cb)(struct usbpd *pd, enum pd_sop_type sop, + u8 *buf, size_t len); + void (*shutdown_cb)(struct usbpd *pd); + enum data_role data_role; + enum power_role power_role; + u8 frame_filter_val; +}; + +#if IS_ENABLED(CONFIG_QPNP_USB_PDPHY) +int pd_phy_open(struct pd_phy_params *params); +int pd_phy_signal(enum pd_sig_type sig); +int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, + enum pd_sop_type sop); +int pd_phy_update_roles(enum data_role dr, enum power_role pr); +void pd_phy_close(void); +#else +static inline int pd_phy_open(struct pd_phy_params *params) +{ + return -ENODEV; +} + +static inline int pd_phy_signal(enum pd_sig_type type) +{ + return -ENODEV; +} + +static inline int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, + enum pd_sop_type sop) +{ + return -ENODEV; +} + +static inline int pd_phy_update_roles(enum data_role dr, enum power_role pr) +{ + return -ENODEV; +} + +static inline void pd_phy_close(void) +{ +} +#endif +#endif /* _USBPD_H */ |