X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fusb%2Fhost%2Fehci-generic.c;h=fb7846289372b0f8a0c67c0f7539ee8563afd424;hb=c62db35d52c6ba5f31ac36e690c58ec54b273298;hp=e0377ca1c9eefdc496eb7d3b267eea8aee602ab9;hpb=135aa95002646c46e89de93fa36adad1b010548f;p=u-boot diff --git a/drivers/usb/host/ehci-generic.c b/drivers/usb/host/ehci-generic.c index e0377ca1c9..fb78462893 100644 --- a/drivers/usb/host/ehci-generic.c +++ b/drivers/usb/host/ehci-generic.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include "ehci.h" @@ -37,18 +38,25 @@ static int ehci_usb_probe(struct udevice *dev) clk_free(&clk); } - hccr = map_physmem(dev_get_addr(dev), 0x100, MAP_NOCACHE); + for (i = 0; ; i++) { + struct reset_ctl reset; + int ret; + + ret = reset_get_by_index(dev, i, &reset); + if (ret < 0) + break; + if (reset_deassert(&reset)) + printf("failed to deassert reset %d\n", i); + reset_free(&reset); + } + + hccr = map_physmem(devfdt_get_addr(dev), 0x100, MAP_NOCACHE); hcor = (struct ehci_hcor *)((uintptr_t)hccr + HC_LENGTH(ehci_readl(&hccr->cr_capbase))); return ehci_register(dev, hccr, hcor, NULL, 0, USB_INIT_HOST); } -static int ehci_usb_remove(struct udevice *dev) -{ - return ehci_deregister(dev); -} - static const struct udevice_id ehci_usb_ids[] = { { .compatible = "generic-ehci" }, { } @@ -59,7 +67,7 @@ U_BOOT_DRIVER(ehci_generic) = { .id = UCLASS_USB, .of_match = ehci_usb_ids, .probe = ehci_usb_probe, - .remove = ehci_usb_remove, + .remove = ehci_deregister, .ops = &ehci_usb_ops, .priv_auto_alloc_size = sizeof(struct generic_ehci), .flags = DM_FLAG_ALLOC_PRIV_DMA,