Lines Matching +full:sun4i +full:- +full:a10 +full:- +full:musb
8 * Copyright 2007-2012 (C) Allwinner Technology Co., Ltd.
12 * Copyright (c) 2008-2009 MontaVista Software, Inc. <source@mvista.com>
13 * Copyright (C) 2005-2006 by Texas Instruments
17 * SPDX-License-Identifier: GPL-2.0
25 #include <asm-generic/gpio.h>
28 #include <linux/usb/musb.h>
29 #include "linux-compat.h"
184 * MUSB Glue code
189 struct musb *musb = __hci; in sunxi_musb_interrupt() local
193 musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); in sunxi_musb_interrupt()
194 last_int_usb = musb->int_usb; in sunxi_musb_interrupt()
195 if (musb->int_usb) in sunxi_musb_interrupt()
196 musb_writeb(musb->mregs, MUSB_INTRUSB, musb->int_usb); in sunxi_musb_interrupt()
197 musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); in sunxi_musb_interrupt()
198 if (musb->int_tx) in sunxi_musb_interrupt()
199 musb_writew(musb->mregs, MUSB_INTRTX, musb->int_tx); in sunxi_musb_interrupt()
200 musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); in sunxi_musb_interrupt()
201 if (musb->int_rx) in sunxi_musb_interrupt()
202 musb_writew(musb->mregs, MUSB_INTRRX, musb->int_rx); in sunxi_musb_interrupt()
204 if (musb->int_usb || musb->int_tx || musb->int_rx) in sunxi_musb_interrupt()
205 retval |= musb_interrupt(musb); in sunxi_musb_interrupt()
213 static int sunxi_musb_enable(struct musb *musb) in sunxi_musb_enable() argument
219 musb_ep_select(musb->mregs, 0); in sunxi_musb_enable()
220 musb_writeb(musb->mregs, MUSB_FADDR, 0); in sunxi_musb_enable()
226 musb_writeb(musb->mregs, USBC_REG_o_VEND0, 0); in sunxi_musb_enable()
228 if (is_host_enabled(musb)) { in sunxi_musb_enable()
232 return -ENODEV; in sunxi_musb_enable()
237 return -ENODEV; in sunxi_musb_enable()
242 USBC_ForceVbusValidToHigh(musb->mregs); in sunxi_musb_enable()
248 static void sunxi_musb_disable(struct musb *musb) in sunxi_musb_disable() argument
255 if (is_host_enabled(musb)) in sunxi_musb_disable()
258 USBC_ForceVbusValidToLow(musb->mregs); in sunxi_musb_disable()
264 static int sunxi_musb_init(struct musb *musb) in sunxi_musb_init() argument
266 struct sunxi_glue *glue = to_sunxi_glue(musb->controller); in sunxi_musb_init()
270 musb->isr = sunxi_musb_interrupt; in sunxi_musb_init()
272 setbits_le32(&glue->ccm->ahb_gate0, 1 << AHB_GATE_OFFSET_USB0); in sunxi_musb_init()
274 setbits_le32(&glue->ccm->ahb_reset0_cfg, 1 << AHB_GATE_OFFSET_USB0); in sunxi_musb_init()
279 USBC_EnableDpDmPullUp(musb->mregs); in sunxi_musb_init()
280 USBC_EnableIdPullUp(musb->mregs); in sunxi_musb_init()
282 if (is_host_enabled(musb)) { in sunxi_musb_init()
284 USBC_ForceIdToLow(musb->mregs); in sunxi_musb_init()
287 USBC_ForceIdToHigh(musb->mregs); in sunxi_musb_init()
289 USBC_ForceVbusValidToHigh(musb->mregs); in sunxi_musb_init()
321 struct musb_host_data *host = &glue->mdata; in musb_usb_probe()
327 return -EINVAL; in musb_usb_probe()
329 glue->ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; in musb_usb_probe()
330 if (IS_ERR(glue->ccm)) in musb_usb_probe()
331 return PTR_ERR(glue->ccm); in musb_usb_probe()
333 priv->desc_before_addr = true; in musb_usb_probe()
336 host->host = musb_init_controller(&musb_plat, &glue->dev, base); in musb_usb_probe()
337 if (!host->host) in musb_usb_probe()
338 return -EIO; in musb_usb_probe()
342 printf("Allwinner mUSB OTG (Host)\n"); in musb_usb_probe()
344 ret = musb_register(&musb_plat, &glue->dev, base); in musb_usb_probe()
346 printf("Allwinner mUSB OTG (Peripheral)\n"); in musb_usb_probe()
355 struct musb_host_data *host = &glue->mdata; in musb_usb_remove()
357 musb_stop(host->host); in musb_usb_remove()
361 clrbits_le32(&glue->ccm->ahb_reset0_cfg, 1 << AHB_GATE_OFFSET_USB0); in musb_usb_remove()
363 clrbits_le32(&glue->ccm->ahb_gate0, 1 << AHB_GATE_OFFSET_USB0); in musb_usb_remove()
365 free(host->host); in musb_usb_remove()
366 host->host = NULL; in musb_usb_remove()
372 { .compatible = "allwinner,sun4i-a10-musb" },
373 { .compatible = "allwinner,sun6i-a31-musb" },
374 { .compatible = "allwinner,sun8i-a33-musb" },
375 { .compatible = "allwinner,sun8i-h3-musb" },
380 .name = "sunxi-musb",