diff options
26 files changed, 60 insertions, 32 deletions
| diff --git a/board/compulab/cm_t35/cm_t35.c b/board/compulab/cm_t35/cm_t35.c index 7626abc02..19945c105 100644 --- a/board/compulab/cm_t35/cm_t35.c +++ b/board/compulab/cm_t35/cm_t35.c @@ -565,7 +565,8 @@ struct omap_usbhs_board_data usbhs_bdata = {  };  #define SB_T35_USB_HUB_RESET_GPIO	167 -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	u8 val;  	int offset; diff --git a/board/htkw/mcx/mcx.c b/board/htkw/mcx/mcx.c index 6f85b47a0..4330cf0dd 100644 --- a/board/htkw/mcx/mcx.c +++ b/board/htkw/mcx/mcx.c @@ -40,7 +40,8 @@ static struct omap_usbhs_board_data usbhs_bdata = {  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,  }; -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);  } diff --git a/board/technexion/twister/twister.c b/board/technexion/twister/twister.c index 6f2ff55a1..054e7ccde 100644 --- a/board/technexion/twister/twister.c +++ b/board/technexion/twister/twister.c @@ -51,7 +51,8 @@ static struct omap_usbhs_board_data usbhs_bdata = {  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,  }; -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);  } diff --git a/board/teejet/mt_ventoux/mt_ventoux.c b/board/teejet/mt_ventoux/mt_ventoux.c index df873f52a..c32d554ea 100644 --- a/board/teejet/mt_ventoux/mt_ventoux.c +++ b/board/teejet/mt_ventoux/mt_ventoux.c @@ -102,7 +102,8 @@ static struct omap_usbhs_board_data usbhs_bdata = {  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,  }; -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);  } diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c index 41fed54fd..9669a32fc 100644 --- a/board/ti/beagle/beagle.c +++ b/board/ti/beagle/beagle.c @@ -521,7 +521,8 @@ static struct omap_usbhs_board_data usbhs_bdata = {  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED  }; -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);  } diff --git a/board/ti/omap5_uevm/evm.c b/board/ti/omap5_uevm/evm.c index 0044c229b..945810460 100644 --- a/board/ti/omap5_uevm/evm.c +++ b/board/ti/omap5_uevm/evm.c @@ -179,7 +179,8 @@ static struct omap_usbhs_board_data usbhs_bdata = {  	.port_mode[2] = OMAP_EHCI_PORT_MODE_HSIC,  }; -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	int ret; diff --git a/board/ti/panda/panda.c b/board/ti/panda/panda.c index 3724e816c..c104024b1 100644 --- a/board/ti/panda/panda.c +++ b/board/ti/panda/panda.c @@ -269,7 +269,8 @@ static struct omap_usbhs_board_data usbhs_bdata = {  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,  }; -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	int ret;  	unsigned int utmi_clk; diff --git a/drivers/usb/host/ehci-armada100.c b/drivers/usb/host/ehci-armada100.c index 636b6e5da..012eb3a1a 100644 --- a/drivers/usb/host/ehci-armada100.c +++ b/drivers/usb/host/ehci-armada100.c @@ -22,7 +22,8 @@  /*   * EHCI host controller init   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	if (utmi_init() < 0)  		return -1; diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c index 67444b26e..9ffe5010b 100644 --- a/drivers/usb/host/ehci-atmel.c +++ b/drivers/usb/host/ehci-atmel.c @@ -21,7 +21,8 @@   */  #define EN_UPLL_TIMEOUT	500UL -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	at91_pmc_t *pmc = (at91_pmc_t *)ATMEL_BASE_PMC;  	ulong start_time, tmp_time; diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c index 15926c433..66b4de0b2 100644 --- a/drivers/usb/host/ehci-exynos.c +++ b/drivers/usb/host/ehci-exynos.c @@ -141,7 +141,8 @@ static void reset_usb_phy(struct exynos_usb_phy *usb)   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	struct exynos_ehci *ctx = &exynos; diff --git a/drivers/usb/host/ehci-faraday.c b/drivers/usb/host/ehci-faraday.c index 4a36acdae..3b761bc32 100644 --- a/drivers/usb/host/ehci-faraday.c +++ b/drivers/usb/host/ehci-faraday.c @@ -33,8 +33,8 @@ static inline int ehci_is_fotg2xx(union ehci_faraday_regs *regs)   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **ret_hccr, -		struct ehci_hcor **ret_hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **ret_hccr, struct ehci_hcor **ret_hcor)  {  	struct ehci_hccr *hccr;  	struct ehci_hcor *hcor; diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index 0ef6f238d..8f009191a 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c @@ -35,7 +35,8 @@ static int usb_phy_clk_valid(struct usb_ehci *ehci)   *   * Excerpts from linux ehci fsl driver.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	struct usb_ehci *ehci;  	const char *phy_type = NULL; diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 6c21f4741..8bd1eb8a9 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -926,17 +926,22 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)  	struct QH *qh_list;  	struct QH *periodic;  	int i; +	int rc; -	if (ehci_hcd_init(index, &ehcic[index].hccr, &ehcic[index].hcor)) -		return -1; +	rc = ehci_hcd_init(index, init, &ehcic[index].hccr, &ehcic[index].hcor); +	if (rc) +		return rc; +	if (init == USB_INIT_DEVICE) +		goto done;  	/* EHCI spec section 4.1 */  	if (ehci_reset(index))  		return -1;  #if defined(CONFIG_EHCI_HCD_INIT_AFTER_RESET) -	if (ehci_hcd_init(index, &ehcic[index].hccr, &ehcic[index].hcor)) -		return -1; +	rc = ehci_hcd_init(index, init, &ehcic[index].hccr, &ehcic[index].hcor); +	if (rc) +		return rc;  #endif  	/* Set the high address word (aka segment) for 64-bit controller */  	if (ehci_readl(&ehcic[index].hccr->cr_hccparams) & 1) @@ -1037,7 +1042,7 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)  	printf("USB EHCI %x.%02x\n", reg >> 8, reg & 0xff);  	ehcic[index].rootdev = 0; - +done:  	*controller = &ehcic[index];  	return 0;  } diff --git a/drivers/usb/host/ehci-ixp4xx.c b/drivers/usb/host/ehci-ixp4xx.c index 56ef7e6c1..646e815e7 100644 --- a/drivers/usb/host/ehci-ixp4xx.c +++ b/drivers/usb/host/ehci-ixp4xx.c @@ -14,7 +14,8 @@   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	*hccr = (struct ehci_hccr *)(0xcd000100);  	*hcor = (struct ehci_hcor *)((uint32_t) *hccr diff --git a/drivers/usb/host/ehci-marvell.c b/drivers/usb/host/ehci-marvell.c index ee97fd274..52c43fdc5 100644 --- a/drivers/usb/host/ehci-marvell.c +++ b/drivers/usb/host/ehci-marvell.c @@ -74,7 +74,8 @@ static void usb_brg_adrdec_setup(void)   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	usb_brg_adrdec_setup(); diff --git a/drivers/usb/host/ehci-mpc512x.c b/drivers/usb/host/ehci-mpc512x.c index bb6e7ac97..a22109099 100644 --- a/drivers/usb/host/ehci-mpc512x.c +++ b/drivers/usb/host/ehci-mpc512x.c @@ -32,7 +32,8 @@ static void usb_platform_dr_init(volatile struct usb_ehci *ehci);   * This code is derived from EHCI FSL USB Linux driver for MPC5121   *   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	volatile struct usb_ehci *ehci; diff --git a/drivers/usb/host/ehci-mx5.c b/drivers/usb/host/ehci-mx5.c index dd11f535a..7566c6128 100644 --- a/drivers/usb/host/ehci-mx5.c +++ b/drivers/usb/host/ehci-mx5.c @@ -218,7 +218,8 @@ void __weak board_ehci_hcd_postinit(struct usb_ehci *ehci, int port)  {  } -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	struct usb_ehci *ehci; diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index eb24af597..4d7da5288 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -155,7 +155,8 @@ int __weak board_ehci_hcd_init(int port)  	return 0;  } -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	struct usb_ehci *ehci; diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c index a3048d105..f09c75a9b 100644 --- a/drivers/usb/host/ehci-mxc.c +++ b/drivers/usb/host/ehci-mxc.c @@ -208,7 +208,8 @@ static int mxc_set_usbcontrol(int port, unsigned int flags)  	return 0;  } -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	struct usb_ehci *ehci;  #ifdef CONFIG_MX31 diff --git a/drivers/usb/host/ehci-mxs.c b/drivers/usb/host/ehci-mxs.c index 286a380de..4d652b32d 100644 --- a/drivers/usb/host/ehci-mxs.c +++ b/drivers/usb/host/ehci-mxs.c @@ -77,7 +77,8 @@ static int ehci_mxs_toggle_clock(const struct ehci_mxs_port *port, int enable)  	return 0;  } -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	int ret; diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 90d7a6feb..7a1ffe5e2 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c @@ -69,8 +69,8 @@ static pci_dev_t ehci_find_class(int index)   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **ret_hccr, -		struct ehci_hcor **ret_hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **ret_hccr, struct ehci_hcor **ret_hcor)  {  	pci_dev_t pdev;  	uint32_t cmd; diff --git a/drivers/usb/host/ehci-ppc4xx.c b/drivers/usb/host/ehci-ppc4xx.c index 462fcfbe4..9aee3ff78 100644 --- a/drivers/usb/host/ehci-ppc4xx.c +++ b/drivers/usb/host/ehci-ppc4xx.c @@ -15,7 +15,8 @@   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	*hccr = (struct ehci_hccr *)(CONFIG_SYS_PPC4XX_USB_ADDR);  	*hcor = (struct ehci_hcor *)((uint32_t) *hccr + diff --git a/drivers/usb/host/ehci-spear.c b/drivers/usb/host/ehci-spear.c index 6758316f7..210ee9e88 100644 --- a/drivers/usb/host/ehci-spear.c +++ b/drivers/usb/host/ehci-spear.c @@ -20,7 +20,8 @@   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	*hccr = (struct ehci_hccr *)(CONFIG_SYS_UHC0_EHCI_BASE + 0x100);  	*hcor = (struct ehci_hcor *)((uint32_t)*hccr diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index cc23133f8..0b42aa5b3 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -734,7 +734,8 @@ int usb_process_devicetree(const void *blob)   * @param hcor		returns start address of EHCI HCOR registers   * @return 0 if ok, -1 on error (generally invalid port number)   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	struct fdt_usb *config;  	struct usb_ctlr *usbctlr; diff --git a/drivers/usb/host/ehci-vct.c b/drivers/usb/host/ehci-vct.c index 4252c272c..512ad3fb7 100644 --- a/drivers/usb/host/ehci-vct.c +++ b/drivers/usb/host/ehci-vct.c @@ -15,7 +15,8 @@ int vct_ehci_hcd_init(u32 *hccr, u32 *hcor);   * Create the appropriate control structures to manage   * a new EHCI host controller.   */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor)  {  	int ret;  	u32 vct_hccr; diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index 3e1c3123c..093eb4b83 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h @@ -250,7 +250,8 @@ struct ehci_ctrl {  };  /* Low level init functions */ -int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor); +int ehci_hcd_init(int index, enum usb_init_type init, +		struct ehci_hccr **hccr, struct ehci_hcor **hcor);  int ehci_hcd_stop(int index);  #endif /* USB_EHCI_H */ |