xref: /openbmc/linux/drivers/usb/mtu3/mtu3_dr.h (revision 6b587394)
14d49d352SNishad Kamdar /* SPDX-License-Identifier: GPL-2.0 */
2b3f4e727SChunfeng Yun /*
3b3f4e727SChunfeng Yun  * mtu3_dr.h - dual role switch and host glue layer header
4b3f4e727SChunfeng Yun  *
5b3f4e727SChunfeng Yun  * Copyright (C) 2016 MediaTek Inc.
6b3f4e727SChunfeng Yun  *
7b3f4e727SChunfeng Yun  * Author: Chunfeng Yun <chunfeng.yun@mediatek.com>
8b3f4e727SChunfeng Yun  */
9b3f4e727SChunfeng Yun 
10b3f4e727SChunfeng Yun #ifndef _MTU3_DR_H_
11b3f4e727SChunfeng Yun #define _MTU3_DR_H_
12b3f4e727SChunfeng Yun 
13d0ed062aSChunfeng Yun #if IS_ENABLED(CONFIG_USB_MTU3_HOST) || IS_ENABLED(CONFIG_USB_MTU3_DUAL_ROLE)
14b3f4e727SChunfeng Yun 
15b3f4e727SChunfeng Yun int ssusb_host_init(struct ssusb_mtk *ssusb, struct device_node *parent_dn);
16b3f4e727SChunfeng Yun void ssusb_host_exit(struct ssusb_mtk *ssusb);
17b3f4e727SChunfeng Yun int ssusb_wakeup_of_property_parse(struct ssusb_mtk *ssusb,
18b3f4e727SChunfeng Yun 				struct device_node *dn);
190609c1aaSChunfeng Yun int ssusb_host_resume(struct ssusb_mtk *ssusb, bool p0_skipped);
200609c1aaSChunfeng Yun int ssusb_host_suspend(struct ssusb_mtk *ssusb);
21f0ede2c6SChunfeng Yun void ssusb_wakeup_set(struct ssusb_mtk *ssusb, bool enable);
22b3f4e727SChunfeng Yun 
23b3f4e727SChunfeng Yun #else
24b3f4e727SChunfeng Yun 
ssusb_host_init(struct ssusb_mtk * ssusb,struct device_node * parent_dn)25b3f4e727SChunfeng Yun static inline int ssusb_host_init(struct ssusb_mtk *ssusb,
26b3f4e727SChunfeng Yun 
27b3f4e727SChunfeng Yun 	struct device_node *parent_dn)
28b3f4e727SChunfeng Yun {
29b3f4e727SChunfeng Yun 	return 0;
30b3f4e727SChunfeng Yun }
31b3f4e727SChunfeng Yun 
ssusb_host_exit(struct ssusb_mtk * ssusb)32b3f4e727SChunfeng Yun static inline void ssusb_host_exit(struct ssusb_mtk *ssusb)
33b3f4e727SChunfeng Yun {}
34b3f4e727SChunfeng Yun 
ssusb_wakeup_of_property_parse(struct ssusb_mtk * ssusb,struct device_node * dn)35b3f4e727SChunfeng Yun static inline int ssusb_wakeup_of_property_parse(
36b3f4e727SChunfeng Yun 	struct ssusb_mtk *ssusb, struct device_node *dn)
37b3f4e727SChunfeng Yun {
38b3f4e727SChunfeng Yun 	return 0;
39b3f4e727SChunfeng Yun }
40b3f4e727SChunfeng Yun 
ssusb_host_resume(struct ssusb_mtk * ssusb,bool p0_skipped)410609c1aaSChunfeng Yun static inline int ssusb_host_resume(struct ssusb_mtk *ssusb, bool p0_skipped)
42b3f4e727SChunfeng Yun {
43b3f4e727SChunfeng Yun 	return 0;
44b3f4e727SChunfeng Yun }
45b3f4e727SChunfeng Yun 
ssusb_host_suspend(struct ssusb_mtk * ssusb)460609c1aaSChunfeng Yun static inline int ssusb_host_suspend(struct ssusb_mtk *ssusb)
47b3f4e727SChunfeng Yun {
48b3f4e727SChunfeng Yun 	return 0;
49b3f4e727SChunfeng Yun }
50b3f4e727SChunfeng Yun 
ssusb_wakeup_set(struct ssusb_mtk * ssusb,bool enable)51b926c1daSArnd Bergmann static inline void ssusb_wakeup_set(struct ssusb_mtk *ssusb, bool enable)
52b3f4e727SChunfeng Yun {}
53b3f4e727SChunfeng Yun 
54b3f4e727SChunfeng Yun #endif
55b3f4e727SChunfeng Yun 
56b3f4e727SChunfeng Yun 
57d0ed062aSChunfeng Yun #if IS_ENABLED(CONFIG_USB_MTU3_GADGET) || IS_ENABLED(CONFIG_USB_MTU3_DUAL_ROLE)
58b3f4e727SChunfeng Yun int ssusb_gadget_init(struct ssusb_mtk *ssusb);
59b3f4e727SChunfeng Yun void ssusb_gadget_exit(struct ssusb_mtk *ssusb);
60427c6642SChunfeng Yun int ssusb_gadget_suspend(struct ssusb_mtk *ssusb, pm_message_t msg);
61427c6642SChunfeng Yun int ssusb_gadget_resume(struct ssusb_mtk *ssusb, pm_message_t msg);
62*6b587394SChunfeng Yun bool ssusb_gadget_ip_sleep_check(struct ssusb_mtk *ssusb);
63*6b587394SChunfeng Yun 
64b3f4e727SChunfeng Yun #else
ssusb_gadget_init(struct ssusb_mtk * ssusb)65b3f4e727SChunfeng Yun static inline int ssusb_gadget_init(struct ssusb_mtk *ssusb)
66b3f4e727SChunfeng Yun {
67b3f4e727SChunfeng Yun 	return 0;
68b3f4e727SChunfeng Yun }
69b3f4e727SChunfeng Yun 
ssusb_gadget_exit(struct ssusb_mtk * ssusb)70b3f4e727SChunfeng Yun static inline void ssusb_gadget_exit(struct ssusb_mtk *ssusb)
71b3f4e727SChunfeng Yun {}
72427c6642SChunfeng Yun 
73427c6642SChunfeng Yun static inline int
ssusb_gadget_suspend(struct ssusb_mtk * ssusb,pm_message_t msg)74427c6642SChunfeng Yun ssusb_gadget_suspend(struct ssusb_mtk *ssusb, pm_message_t msg)
75427c6642SChunfeng Yun {
76427c6642SChunfeng Yun 	return 0;
77427c6642SChunfeng Yun }
78427c6642SChunfeng Yun 
79427c6642SChunfeng Yun static inline int
ssusb_gadget_resume(struct ssusb_mtk * ssusb,pm_message_t msg)80427c6642SChunfeng Yun ssusb_gadget_resume(struct ssusb_mtk *ssusb, pm_message_t msg)
81427c6642SChunfeng Yun {
82427c6642SChunfeng Yun 	return 0;
83427c6642SChunfeng Yun }
84*6b587394SChunfeng Yun 
ssusb_gadget_ip_sleep_check(struct ssusb_mtk * ssusb)85*6b587394SChunfeng Yun static inline bool ssusb_gadget_ip_sleep_check(struct ssusb_mtk *ssusb)
86*6b587394SChunfeng Yun {
87*6b587394SChunfeng Yun 	return true;
88*6b587394SChunfeng Yun }
89*6b587394SChunfeng Yun 
90b3f4e727SChunfeng Yun #endif
91b3f4e727SChunfeng Yun 
92d0ed062aSChunfeng Yun 
93d0ed062aSChunfeng Yun #if IS_ENABLED(CONFIG_USB_MTU3_DUAL_ROLE)
94d0ed062aSChunfeng Yun int ssusb_otg_switch_init(struct ssusb_mtk *ssusb);
95d0ed062aSChunfeng Yun void ssusb_otg_switch_exit(struct ssusb_mtk *ssusb);
961ac91ac5SChunfeng Yun void ssusb_mode_switch(struct ssusb_mtk *ssusb, int to_host);
97d0ed062aSChunfeng Yun int ssusb_set_vbus(struct otg_switch_mtk *otg_sx, int is_on);
98c776f2c3SChunfeng Yun void ssusb_set_force_mode(struct ssusb_mtk *ssusb,
99c776f2c3SChunfeng Yun 			  enum mtu3_dr_force_mode mode);
100d0ed062aSChunfeng Yun 
101d0ed062aSChunfeng Yun #else
102d0ed062aSChunfeng Yun 
ssusb_otg_switch_init(struct ssusb_mtk * ssusb)103d0ed062aSChunfeng Yun static inline int ssusb_otg_switch_init(struct ssusb_mtk *ssusb)
104d0ed062aSChunfeng Yun {
105d0ed062aSChunfeng Yun 	return 0;
106d0ed062aSChunfeng Yun }
107d0ed062aSChunfeng Yun 
ssusb_otg_switch_exit(struct ssusb_mtk * ssusb)108d0ed062aSChunfeng Yun static inline void ssusb_otg_switch_exit(struct ssusb_mtk *ssusb)
109d0ed062aSChunfeng Yun {}
110d0ed062aSChunfeng Yun 
ssusb_mode_switch(struct ssusb_mtk * ssusb,int to_host)1111ac91ac5SChunfeng Yun static inline void ssusb_mode_switch(struct ssusb_mtk *ssusb, int to_host)
1121ac91ac5SChunfeng Yun {}
1134aab6ad2SChunfeng Yun 
ssusb_set_vbus(struct otg_switch_mtk * otg_sx,int is_on)114d0ed062aSChunfeng Yun static inline int ssusb_set_vbus(struct otg_switch_mtk *otg_sx, int is_on)
115d0ed062aSChunfeng Yun {
116d0ed062aSChunfeng Yun 	return 0;
117d0ed062aSChunfeng Yun }
118d0ed062aSChunfeng Yun 
119c776f2c3SChunfeng Yun static inline void
ssusb_set_force_mode(struct ssusb_mtk * ssusb,enum mtu3_dr_force_mode mode)120c776f2c3SChunfeng Yun ssusb_set_force_mode(struct ssusb_mtk *ssusb, enum mtu3_dr_force_mode mode)
121c776f2c3SChunfeng Yun {}
122c776f2c3SChunfeng Yun 
123d0ed062aSChunfeng Yun #endif
124d0ed062aSChunfeng Yun 
125b3f4e727SChunfeng Yun #endif		/* _MTU3_DR_H_ */
126