ARM: add USB device support to pcm037
Add OTG device definition and resources to i.MX31 and a pure USB device mode support to the pcm037 board. Signed-off-by: Guennadi Liakhovetski <lg@denx.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
bff0b53bd7
commit
eb05bbeb65
@ -17,6 +17,7 @@
|
|||||||
* Boston, MA 02110-1301, USA.
|
* Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
@ -349,6 +350,32 @@ struct platform_device mx3_fb = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct resource otg_resources[] = {
|
||||||
|
{
|
||||||
|
.start = OTG_BASE_ADDR,
|
||||||
|
.end = OTG_BASE_ADDR + 0x1ff,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
}, {
|
||||||
|
.start = MXC_INT_USB3,
|
||||||
|
.end = MXC_INT_USB3,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
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),
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_MX35
|
#ifdef CONFIG_ARCH_MX35
|
||||||
static struct resource mxc_fec_resources[] = {
|
static struct resource mxc_fec_resources[] = {
|
||||||
{
|
{
|
||||||
|
@ -14,3 +14,4 @@ extern struct platform_device mx3_fb;
|
|||||||
extern struct platform_device mxc_fec_device;
|
extern struct platform_device mxc_fec_device;
|
||||||
extern struct platform_device mxcsdhc_device0;
|
extern struct platform_device mxcsdhc_device0;
|
||||||
extern struct platform_device mxcsdhc_device1;
|
extern struct platform_device mxcsdhc_device1;
|
||||||
|
extern struct platform_device mxc_otg_udc_device;
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#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 <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
@ -131,6 +132,54 @@ static struct resource pcm037_flash_resource = {
|
|||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int usbotg_pins[] = {
|
||||||
|
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||||
|
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||||
|
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||||
|
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||||
|
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||||
|
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||||
|
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||||
|
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||||
|
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||||
|
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||||
|
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||||
|
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* USB OTG HS port */
|
||||||
|
static int __init gpio_usbotg_hs_activate(void)
|
||||||
|
{
|
||||||
|
int ret = mxc_iomux_setup_multiple_pins(usbotg_pins,
|
||||||
|
ARRAY_SIZE(usbotg_pins), "usbotg");
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
printk(KERN_ERR "Cannot set up OTG pins\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OTG config */
|
||||||
|
static struct fsl_usb2_platform_data usb_pdata = {
|
||||||
|
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||||
|
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device pcm037_flash = {
|
static struct platform_device pcm037_flash = {
|
||||||
.name = "physmap-flash",
|
.name = "physmap-flash",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
@ -345,6 +394,8 @@ static void __init mxc_board_init(void)
|
|||||||
mxc_register_device(&mxcsdhc_device0, &sdhc_pdata);
|
mxc_register_device(&mxcsdhc_device0, &sdhc_pdata);
|
||||||
mxc_register_device(&mx3_ipu, &mx3_ipu_data);
|
mxc_register_device(&mx3_ipu, &mx3_ipu_data);
|
||||||
mxc_register_device(&mx3_fb, &mx3fb_pdata);
|
mxc_register_device(&mx3_fb, &mx3fb_pdata);
|
||||||
|
if (!gpio_usbotg_hs_activate())
|
||||||
|
mxc_register_device(&mxc_otg_udc_device, &usb_pdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init pcm037_timer_init(void)
|
static void __init pcm037_timer_init(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user