static int mtk_xhci_phy_init(int argc, char **argv) { /* initialize PHY related data structure */ if (!u3phy_ops) u3phy_init(); /* USB 2.0 slew rate calibration */ if (u3phy_ops->u2_slew_rate_calibration) u3phy_ops->u2_slew_rate_calibration(u3phy); else printk(KERN_ERR "WARN: PHY doesn't implement u2 slew rate calibration function\n"); /* phy initialization */ if (u3phy_ops->init(u3phy) != PHY_TRUE) return RET_FAIL; printk(KERN_ERR "phy registers and operations initial done\n"); return RET_SUCCESS; }
int xhci_hcd_init(int index, struct xhci_hccr **hccr, struct xhci_hcor **hcor) { u3phy_init(); mt7621_phy_init(u3phy); reinitIP(); u2_slew_rate_calibration(u3phy); u2_slew_rate_calibration(u3phy_p1); *hccr = (uint32_t)XHC_IO_START; *hcor = (struct xhci_hcor *)((uint32_t) *hccr + HC_LENGTH(xhci_readl(&(*hccr)->cr_capbase))); debug("mtk-xhci: init hccr %x and hcor %x hc_length %d\n", (uint32_t)*hccr, (uint32_t)*hcor, (uint32_t)HC_LENGTH(xhci_readl(&(*hccr)->cr_capbase))); return 0; }