usb: new board-specific USB init interface
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>
This commit is contained in:
parent
f3d7cff559
commit
16297cfb2a
@ -131,8 +131,7 @@
|
|||||||
/* USB3_IF_USB_PHY_VBUS_SENSORS_0 */
|
/* USB3_IF_USB_PHY_VBUS_SENSORS_0 */
|
||||||
#define VBUS_VLD_STS (1 << 26)
|
#define VBUS_VLD_STS (1 << 26)
|
||||||
|
|
||||||
|
|
||||||
/* Setup USB on the board */
|
/* Setup USB on the board */
|
||||||
int board_usb_init(const void *blob);
|
int usb_process_devicetree(const void *blob);
|
||||||
|
|
||||||
#endif /* _TEGRA_USB_H_ */
|
#endif /* _TEGRA_USB_H_ */
|
||||||
|
@ -145,7 +145,7 @@ struct omap_ehci {
|
|||||||
struct ehci_hccr;
|
struct ehci_hccr;
|
||||||
struct ehci_hcor;
|
struct ehci_hcor;
|
||||||
|
|
||||||
int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata,
|
int omap_ehci_hcd_init(int index, struct omap_usbhs_board_data *usbhs_pdata,
|
||||||
struct ehci_hccr **hccr, struct ehci_hcor **hcor);
|
struct ehci_hccr **hccr, struct ehci_hcor **hcor);
|
||||||
int omap_ehci_hcd_stop(void);
|
int omap_ehci_hcd_stop(void);
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <asm/4xx_pcie.h>
|
#include <asm/4xx_pcie.h>
|
||||||
#include <asm/ppc4xx-gpio.h>
|
#include <asm/ppc4xx-gpio.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
extern flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
|
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)
|
#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 *bcsr_data =
|
||||||
(struct board_bcsr *)CONFIG_SYS_BCSR_BASE;
|
(struct board_bcsr *)CONFIG_SYS_BCSR_BASE;
|
||||||
@ -229,7 +230,7 @@ int usb_board_stop(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_board_init_fail(void)
|
int board_usb_cleanup(int index, enum board_usb_init_type init)
|
||||||
{
|
{
|
||||||
return usb_board_stop();
|
return usb_board_stop();
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <spartan3.h>
|
#include <spartan3.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -59,7 +60,7 @@ void dram_init_banksize(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_USB
|
#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) &
|
writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
|
||||||
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
||||||
@ -90,9 +91,9 @@ int usb_board_init(void)
|
|||||||
return 0;
|
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)
|
void usb_board_stop(void)
|
||||||
|
@ -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);
|
twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, offset, 0xC0);
|
||||||
udelay(1);
|
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)
|
int ehci_hcd_stop(void)
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <mtd/cfi_flash.h>
|
#include <mtd/cfi_flash.h>
|
||||||
#include <asm/4xx_pci.h>
|
#include <asm/4xx_pci.h>
|
||||||
#include <pci.h>
|
#include <pci.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
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)
|
#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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -453,9 +454,8 @@ int usb_board_stop(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_board_init_fail(void)
|
int board_usb_cleanup(int index, enum board_usb_init_type init)
|
||||||
{
|
{
|
||||||
usb_board_stop();
|
return usb_board_stop();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */
|
#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <asm/4xx_pci.h>
|
#include <asm/4xx_pci.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
#include "fpga.h"
|
#include "fpga.h"
|
||||||
#include "pmc440.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)
|
#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");
|
char *act = getenv("usbact");
|
||||||
int i;
|
int i;
|
||||||
@ -845,10 +846,9 @@ int usb_board_stop(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_board_init_fail(void)
|
int board_usb_cleanup(int index, enum board_usb_init_type init)
|
||||||
{
|
{
|
||||||
usb_board_stop();
|
return usb_board_stop();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */
|
#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */
|
||||||
|
|
||||||
|
@ -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)
|
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)
|
int ehci_hcd_stop(int index)
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -58,7 +59,7 @@ int board_mmc_init(bd_t *bis)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_USB
|
#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) &
|
writel((UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
|
||||||
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
||||||
@ -89,9 +90,9 @@ int usb_board_init(void)
|
|||||||
return 0;
|
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)
|
void usb_board_stop(void)
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#ifdef CONFIG_USB_EHCI_TEGRA
|
#ifdef CONFIG_USB_EHCI_TEGRA
|
||||||
#include <asm/arch-tegra/usb.h>
|
#include <asm/arch-tegra/usb.h>
|
||||||
#include <asm/arch/usb.h>
|
#include <asm/arch/usb.h>
|
||||||
|
#include <usb.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_TEGRA_MMC
|
#ifdef CONFIG_TEGRA_MMC
|
||||||
#include <asm/arch-tegra/tegra_mmc.h>
|
#include <asm/arch-tegra/tegra_mmc.h>
|
||||||
@ -153,8 +154,9 @@ int board_init(void)
|
|||||||
|
|
||||||
#ifdef CONFIG_USB_EHCI_TEGRA
|
#ifdef CONFIG_USB_EHCI_TEGRA
|
||||||
pin_mux_usb();
|
pin_mux_usb();
|
||||||
board_usb_init(gd->fdt_blob);
|
usb_process_devicetree(gd->fdt_blob);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_LCD
|
#ifdef CONFIG_LCD
|
||||||
tegra_lcd_check_next_stage(gd->fdt_blob, 0);
|
tegra_lcd_check_next_stage(gd->fdt_blob, 0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <power/max8997_muic.h>
|
#include <power/max8997_muic.h>
|
||||||
#include <power/battery.h>
|
#include <power/battery.h>
|
||||||
#include <power/max17042_fg.h>
|
#include <power/max17042_fg.h>
|
||||||
|
#include <usb.h>
|
||||||
#include <usb_mass_storage.h>
|
#include <usb_mass_storage.h>
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
@ -495,10 +496,10 @@ struct s3c_plat_otg_data s5pc210_otg_data = {
|
|||||||
.usb_flags = PHY0_SLEEP,
|
.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");
|
debug("USB_udc_probe\n");
|
||||||
s3c_udc_probe(&s5pc210_otg_data);
|
return s3c_udc_probe(&s5pc210_otg_data);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -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)
|
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)
|
int ehci_hcd_stop(int index)
|
||||||
|
@ -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)
|
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)
|
int ehci_hcd_stop(int index)
|
||||||
|
@ -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)
|
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)
|
int ehci_hcd_stop(int index)
|
||||||
|
@ -184,7 +184,7 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
|
|||||||
eth_setenv_enetaddr("usbethaddr", device_mac);
|
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) {
|
if (ret < 0) {
|
||||||
puts("Failed to initialize ehci\n");
|
puts("Failed to initialize ehci\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -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;
|
utmi_clk |= HSUSBHOST_CLKCTRL_CLKSEL_UTMI_P1_MASK;
|
||||||
sr32((void *)CM_L3INIT_HSUSBHOST_CLKCTRL, 0, 32, utmi_clk);
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ int dram_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_USB
|
#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) &
|
writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
|
||||||
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
||||||
@ -70,9 +71,9 @@ int usb_board_init(void)
|
|||||||
return 0;
|
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)
|
void usb_board_stop(void)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <asm/arch/regs-mmc.h>
|
#include <asm/arch/regs-mmc.h>
|
||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -42,7 +43,7 @@ extern struct serial_device serial_stuart_device;
|
|||||||
* Miscelaneous platform dependent initialisations
|
* 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) &
|
writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
|
||||||
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
||||||
@ -69,9 +70,9 @@ int usb_board_init(void)
|
|||||||
return 0;
|
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)
|
void usb_board_stop(void)
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ int board_mmc_init(bd_t *bis)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_USB
|
#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) &
|
writel((UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
|
||||||
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
||||||
@ -97,9 +98,9 @@ int usb_board_init(void)
|
|||||||
return 0;
|
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)
|
void usb_board_stop(void)
|
||||||
|
@ -11,27 +11,32 @@
|
|||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <dfu.h>
|
#include <dfu.h>
|
||||||
#include <g_dnl.h>
|
#include <g_dnl.h>
|
||||||
|
#include <usb.h>
|
||||||
|
|
||||||
static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
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";
|
char *s = "dfu";
|
||||||
int ret, i = 0;
|
int ret, i = 0;
|
||||||
|
|
||||||
if (argc < 3)
|
ret = dfu_init_env_entities(interface, simple_strtoul(devstring,
|
||||||
return CMD_RET_USAGE;
|
NULL, 10));
|
||||||
|
|
||||||
ret = dfu_init_env_entities(argv[1], simple_strtoul(argv[2], NULL, 10));
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (argc > 3 && strcmp(argv[3], "list") == 0) {
|
if (argc > 4 && strcmp(argv[4], "list") == 0) {
|
||||||
dfu_show_entities();
|
dfu_show_entities();
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TRATS
|
int controller_index = simple_strtoul(usb_controller, NULL, 0);
|
||||||
board_usb_init();
|
board_usb_init(controller_index, USB_INIT_DEVICE);
|
||||||
#endif
|
|
||||||
|
|
||||||
g_dnl_register(s);
|
g_dnl_register(s);
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -62,8 +67,9 @@ done:
|
|||||||
|
|
||||||
U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
|
U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
|
||||||
"Device Firmware Upgrade",
|
"Device Firmware Upgrade",
|
||||||
"<interface> <dev> [list]\n"
|
"<USB_controller> <interface> <dev> [list]\n"
|
||||||
" - device firmware upgrade on a device <dev>\n"
|
" - device firmware upgrade via <USB_controller>\n"
|
||||||
" attached to interface <interface>\n"
|
" on device <dev>, attached to interface\n"
|
||||||
" [list] - list available alt settings"
|
" <interface>\n"
|
||||||
|
" [list] - list available alt settings\n"
|
||||||
);
|
);
|
||||||
|
@ -8,51 +8,53 @@
|
|||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <g_dnl.h>
|
#include <g_dnl.h>
|
||||||
|
#include <usb.h>
|
||||||
#include <usb_mass_storage.h>
|
#include <usb_mass_storage.h>
|
||||||
|
|
||||||
int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
|
int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
|
||||||
int argc, char * const argv[])
|
int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
char *ep;
|
if (argc < 3)
|
||||||
unsigned int dev_num = 0, offset = 0, part_size = 0;
|
return CMD_RET_USAGE;
|
||||||
int rc;
|
|
||||||
|
|
||||||
struct ums_board_info *ums_info;
|
const char *usb_controller = argv[1];
|
||||||
static char *s = "ums";
|
const char *mmc_devstring = argv[2];
|
||||||
|
|
||||||
if (argc < 2) {
|
|
||||||
printf("usage: ums <dev> - e.g. ums 0\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev_num = (int)simple_strtoul(argv[1], &ep, 16);
|
|
||||||
|
|
||||||
|
unsigned int dev_num = (unsigned int)(simple_strtoul(mmc_devstring,
|
||||||
|
NULL, 0));
|
||||||
if (dev_num) {
|
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;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
board_usb_init();
|
unsigned int controller_index = (unsigned int)(simple_strtoul(
|
||||||
ums_info = board_ums_init(dev_num, offset, part_size);
|
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) {
|
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);
|
|
||||||
if (rc) {
|
|
||||||
printf("cmd ums: fsg_init failed\n");
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_dnl_register(s);
|
int rc = fsg_init(ums_info);
|
||||||
|
if (rc) {
|
||||||
|
error("fsg_init failed");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_dnl_register("ums");
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
/* Handle control-c and timeouts */
|
/* Handle control-c and timeouts */
|
||||||
if (ctrlc()) {
|
if (ctrlc()) {
|
||||||
printf("The remote end did not respond in time.\n");
|
error("The remote end did not respond in time.");
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_gadget_handle_interrupts();
|
usb_gadget_handle_interrupts();
|
||||||
/* Check if USB cable has been detached */
|
/* Check if USB cable has been detached */
|
||||||
if (fsg_main_thread(NULL) == EIO)
|
if (fsg_main_thread(NULL) == EIO)
|
||||||
@ -68,5 +70,5 @@ fail:
|
|||||||
|
|
||||||
U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
|
U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
|
||||||
"Use the UMS [User Mass Storage]",
|
"Use the UMS [User Mass Storage]",
|
||||||
"ums - User Mass Storage Gadget"
|
"<USB_controller> <mmc_dev>"
|
||||||
);
|
);
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
#include <compiler.h>
|
||||||
|
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
#ifdef CONFIG_4xx
|
#ifdef CONFIG_4xx
|
||||||
@ -1066,4 +1067,9 @@ int usb_new_device(struct usb_device *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__weak
|
||||||
|
int board_usb_init(int index, enum board_usb_init_type init)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
@ -96,12 +96,6 @@ static void omap_ehci_soft_phy_reset(int port)
|
|||||||
}
|
}
|
||||||
#endif
|
#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) || \
|
#if defined(CONFIG_OMAP_EHCI_PHY1_RESET_GPIO) || \
|
||||||
defined(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO) || \
|
defined(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO) || \
|
||||||
defined(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO)
|
defined(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO)
|
||||||
@ -157,7 +151,7 @@ int omap_ehci_hcd_stop(void)
|
|||||||
* Based on "drivers/usb/host/ehci-omap.c" from Linux 3.1
|
* Based on "drivers/usb/host/ehci-omap.c" from Linux 3.1
|
||||||
* See there for additional Copyrights.
|
* See there for additional Copyrights.
|
||||||
*/
|
*/
|
||||||
int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata,
|
int omap_ehci_hcd_init(int index, struct omap_usbhs_board_data *usbhs_pdata,
|
||||||
struct ehci_hccr **hccr, struct ehci_hcor **hcor)
|
struct ehci_hccr **hccr, struct ehci_hcor **hcor)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -165,7 +159,7 @@ int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata,
|
|||||||
|
|
||||||
debug("Initializing OMAP EHCI\n");
|
debug("Initializing OMAP EHCI\n");
|
||||||
|
|
||||||
ret = board_usb_init();
|
ret = board_usb_init(index, USB_INIT_HOST);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -699,7 +699,7 @@ static int process_usb_nodes(const void *blob, int node_list[], int count)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_usb_init(const void *blob)
|
int usb_process_devicetree(const void *blob)
|
||||||
{
|
{
|
||||||
int node_list[USB_PORTS_MAX];
|
int node_list[USB_PORTS_MAX];
|
||||||
int count, err = 0;
|
int count, err = 0;
|
||||||
|
@ -1861,7 +1861,7 @@ int usb_lowlevel_init(int index, void **controller)
|
|||||||
|
|
||||||
#ifdef CONFIG_SYS_USB_OHCI_BOARD_INIT
|
#ifdef CONFIG_SYS_USB_OHCI_BOARD_INIT
|
||||||
/* board dependant init */
|
/* board dependant init */
|
||||||
if (usb_board_init())
|
if (board_usb_init(index, USB_INIT_HOST))
|
||||||
return -1;
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
memset(&gohci, 0, sizeof(ohci_t));
|
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);
|
err ("can't reset usb-%s", gohci.slot_name);
|
||||||
#ifdef CONFIG_SYS_USB_OHCI_BOARD_INIT
|
#ifdef CONFIG_SYS_USB_OHCI_BOARD_INIT
|
||||||
/* board dependant cleanup */
|
/* board dependant cleanup */
|
||||||
usb_board_init_fail();
|
board_usb_cleanup(index, USB_INIT_HOST);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_USB_OHCI_CPU_INIT
|
#ifdef CONFIG_SYS_USB_OHCI_CPU_INIT
|
||||||
|
@ -19,14 +19,11 @@
|
|||||||
#endif /* CONFIG_SYS_OHCI_SWAP_REG_ACCESS */
|
#endif /* CONFIG_SYS_OHCI_SWAP_REG_ACCESS */
|
||||||
|
|
||||||
/* functions for doing board or CPU specific setup/cleanup */
|
/* functions for doing board or CPU specific setup/cleanup */
|
||||||
extern int usb_board_init(void);
|
int usb_board_stop(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_cpu_init(void);
|
||||||
|
int usb_cpu_stop(void);
|
||||||
|
int usb_cpu_init_fail(void);
|
||||||
|
|
||||||
static int cc_to_error[16] = {
|
static int cc_to_error[16] = {
|
||||||
|
|
||||||
|
@ -14,6 +14,4 @@ int g_dnl_bind_fixup(struct usb_device_descriptor *);
|
|||||||
int g_dnl_register(const char *s);
|
int g_dnl_register(const char *s);
|
||||||
void g_dnl_unregister(void);
|
void g_dnl_unregister(void);
|
||||||
|
|
||||||
/* USB initialization declaration - board specific */
|
|
||||||
void board_usb_init(void);
|
|
||||||
#endif /* __G_DOWNLOAD_H_ */
|
#endif /* __G_DOWNLOAD_H_ */
|
||||||
|
@ -167,10 +167,36 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
|
|||||||
|
|
||||||
extern void udc_disconnect(void);
|
extern void udc_disconnect(void);
|
||||||
|
|
||||||
#else
|
|
||||||
#error USB Lowlevel not defined
|
|
||||||
#endif
|
#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
|
#ifdef CONFIG_USB_STORAGE
|
||||||
|
|
||||||
#define USB_MAX_STOR_DEV 5
|
#define USB_MAX_STOR_DEV 5
|
||||||
|
@ -31,14 +31,11 @@ struct ums_board_info {
|
|||||||
struct ums_device ums_dev;
|
struct ums_device ums_dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void board_usb_init(void);
|
int fsg_init(struct ums_board_info *);
|
||||||
|
void fsg_cleanup(void);
|
||||||
extern int fsg_init(struct ums_board_info *);
|
struct ums_board_info *board_ums_init(unsigned int, unsigned int,
|
||||||
extern void fsg_cleanup(void);
|
unsigned int);
|
||||||
extern struct ums_board_info *board_ums_init(unsigned int,
|
int fsg_main_thread(void *);
|
||||||
unsigned int, unsigned int);
|
|
||||||
extern int usb_gadget_handle_interrupts(void);
|
|
||||||
extern int fsg_main_thread(void *);
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_GADGET_MASS_STORAGE
|
#ifdef CONFIG_USB_GADGET_MASS_STORAGE
|
||||||
int fsg_add(struct usb_configuration *c);
|
int fsg_add(struct usb_configuration *c);
|
||||||
|
Loading…
Reference in New Issue
Block a user