Some USB cores need a platform specific init hook, add it to the ehci driver. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- drivers/usb/host/ehci-hcd.c | 14 ++++++++++++++ include/usb/ehci.h | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index d0d6ae4..d6dc1de 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -42,6 +42,10 @@ struct ehci_priv { struct qTD *td; int portreset; unsigned long flags; + + int (*init)(void *drvdata); + int (*post_init)(void *drvdata); + void *drvdata; }; #define to_ehci(ptr) container_of(ptr, struct ehci_priv, host) @@ -748,6 +752,9 @@ static int ehci_init(struct usb_host *host) if (ehci_reset(ehci) != 0) return -1; + if (ehci->init) + ehci->init(ehci->drvdata); + ehci->qh_list->qh_link = cpu_to_hc32((uint32_t)ehci->qh_list | QH_LINK_TYPE_QH); ehci->qh_list->qh_endpt1 = cpu_to_hc32((1 << 15) | (USB_SPEED_HIGH << 12)); ehci->qh_list->qh_curtd = cpu_to_hc32(QT_NEXT_TERMINATE); @@ -788,6 +795,9 @@ static int ehci_init(struct usb_host *host) ehci->rootdev = 0; + if (ehci->post_init) + ehci->post_init(ehci->drvdata); + return 0; } @@ -856,6 +866,10 @@ int ehci_register(struct device_d *dev, struct ehci_data *data) ehci->hcor = (void __iomem *)ehci->hccr + HC_LENGTH(ehci_readl(&ehci->hccr->cr_capbase)); + ehci->drvdata = data->drvdata; + ehci->init = data->init; + ehci->post_init = data->post_init; + ehci->qh_list = dma_alloc_coherent(sizeof(struct QH) * NUM_TD); ehci->td = dma_alloc_coherent(sizeof(struct qTD) * NUM_TD); diff --git a/include/usb/ehci.h b/include/usb/ehci.h index 4377116..93f980d 100644 --- a/include/usb/ehci.h +++ b/include/usb/ehci.h @@ -11,6 +11,11 @@ struct ehci_data { void __iomem *hccr; void __iomem *hcor; unsigned long flags; + + /* platform specific init functions */ + int (*init)(void *drvdata); + int (*post_init)(void *drvdata); + void *drvdata; }; #ifdef CONFIG_USB_EHCI -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox