Lines Matching refs:ssusb

52 static void ssusb_wakeup_ip_sleep_set(struct ssusb_mtk *ssusb, bool enable)  in ssusb_wakeup_ip_sleep_set()  argument
56 switch (ssusb->uwk_vers) { in ssusb_wakeup_ip_sleep_set()
58 reg = ssusb->uwk_reg_base + PERI_WK_CTRL1; in ssusb_wakeup_ip_sleep_set()
63 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0; in ssusb_wakeup_ip_sleep_set()
68 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0; in ssusb_wakeup_ip_sleep_set()
73 reg = ssusb->uwk_reg_base + PERI_SSUSB_SPM_CTRL; in ssusb_wakeup_ip_sleep_set()
80 regmap_update_bits(ssusb->uwk, reg, msk, val); in ssusb_wakeup_ip_sleep_set()
83 int ssusb_wakeup_of_property_parse(struct ssusb_mtk *ssusb, in ssusb_wakeup_of_property_parse() argument
90 ssusb->uwk_en = of_property_read_bool(dn, "wakeup-source"); in ssusb_wakeup_of_property_parse()
91 if (!ssusb->uwk_en) in ssusb_wakeup_of_property_parse()
99 ssusb->uwk_reg_base = args.args[0]; in ssusb_wakeup_of_property_parse()
100 ssusb->uwk_vers = args.args[1]; in ssusb_wakeup_of_property_parse()
101 ssusb->uwk = syscon_node_to_regmap(args.np); in ssusb_wakeup_of_property_parse()
103 dev_info(ssusb->dev, "uwk - reg:0x%x, version:%d\n", in ssusb_wakeup_of_property_parse()
104 ssusb->uwk_reg_base, ssusb->uwk_vers); in ssusb_wakeup_of_property_parse()
106 return PTR_ERR_OR_ZERO(ssusb->uwk); in ssusb_wakeup_of_property_parse()
109 void ssusb_wakeup_set(struct ssusb_mtk *ssusb, bool enable) in ssusb_wakeup_set() argument
111 if (ssusb->uwk_en) in ssusb_wakeup_set()
112 ssusb_wakeup_ip_sleep_set(ssusb, enable); in ssusb_wakeup_set()
115 static void host_ports_num_get(struct ssusb_mtk *ssusb) in host_ports_num_get() argument
119 xhci_cap = mtu3_readl(ssusb->ippc_base, U3D_SSUSB_IP_XHCI_CAP); in host_ports_num_get()
120 ssusb->u2_ports = SSUSB_IP_XHCI_U2_PORT_NUM(xhci_cap); in host_ports_num_get()
121 ssusb->u3_ports = SSUSB_IP_XHCI_U3_PORT_NUM(xhci_cap); in host_ports_num_get()
123 dev_dbg(ssusb->dev, "host - u2_ports:%d, u3_ports:%d\n", in host_ports_num_get()
124 ssusb->u2_ports, ssusb->u3_ports); in host_ports_num_get()
128 static int ssusb_host_enable(struct ssusb_mtk *ssusb) in ssusb_host_enable() argument
130 void __iomem *ibase = ssusb->ippc_base; in ssusb_host_enable()
131 int num_u3p = ssusb->u3_ports; in ssusb_host_enable()
132 int num_u2p = ssusb->u2_ports; in ssusb_host_enable()
144 if ((0x1 << i) & ssusb->u3p_dis_msk) { in ssusb_host_enable()
157 if ((0x1 << i) & ssusb->u2p_dis_msk) in ssusb_host_enable()
170 return ssusb_check_clocks(ssusb, check_clk); in ssusb_host_enable()
173 static int ssusb_host_disable(struct ssusb_mtk *ssusb) in ssusb_host_disable() argument
175 void __iomem *ibase = ssusb->ippc_base; in ssusb_host_disable()
176 int num_u3p = ssusb->u3_ports; in ssusb_host_disable()
177 int num_u2p = ssusb->u2_ports; in ssusb_host_disable()
183 if ((0x1 << i) & ssusb->u3p_dis_msk) in ssusb_host_disable()
193 if ((0x1 << i) & ssusb->u2p_dis_msk) in ssusb_host_disable()
207 int ssusb_host_resume(struct ssusb_mtk *ssusb, bool p0_skipped) in ssusb_host_resume() argument
209 void __iomem *ibase = ssusb->ippc_base; in ssusb_host_resume()
210 int u3p_skip_msk = ssusb->u3p_dis_msk; in ssusb_host_resume()
211 int u2p_skip_msk = ssusb->u2p_dis_msk; in ssusb_host_resume()
212 int num_u3p = ssusb->u3_ports; in ssusb_host_resume()
213 int num_u2p = ssusb->u2_ports; in ssusb_host_resume()
219 if (ssusb->otg_switch.is_u3_drd) in ssusb_host_resume()
250 int ssusb_host_suspend(struct ssusb_mtk *ssusb) in ssusb_host_suspend() argument
252 void __iomem *ibase = ssusb->ippc_base; in ssusb_host_suspend()
253 int num_u3p = ssusb->u3_ports; in ssusb_host_suspend()
254 int num_u2p = ssusb->u2_ports; in ssusb_host_suspend()
260 if ((0x1 << i) & ssusb->u3p_dis_msk) in ssusb_host_suspend()
270 if ((0x1 << i) & ssusb->u2p_dis_msk) in ssusb_host_suspend()
284 static void ssusb_host_setup(struct ssusb_mtk *ssusb) in ssusb_host_setup() argument
286 host_ports_num_get(ssusb); in ssusb_host_setup()
292 ssusb_host_enable(ssusb); in ssusb_host_setup()
293 ssusb_set_force_mode(ssusb, MTU3_DR_FORCE_HOST); in ssusb_host_setup()
296 ssusb_set_vbus(&ssusb->otg_switch, 1); in ssusb_host_setup()
299 static void ssusb_host_cleanup(struct ssusb_mtk *ssusb) in ssusb_host_cleanup() argument
301 if (ssusb->is_host) in ssusb_host_cleanup()
302 ssusb_set_vbus(&ssusb->otg_switch, 0); in ssusb_host_cleanup()
304 ssusb_host_disable(ssusb); in ssusb_host_cleanup()
313 int ssusb_host_init(struct ssusb_mtk *ssusb, struct device_node *parent_dn) in ssusb_host_init() argument
315 struct device *parent_dev = ssusb->dev; in ssusb_host_init()
318 ssusb_host_setup(ssusb); in ssusb_host_init()
332 void ssusb_host_exit(struct ssusb_mtk *ssusb) in ssusb_host_exit() argument
334 of_platform_depopulate(ssusb->dev); in ssusb_host_exit()
335 ssusb_host_cleanup(ssusb); in ssusb_host_exit()