提交 1c50e672 编写于 作者: F Fabio Estevam 提交者: Sascha Hauer

ARM: mx3/mx31_3ds: Add support for OTG host mode

Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: NSascha Hauer <s.hauer@pengutronix.de>
上级 460d30a3
...@@ -96,8 +96,10 @@ config MACH_MX31_3DS ...@@ -96,8 +96,10 @@ config MACH_MX31_3DS
select IMX_HAVE_PLATFORM_IMX2_WDT select IMX_HAVE_PLATFORM_IMX2_WDT
select IMX_HAVE_PLATFORM_IMX_KEYPAD select IMX_HAVE_PLATFORM_IMX_KEYPAD
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_EHCI
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_SPI_IMX select IMX_HAVE_PLATFORM_SPI_IMX
select MXC_ULPI if USB_ULPI
help help
Include support for MX31PDK (3DS) platform. This includes specific Include support for MX31PDK (3DS) platform. This includes specific
configurations for the board and its peripherals. configurations for the board and its peripherals.
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#include <linux/mfd/mc13783.h> #include <linux/mfd/mc13783.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/usb/otg.h>
#include <linux/usb/ulpi.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -32,6 +34,7 @@ ...@@ -32,6 +34,7 @@
#include <mach/common.h> #include <mach/common.h>
#include <mach/iomux-mx3.h> #include <mach/iomux-mx3.h>
#include <mach/3ds_debugboard.h> #include <mach/3ds_debugboard.h>
#include <mach/ulpi.h>
#include "devices-imx31.h" #include "devices-imx31.h"
#include "devices.h" #include "devices.h"
...@@ -212,11 +215,33 @@ static int mx31_3ds_usbotg_init(void) ...@@ -212,11 +215,33 @@ static int mx31_3ds_usbotg_init(void)
return err; return err;
} }
#if defined(CONFIG_USB_ULPI)
static struct mxc_usbh_platform_data otg_pdata __initdata = {
.portsc = MXC_EHCI_MODE_ULPI,
.flags = MXC_EHCI_POWER_PINS_ENABLED,
};
#endif
static const struct fsl_usb2_platform_data usbotg_pdata __initconst = { static const struct fsl_usb2_platform_data usbotg_pdata __initconst = {
.operating_mode = FSL_USB2_DR_DEVICE, .operating_mode = FSL_USB2_DR_DEVICE,
.phy_mode = FSL_USB2_PHY_ULPI, .phy_mode = FSL_USB2_PHY_ULPI,
}; };
static int otg_mode_host;
static int __init mx31_3ds_otg_mode(char *options)
{
if (!strcmp(options, "host"))
otg_mode_host = 1;
else if (!strcmp(options, "device"))
otg_mode_host = 0;
else
pr_info("otg_mode neither \"host\" nor \"device\". "
"Defaulting to device\n");
return 0;
}
__setup("otg_mode=", mx31_3ds_otg_mode);
static const struct imxuart_platform_data uart_pdata __initconst = { static const struct imxuart_platform_data uart_pdata __initconst = {
.flags = IMXUART_HAVE_RTSCTS, .flags = IMXUART_HAVE_RTSCTS,
}; };
...@@ -247,7 +272,16 @@ static void __init mxc_board_init(void) ...@@ -247,7 +272,16 @@ static void __init mxc_board_init(void)
imx31_add_imx_keypad(&mx31_3ds_keymap_data); imx31_add_imx_keypad(&mx31_3ds_keymap_data);
mx31_3ds_usbotg_init(); mx31_3ds_usbotg_init();
imx31_add_fsl_usb2_udc(&usbotg_pdata); #if defined(CONFIG_USB_ULPI)
if (otg_mode_host) {
otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
imx31_add_mxc_ehci_otg(&otg_pdata);
}
#endif
if (!otg_mode_host)
imx31_add_fsl_usb2_udc(&usbotg_pdata);
if (mxc_expio_init(MX31_CS5_BASE_ADDR, EXPIO_PARENT_INT)) if (mxc_expio_init(MX31_CS5_BASE_ADDR, EXPIO_PARENT_INT))
printk(KERN_WARNING "Init of the debug board failed, all " printk(KERN_WARNING "Init of the debug board failed, all "
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册