Lines Matching refs:ssusb

53 static void ssusb_wakeup_ip_sleep_set(struct ssusb_mtk *ssusb, bool enable)
57 switch (ssusb->uwk_vers) {
59 reg = ssusb->uwk_reg_base + PERI_WK_CTRL1;
64 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0;
69 reg = ssusb->uwk_reg_base + PERI_WK_CTRL0;
74 reg = ssusb->uwk_reg_base + PERI_SSUSB_SPM_CTRL;
81 regmap_update_bits(ssusb->uwk, reg, msk, val);
84 int ssusb_wakeup_of_property_parse(struct ssusb_mtk *ssusb,
91 ssusb->uwk_en = of_property_read_bool(dn, "wakeup-source");
92 if (!ssusb->uwk_en)
100 ssusb->uwk_reg_base = args.args[0];
101 ssusb->uwk_vers = args.args[1];
102 ssusb->uwk = syscon_node_to_regmap(args.np);
104 dev_info(ssusb->dev, "uwk - reg:0x%x, version:%d\n",
105 ssusb->uwk_reg_base, ssusb->uwk_vers);
107 return PTR_ERR_OR_ZERO(ssusb->uwk);
110 void ssusb_wakeup_set(struct ssusb_mtk *ssusb, bool enable)
112 if (ssusb->uwk_en)
113 ssusb_wakeup_ip_sleep_set(ssusb, enable);
116 static void host_ports_num_get(struct ssusb_mtk *ssusb)
120 xhci_cap = mtu3_readl(ssusb->ippc_base, U3D_SSUSB_IP_XHCI_CAP);
121 ssusb->u2_ports = SSUSB_IP_XHCI_U2_PORT_NUM(xhci_cap);
122 ssusb->u3_ports = SSUSB_IP_XHCI_U3_PORT_NUM(xhci_cap);
124 dev_dbg(ssusb->dev, "host - u2_ports:%d, u3_ports:%d\n",
125 ssusb->u2_ports, ssusb->u3_ports);
129 static int ssusb_host_enable(struct ssusb_mtk *ssusb)
131 void __iomem *ibase = ssusb->ippc_base;
132 int num_u3p = ssusb->u3_ports;
133 int num_u2p = ssusb->u2_ports;
145 if ((0x1 << i) & ssusb->u3p_dis_msk) {
158 if ((0x1 << i) & ssusb->u2p_dis_msk)
171 return ssusb_check_clocks(ssusb, check_clk);
174 static int ssusb_host_disable(struct ssusb_mtk *ssusb)
176 void __iomem *ibase = ssusb->ippc_base;
177 int num_u3p = ssusb->u3_ports;
178 int num_u2p = ssusb->u2_ports;
184 if ((0x1 << i) & ssusb->u3p_dis_msk)
194 if ((0x1 << i) & ssusb->u2p_dis_msk)
208 int ssusb_host_resume(struct ssusb_mtk *ssusb, bool p0_skipped)
210 void __iomem *ibase = ssusb->ippc_base;
211 int u3p_skip_msk = ssusb->u3p_dis_msk;
212 int u2p_skip_msk = ssusb->u2p_dis_msk;
213 int num_u3p = ssusb->u3_ports;
214 int num_u2p = ssusb->u2_ports;
220 if (ssusb->otg_switch.is_u3_drd)
251 int ssusb_host_suspend(struct ssusb_mtk *ssusb)
253 void __iomem *ibase = ssusb->ippc_base;
254 int num_u3p = ssusb->u3_ports;
255 int num_u2p = ssusb->u2_ports;
261 if ((0x1 << i) & ssusb->u3p_dis_msk)
271 if ((0x1 << i) & ssusb->u2p_dis_msk)
285 static void ssusb_host_setup(struct ssusb_mtk *ssusb)
287 host_ports_num_get(ssusb);
293 ssusb_host_enable(ssusb);
294 ssusb_set_force_mode(ssusb, MTU3_DR_FORCE_HOST);
297 ssusb_set_vbus(&ssusb->otg_switch, 1);
300 static void ssusb_host_cleanup(struct ssusb_mtk *ssusb)
302 if (ssusb->is_host)
303 ssusb_set_vbus(&ssusb->otg_switch, 0);
305 ssusb_host_disable(ssusb);
314 int ssusb_host_init(struct ssusb_mtk *ssusb, struct device_node *parent_dn)
316 struct device *parent_dev = ssusb->dev;
319 ssusb_host_setup(ssusb);
333 void ssusb_host_exit(struct ssusb_mtk *ssusb)
335 of_platform_depopulate(ssusb->dev);
336 ssusb_host_cleanup(ssusb);