• Home
  • Raw
  • Download

Lines Matching +full:usb +full:- +full:glue

1 // SPDX-License-Identifier: GPL-2.0+
3 * Ingenic JZ4740 "glue layer"
9 #include <linux/dma-mapping.h>
14 #include <linux/usb/usb_phy_generic.h>
30 spin_lock_irqsave(&musb->lock, flags); in jz4740_musb_interrupt()
32 musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); in jz4740_musb_interrupt()
33 musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); in jz4740_musb_interrupt()
34 musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); in jz4740_musb_interrupt()
41 musb->int_usb &= MUSB_INTR_SUSPEND | MUSB_INTR_RESUME | in jz4740_musb_interrupt()
44 if (musb->int_usb || musb->int_tx || musb->int_rx) in jz4740_musb_interrupt()
47 spin_unlock_irqrestore(&musb->lock, flags); in jz4740_musb_interrupt()
59 /* Silicon does not implement USB OTG. */
77 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); in jz4740_musb_init()
78 if (IS_ERR(musb->xceiv)) { in jz4740_musb_init()
80 return PTR_ERR(musb->xceiv); in jz4740_musb_init()
86 musb->dyn_fifo = true; in jz4740_musb_init()
88 musb->isr = jz4740_musb_interrupt; in jz4740_musb_init()
95 usb_put_phy(musb->xceiv); in jz4740_musb_exit()
115 struct jz4740_glue *glue; in jz4740_probe() local
119 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); in jz4740_probe()
120 if (!glue) in jz4740_probe()
121 return -ENOMEM; in jz4740_probe()
123 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); in jz4740_probe()
125 dev_err(&pdev->dev, "failed to allocate musb device\n"); in jz4740_probe()
126 return -ENOMEM; in jz4740_probe()
129 clk = devm_clk_get(&pdev->dev, "udc"); in jz4740_probe()
131 dev_err(&pdev->dev, "failed to get clock\n"); in jz4740_probe()
138 dev_err(&pdev->dev, "failed to enable clock\n"); in jz4740_probe()
142 musb->dev.parent = &pdev->dev; in jz4740_probe()
144 glue->dev = &pdev->dev; in jz4740_probe()
145 glue->musb = musb; in jz4740_probe()
146 glue->clk = clk; in jz4740_probe()
148 pdata->platform_ops = &jz4740_musb_ops; in jz4740_probe()
150 platform_set_drvdata(pdev, glue); in jz4740_probe()
152 ret = platform_device_add_resources(musb, pdev->resource, in jz4740_probe()
153 pdev->num_resources); in jz4740_probe()
155 dev_err(&pdev->dev, "failed to add resources\n"); in jz4740_probe()
161 dev_err(&pdev->dev, "failed to add platform_data\n"); in jz4740_probe()
167 dev_err(&pdev->dev, "failed to register musb device\n"); in jz4740_probe()
182 struct jz4740_glue *glue = platform_get_drvdata(pdev); in jz4740_remove() local
184 platform_device_unregister(glue->musb); in jz4740_remove()
186 clk_disable_unprepare(glue->clk); in jz4740_remove()
195 .name = "musb-jz4740",
199 MODULE_DESCRIPTION("JZ4740 MUSB Glue Layer");