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