Lines Matching refs:glue

54 static int mtk_musb_clks_get(struct mtk_glue *glue)  in mtk_musb_clks_get()  argument
56 struct device *dev = glue->dev; in mtk_musb_clks_get()
58 glue->main = devm_clk_get(dev, "main"); in mtk_musb_clks_get()
59 if (IS_ERR(glue->main)) { in mtk_musb_clks_get()
61 return PTR_ERR(glue->main); in mtk_musb_clks_get()
64 glue->mcu = devm_clk_get(dev, "mcu"); in mtk_musb_clks_get()
65 if (IS_ERR(glue->mcu)) { in mtk_musb_clks_get()
67 return PTR_ERR(glue->mcu); in mtk_musb_clks_get()
70 glue->univpll = devm_clk_get(dev, "univpll"); in mtk_musb_clks_get()
71 if (IS_ERR(glue->univpll)) { in mtk_musb_clks_get()
73 return PTR_ERR(glue->univpll); in mtk_musb_clks_get()
79 static int mtk_musb_clks_enable(struct mtk_glue *glue) in mtk_musb_clks_enable() argument
83 ret = clk_prepare_enable(glue->main); in mtk_musb_clks_enable()
85 dev_err(glue->dev, "failed to enable main clock\n"); in mtk_musb_clks_enable()
89 ret = clk_prepare_enable(glue->mcu); in mtk_musb_clks_enable()
91 dev_err(glue->dev, "failed to enable mcu clock\n"); in mtk_musb_clks_enable()
95 ret = clk_prepare_enable(glue->univpll); in mtk_musb_clks_enable()
97 dev_err(glue->dev, "failed to enable univpll clock\n"); in mtk_musb_clks_enable()
104 clk_disable_unprepare(glue->mcu); in mtk_musb_clks_enable()
106 clk_disable_unprepare(glue->main); in mtk_musb_clks_enable()
111 static void mtk_musb_clks_disable(struct mtk_glue *glue) in mtk_musb_clks_disable() argument
113 clk_disable_unprepare(glue->univpll); in mtk_musb_clks_disable()
114 clk_disable_unprepare(glue->mcu); in mtk_musb_clks_disable()
115 clk_disable_unprepare(glue->main); in mtk_musb_clks_disable()
118 static int mtk_otg_switch_set(struct mtk_glue *glue, enum usb_role role) in mtk_otg_switch_set() argument
120 struct musb *musb = glue->musb; in mtk_otg_switch_set()
124 if (role == glue->role) in mtk_otg_switch_set()
130 glue->phy_mode = PHY_MODE_USB_HOST; in mtk_otg_switch_set()
132 if (glue->role == USB_ROLE_NONE) in mtk_otg_switch_set()
133 phy_power_on(glue->phy); in mtk_otg_switch_set()
141 glue->phy_mode = PHY_MODE_USB_DEVICE; in mtk_otg_switch_set()
145 if (glue->role == USB_ROLE_NONE) in mtk_otg_switch_set()
146 phy_power_on(glue->phy); in mtk_otg_switch_set()
151 glue->phy_mode = PHY_MODE_USB_OTG; in mtk_otg_switch_set()
155 if (glue->role != USB_ROLE_NONE) in mtk_otg_switch_set()
156 phy_power_off(glue->phy); in mtk_otg_switch_set()
160 dev_err(glue->dev, "Invalid State\n"); in mtk_otg_switch_set()
164 glue->role = new_role; in mtk_otg_switch_set()
165 phy_set_mode(glue->phy, glue->phy_mode); in mtk_otg_switch_set()
177 struct mtk_glue *glue = usb_role_switch_get_drvdata(sw); in musb_usb_role_sx_get() local
179 return glue->role; in musb_usb_role_sx_get()
182 static int mtk_otg_switch_init(struct mtk_glue *glue) in mtk_otg_switch_init() argument
189 role_sx_desc.fwnode = dev_fwnode(glue->dev); in mtk_otg_switch_init()
190 role_sx_desc.driver_data = glue; in mtk_otg_switch_init()
191 glue->role_sw = usb_role_switch_register(glue->dev, &role_sx_desc); in mtk_otg_switch_init()
193 return PTR_ERR_OR_ZERO(glue->role_sw); in mtk_otg_switch_init()
196 static void mtk_otg_switch_exit(struct mtk_glue *glue) in mtk_otg_switch_exit() argument
198 return usb_role_switch_unregister(glue->role_sw); in mtk_otg_switch_exit()
273 struct mtk_glue *glue = dev_get_drvdata(dev->parent); in mtk_musb_set_mode() local
291 dev_err(glue->dev, "Invalid mode request\n"); in mtk_musb_set_mode()
295 if (glue->phy_mode == new_mode) in mtk_musb_set_mode()
299 dev_err(glue->dev, "Does not support changing modes\n"); in mtk_musb_set_mode()
303 mtk_otg_switch_set(glue, new_role); in mtk_musb_set_mode()
310 struct mtk_glue *glue = dev_get_drvdata(dev->parent); in mtk_musb_init() local
313 glue->musb = musb; in mtk_musb_init()
314 musb->phy = glue->phy; in mtk_musb_init()
315 musb->xceiv = glue->xceiv; in mtk_musb_init()
324 ret = mtk_otg_switch_init(glue); in mtk_musb_init()
329 ret = phy_init(glue->phy); in mtk_musb_init()
333 ret = phy_power_on(glue->phy); in mtk_musb_init()
337 phy_set_mode(glue->phy, glue->phy_mode); in mtk_musb_init()
348 phy_exit(glue->phy); in mtk_musb_init()
350 mtk_otg_switch_exit(glue); in mtk_musb_init()
388 struct mtk_glue *glue = dev_get_drvdata(dev->parent); in mtk_musb_exit() local
390 mtk_otg_switch_exit(glue); in mtk_musb_exit()
391 phy_power_off(glue->phy); in mtk_musb_exit()
392 phy_exit(glue->phy); in mtk_musb_exit()
393 mtk_musb_clks_disable(glue); in mtk_musb_exit()
454 struct mtk_glue *glue; in mtk_musb_probe() local
460 glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL); in mtk_musb_probe()
461 if (!glue) in mtk_musb_probe()
464 glue->dev = dev; in mtk_musb_probe()
475 ret = mtk_musb_clks_get(glue); in mtk_musb_probe()
490 glue->phy_mode = PHY_MODE_USB_HOST; in mtk_musb_probe()
491 glue->role = USB_ROLE_HOST; in mtk_musb_probe()
494 glue->phy_mode = PHY_MODE_USB_DEVICE; in mtk_musb_probe()
495 glue->role = USB_ROLE_DEVICE; in mtk_musb_probe()
498 glue->phy_mode = PHY_MODE_USB_OTG; in mtk_musb_probe()
499 glue->role = USB_ROLE_NONE; in mtk_musb_probe()
506 glue->phy = devm_of_phy_get_by_index(dev, np, 0); in mtk_musb_probe()
507 if (IS_ERR(glue->phy)) { in mtk_musb_probe()
509 PTR_ERR(glue->phy)); in mtk_musb_probe()
510 return PTR_ERR(glue->phy); in mtk_musb_probe()
513 glue->usb_phy = usb_phy_generic_register(); in mtk_musb_probe()
514 if (IS_ERR(glue->usb_phy)) { in mtk_musb_probe()
516 PTR_ERR(glue->usb_phy)); in mtk_musb_probe()
517 return PTR_ERR(glue->usb_phy); in mtk_musb_probe()
520 glue->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); in mtk_musb_probe()
521 if (IS_ERR(glue->xceiv)) { in mtk_musb_probe()
522 ret = PTR_ERR(glue->xceiv); in mtk_musb_probe()
527 platform_set_drvdata(pdev, glue); in mtk_musb_probe()
531 ret = mtk_musb_clks_enable(glue); in mtk_musb_probe()
542 glue->musb_pdev = platform_device_register_full(&pinfo); in mtk_musb_probe()
543 if (IS_ERR(glue->musb_pdev)) { in mtk_musb_probe()
544 ret = PTR_ERR(glue->musb_pdev); in mtk_musb_probe()
552 mtk_musb_clks_disable(glue); in mtk_musb_probe()
557 usb_phy_generic_unregister(glue->usb_phy); in mtk_musb_probe()
563 struct mtk_glue *glue = platform_get_drvdata(pdev); in mtk_musb_remove() local
564 struct platform_device *usb_phy = glue->usb_phy; in mtk_musb_remove()
566 platform_device_unregister(glue->musb_pdev); in mtk_musb_remove()