usb: new board-specific USB init interface
authorMateusz Zalega <m.zalega@samsung.com>
Fri, 4 Oct 2013 17:22:26 +0000 (19:22 +0200)
committerMarek Vasut <marex@denx.de>
Sun, 20 Oct 2013 21:42:40 +0000 (23:42 +0200)
This commit unifies board-specific USB initialization implementations
under one symbol (usb_board_init), declaration of which is available in
usb.h.

New API allows selective initialization of USB controllers whenever needed.

Signed-off-by: Mateusz Zalega <m.zalega@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Lukasz Majewski <l.majewski@samsung.com>
30 files changed:
arch/arm/include/asm/arch-tegra/usb.h
arch/arm/include/asm/ehci-omap.h
board/amcc/canyonlands/canyonlands.c
board/balloon3/balloon3.c
board/compulab/cm_t35/cm_t35.c
board/esd/apc405/apc405.c
board/esd/pmc440/pmc440.c
board/htkw/mcx/mcx.c
board/icpdas/lp8x4x/lp8x4x.c
board/nvidia/common/board.c
board/samsung/trats/trats.c
board/technexion/twister/twister.c
board/teejet/mt_ventoux/mt_ventoux.c
board/ti/beagle/beagle.c
board/ti/omap5_uevm/evm.c
board/ti/panda/panda.c
board/toradex/colibri_pxa270/colibri_pxa270.c
board/trizepsiv/conxs.c
board/vpac270/vpac270.c
common/cmd_dfu.c
common/cmd_usb_mass_storage.c
common/usb.c
drivers/dfu/dfu.c
drivers/usb/host/ehci-omap.c
drivers/usb/host/ehci-tegra.c
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci.h
include/g_dnl.h
include/usb.h
include/usb_mass_storage.h

index f66257c9f7ab18ac071035e985d454dbcc750ddb..a1efd07c7d90cb644388d066733f6af89543a30b 100644 (file)
 /* USB3_IF_USB_PHY_VBUS_SENSORS_0 */
 #define VBUS_VLD_STS                   (1 << 26)
 
-
 /* Setup USB on the board */
-int board_usb_init(const void *blob);
+int usb_process_devicetree(const void *blob);
 
 #endif /* _TEGRA_USB_H_ */
index ac83a539a82aca39d3ba48da3c4dbf8c8099b5d3..c7bca05682a390754188cd54f785a198757d6c5d 100644 (file)
@@ -145,8 +145,8 @@ struct omap_ehci {
 struct ehci_hccr;
 struct ehci_hcor;
 
-int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata,
-               struct ehci_hccr **hccr, struct ehci_hcor **hcor);
+int omap_ehci_hcd_init(int index, struct omap_usbhs_board_data *usbhs_pdata,
+                      struct ehci_hccr **hccr, struct ehci_hcor **hcor);
 int omap_ehci_hcd_stop(void);
 
 #endif /* _OMAP_COMMON_EHCI_H_ */
index cc36f4587caaed13ab38b06c08098282d77b9e8a..395095e459ca8e85fdf9b5a9f6fc96fef68ba51d 100644 (file)
@@ -16,6 +16,7 @@
 #include <asm/4xx_pcie.h>
 #include <asm/ppc4xx-gpio.h>
 #include <asm/errno.h>
+#include <usb.h>
 
 extern flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
 
@@ -188,7 +189,7 @@ int board_early_init_f(void)
 }
 
 #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT)
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        struct board_bcsr *bcsr_data =
                (struct board_bcsr *)CONFIG_SYS_BCSR_BASE;
@@ -229,7 +230,7 @@ int usb_board_stop(void)
        return 0;
 }
 
-int usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
        return usb_board_stop();
 }
index ecbac16d59008b8c4b4d8727681762de56b48d0a..19c0e023a0e781f5ce32137bcbf1145bac9ccb1e 100644 (file)
@@ -13,6 +13,7 @@
 #include <asm/io.h>
 #include <spartan3.h>
 #include <command.h>
+#include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -59,7 +60,7 @@ void dram_init_banksize(void)
 }
 
 #ifdef CONFIG_CMD_USB
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
                ~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
@@ -90,9 +91,9 @@ int usb_board_init(void)
        return 0;
 }
 
-void usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       return;
+       return 0;
 }
 
 void usb_board_stop(void)
index 3caa5be8455677bd0c5f5e4ef5b74dc1b9e74597..7626abc02e67f7a0cd82a8591af01fb34d0881f9 100644 (file)
@@ -591,7 +591,7 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
        twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, offset, 0xC0);
        udelay(1);
 
-       return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
 }
 
 int ehci_hcd_stop(void)
index f13f088d5515e67b618f743070933f2691caea2b..79341f5fdb16d95c9981c2c36f52cb4d2fb52b1e 100644 (file)
@@ -17,6 +17,7 @@
 #include <mtd/cfi_flash.h>
 #include <asm/4xx_pci.h>
 #include <pci.h>
+#include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -428,7 +429,7 @@ void reset_phy(void)
 }
 
 #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT)
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        return 0;
 }
@@ -453,9 +454,8 @@ int usb_board_stop(void)
        return 0;
 }
 
-int usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       usb_board_stop();
-       return 0;
+       return usb_board_stop();
 }
 #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */
index 549b3b73ce1bd66a0d2d8f216571815c69b9a9a1..44b86da380a8eacf69e8217fc884dd89b7699ecf 100644 (file)
@@ -27,6 +27,7 @@
 #endif
 #include <serial.h>
 #include <asm/4xx_pci.h>
+#include <usb.h>
 
 #include "fpga.h"
 #include "pmc440.h"
@@ -821,7 +822,7 @@ int bootstrap_eeprom_read (unsigned dev_addr, unsigned offset,
 }
 
 #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT)
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        char *act = getenv("usbact");
        int i;
@@ -845,10 +846,9 @@ int usb_board_stop(void)
        return 0;
 }
 
-int usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       usb_board_stop();
-       return 0;
+       return usb_board_stop();
 }
 #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */
 
index 653d7ea71d5c1140b085f07adb7af18fd9078904..6f85b47a0f0ff788aaa50a04bf3b3972e74531d8 100644 (file)
@@ -42,7 +42,7 @@ static struct omap_usbhs_board_data usbhs_bdata = {
 
 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
-       return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
 }
 
 int ehci_hcd_stop(int index)
index 1b68ef332a72d0f4c6b391edd43e19e974bef3ec..a96bed6aaa20312d9764256223f7d8e4c737f21d 100644 (file)
@@ -15,6 +15,7 @@
 #include <netdev.h>
 #include <serial.h>
 #include <asm/io.h>
+#include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -58,7 +59,7 @@ int board_mmc_init(bd_t *bis)
 #endif
 
 #ifdef CONFIG_CMD_USB
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        writel((UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
                ~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
@@ -89,9 +90,9 @@ int usb_board_init(void)
        return 0;
 }
 
-void usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       return;
+       return 0;
 }
 
 void usb_board_stop(void)
index 126e56e97afa6dbc04d879651e89cd28ecf344fe..1972527e7d11958239d6e36f55b9a25c301ea4cc 100644 (file)
@@ -32,6 +32,7 @@
 #ifdef CONFIG_USB_EHCI_TEGRA
 #include <asm/arch-tegra/usb.h>
 #include <asm/arch/usb.h>
+#include <usb.h>
 #endif
 #ifdef CONFIG_TEGRA_MMC
 #include <asm/arch-tegra/tegra_mmc.h>
@@ -153,8 +154,9 @@ int board_init(void)
 
 #ifdef CONFIG_USB_EHCI_TEGRA
        pin_mux_usb();
-       board_usb_init(gd->fdt_blob);
+       usb_process_devicetree(gd->fdt_blob);
 #endif
+
 #ifdef CONFIG_LCD
        tegra_lcd_check_next_stage(gd->fdt_blob, 0);
 #endif
index 7f61d17abb282a749c3c36caa4a9b964d8bb72c9..58d925ff1cb283d25241946531c86c2d47340e4b 100644 (file)
@@ -26,6 +26,7 @@
 #include <power/max8997_muic.h>
 #include <power/battery.h>
 #include <power/max17042_fg.h>
+#include <usb.h>
 #include <usb_mass_storage.h>
 
 #include "setup.h"
@@ -495,10 +496,10 @@ struct s3c_plat_otg_data s5pc210_otg_data = {
        .usb_flags      = PHY0_SLEEP,
 };
 
-void board_usb_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        debug("USB_udc_probe\n");
-       s3c_udc_probe(&s5pc210_otg_data);
+       return s3c_udc_probe(&s5pc210_otg_data);
 }
 #endif
 
index cd91d8fea079bdba11cf2bd7744b816a88a8e7a3..6f2ff55a126b7c1730f1f2638cf53106aba5566f 100644 (file)
@@ -53,7 +53,7 @@ static struct omap_usbhs_board_data usbhs_bdata = {
 
 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
-       return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
 }
 
 int ehci_hcd_stop(int index)
index b4e01d1562569514486568aaff65cf921c96ff6e..df873f52a371325c2341d7dc486653024afca949 100644 (file)
@@ -104,7 +104,7 @@ static struct omap_usbhs_board_data usbhs_bdata = {
 
 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
-       return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
 }
 
 int ehci_hcd_stop(int index)
index 62e9beaef35a6dd5ef8d8b1600ee10b8942a89fa..41fed54fdb43b418c9bb493212e23fa064ffab4c 100644 (file)
@@ -523,7 +523,7 @@ static struct omap_usbhs_board_data usbhs_bdata = {
 
 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
-       return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
 }
 
 int ehci_hcd_stop(int index)
index 5fc3473ecc2d2339a572ff98945181af4c84a936..228df29b42167f2b484598f386c25bc98fa5b06f 100644 (file)
@@ -184,7 +184,7 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
                eth_setenv_enetaddr("usbethaddr", device_mac);
        }
 
-       ret = omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       ret = omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
        if (ret < 0) {
                puts("Failed to initialize ehci\n");
                return ret;
index bc3c29220e1c3f7420b7c79ce62cfc3e3c7066b0..3724e816c22fa2ba3a852dc8883363e04b1faee9 100644 (file)
@@ -279,7 +279,7 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
        utmi_clk |= HSUSBHOST_CLKCTRL_CLKSEL_UTMI_P1_MASK;
        sr32((void *)CM_L3INIT_HSUSBHOST_CLKCTRL, 0, 32, utmi_clk);
 
-       ret = omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       ret = omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
        if (ret < 0)
                return ret;
 
index c1e25623488d63ae2f3c7c0f72ca6d59d1dec894..b70c1e38c81995645404e7350385201619ac9be9 100644 (file)
@@ -13,6 +13,7 @@
 #include <netdev.h>
 #include <asm/io.h>
 #include <serial.h>
+#include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -39,7 +40,7 @@ int dram_init(void)
 }
 
 #ifdef CONFIG_CMD_USB
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
                ~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
@@ -70,9 +71,9 @@ int usb_board_init(void)
        return 0;
 }
 
-void usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       return;
+       return 0;
 }
 
 void usb_board_stop(void)
index c0c318f32877e17e2a7c2a5eddc7ff008915ff75..830d5a86f15f5193aa7d7011d4b495afbc0b6de9 100644 (file)
@@ -21,6 +21,7 @@
 #include <asm/arch/regs-mmc.h>
 #include <netdev.h>
 #include <asm/io.h>
+#include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -42,7 +43,7 @@ extern struct serial_device serial_stuart_device;
  * Miscelaneous platform dependent initialisations
  */
 
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
                ~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
@@ -69,9 +70,9 @@ int usb_board_init(void)
        return 0;
 }
 
-void usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       return;
+       return 0;
 }
 
 void usb_board_stop(void)
index 616736f5c471d430ac6fce71deed6d8fd41c0606..fab4636ad958a49ff70f23db5ae409cce4db1e11 100644 (file)
@@ -13,6 +13,7 @@
 #include <netdev.h>
 #include <serial.h>
 #include <asm/io.h>
+#include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -66,7 +67,7 @@ int board_mmc_init(bd_t *bis)
 #endif
 
 #ifdef CONFIG_CMD_USB
-int usb_board_init(void)
+int board_usb_init(int index, enum board_usb_init_type init)
 {
        writel((UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
                ~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
@@ -97,9 +98,9 @@ int usb_board_init(void)
        return 0;
 }
 
-void usb_board_init_fail(void)
+int board_usb_cleanup(int index, enum board_usb_init_type init)
 {
-       return;
+       return 0;
 }
 
 void usb_board_stop(void)
index 7ce92cec87f4fcb156b2d84ff487cb319635f6a4..5547678208adf8753800bf76f68b4f7ad34869b8 100644 (file)
 #include <common.h>
 #include <dfu.h>
 #include <g_dnl.h>
+#include <usb.h>
 
 static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+       if (argc < 4)
+               return CMD_RET_USAGE;
+
+       char *usb_controller = argv[1];
+       char *interface = argv[2];
+       char *devstring = argv[3];
+
        char *s = "dfu";
        int ret, i = 0;
 
-       if (argc < 3)
-               return CMD_RET_USAGE;
-
-       ret = dfu_init_env_entities(argv[1], simple_strtoul(argv[2], NULL, 10));
+       ret = dfu_init_env_entities(interface, simple_strtoul(devstring,
+                                                             NULL, 10));
        if (ret)
                return ret;
 
-       if (argc > 3 && strcmp(argv[3], "list") == 0) {
+       if (argc > 4 && strcmp(argv[4], "list") == 0) {
                dfu_show_entities();
                goto done;
        }
 
-#ifdef CONFIG_TRATS
-       board_usb_init();
-#endif
+       int controller_index = simple_strtoul(usb_controller, NULL, 0);
+       board_usb_init(controller_index, USB_INIT_DEVICE);
 
        g_dnl_register(s);
        while (1) {
@@ -62,8 +67,9 @@ done:
 
 U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
        "Device Firmware Upgrade",
-       "<interface> <dev> [list]\n"
-       "  - device firmware upgrade on a device <dev>\n"
-       "    attached to interface <interface>\n"
-       "    [list] - list available alt settings"
+       "<USB_controller> <interface> <dev> [list]\n"
+       "  - device firmware upgrade via <USB_controller>\n"
+       "    on device <dev>, attached to interface\n"
+       "    <interface>\n"
+       "    [list] - list available alt settings\n"
 );
index ccf7195946e19491edb931d84cd4b159921112dc..f583cafa35abfe9828a3c8a861907e3b5707153a 100644 (file)
@@ -8,51 +8,53 @@
 #include <common.h>
 #include <command.h>
 #include <g_dnl.h>
+#include <usb.h>
 #include <usb_mass_storage.h>
 
 int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
                               int argc, char * const argv[])
 {
-       char *ep;
-       unsigned int dev_num = 0, offset = 0, part_size = 0;
-       int rc;
+       if (argc < 3)
+               return CMD_RET_USAGE;
 
-       struct ums_board_info *ums_info;
-       static char *s = "ums";
-
-       if (argc < 2) {
-               printf("usage: ums <dev> - e.g. ums 0\n");
-               return 0;
-       }
-
-       dev_num = (int)simple_strtoul(argv[1], &ep, 16);
+       const char *usb_controller = argv[1];
+       const char *mmc_devstring  = argv[2];
 
+       unsigned int dev_num = (unsigned int)(simple_strtoul(mmc_devstring,
+                               NULL, 0));
        if (dev_num) {
-               puts("\nSet eMMC device to 0! - e.g. ums 0\n");
+               error("Set eMMC device to 0! - e.g. ums 0");
                goto fail;
        }
 
-       board_usb_init();
-       ums_info = board_ums_init(dev_num, offset, part_size);
+       unsigned int controller_index = (unsigned int)(simple_strtoul(
+                                       usb_controller, NULL, 0));
+       if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
+               error("Couldn't init USB controller.");
+               goto fail;
+       }
 
+       struct ums_board_info *ums_info = board_ums_init(dev_num, 0, 0);
        if (!ums_info) {
-               printf("MMC: %d -> NOT available\n", dev_num);
+               error("MMC: %d -> NOT available", dev_num);
                goto fail;
        }
-       rc = fsg_init(ums_info);
+
+       int rc = fsg_init(ums_info);
        if (rc) {
-               printf("cmd ums: fsg_init failed\n");
+               error("fsg_init failed");
                goto fail;
        }
 
-       g_dnl_register(s);
+       g_dnl_register("ums");
 
        while (1) {
                /* Handle control-c and timeouts */
                if (ctrlc()) {
-                       printf("The remote end did not respond in time.\n");
+                       error("The remote end did not respond in time.");
                        goto exit;
                }
+
                usb_gadget_handle_interrupts();
                /* Check if USB cable has been detached */
                if (fsg_main_thread(NULL) == EIO)
@@ -68,5 +70,5 @@ fail:
 
 U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
        "Use the UMS [User Mass Storage]",
-       "ums - User Mass Storage Gadget"
+       "<USB_controller> <mmc_dev>"
 );
index e23d78885521d0e5bf35d19cb3bc140ba0571c2c..a61fcac855ed68bddd9bd76da1b15cb8e7f7493d 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/ctype.h>
 #include <asm/byteorder.h>
 #include <asm/unaligned.h>
+#include <compiler.h>
 
 #include <usb.h>
 #ifdef CONFIG_4xx
@@ -1066,4 +1067,9 @@ int usb_new_device(struct usb_device *dev)
        return 0;
 }
 
+__weak
+int board_usb_init(int index, enum board_usb_init_type init)
+{
+       return 0;
+}
 /* EOF */
index 56b21c78abc68676710eb90f003bb26bead26ea4..f3287359db916f9424d7dde518510fcdf5f1661e 100644 (file)
@@ -330,7 +330,7 @@ int dfu_read(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
 }
 
 static int dfu_fill_entity(struct dfu_entity *dfu, char *s, int alt,
-                           char *interface, int num)
+                          char *interface, int num)
 {
        char *st;
 
index 3c58f9e656c6d1a2dbe5a2bd103dfbe623a96eb2..c4ce4870875b14fbf0f9da97a680c1bcbe7617e7 100644 (file)
@@ -96,12 +96,6 @@ static void omap_ehci_soft_phy_reset(int port)
 }
 #endif
 
-inline int __board_usb_init(void)
-{
-       return 0;
-}
-int board_usb_init(void) __attribute__((weak, alias("__board_usb_init")));
-
 #if defined(CONFIG_OMAP_EHCI_PHY1_RESET_GPIO) || \
        defined(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO) || \
        defined(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO)
@@ -157,15 +151,15 @@ int omap_ehci_hcd_stop(void)
  * Based on "drivers/usb/host/ehci-omap.c" from Linux 3.1
  * See there for additional Copyrights.
  */
-int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata,
-               struct ehci_hccr **hccr, struct ehci_hcor **hcor)
+int omap_ehci_hcd_init(int index, struct omap_usbhs_board_data *usbhs_pdata,
+                      struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
        int ret;
        unsigned int i, reg = 0, rev = 0;
 
        debug("Initializing OMAP EHCI\n");
 
-       ret = board_usb_init();
+       ret = board_usb_init(index, USB_INIT_HOST);
        if (ret < 0)
                return ret;
 
index c6da449e4b07c435dcec14ecba16e9322888df3a..cc23133f8c4ee5bac8f309203f4593ce695d3322 100644 (file)
@@ -699,7 +699,7 @@ static int process_usb_nodes(const void *blob, int node_list[], int count)
        return 0;
 }
 
-int board_usb_init(const void *blob)
+int usb_process_devicetree(const void *blob)
 {
        int node_list[USB_PORTS_MAX];
        int count, err = 0;
index c33c487ee5438c8729d754ee14437ee12d46c716..756f2fa7ffdd5ba32417f32d4088ddf811034207 100644 (file)
@@ -1861,7 +1861,7 @@ int usb_lowlevel_init(int index, void **controller)
 
 #ifdef CONFIG_SYS_USB_OHCI_BOARD_INIT
        /*  board dependant init */
-       if (usb_board_init())
+       if (board_usb_init(index, USB_INIT_HOST))
                return -1;
 #endif
        memset(&gohci, 0, sizeof(ohci_t));
@@ -1918,7 +1918,7 @@ int usb_lowlevel_init(int index, void **controller)
                err ("can't reset usb-%s", gohci.slot_name);
 #ifdef CONFIG_SYS_USB_OHCI_BOARD_INIT
                /* board dependant cleanup */
-               usb_board_init_fail();
+               board_usb_cleanup(index, USB_INIT_HOST);
 #endif
 
 #ifdef CONFIG_SYS_USB_OHCI_CPU_INIT
index d977e8ff3ce31ee93990a68990590bafdc3800ea..9a4a2c24759111adf185be7cebdbffa0bd1f29b8 100644 (file)
 #endif /* CONFIG_SYS_OHCI_SWAP_REG_ACCESS */
 
 /* functions for doing board or CPU specific setup/cleanup */
-extern int usb_board_init(void);
-extern int usb_board_stop(void);
-extern int usb_board_init_fail(void);
-
-extern int usb_cpu_init(void);
-extern int usb_cpu_stop(void);
-extern int usb_cpu_init_fail(void);
+int usb_board_stop(void);
 
+int usb_cpu_init(void);
+int usb_cpu_stop(void);
+int usb_cpu_init_fail(void);
 
 static int cc_to_error[16] = {
 
index 2b2f11a62f46e069e7f9095ea3e5323915440fec..b6c4dd4ac3a1bf89c05c6e956ab90dc27ba9c42d 100644 (file)
@@ -14,6 +14,4 @@ int g_dnl_bind_fixup(struct usb_device_descriptor *);
 int g_dnl_register(const char *s);
 void g_dnl_unregister(void);
 
-/* USB initialization declaration - board specific */
-void board_usb_init(void);
 #endif /* __G_DOWNLOAD_H_ */
index a96ec235c853c07ff026e0dc1304e245221c8e5f..17fb68cf16ac26d750a94ddb5be04df602988cfc 100644 (file)
@@ -167,10 +167,36 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 
 extern void udc_disconnect(void);
 
-#else
-#error USB Lowlevel not defined
 #endif
 
+/*
+ * You can initialize platform's USB host or device
+ * ports by passing this enum as an argument to
+ * board_usb_init().
+ */
+enum board_usb_init_type {
+       USB_INIT_HOST,
+       USB_INIT_DEVICE
+};
+
+/*
+ * board-specific hardware initialization, called by
+ * usb drivers and u-boot commands
+ *
+ * @param index USB controller number
+ * @param init initializes controller as USB host or device
+ */
+int board_usb_init(int index, enum board_usb_init_type init);
+
+/*
+ * can be used to clean up after failed USB initialization attempt
+ * vide: board_usb_init()
+ *
+ * @param index USB controller number for selective cleanup
+ * @param init board_usb_init_type passed to board_usb_init()
+ */
+int board_usb_cleanup(int index, enum board_usb_init_type init);
+
 #ifdef CONFIG_USB_STORAGE
 
 #define USB_MAX_STOR_DEV 5
index e08deb4ddf179c31914add65c078ff6f0ed3f083..13f535ce2e424d9be41744147098db404d6944cd 100644 (file)
@@ -31,14 +31,11 @@ struct ums_board_info {
        struct ums_device ums_dev;
 };
 
-extern void board_usb_init(void);
-
-extern int fsg_init(struct ums_board_info *);
-extern void fsg_cleanup(void);
-extern struct ums_board_info *board_ums_init(unsigned int,
-                                            unsigned int, unsigned int);
-extern int usb_gadget_handle_interrupts(void);
-extern int fsg_main_thread(void *);
+int fsg_init(struct ums_board_info *);
+void fsg_cleanup(void);
+struct ums_board_info *board_ums_init(unsigned int, unsigned int,
+                                     unsigned int);
+int fsg_main_thread(void *);
 
 #ifdef CONFIG_USB_GADGET_MASS_STORAGE
 int fsg_add(struct usb_configuration *c);