From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mateusz Zalega Date: Tue, 06 Aug 2013 12:50:33 +0200 Subject: [U-Boot] [RFC 01/10] New board-specific USB initialization interface In-Reply-To: <1375786242-11734-1-git-send-email-m.zalega@samsung.com> References: <1375786242-11734-1-git-send-email-m.zalega@samsung.com> Message-ID: <1375786242-11734-2-git-send-email-m.zalega@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de This commit unifies board-specific USB initialization implementations under one symbol (usb_board_init), declaration of which is available in usb.h. Signed-off-by: Mateusz Zalega Signed-off-by: Kyungmin Park Reviewed-by: Lukasz Majewski Cc: Marek Vasut --- common/cmd_dfu.c | 5 ++--- common/cmd_usb_mass_storage.c | 3 ++- common/usb.c | 5 +++++ drivers/usb/host/ehci-omap.c | 8 +------- drivers/usb/host/ehci-tegra.c | 2 +- drivers/usb/host/ohci-hcd.c | 4 ++-- drivers/usb/host/ohci.h | 12 +++++------- include/g_dnl.h | 2 -- include/usb.h | 17 ++++++++++++++++- include/usb_mass_storage.h | 12 +++++------- 10 files changed, 39 insertions(+), 31 deletions(-) diff --git a/common/cmd_dfu.c b/common/cmd_dfu.c index db066ac..c701ebc 100644 --- a/common/cmd_dfu.c +++ b/common/cmd_dfu.c @@ -14,6 +14,7 @@ #include #include #include +#include static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { @@ -43,9 +44,7 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) goto done; } -#ifdef CONFIG_TRATS - board_usb_init(); -#endif + board_usb_init(USB_INIT_DEVICE); g_dnl_register(s); while (1) { diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c index 33a4715..86135b4 100644 --- a/common/cmd_usb_mass_storage.c +++ b/common/cmd_usb_mass_storage.c @@ -9,6 +9,7 @@ #include #include #include +#include #include int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, @@ -33,7 +34,7 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, goto fail; } - board_usb_init(); + board_usb_init(USB_INIT_DEVICE); ums_info = board_ums_init(dev_num, offset, part_size); if (!ums_info) { diff --git a/common/usb.c b/common/usb.c index f740e5e..793fb35 100644 --- a/common/usb.c +++ b/common/usb.c @@ -982,4 +982,9 @@ int usb_new_device(struct usb_device *dev) return 0; } +__attribute__((weak)) +int board_usb_init(enum board_usb_init_type what_to_init) +{ + return 0; +} /* EOF */ diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c index a47e078..61b7c8d 100644 --- a/drivers/usb/host/ehci-omap.c +++ b/drivers/usb/host/ehci-omap.c @@ -86,12 +86,6 @@ static void omap_ehci_soft_phy_reset(int port) ulpi_reset(&ulpi_vp); } -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) /* controls PHY(s) reset signal(s) */ @@ -150,7 +144,7 @@ int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata, debug("Initializing OMAP EHCI\n"); - ret = board_usb_init(); + ret = board_usb_init(USB_INIT_HOST); if (ret < 0) return ret; diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index c6da449..cc23133 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -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; diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index c33c487..e6a5623 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -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(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_init_fail(); #endif #ifdef CONFIG_SYS_USB_OHCI_CPU_INIT diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h index d977e8f..9f7f961 100644 --- a/drivers/usb/host/ohci.h +++ b/drivers/usb/host/ohci.h @@ -19,14 +19,12 @@ #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 board_usb_init_fail(void); +int usb_cpu_init(void); +int usb_cpu_stop(void); +int usb_cpu_init_fail(void); static int cc_to_error[16] = { diff --git a/include/g_dnl.h b/include/g_dnl.h index 2b2f11a..b6c4dd4 100644 --- a/include/g_dnl.h +++ b/include/g_dnl.h @@ -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_ */ diff --git a/include/usb.h b/include/usb.h index 60db897..29f67bf 100644 --- a/include/usb.h +++ b/include/usb.h @@ -165,10 +165,25 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer, extern void udc_disconnect(void); -#else +#elif !defined(CONFIG_USB_GADGET) #error USB Lowlevel not defined #endif +/* You can initialize platform's USB host, device or both + * capabilities by passing this enum as an argument to + * board_usb_init(). + */ +enum board_usb_init_type { + USB_INIT_ALL, + USB_INIT_HOST, + USB_INIT_DEVICE +}; + +/* board-specific hardware initialization, called by + * usb drivers and u-boot commands + */ +int board_usb_init(enum board_usb_init_type what_to_init); + #ifdef CONFIG_USB_STORAGE #define USB_MAX_STOR_DEV 5 diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h index 35cdcc3..de31b0e 100644 --- a/include/usb_mass_storage.h +++ b/include/usb_mass_storage.h @@ -30,13 +30,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, +int fsg_init(struct ums_board_info *); +void fsg_cleanup(void); +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 usb_gadget_handle_interrupts(void); +int fsg_main_thread(void *); #endif /* __USB_MASS_STORAGE_H__ */ -- 1.8.2.1