Lines Matching defs:ssusb
68 static void ssusb_wakeup_ip_sleep_set(struct ssusb_mtk *ssusb, bool enable)
72 switch (ssusb->uwk_vers) {
74 reg = ssusb->uwk_reg_base + PERI_WK_CTRL1;
79 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0;
84 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0;
89 reg = ssusb->uwk_reg_base + PERI_WK_CTRL1_8195;
94 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0_8195;
99 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0_8195;
104 reg = ssusb->uwk_reg_base + PERI_SSUSB_SPM_CTRL;
111 regmap_update_bits(ssusb->uwk, reg, msk, val);
114 int ssusb_wakeup_of_property_parse(struct ssusb_mtk *ssusb,
121 ssusb->uwk_en = of_property_read_bool(dn, "wakeup-source");
122 if (!ssusb->uwk_en)
130 ssusb->uwk_reg_base = args.args[0];
131 ssusb->uwk_vers = args.args[1];
132 ssusb->uwk = syscon_node_to_regmap(args.np);
134 dev_info(ssusb->dev, "uwk - reg:0x%x, version:%d\n",
135 ssusb->uwk_reg_base, ssusb->uwk_vers);
137 return PTR_ERR_OR_ZERO(ssusb->uwk);
140 void ssusb_wakeup_set(struct ssusb_mtk *ssusb, bool enable)
142 if (ssusb->uwk_en)
143 ssusb_wakeup_ip_sleep_set(ssusb, enable);
146 static void host_ports_num_get(struct ssusb_mtk *ssusb)
150 xhci_cap = mtu3_readl(ssusb->ippc_base, U3D_SSUSB_IP_XHCI_CAP);
151 ssusb->u2_ports = SSUSB_IP_XHCI_U2_PORT_NUM(xhci_cap);
152 ssusb->u3_ports = SSUSB_IP_XHCI_U3_PORT_NUM(xhci_cap);
154 dev_dbg(ssusb->dev, "host - u2_ports:%d, u3_ports:%d\n",
155 ssusb->u2_ports, ssusb->u3_ports);
159 static int ssusb_host_enable(struct ssusb_mtk *ssusb)
161 void __iomem *ibase = ssusb->ippc_base;
162 int num_u3p = ssusb->u3_ports;
163 int num_u2p = ssusb->u2_ports;
175 if ((0x1 << i) & ssusb->u3p_dis_msk) {
188 if ((0x1 << i) & ssusb->u2p_dis_msk)
201 return ssusb_check_clocks(ssusb, check_clk);
204 static int ssusb_host_disable(struct ssusb_mtk *ssusb)
206 void __iomem *ibase = ssusb->ippc_base;
207 int num_u3p = ssusb->u3_ports;
208 int num_u2p = ssusb->u2_ports;
214 if ((0x1 << i) & ssusb->u3p_dis_msk)
224 if ((0x1 << i) & ssusb->u2p_dis_msk)
238 int ssusb_host_resume(struct ssusb_mtk *ssusb, bool p0_skipped)
240 void __iomem *ibase = ssusb->ippc_base;
241 int u3p_skip_msk = ssusb->u3p_dis_msk;
242 int u2p_skip_msk = ssusb->u2p_dis_msk;
243 int num_u3p = ssusb->u3_ports;
244 int num_u2p = ssusb->u2_ports;
250 if (ssusb->otg_switch.is_u3_drd)
281 int ssusb_host_suspend(struct ssusb_mtk *ssusb)
283 void __iomem *ibase = ssusb->ippc_base;
284 int num_u3p = ssusb->u3_ports;
285 int num_u2p = ssusb->u2_ports;
291 if ((0x1 << i) & ssusb->u3p_dis_msk)
301 if ((0x1 << i) & ssusb->u2p_dis_msk)
315 static void ssusb_host_setup(struct ssusb_mtk *ssusb)
317 host_ports_num_get(ssusb);
323 ssusb_host_enable(ssusb);
324 ssusb_set_force_mode(ssusb, MTU3_DR_FORCE_HOST);
327 ssusb_set_vbus(&ssusb->otg_switch, 1);
330 static void ssusb_host_cleanup(struct ssusb_mtk *ssusb)
332 if (ssusb->is_host)
333 ssusb_set_vbus(&ssusb->otg_switch, 0);
335 ssusb_host_disable(ssusb);
344 int ssusb_host_init(struct ssusb_mtk *ssusb, struct device_node *parent_dn)
346 struct device *parent_dev = ssusb->dev;
349 ssusb_host_setup(ssusb);
363 void ssusb_host_exit(struct ssusb_mtk *ssusb)
365 of_platform_depopulate(ssusb->dev);
366 ssusb_host_cleanup(ssusb);