34#include <sys/condvar.h>
35#include <sys/kernel.h>
37#include <sys/malloc.h>
38#include <sys/module.h>
42#include <dev/ofw/openfirm.h>
43#include <dev/ofw/ofw_bus.h>
44#include <dev/ofw/ofw_bus_subr.h>
63 {
"synopsys,designware-hs-otg2", 1 },
72 if (!ofw_bus_status_okay(
dev))
78 device_set_desc(
dev,
"DWC OTG 2.0 integrated USB controller");
80 return (BUS_PROBE_DEFAULT);
89 node = ofw_bus_get_node(
dev);
90 rv = ofw_bus_find_string_index(node,
"interrupt-names",
"usb", &idx);
108 if (OF_getprop(ofw_bus_get_node(
dev),
"dr_mode",
109 &usb_mode,
sizeof(usb_mode)) > 0) {
111 usb_mode[
sizeof(usb_mode) - 1] = 0;
113 if (strcasecmp(usb_mode,
"host") == 0)
115 else if (strcasecmp(usb_mode,
"peripheral") == 0)
117 else if (strcasecmp(usb_mode,
"otg") != 0) {
118 device_printf(
dev,
"Invalid FDT dr_mode: %s\n",
125 bus_alloc_resource_any(
dev, SYS_RES_MEMORY, &
rid, RF_ACTIVE);
140 rid = ofw_bus_is_compatible(
dev,
"brcm,bcm2708-usb") ? 1 : 0;
142 bus_alloc_resource_any(
dev, SYS_RES_IRQ, &
rid, RF_ACTIVE);
170 device_delete_children(
dev);
184 bus_release_resource(
dev, SYS_RES_IRQ, 0,
190 bus_release_resource(
dev, SYS_RES_MEMORY, 0,
204 DEVMETHOD(device_suspend, bus_generic_suspend),
205 DEVMETHOD(device_resume, bus_generic_resume),
206 DEVMETHOD(device_shutdown, bus_generic_shutdown),
int dwc_otg_init(struct dwc_otg_softc *sc)
void dwc_otg_uninit(struct dwc_otg_softc *sc)
int dwc_otg_detach(device_t dev)
static device_probe_t dwc_otg_probe
static devclass_t dwc_otg_devclass
static struct ofw_compat_data compat_data[]
DRIVER_MODULE(dwcotg, simplebus, dwc_otg_driver, dwc_otg_devclass, 0, 0)
MODULE_DEPEND(dwcotg, usb, 1, 1, 1)
static device_method_t dwc_otg_methods[]
int dwc_otg_attach(device_t dev)
static int dwc_otg_irq_index(device_t dev, int *rid)
struct dwc_otg_softc sc_otg
struct resource * sc_irq_res
struct resource * sc_io_res
void usb_bus_mem_free_all(struct usb_bus *bus, usb_bus_mem_cb_t *cb)