Lines Matching refs:rtk

3  * dwc3-rtk.c - Realtek DWC3 Specific Glue layer
64 static void switch_usb2_role(struct dwc3_rtk *rtk, enum usb_role role)
69 reg = rtk->regs + WRAP_USB2_PHY_REG;
80 dev_dbg(rtk->dev, "%s: role=%d\n", __func__, role);
85 static void switch_dwc3_role(struct dwc3_rtk *rtk, enum usb_role role)
87 if (!rtk->dwc->role_sw)
90 usb_role_switch_set_role(rtk->dwc->role_sw, role);
93 static enum usb_role dwc3_rtk_get_role(struct dwc3_rtk *rtk)
97 role = rtk->cur_role;
99 if (rtk->dwc && rtk->dwc->role_sw)
100 role = usb_role_switch_get_role(rtk->dwc->role_sw);
102 dev_dbg(rtk->dev, "%s not usb_role_switch role=%d\n", __func__, role);
107 static void dwc3_rtk_set_role(struct dwc3_rtk *rtk, enum usb_role role)
109 rtk->cur_role = role;
111 switch_dwc3_role(rtk, role);
113 switch_usb2_role(rtk, role);
119 struct dwc3_rtk *rtk = usb_role_switch_get_drvdata(sw);
121 dwc3_rtk_set_role(rtk, role);
128 struct dwc3_rtk *rtk = usb_role_switch_get_drvdata(sw);
130 return dwc3_rtk_get_role(rtk);
133 static int dwc3_rtk_setup_role_switch(struct dwc3_rtk *rtk)
137 dwc3_role_switch.name = dev_name(rtk->dev);
138 dwc3_role_switch.driver_data = rtk;
140 dwc3_role_switch.fwnode = dev_fwnode(rtk->dev);
143 rtk->role_switch = usb_role_switch_register(rtk->dev, &dwc3_role_switch);
144 if (IS_ERR(rtk->role_switch))
145 return PTR_ERR(rtk->role_switch);
150 static int dwc3_rtk_remove_role_switch(struct dwc3_rtk *rtk)
152 if (rtk->role_switch)
153 usb_role_switch_unregister(rtk->role_switch);
155 rtk->role_switch = NULL;
196 static int dwc3_rtk_init(struct dwc3_rtk *rtk)
198 struct device *dev = rtk->dev;
211 reg = rtk->regs + WRAP_CTR_REG;
218 reg = rtk->regs + WRAP_USB2_PHY_REG;
224 reg = rtk->regs + WRAP_USB2_PHY_UTMI_REG;
231 reg = rtk->regs + WRAP_USB_HMAC_CTR0_REG;
235 reg = rtk->regs + WRAP_CTR_REG;
239 reg = rtk->regs + WRAP_PHY_PIPE_REG;
243 reg = rtk->regs + WRAP_USB_HMAC_CTR0_REG;
247 reg = rtk->regs + WRAP_APHY_REG;
251 dev_dbg(rtk->dev, "%s: disable usb 3.0 phy\n", __func__);
255 reg = rtk->regs + WRAP_CTR_REG;
260 reg = rtk->regs + WRAP_USB2_PHY_REG;
264 if (rtk->pm_base) {
265 reg = rtk->pm_base + USB_DBUS_PWR_CTRL_REG;
273 static int dwc3_rtk_probe_dwc3_core(struct dwc3_rtk *rtk)
275 struct device *dev = rtk->dev;
283 ret = dwc3_rtk_init(rtk);
308 rtk->dwc = platform_get_drvdata(dwc3_pdev);
309 if (!rtk->dwc) {
316 if (dr_mode != rtk->dwc->dr_mode) {
318 dr_mode, rtk->dwc->dr_mode);
319 dr_mode = rtk->dwc->dr_mode;
324 rtk->cur_role = USB_ROLE_DEVICE;
327 rtk->cur_role = USB_ROLE_HOST;
330 dev_dbg(rtk->dev, "%s: dr_mode=%d\n", __func__, dr_mode);
335 ret = dwc3_rtk_setup_role_switch(rtk);
340 rtk->cur_role = dwc3_rtk_get_role(rtk);
343 switch_usb2_role(rtk, rtk->cur_role);
362 struct dwc3_rtk *rtk;
368 rtk = devm_kzalloc(dev, sizeof(*rtk), GFP_KERNEL);
369 if (!rtk) {
374 platform_set_drvdata(pdev, rtk);
376 rtk->dev = dev;
391 rtk->regs = regs;
392 rtk->regs_size = resource_size(res);
396 rtk->pm_base = devm_ioremap_resource(dev, res);
397 if (IS_ERR(rtk->pm_base)) {
398 ret = PTR_ERR(rtk->pm_base);
403 ret = dwc3_rtk_probe_dwc3_core(rtk);
411 struct dwc3_rtk *rtk = platform_get_drvdata(pdev);
413 rtk->dwc = NULL;
415 dwc3_rtk_remove_role_switch(rtk);
417 of_platform_depopulate(rtk->dev);
422 struct dwc3_rtk *rtk = platform_get_drvdata(pdev);
424 of_platform_depopulate(rtk->dev);
441 struct dwc3_rtk *rtk = dev_get_drvdata(dev);
443 dwc3_rtk_init(rtk);
445 switch_usb2_role(rtk, rtk->cur_role);
468 .name = "rtk-dwc3",
479 MODULE_ALIAS("platform:rtk-dwc3");