Commit 9e1dde33 authored by Uwe Kleine-König's avatar Uwe Kleine-König

ARM: mx3: dynamically allocate fsl-usb2-udc devices

While adapting the #defines for this I noticed that the offset
used for USB HS on i.MX35 differs from the documented offset.
I kept the working offset and commented that the documentation
differs.
Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
parent fed3d35b
...@@ -50,6 +50,7 @@ config MACH_MX31ADS_WM1133_EV1 ...@@ -50,6 +50,7 @@ config MACH_MX31ADS_WM1133_EV1
config MACH_PCM037 config MACH_PCM037
bool "Support Phytec pcm037 (i.MX31) platforms" bool "Support Phytec pcm037 (i.MX31) platforms"
select SOC_IMX31 select SOC_IMX31
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC select IMX_HAVE_PLATFORM_MXC_MMC
...@@ -85,6 +86,7 @@ config MACH_MX31_3DS ...@@ -85,6 +86,7 @@ config MACH_MX31_3DS
bool "Support MX31PDK (3DS)" bool "Support MX31PDK (3DS)"
select SOC_IMX31 select SOC_IMX31
select MXC_DEBUG_BOARD select MXC_DEBUG_BOARD
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_SPI_IMX select IMX_HAVE_PLATFORM_SPI_IMX
...@@ -104,6 +106,7 @@ config MACH_MX31_3DS_MXC_NAND_USE_BBT ...@@ -104,6 +106,7 @@ config MACH_MX31_3DS_MXC_NAND_USE_BBT
config MACH_MX31MOBOARD config MACH_MX31MOBOARD
bool "Support mx31moboard platforms (EPFL Mobots group)" bool "Support mx31moboard platforms (EPFL Mobots group)"
select SOC_IMX31 select SOC_IMX31
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC select IMX_HAVE_PLATFORM_MXC_MMC
...@@ -135,6 +138,7 @@ config MACH_QONG ...@@ -135,6 +138,7 @@ config MACH_QONG
config MACH_PCM043 config MACH_PCM043
bool "Support Phytec pcm043 (i.MX35) platforms" bool "Support Phytec pcm043 (i.MX35) platforms"
select SOC_IMX35 select SOC_IMX35
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_SSI select IMX_HAVE_PLATFORM_IMX_SSI
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
...@@ -162,10 +166,10 @@ config MACH_MX35_3DS ...@@ -162,10 +166,10 @@ config MACH_MX35_3DS
bool "Support MX35PDK platform" bool "Support MX35PDK platform"
select SOC_IMX35 select SOC_IMX35
select MXC_DEBUG_BOARD select MXC_DEBUG_BOARD
select IMX_HAVE_PLATFORM_ESDHC
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_ESDHC
default n
help help
Include support for MX35PDK platform. This includes specific Include support for MX35PDK platform. This includes specific
configurations for the board and its peripherals. configurations for the board and its peripherals.
...@@ -181,6 +185,7 @@ config MACH_KZM_ARM11_01 ...@@ -181,6 +185,7 @@ config MACH_KZM_ARM11_01
config MACH_EUKREA_CPUIMX35 config MACH_EUKREA_CPUIMX35
bool "Support Eukrea CPUIMX35 Platform" bool "Support Eukrea CPUIMX35 Platform"
select SOC_IMX35 select SOC_IMX35
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX_UART select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_IMX_I2C select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_MXC_NAND select IMX_HAVE_PLATFORM_MXC_NAND
......
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
#include <mach/mx31.h> #include <mach/mx31.h>
#include <mach/devices-common.h> #include <mach/devices-common.h>
extern const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data __initconst;
#define imx31_add_fsl_usb2_udc(pdata) \
imx_add_fsl_usb2_udc(&imx31_fsl_usb2_udc_data, pdata)
extern const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst; extern const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst;
#define imx31_add_imx_i2c(id, pdata) \ #define imx31_add_imx_i2c(id, pdata) \
imx_add_imx_i2c(&imx31_imx_i2c_data[id], pdata) imx_add_imx_i2c(&imx31_imx_i2c_data[id], pdata)
......
...@@ -13,6 +13,10 @@ extern const struct imx_fec_data imx35_fec_data __initconst; ...@@ -13,6 +13,10 @@ extern const struct imx_fec_data imx35_fec_data __initconst;
#define imx35_add_fec(pdata) \ #define imx35_add_fec(pdata) \
imx_add_fec(&imx35_fec_data, pdata) imx_add_fec(&imx35_fec_data, pdata)
extern const struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data __initconst;
#define imx35_add_fsl_usb2_udc(pdata) \
imx_add_fsl_usb2_udc(&imx35_fsl_usb2_udc_data, pdata)
extern const struct imx_flexcan_data imx35_flexcan_data[] __initconst; extern const struct imx_flexcan_data imx35_flexcan_data[] __initconst;
#define imx35_add_flexcan(id, pdata) \ #define imx35_add_flexcan(id, pdata) \
imx_add_flexcan(&imx35_flexcan_data[id], pdata) imx_add_flexcan(&imx35_flexcan_data[id], pdata)
......
...@@ -97,30 +97,18 @@ struct platform_device mx3_camera = { ...@@ -97,30 +97,18 @@ struct platform_device mx3_camera = {
static struct resource otg_resources[] = { static struct resource otg_resources[] = {
{ {
.start = MX31_OTG_BASE_ADDR, .start = MX31_USB_OTG_BASE_ADDR,
.end = MX31_OTG_BASE_ADDR + 0x1ff, .end = MX31_USB_OTG_BASE_ADDR + 0x1ff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, { }, {
.start = MX31_INT_USB3, .start = MX31_INT_USB_OTG,
.end = MX31_INT_USB3, .end = MX31_INT_USB_OTG,
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
}; };
static u64 otg_dmamask = DMA_BIT_MASK(32); static u64 otg_dmamask = DMA_BIT_MASK(32);
/* OTG gadget device */
struct platform_device mxc_otg_udc_device = {
.name = "fsl-usb2-udc",
.id = -1,
.dev = {
.dma_mask = &otg_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32),
},
.resource = otg_resources,
.num_resources = ARRAY_SIZE(otg_resources),
};
/* OTG host */ /* OTG host */
struct platform_device mxc_otg_host = { struct platform_device mxc_otg_host = {
.name = "mxc-ehci", .name = "mxc-ehci",
...@@ -139,12 +127,12 @@ static u64 usbh1_dmamask = ~(u32)0; ...@@ -139,12 +127,12 @@ static u64 usbh1_dmamask = ~(u32)0;
static struct resource mxc_usbh1_resources[] = { static struct resource mxc_usbh1_resources[] = {
{ {
.start = MX31_OTG_BASE_ADDR + 0x200, .start = MX31_USB_HS1_BASE_ADDR,
.end = MX31_OTG_BASE_ADDR + 0x3ff, .end = MX31_USB_HS1_BASE_ADDR + 0x1ff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, { }, {
.start = MX31_INT_USB1, .start = MX31_INT_USB_HS1,
.end = MX31_INT_USB1, .end = MX31_INT_USB_HS1,
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
}; };
...@@ -166,12 +154,12 @@ static u64 usbh2_dmamask = ~(u32)0; ...@@ -166,12 +154,12 @@ static u64 usbh2_dmamask = ~(u32)0;
static struct resource mxc_usbh2_resources[] = { static struct resource mxc_usbh2_resources[] = {
{ {
.start = MX31_OTG_BASE_ADDR + 0x400, .start = MX31_USB_HS2_BASE_ADDR,
.end = MX31_OTG_BASE_ADDR + 0x5ff, .end = MX31_USB_HS2_BASE_ADDR + 0x1ff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, { }, {
.start = MX31_INT_USB2, .start = MX31_INT_USB_HS2,
.end = MX31_INT_USB2, .end = MX31_INT_USB_HS2,
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
}; };
...@@ -249,14 +237,14 @@ static int __init mx3_devices_init(void) ...@@ -249,14 +237,14 @@ static int __init mx3_devices_init(void)
#endif #endif
#if defined(CONFIG_ARCH_MX35) #if defined(CONFIG_ARCH_MX35)
if (cpu_is_mx35()) { if (cpu_is_mx35()) {
otg_resources[0].start = MX35_OTG_BASE_ADDR; otg_resources[0].start = MX35_USB_OTG_BASE_ADDR;
otg_resources[0].end = MX35_OTG_BASE_ADDR + 0x1ff; otg_resources[0].end = MX35_USB_OTG_BASE_ADDR + 0x1ff;
otg_resources[1].start = MX35_INT_USBOTG; otg_resources[1].start = MX35_INT_USB_OTG;
otg_resources[1].end = MX35_INT_USBOTG; otg_resources[1].end = MX35_INT_USB_OTG;
mxc_usbh1_resources[0].start = MX35_OTG_BASE_ADDR + 0x400; mxc_usbh1_resources[0].start = MX35_USB_HS_BASE_ADDR;
mxc_usbh1_resources[0].end = MX35_OTG_BASE_ADDR + 0x5ff; mxc_usbh1_resources[0].end = MX35_USB_HS_BASE_ADDR + 0x1ff;
mxc_usbh1_resources[1].start = MX35_INT_USBHS; mxc_usbh1_resources[1].start = MX35_INT_USB_HS;
mxc_usbh1_resources[1].end = MX35_INT_USBHS; mxc_usbh1_resources[1].end = MX35_INT_USB_HS;
imx_wdt_resources[0].start = MX35_WDOG_BASE_ADDR; imx_wdt_resources[0].start = MX35_WDOG_BASE_ADDR;
imx_wdt_resources[0].end = MX35_WDOG_BASE_ADDR + 0x3fff; imx_wdt_resources[0].end = MX35_WDOG_BASE_ADDR + 0x3fff;
} }
......
extern struct platform_device mx3_ipu; extern struct platform_device mx3_ipu;
extern struct platform_device mx3_fb; extern struct platform_device mx3_fb;
extern struct platform_device mx3_camera; extern struct platform_device mx3_camera;
extern struct platform_device mxc_otg_udc_device;
extern struct platform_device mxc_otg_host; extern struct platform_device mxc_otg_host;
extern struct platform_device mxc_usbh1; extern struct platform_device mxc_usbh1;
extern struct platform_device mxc_usbh2; extern struct platform_device mxc_usbh2;
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <linux/i2c/tsc2007.h> #include <linux/i2c/tsc2007.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
#include <linux/fsl_devices.h>
#include <linux/i2c-gpio.h> #include <linux/i2c-gpio.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -128,7 +127,7 @@ static struct mxc_usbh_platform_data __maybe_unused usbh1_pdata = { ...@@ -128,7 +127,7 @@ static struct mxc_usbh_platform_data __maybe_unused usbh1_pdata = {
MXC_EHCI_IPPUE_DOWN, MXC_EHCI_IPPUE_DOWN,
}; };
static struct fsl_usb2_platform_data otg_device_pdata = { static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
.operating_mode = FSL_USB2_DR_DEVICE, .operating_mode = FSL_USB2_DR_DEVICE,
.phy_mode = FSL_USB2_PHY_UTMI, .phy_mode = FSL_USB2_PHY_UTMI,
.workaround = FLS_USB2_WORKAROUND_ENGCM09152, .workaround = FLS_USB2_WORKAROUND_ENGCM09152,
...@@ -170,7 +169,7 @@ static void __init mxc_board_init(void) ...@@ -170,7 +169,7 @@ static void __init mxc_board_init(void)
if (otg_mode_host) if (otg_mode_host)
mxc_register_device(&mxc_otg_host, &otg_pdata); mxc_register_device(&mxc_otg_host, &otg_pdata);
else else
mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata); imx35_add_fsl_usb2_udc(&otg_device_pdata);
mxc_register_device(&mxc_usbh1, &usbh1_pdata); mxc_register_device(&mxc_usbh1, &usbh1_pdata);
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
#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/fsl_devices.h>
#include <linux/input/matrix_keypad.h> #include <linux/input/matrix_keypad.h>
#include <mach/hardware.h> #include <mach/hardware.h>
...@@ -214,7 +213,7 @@ static int mx31_3ds_usbotg_init(void) ...@@ -214,7 +213,7 @@ static int mx31_3ds_usbotg_init(void)
return err; return err;
} }
static struct fsl_usb2_platform_data usbotg_pdata = { 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,
}; };
...@@ -249,7 +248,7 @@ static void __init mxc_board_init(void) ...@@ -249,7 +248,7 @@ static void __init mxc_board_init(void)
mxc_register_device(&imx_kpp_device, &mx31_3ds_keymap_data); mxc_register_device(&imx_kpp_device, &mx31_3ds_keymap_data);
mx31_3ds_usbotg_init(); mx31_3ds_usbotg_init();
mxc_register_device(&mxc_otg_udc_device, &usbotg_pdata); 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 "
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/memory.h> #include <linux/memory.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/fsl_devices.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
...@@ -122,7 +121,7 @@ static struct pad_desc mx35pdk_pads[] = { ...@@ -122,7 +121,7 @@ static struct pad_desc mx35pdk_pads[] = {
}; };
/* OTG config */ /* OTG config */
static struct fsl_usb2_platform_data usb_otg_pdata = { static const struct fsl_usb2_platform_data usb_otg_pdata __initconst = {
.operating_mode = FSL_USB2_DR_DEVICE, .operating_mode = FSL_USB2_DR_DEVICE,
.phy_mode = FSL_USB2_PHY_UTMI_WIDE, .phy_mode = FSL_USB2_PHY_UTMI_WIDE,
}; };
...@@ -146,7 +145,7 @@ static void __init mxc_board_init(void) ...@@ -146,7 +145,7 @@ static void __init mxc_board_init(void)
imx35_add_imx_uart0(&uart_pdata); imx35_add_imx_uart0(&uart_pdata);
mxc_register_device(&mxc_otg_udc_device, &usb_otg_pdata); imx35_add_fsl_usb2_udc(&usb_otg_pdata);
mxc_register_device(&mxc_usbh1, &usb_host_pdata); mxc_register_device(&mxc_usbh1, &usb_host_pdata);
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/fsl_devices.h>
#include <linux/can/platform/sja1000.h> #include <linux/can/platform/sja1000.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
...@@ -550,7 +549,7 @@ static struct mxc_usbh_platform_data usbh2_pdata = { ...@@ -550,7 +549,7 @@ static struct mxc_usbh_platform_data usbh2_pdata = {
}; };
#endif #endif
static struct fsl_usb2_platform_data otg_device_pdata = { static const struct fsl_usb2_platform_data otg_device_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,
}; };
...@@ -664,7 +663,7 @@ static void __init mxc_board_init(void) ...@@ -664,7 +663,7 @@ static void __init mxc_board_init(void)
mxc_register_device(&mxc_usbh2, &usbh2_pdata); mxc_register_device(&mxc_usbh2, &usbh2_pdata);
#endif #endif
if (!otg_mode_host) if (!otg_mode_host)
mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata); imx31_add_fsl_usb2_udc(&otg_device_pdata);
} }
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/i2c/at24.h> #include <linux/i2c/at24.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
#include <linux/fsl_devices.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -323,7 +322,7 @@ static struct mxc_usbh_platform_data usbh1_pdata = { ...@@ -323,7 +322,7 @@ static struct mxc_usbh_platform_data usbh1_pdata = {
}; };
#endif #endif
static struct fsl_usb2_platform_data otg_device_pdata = { static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
.operating_mode = FSL_USB2_DR_DEVICE, .operating_mode = FSL_USB2_DR_DEVICE,
.phy_mode = FSL_USB2_PHY_UTMI, .phy_mode = FSL_USB2_PHY_UTMI,
}; };
...@@ -392,7 +391,7 @@ static void __init mxc_board_init(void) ...@@ -392,7 +391,7 @@ static void __init mxc_board_init(void)
mxc_register_device(&mxc_usbh1, &usbh1_pdata); mxc_register_device(&mxc_usbh1, &usbh1_pdata);
#endif #endif
if (!otg_mode_host) if (!otg_mode_host)
mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata); imx35_add_fsl_usb2_udc(&otg_device_pdata);
imx35_add_flexcan1(NULL); imx35_add_flexcan1(NULL);
imx35_add_esdhc(0, NULL); imx35_add_esdhc(0, NULL);
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/fsl_devices.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
...@@ -210,7 +209,7 @@ static int __init devboard_usbh1_init(void) ...@@ -210,7 +209,7 @@ static int __init devboard_usbh1_init(void)
} }
static struct fsl_usb2_platform_data usb_pdata = { static const struct fsl_usb2_platform_data usb_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,
}; };
...@@ -231,7 +230,7 @@ void __init mx31moboard_devboard_init(void) ...@@ -231,7 +230,7 @@ void __init mx31moboard_devboard_init(void)
devboard_init_sel_gpios(); devboard_init_sel_gpios();
mxc_register_device(&mxc_otg_udc_device, &usb_pdata); imx31_add_fsl_usb2_udc(&usb_pdata);
devboard_usbh1_init(); devboard_usbh1_init();
} }
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/fsl_devices.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
...@@ -326,7 +325,7 @@ static int __init marxbot_usbh1_init(void) ...@@ -326,7 +325,7 @@ static int __init marxbot_usbh1_init(void)
return mxc_register_device(&mxc_usbh1, &usbh1_pdata); return mxc_register_device(&mxc_usbh1, &usbh1_pdata);
} }
static struct fsl_usb2_platform_data usb_pdata = { static const struct fsl_usb2_platform_data usb_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,
}; };
...@@ -358,7 +357,7 @@ void __init mx31moboard_marxbot_init(void) ...@@ -358,7 +357,7 @@ void __init mx31moboard_marxbot_init(void)
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_LCS0)); gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_LCS0));
gpio_export(IOMUX_TO_GPIO(MX31_PIN_LCS0), false); gpio_export(IOMUX_TO_GPIO(MX31_PIN_LCS0), false);
mxc_register_device(&mxc_otg_udc_device, &usb_pdata); imx31_add_fsl_usb2_udc(&usb_pdata);
marxbot_usbh1_init(); marxbot_usbh1_init();
} }
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/fsl_devices.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
...@@ -119,7 +118,7 @@ static int __init smartbot_cam_init(void) ...@@ -119,7 +118,7 @@ static int __init smartbot_cam_init(void)
return 0; return 0;
} }
static struct fsl_usb2_platform_data usb_pdata = { static const struct fsl_usb2_platform_data usb_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,
}; };
...@@ -183,7 +182,7 @@ void __init mx31moboard_smartbot_init(int board) ...@@ -183,7 +182,7 @@ void __init mx31moboard_smartbot_init(int board)
switch (board) { switch (board) {
case MX31SMARTBOT: case MX31SMARTBOT:
mxc_register_device(&mxc_otg_udc_device, &usb_pdata); imx31_add_fsl_usb2_udc(&usb_pdata);
break; break;
case MX31EYEBOT: case MX31EYEBOT:
smartbot_otg_host_init(); smartbot_otg_host_init();
......
...@@ -25,6 +25,16 @@ const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst = ...@@ -25,6 +25,16 @@ const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst =
imx_fsl_usb2_udc_data_entry_single(MX27); imx_fsl_usb2_udc_data_entry_single(MX27);
#endif /* ifdef CONFIG_SOC_IMX27 */ #endif /* ifdef CONFIG_SOC_IMX27 */
#ifdef CONFIG_SOC_IMX31
const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data __initconst =
imx_fsl_usb2_udc_data_entry_single(MX31);
#endif /* ifdef CONFIG_SOC_IMX31 */
#ifdef CONFIG_SOC_IMX35
const struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data __initconst =
imx_fsl_usb2_udc_data_entry_single(MX35);
#endif /* ifdef CONFIG_SOC_IMX35 */
struct platform_device *__init imx_add_fsl_usb2_udc( struct platform_device *__init imx_add_fsl_usb2_udc(
const struct imx_fsl_usb2_udc_data *data, const struct imx_fsl_usb2_udc_data *data,
const struct fsl_usb2_platform_data *pdata) const struct fsl_usb2_platform_data *pdata)
......
...@@ -24,7 +24,10 @@ ...@@ -24,7 +24,10 @@
#define MX31_ECT_CTIO_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x18000) #define MX31_ECT_CTIO_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x18000)
#define MX31_I2C1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x80000) #define MX31_I2C1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x80000)
#define MX31_I2C3_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x84000) #define MX31_I2C3_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x84000)
#define MX31_OTG_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x88000) #define MX31_USB_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x88000)
#define MX31_USB_OTG_BASE_ADDR (MX31_USB_BASE_ADDR + 0x0000)
#define MX31_USB_HS1_BASE_ADDR (MX31_USB_BASE_ADDR + 0x0200)
#define MX31_USB_HS2_BASE_ADDR (MX31_USB_BASE_ADDR + 0x0400)
#define MX31_ATA_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x8c000) #define MX31_ATA_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x8c000)
#define MX31_UART1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x90000) #define MX31_UART1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x90000)
#define MX31_UART2_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x94000) #define MX31_UART2_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x94000)
...@@ -161,10 +164,9 @@ static inline void mx31_setup_weimcs(size_t cs, ...@@ -161,10 +164,9 @@ static inline void mx31_setup_weimcs(size_t cs,
#define MX31_INT_UART2 32 #define MX31_INT_UART2 32
#define MX31_INT_NFC 33 #define MX31_INT_NFC 33
#define MX31_INT_SDMA 34 #define MX31_INT_SDMA 34
#define MX31_INT_USB1 35 #define MX31_INT_USB_HS1 35
#define MX31_INT_USB2 36 #define MX31_INT_USB_HS2 36
#define MX31_INT_USB3 37 #define MX31_INT_USB_OTG 37
#define MX31_INT_USB4 38
#define MX31_INT_MSHC1 39 #define MX31_INT_MSHC1 39
#define MX31_INT_MSHC2 40 #define MX31_INT_MSHC2 40
#define MX31_INT_IPU_ERR 41 #define MX31_INT_IPU_ERR 41
......
...@@ -65,8 +65,14 @@ ...@@ -65,8 +65,14 @@
#define MX35_CAN2_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xe8000) #define MX35_CAN2_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xe8000)
#define MX35_RTIC_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xec000) #define MX35_RTIC_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xec000)
#define MX35_IIM_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xf0000) #define MX35_IIM_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xf0000)
#define MX35_USB_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xf4000)
#define MX35_OTG_BASE_ADDR 0x53ff4000 #define MX35_USB_OTG_BASE_ADDR (MX35_USB_BASE_ADDR + 0x0000)
/*
* The Reference Manual (IMX35RM, Rev. 2, 3/2009) claims an offset of 0x200 for
* HS. When host support was implemented only a preliminary document was
* available, which told 0x400. This works fine.
*/
#define MX35_USB_HS_BASE_ADDR (MX35_USB_BASE_ADDR + 0x0400)
#define MX35_ROMP_BASE_ADDR 0x60000000 #define MX35_ROMP_BASE_ADDR 0x60000000
#define MX35_ROMP_SIZE SZ_1M #define MX35_ROMP_SIZE SZ_1M
...@@ -143,8 +149,8 @@ ...@@ -143,8 +149,8 @@
#define MX35_INT_UART2 32 #define MX35_INT_UART2 32
#define MX35_INT_NFC 33 #define MX35_INT_NFC 33
#define MX35_INT_SDMA 34 #define MX35_INT_SDMA 34
#define MX35_INT_USBHS 35 #define MX35_INT_USB_HS 35
#define MX35_INT_USBOTG 37 #define MX35_INT_USB_OTG 37
#define MX35_INT_MSHC1 39 #define MX35_INT_MSHC1 39
#define MX35_INT_ESAI 40 #define MX35_INT_ESAI 40
#define MX35_INT_IPU_ERR 41 #define MX35_INT_IPU_ERR 41
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment