Lines Matching refs:glue
55 static int mtk_musb_clks_get(struct mtk_glue *glue)
57 struct device *dev = glue->dev;
59 glue->clks[0].id = "main";
60 glue->clks[1].id = "mcu";
61 glue->clks[2].id = "univpll";
63 return devm_clk_bulk_get(dev, MTK_MUSB_CLKS_NUM, glue->clks);
66 static int mtk_otg_switch_set(struct mtk_glue *glue, enum usb_role role)
68 struct musb *musb = glue->musb;
72 if (role == glue->role)
78 glue->phy_mode = PHY_MODE_USB_HOST;
80 if (glue->role == USB_ROLE_NONE)
81 phy_power_on(glue->phy);
89 glue->phy_mode = PHY_MODE_USB_DEVICE;
93 if (glue->role == USB_ROLE_NONE)
94 phy_power_on(glue->phy);
99 glue->phy_mode = PHY_MODE_USB_OTG;
103 if (glue->role != USB_ROLE_NONE)
104 phy_power_off(glue->phy);
108 dev_err(glue->dev, "Invalid State\n");
112 glue->role = new_role;
113 phy_set_mode(glue->phy, glue->phy_mode);
125 struct mtk_glue *glue = usb_role_switch_get_drvdata(sw);
127 return glue->role;
130 static int mtk_otg_switch_init(struct mtk_glue *glue)
137 role_sx_desc.fwnode = dev_fwnode(glue->dev);
138 role_sx_desc.driver_data = glue;
139 glue->role_sw = usb_role_switch_register(glue->dev, &role_sx_desc);
141 return PTR_ERR_OR_ZERO(glue->role_sw);
144 static void mtk_otg_switch_exit(struct mtk_glue *glue)
146 return usb_role_switch_unregister(glue->role_sw);
221 struct mtk_glue *glue = dev_get_drvdata(dev->parent);
239 dev_err(glue->dev, "Invalid mode request\n");
243 if (glue->phy_mode == new_mode)
247 dev_err(glue->dev, "Does not support changing modes\n");
251 mtk_otg_switch_set(glue, new_role);
258 struct mtk_glue *glue = dev_get_drvdata(dev->parent);
261 glue->musb = musb;
262 musb->phy = glue->phy;
263 musb->xceiv = glue->xceiv;
272 ret = mtk_otg_switch_init(glue);
277 ret = phy_init(glue->phy);
281 ret = phy_power_on(glue->phy);
285 phy_set_mode(glue->phy, glue->phy_mode);
296 phy_exit(glue->phy);
299 mtk_otg_switch_exit(glue);
337 struct mtk_glue *glue = dev_get_drvdata(dev->parent);
339 mtk_otg_switch_exit(glue);
340 phy_power_off(glue->phy);
341 phy_exit(glue->phy);
342 clk_bulk_disable_unprepare(MTK_MUSB_CLKS_NUM, glue->clks);
403 struct mtk_glue *glue;
409 glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
410 if (!glue)
413 glue->dev = dev;
424 ret = mtk_musb_clks_get(glue);
439 glue->phy_mode = PHY_MODE_USB_HOST;
440 glue->role = USB_ROLE_HOST;
443 glue->phy_mode = PHY_MODE_USB_DEVICE;
444 glue->role = USB_ROLE_DEVICE;
447 glue->phy_mode = PHY_MODE_USB_OTG;
448 glue->role = USB_ROLE_NONE;
455 glue->phy = devm_of_phy_get_by_index(dev, np, 0);
456 if (IS_ERR(glue->phy)) {
458 PTR_ERR(glue->phy));
459 return PTR_ERR(glue->phy);
462 glue->usb_phy = usb_phy_generic_register();
463 if (IS_ERR(glue->usb_phy)) {
465 PTR_ERR(glue->usb_phy));
466 return PTR_ERR(glue->usb_phy);
469 glue->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
470 if (IS_ERR(glue->xceiv)) {
471 ret = PTR_ERR(glue->xceiv);
476 platform_set_drvdata(pdev, glue);
480 ret = clk_bulk_prepare_enable(MTK_MUSB_CLKS_NUM, glue->clks);
493 glue->musb_pdev = platform_device_register_full(&pinfo);
494 if (IS_ERR(glue->musb_pdev)) {
495 ret = PTR_ERR(glue->musb_pdev);
503 clk_bulk_disable_unprepare(MTK_MUSB_CLKS_NUM, glue->clks);
508 usb_phy_generic_unregister(glue->usb_phy);
514 struct mtk_glue *glue = platform_get_drvdata(pdev);
515 struct platform_device *usb_phy = glue->usb_phy;
517 platform_device_unregister(glue->musb_pdev);