USB device support on OMAP2
Subsystems (5)
PATCH 1/1 USB device support on OMAP2
[PATCH] USB device support on OMAP2
Enable USB device on OMAP2 platform. Only usb0 is used for device without DMA.
Signed-off-by Kyungmin Park <[email protected]>
--
arch/arm/mach-omap2/Kconfig +1 -0
@@ -25,3 +25,4 @@ config MACH_OMAP_H4 config MACH_OMAP_APOLLON bool "OMAP 2420 Apollon board" depends on ARCH_OMAP2 && ARCH_OMAP24XX + select ARCH_OMAP_OTG
arch/arm/mach-omap2/board-apollon.c +18 -3
@@ -234,6 +234,13 @@ static struct omap_mmc_config apollon_mm }, }; +static struct omap_usb_config apollon_usb_config__initdata = { + .register_dev =1 , + .hmc_mode =0x14 ,/* 0:dev 1:host1 2: disable */ + + .pins[0 ] =6 , +}; +static struct omap_lcd_config apollon_lcd_config__initdata = { .ctrl_name ="internal" , };
@@ -241,6 +248,7 @@ static struct omap_lcd_config apollon_lcstatic struct omap_board_config_kernel apollon_config[] = { {OMAP_TAG_UART , &apollon_uart_config }, {OMAP_TAG_MMC , &apollon_mmc_config }, + {OMAP_TAG_USB , &apollon_usb_config }, {OMAP_TAG_LCD , &apollon_lcd_config }, };
@@ -292,28 +300,35 @@ static void __init apollon_sw_init(void)omap_request_gpio (SW_DOWN_GPIO58 );omap_set_gpio_direction (SW_DOWN_GPIO58 ,1 ); -set_irq_type (OMAP_GPIO_IRQ (SW_ENTER_GPIO16 ),IRQT_RISING );if (request_irq (OMAP_GPIO_IRQ (SW_ENTER_GPIO16 ), &apollon_sw_interrupt,IRQF_SHARED ,"enter sw" , &apollon_sw_interrupt))return ; -set_irq_type (OMAP_GPIO_IRQ (SW_UP_GPIO17 ),IRQT_RISING );if (request_irq (OMAP_GPIO_IRQ (SW_UP_GPIO17 ), &apollon_sw_interrupt,IRQF_SHARED ,"up sw" , &apollon_sw_interrupt))return ; -set_irq_type (OMAP_GPIO_IRQ (SW_DOWN_GPIO58 ),IRQT_RISING );if (request_irq (OMAP_GPIO_IRQ (SW_DOWN_GPIO58 ), &apollon_sw_interrupt,IRQF_SHARED ,"down sw" , &apollon_sw_interrupt))return ; } +static void __init apollon_usb_init (void ) +{ +/* USB device */ +/* DEVICE_SUSPEND */ +omap_cfg_reg (P21_242X_GPIO12 ); +omap_set_gpio_direction (12 ,0 ); +omap_set_gpio_dataout (12 ,0 ); +} +static void __init omap_apollon_init (void ) {apollon_led_init ();apollon_sw_init ();apollon_flash_init (); +apollon_usb_init ();/* REVISIT: where's the correct place */ omap_cfg_reg (W19_24XX_SYS_NIRQ );
arch/arm/mach-omap2/mux.c +10 -0
@@ -66,6 +66,7 @@ MUX_CFG_24XX("V15_24XX_MCBSP2_DX", 0x127/* 24xx GPIO */ MUX_CFG_24XX("M21_242X_GPIO11", 0x0c9, 3, 1, 1, 1) +MUX_CFG_24XX("P21_242X_GPIO12", 0x0ca, 3, 0, 0, 1) MUX_CFG_24XX("AA10_242X_GPIO13", 0x0e5, 3, 0, 0, 1) MUX_CFG_24XX("AA6_242X_GPIO14", 0x0e6, 3, 0, 0, 1)MUX_CFG_24XX ("AA4_242X_GPIO15" ,0x0e7 ,3 ,0 ,0 ,1 )
@@ -118,6 +119,15 @@ MUX_CFG_24XX("E18_24XX_MMC_DAT_DIR3", 0x MUX_CFG_24XX("G18_24XX_MMC_CMD_DIR", 0x0fd, 0, 0, 0, 1)MUX_CFG_24XX ("H15_24XX_MMC_CLKI" ,0x0fe ,0 ,0 ,0 ,1 ) +/* USB */ +MUX_CFG_24XX("J20_24XX_USB0_PUEN", 0x11d, 0, 0, 0, 1) +MUX_CFG_24XX("J19_24XX_USB0_VP", 0x11e, 0, 0, 0, 1) +MUX_CFG_24XX("K20_24XX_USB0_VM", 0x11f, 0, 0, 0, 1) +MUX_CFG_24XX("J18_24XX_USB0_RCV", 0x120, 0, 0, 0, 1) +MUX_CFG_24XX("K19_24XX_USB0_TXEN", 0x121, 0, 0, 0, 1) +MUX_CFG_24XX("J14_24XX_USB0_SE0", 0x122, 0, 0, 0, 1) +MUX_CFG_24XX ("K18_24XX_USB0_DAT" ,0x113 ,0 ,0 ,0 ,1 ) + /* Keypad GPIO*/ MUX_CFG_24XX("T19_24XX_KBR0", 0x106, 3, 1, 1, 1)MUX_CFG_24XX ("R19_24XX_KBR1" ,0x107 ,3 ,1 ,1 ,1 )
arch/arm/plat-omap/usb.c +78 -24
196 lines not on this page · raw message
drivers/usb/gadget/Kconfig +1 -1
@@ -157,7 +157,7 @@ config USB_LH7A40X config USB_GADGET_OMAP boolean "OMAP USB Device Controller" - depends on ARCH_OMAP1 + depends on ARCH_OMAP select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 help Many Texas Instruments OMAP processors have flexible full
drivers/usb/gadget/omap_udc.c +51 -10
117 lines not on this page · raw message
include/asm-arm/arch-omap/irqs.h +6 -0
@@ -262,6 +262,12 @@#define INT_24XX_UART1_IRQ 72#define INT_24XX_UART2_IRQ 73#define INT_24XX_UART3_IRQ 74 +#define INT_24XX_USB_IRQ_GEN 75 +#define INT_24XX_USB_IRQ_NISO 76 +#define INT_24XX_USB_IRQ_ISO 77 +#define INT_24XX_USB_IRQ_HGEN 78 +#define INT_24XX_USB_IRQ_HSOF 79 +#define INT_24XX_USB_IRQ_OTG 80#define INT_24XX_MMC_IRQ 83/* Max. 128 level 2 IRQs (OMAP1610), 192 GPIOs (OMAP730) and
include/asm-arm/arch-omap/mux.h +10 -0
@@ -435,6 +435,7 @@ enum omap24xx_index {/* 24xx GPIO */ M21_242X_GPIO11 , +P21_242X_GPIO12 ,AA10_242X_GPIO13 ,AA6_242X_GPIO14 , AA4_242X_GPIO15,
@@ -486,6 +487,15 @@ enum omap24xx_index {G18_24XX_MMC_CMD_DIR ,H15_24XX_MMC_CLKI , +/* USB */ +J20_24XX_USB0_PUEN , +J19_24XX_USB0_VP , +K20_24XX_USB0_VM , +J18_24XX_USB0_RCV , +K19_24XX_USB0_TXEN , +J14_24XX_USB0_SE0 , +K18_24XX_USB0_DAT , +/* Keypad GPIO*/ T19_24XX_KBR0 , R19_24XX_KBR1,
include/asm-arm/arch-omap/usb.h +32 -5
@@ -7,9 +7,27 @@/*-------------------------------------------------------------------------*/ -#define OTG_BASE 0xfffb0400 -#define UDC_BASE 0xfffb4000 -#define OMAP_OHCI_BASE 0xfffba000 +#define OMAP1_OTG_BASE 0xfffb0400 +#define OMAP1_UDC_BASE 0xfffb4000 +#define OMAP1_OHCI_BASE 0xfffba000 + +#define OMAP2_OHCI_BASE 0x4805e000 +#define OMAP2_UDC_BASE 0x4805e200 +#define OMAP2_OTG_BASE 0x4805e300 + +#ifdef CONFIG_ARCH_OMAP1 + +#define OTG_BASE OMAP1_OTG_BASE +#define UDC_BASE OMAP1_UDC_BASE +#define OMAP_OHCI_BASE OMAP1_OHCI_BASE + +#else + +#define OTG_BASE OMAP2_OTG_BASE +#define UDC_BASE OMAP2_UDC_BASE +#define OMAP_OHCI_BASE OMAP2_OHCI_BASE + +#endif /*-------------------------------------------------------------------------*/
@@ -103,6 +121,7 @@/*-------------------------------------------------------------------------*/ +/* OMAP1 */ #define USB_TRANSCEIVER_CTRL_REG __REG32(0xfffe1000 + 0x0064)# define CONF_USB2_UNI_R (1 << 8)# define CONF_USB1_UNI_R (1 << 7)
@@ -111,7 +130,15 @@# define CONF_USB_PWRDN_DM_R (1 << 2)# define CONF_USB_PWRDN_DP_R (1 << 1) - - +/* OMAP2 */ +#define CONTROL_DEVCONF_REG __REG32(0x48000000 + 0x0274) +# define UNIDIR 0x0 +# define UNIDIR_TTL 0x1 +# define BIDIR 0x2 +# define BIDIR_TTL 0x3 +# define USBT0WRMODEI (x) ((x) << 22) +# define USBT1WRMODEI (x) ((x) << 20) +# define USBT2WRMODEI (x) ((x) << 18) +# define USB0PUENACTLOI (1 << 16)#endif /* __ASM_ARCH_OMAP_USB_H */