Lines Matching refs:glue

98 	struct sunxi_glue *glue = container_of(work, struct sunxi_glue, work);  in sunxi_musb_work()  local
101 if (!test_bit(SUNXI_MUSB_FL_ENABLED, &glue->flags)) in sunxi_musb_work()
104 if (test_and_clear_bit(SUNXI_MUSB_FL_HOSTMODE_PEND, &glue->flags)) { in sunxi_musb_work()
105 struct musb *musb = platform_get_drvdata(glue->musb); in sunxi_musb_work()
112 if (test_bit(SUNXI_MUSB_FL_HOSTMODE, &glue->flags)) { in sunxi_musb_work()
113 set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags); in sunxi_musb_work()
119 clear_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags); in sunxi_musb_work()
130 vbus_on = test_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags); in sunxi_musb_work()
131 phy_on = test_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags); in sunxi_musb_work()
135 phy_power_on(glue->phy); in sunxi_musb_work()
136 set_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags); in sunxi_musb_work()
138 phy_power_off(glue->phy); in sunxi_musb_work()
139 clear_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags); in sunxi_musb_work()
146 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_set_vbus() local
149 set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags); in sunxi_musb_set_vbus()
151 clear_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags); in sunxi_musb_set_vbus()
153 schedule_work(&glue->work); in sunxi_musb_set_vbus()
158 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_pre_root_reset_end() local
160 sun4i_usb_phy_set_squelch_detect(glue->phy, false); in sunxi_musb_pre_root_reset_end()
165 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_post_root_reset_end() local
167 sun4i_usb_phy_set_squelch_detect(glue->phy, true); in sunxi_musb_post_root_reset_end()
215 struct sunxi_glue *glue = container_of(nb, struct sunxi_glue, host_nb); in sunxi_musb_host_notifier() local
218 set_bit(SUNXI_MUSB_FL_HOSTMODE, &glue->flags); in sunxi_musb_host_notifier()
220 clear_bit(SUNXI_MUSB_FL_HOSTMODE, &glue->flags); in sunxi_musb_host_notifier()
222 set_bit(SUNXI_MUSB_FL_HOSTMODE_PEND, &glue->flags); in sunxi_musb_host_notifier()
223 schedule_work(&glue->work); in sunxi_musb_host_notifier()
230 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_init() local
234 musb->phy = glue->phy; in sunxi_musb_init()
235 musb->xceiv = glue->xceiv; in sunxi_musb_init()
237 if (test_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags)) { in sunxi_musb_init()
243 ret = clk_prepare_enable(glue->clk); in sunxi_musb_init()
247 if (test_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags)) { in sunxi_musb_init()
248 ret = reset_control_deassert(glue->rst); in sunxi_musb_init()
257 ret = extcon_register_notifier(glue->extcon, EXTCON_USB_HOST, in sunxi_musb_init()
258 &glue->host_nb); in sunxi_musb_init()
263 ret = phy_init(glue->phy); in sunxi_musb_init()
268 ret = phy_power_on(glue->phy); in sunxi_musb_init()
271 set_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags); in sunxi_musb_init()
273 set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags); in sunxi_musb_init()
284 phy_exit(glue->phy); in sunxi_musb_init()
287 extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST, in sunxi_musb_init()
288 &glue->host_nb); in sunxi_musb_init()
290 if (test_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags)) in sunxi_musb_init()
291 reset_control_assert(glue->rst); in sunxi_musb_init()
293 clk_disable_unprepare(glue->clk); in sunxi_musb_init()
295 if (test_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags)) in sunxi_musb_init()
302 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_exit() local
306 cancel_work_sync(&glue->work); in sunxi_musb_exit()
307 if (test_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags)) in sunxi_musb_exit()
308 phy_power_off(glue->phy); in sunxi_musb_exit()
310 phy_exit(glue->phy); in sunxi_musb_exit()
313 extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST, in sunxi_musb_exit()
314 &glue->host_nb); in sunxi_musb_exit()
316 if (test_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags)) in sunxi_musb_exit()
317 reset_control_assert(glue->rst); in sunxi_musb_exit()
319 clk_disable_unprepare(glue->clk); in sunxi_musb_exit()
320 if (test_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags)) in sunxi_musb_exit()
328 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_enable() local
331 if (test_and_set_bit(SUNXI_MUSB_FL_ENABLED, &glue->flags)) in sunxi_musb_enable()
334 schedule_work(&glue->work); in sunxi_musb_enable()
339 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_disable() local
341 clear_bit(SUNXI_MUSB_FL_ENABLED, &glue->flags); in sunxi_musb_disable()
384 struct sunxi_glue *glue; in sunxi_musb_readb() local
408 glue = dev_get_drvdata(sunxi_musb->controller->parent); in sunxi_musb_readb()
411 &glue->flags)) in sunxi_musb_readb()
618 struct sunxi_glue *glue; in sunxi_musb_probe() local
627 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); in sunxi_musb_probe()
628 if (!glue) in sunxi_musb_probe()
640 glue->extcon = extcon_get_edev_by_phandle(&pdev->dev, 0); in sunxi_musb_probe()
641 if (IS_ERR(glue->extcon)) { in sunxi_musb_probe()
642 if (PTR_ERR(glue->extcon) == -EPROBE_DEFER) in sunxi_musb_probe()
645 return PTR_ERR(glue->extcon); in sunxi_musb_probe()
657 glue->dev = &pdev->dev; in sunxi_musb_probe()
658 INIT_WORK(&glue->work, sunxi_musb_work); in sunxi_musb_probe()
659 glue->host_nb.notifier_call = sunxi_musb_host_notifier; in sunxi_musb_probe()
662 set_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags); in sunxi_musb_probe()
665 set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags); in sunxi_musb_probe()
668 set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags); in sunxi_musb_probe()
669 set_bit(SUNXI_MUSB_FL_NO_CONFIGDATA, &glue->flags); in sunxi_musb_probe()
672 glue->clk = devm_clk_get(&pdev->dev, NULL); in sunxi_musb_probe()
673 if (IS_ERR(glue->clk)) { in sunxi_musb_probe()
675 PTR_ERR(glue->clk)); in sunxi_musb_probe()
676 return PTR_ERR(glue->clk); in sunxi_musb_probe()
679 if (test_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags)) { in sunxi_musb_probe()
680 glue->rst = devm_reset_control_get(&pdev->dev, NULL); in sunxi_musb_probe()
681 if (IS_ERR(glue->rst)) { in sunxi_musb_probe()
682 if (PTR_ERR(glue->rst) == -EPROBE_DEFER) in sunxi_musb_probe()
685 PTR_ERR(glue->rst)); in sunxi_musb_probe()
686 return PTR_ERR(glue->rst); in sunxi_musb_probe()
690 glue->phy = devm_phy_get(&pdev->dev, "usb"); in sunxi_musb_probe()
691 if (IS_ERR(glue->phy)) { in sunxi_musb_probe()
692 if (PTR_ERR(glue->phy) == -EPROBE_DEFER) in sunxi_musb_probe()
695 PTR_ERR(glue->phy)); in sunxi_musb_probe()
696 return PTR_ERR(glue->phy); in sunxi_musb_probe()
699 glue->usb_phy = usb_phy_generic_register(); in sunxi_musb_probe()
700 if (IS_ERR(glue->usb_phy)) { in sunxi_musb_probe()
702 PTR_ERR(glue->usb_phy)); in sunxi_musb_probe()
703 return PTR_ERR(glue->usb_phy); in sunxi_musb_probe()
706 glue->xceiv = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2); in sunxi_musb_probe()
707 if (IS_ERR(glue->xceiv)) { in sunxi_musb_probe()
708 ret = PTR_ERR(glue->xceiv); in sunxi_musb_probe()
713 platform_set_drvdata(pdev, glue); in sunxi_musb_probe()
724 glue->musb = platform_device_register_full(&pinfo); in sunxi_musb_probe()
725 if (IS_ERR(glue->musb)) { in sunxi_musb_probe()
726 ret = PTR_ERR(glue->musb); in sunxi_musb_probe()
734 usb_phy_generic_unregister(glue->usb_phy); in sunxi_musb_probe()
740 struct sunxi_glue *glue = platform_get_drvdata(pdev); in sunxi_musb_remove() local
741 struct platform_device *usb_phy = glue->usb_phy; in sunxi_musb_remove()
743 platform_device_unregister(glue->musb); /* Frees glue ! */ in sunxi_musb_remove()