diff options
-rw-r--r-- | arch/arm/configs/at91cap9adk_defconfig | 27 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91cap9_devices.c | 99 | ||||
-rw-r--r-- | arch/arm/mach-at91/board-cap9adk.c | 9 | ||||
-rw-r--r-- | include/asm-arm/arch-at91/at91cap9.h | 2 | ||||
-rw-r--r-- | include/asm-arm/arch-at91/at91cap9_matrix.h | 5 |
5 files changed, 140 insertions, 2 deletions
diff --git a/arch/arm/configs/at91cap9adk_defconfig b/arch/arm/configs/at91cap9adk_defconfig index e32e73648129..39ca662c0793 100644 --- a/arch/arm/configs/at91cap9adk_defconfig +++ b/arch/arm/configs/at91cap9adk_defconfig | |||
@@ -907,7 +907,32 @@ CONFIG_USB_MON=y | |||
907 | # | 907 | # |
908 | # USB Gadget Support | 908 | # USB Gadget Support |
909 | # | 909 | # |
910 | # CONFIG_USB_GADGET is not set | 910 | CONFIG_USB_GADGET=y |
911 | # CONFIG_USB_GADGET_DEBUG is not set | ||
912 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
913 | CONFIG_USB_GADGET_SELECTED=y | ||
914 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
915 | CONFIG_USB_GADGET_ATMEL_USBA=y | ||
916 | CONFIG_USB_ATMEL_USBA=y | ||
917 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
918 | # CONFIG_USB_GADGET_NET2280 is not set | ||
919 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
920 | # CONFIG_USB_GADGET_M66592 is not set | ||
921 | # CONFIG_USB_GADGET_GOKU is not set | ||
922 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
923 | # CONFIG_USB_GADGET_OMAP is not set | ||
924 | # CONFIG_USB_GADGET_S3C2410 is not set | ||
925 | # CONFIG_USB_GADGET_AT91 is not set | ||
926 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
927 | CONFIG_USB_GADGET_DUALSPEED=y | ||
928 | # CONFIG_USB_ZERO is not set | ||
929 | CONFIG_USB_ETH=m | ||
930 | CONFIG_USB_ETH_RNDIS=y | ||
931 | # CONFIG_USB_GADGETFS is not set | ||
932 | CONFIG_USB_FILE_STORAGE=m | ||
933 | # CONFIG_USB_FILE_STORAGE_TEST is not set | ||
934 | # CONFIG_USB_G_SERIAL is not set | ||
935 | # CONFIG_USB_MIDI_GADGET is not set | ||
911 | CONFIG_MMC=y | 936 | CONFIG_MMC=y |
912 | # CONFIG_MMC_DEBUG is not set | 937 | # CONFIG_MMC_DEBUG is not set |
913 | # CONFIG_MMC_UNSAFE_RESUME is not set | 938 | # CONFIG_MMC_UNSAFE_RESUME is not set |
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index be526746e01e..747b9dedab88 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
@@ -84,6 +84,105 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {} | |||
84 | 84 | ||
85 | 85 | ||
86 | /* -------------------------------------------------------------------- | 86 | /* -------------------------------------------------------------------- |
87 | * USB HS Device (Gadget) | ||
88 | * -------------------------------------------------------------------- */ | ||
89 | |||
90 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | ||
91 | |||
92 | static struct resource usba_udc_resources[] = { | ||
93 | [0] = { | ||
94 | .start = AT91CAP9_UDPHS_FIFO, | ||
95 | .end = AT91CAP9_UDPHS_FIFO + SZ_512K - 1, | ||
96 | .flags = IORESOURCE_MEM, | ||
97 | }, | ||
98 | [1] = { | ||
99 | .start = AT91CAP9_BASE_UDPHS, | ||
100 | .end = AT91CAP9_BASE_UDPHS + SZ_1K - 1, | ||
101 | .flags = IORESOURCE_MEM, | ||
102 | }, | ||
103 | [2] = { | ||
104 | .start = AT91CAP9_ID_UDPHS, | ||
105 | .end = AT91CAP9_ID_UDPHS, | ||
106 | .flags = IORESOURCE_IRQ, | ||
107 | }, | ||
108 | }; | ||
109 | |||
110 | #define EP(nam, idx, maxpkt, maxbk, dma, isoc) \ | ||
111 | [idx] = { \ | ||
112 | .name = nam, \ | ||
113 | .index = idx, \ | ||
114 | .fifo_size = maxpkt, \ | ||
115 | .nr_banks = maxbk, \ | ||
116 | .can_dma = dma, \ | ||
117 | .can_isoc = isoc, \ | ||
118 | } | ||
119 | |||
120 | static struct usba_ep_data usba_udc_ep[] = { | ||
121 | EP("ep0", 0, 64, 1, 0, 0), | ||
122 | EP("ep1", 1, 1024, 3, 1, 1), | ||
123 | EP("ep2", 2, 1024, 3, 1, 1), | ||
124 | EP("ep3", 3, 1024, 2, 1, 1), | ||
125 | EP("ep4", 4, 1024, 2, 1, 1), | ||
126 | EP("ep5", 5, 1024, 2, 1, 0), | ||
127 | EP("ep6", 6, 1024, 2, 1, 0), | ||
128 | EP("ep7", 7, 1024, 2, 0, 0), | ||
129 | }; | ||
130 | |||
131 | #undef EP | ||
132 | |||
133 | /* | ||
134 | * pdata doesn't have room for any endpoints, so we need to | ||
135 | * append room for the ones we need right after it. | ||
136 | */ | ||
137 | static struct { | ||
138 | struct usba_platform_data pdata; | ||
139 | struct usba_ep_data ep[8]; | ||
140 | } usba_udc_data; | ||
141 | |||
142 | static struct platform_device at91_usba_udc_device = { | ||
143 | .name = "atmel_usba_udc", | ||
144 | .id = -1, | ||
145 | .dev = { | ||
146 | .platform_data = &usba_udc_data.pdata, | ||
147 | }, | ||
148 | .resource = usba_udc_resources, | ||
149 | .num_resources = ARRAY_SIZE(usba_udc_resources), | ||
150 | }; | ||
151 | |||
152 | void __init at91_add_device_usba(struct usba_platform_data *data) | ||
153 | { | ||
154 | at91_sys_write(AT91_MATRIX_UDPHS, AT91_MATRIX_SELECT_UDPHS | | ||
155 | AT91_MATRIX_UDPHS_BYPASS_LOCK); | ||
156 | |||
157 | /* | ||
158 | * Invalid pins are 0 on AT91, but the usba driver is shared | ||
159 | * with AVR32, which use negative values instead. Once/if | ||
160 | * gpio_is_valid() is ported to AT91, revisit this code. | ||
161 | */ | ||
162 | usba_udc_data.pdata.vbus_pin = -EINVAL; | ||
163 | usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep); | ||
164 | memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));; | ||
165 | |||
166 | if (data && data->vbus_pin > 0) { | ||
167 | at91_set_gpio_input(data->vbus_pin, 0); | ||
168 | at91_set_deglitch(data->vbus_pin, 1); | ||
169 | usba_udc_data.pdata.vbus_pin = data->vbus_pin; | ||
170 | } | ||
171 | |||
172 | /* Pullup pin is handled internally by USB device peripheral */ | ||
173 | |||
174 | /* Clocks */ | ||
175 | at91_clock_associate("utmi_clk", &at91_usba_udc_device.dev, "hclk"); | ||
176 | at91_clock_associate("udphs_clk", &at91_usba_udc_device.dev, "pclk"); | ||
177 | |||
178 | platform_device_register(&at91_usba_udc_device); | ||
179 | } | ||
180 | #else | ||
181 | void __init at91_add_device_usba(struct usba_platform_data *data) {} | ||
182 | #endif | ||
183 | |||
184 | |||
185 | /* -------------------------------------------------------------------- | ||
87 | * Ethernet | 186 | * Ethernet |
88 | * -------------------------------------------------------------------- */ | 187 | * -------------------------------------------------------------------- */ |
89 | 188 | ||
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index e5512d1ff217..8a2a958639db 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c | |||
@@ -78,6 +78,12 @@ static struct at91_usbh_data __initdata cap9adk_usbh_data = { | |||
78 | .ports = 2, | 78 | .ports = 2, |
79 | }; | 79 | }; |
80 | 80 | ||
81 | /* | ||
82 | * USB HS Device port | ||
83 | */ | ||
84 | static struct usba_platform_data __initdata cap9adk_usba_udc_data = { | ||
85 | .vbus_pin = AT91_PIN_PB31, | ||
86 | }; | ||
81 | 87 | ||
82 | /* | 88 | /* |
83 | * ADS7846 Touchscreen | 89 | * ADS7846 Touchscreen |
@@ -326,6 +332,9 @@ static void __init cap9adk_board_init(void) | |||
326 | /* USB Host */ | 332 | /* USB Host */ |
327 | set_irq_type(AT91CAP9_ID_UHP, IRQT_HIGH); | 333 | set_irq_type(AT91CAP9_ID_UHP, IRQT_HIGH); |
328 | at91_add_device_usbh(&cap9adk_usbh_data); | 334 | at91_add_device_usbh(&cap9adk_usbh_data); |
335 | /* USB HS */ | ||
336 | set_irq_type(AT91CAP9_ID_UDPHS, IRQT_HIGH); | ||
337 | at91_add_device_usba(&cap9adk_usba_udc_data); | ||
329 | /* SPI */ | 338 | /* SPI */ |
330 | at91_add_device_spi(cap9adk_spi_devices, ARRAY_SIZE(cap9adk_spi_devices)); | 339 | at91_add_device_spi(cap9adk_spi_devices, ARRAY_SIZE(cap9adk_spi_devices)); |
331 | /* Touchscreen */ | 340 | /* Touchscreen */ |
diff --git a/include/asm-arm/arch-at91/at91cap9.h b/include/asm-arm/arch-at91/at91cap9.h index bac83adb5050..6f14d9053ac7 100644 --- a/include/asm-arm/arch-at91/at91cap9.h +++ b/include/asm-arm/arch-at91/at91cap9.h | |||
@@ -118,7 +118,7 @@ | |||
118 | #define AT91CAP9_ROM_SIZE (32 * SZ_1K) /* Internal ROM size (32Kb) */ | 118 | #define AT91CAP9_ROM_SIZE (32 * SZ_1K) /* Internal ROM size (32Kb) */ |
119 | 119 | ||
120 | #define AT91CAP9_LCDC_BASE 0x00500000 /* LCD Controller */ | 120 | #define AT91CAP9_LCDC_BASE 0x00500000 /* LCD Controller */ |
121 | #define AT91CAP9_UDPHS_BASE 0x00600000 /* USB High Speed Device Port */ | 121 | #define AT91CAP9_UDPHS_FIFO 0x00600000 /* USB High Speed Device Port */ |
122 | #define AT91CAP9_UHP_BASE 0x00700000 /* USB Host controller */ | 122 | #define AT91CAP9_UHP_BASE 0x00700000 /* USB Host controller */ |
123 | 123 | ||
124 | #define CONFIG_DRAM_BASE AT91_CHIPSELECT_6 | 124 | #define CONFIG_DRAM_BASE AT91_CHIPSELECT_6 |
diff --git a/include/asm-arm/arch-at91/at91cap9_matrix.h b/include/asm-arm/arch-at91/at91cap9_matrix.h index a641686b6c3d..ddbd4873c842 100644 --- a/include/asm-arm/arch-at91/at91cap9_matrix.h +++ b/include/asm-arm/arch-at91/at91cap9_matrix.h | |||
@@ -106,6 +106,11 @@ | |||
106 | #define AT91_MPBS0_SFR (AT91_MATRIX + 0x114) /* MPBlock Slave 0 Special Function Register */ | 106 | #define AT91_MPBS0_SFR (AT91_MATRIX + 0x114) /* MPBlock Slave 0 Special Function Register */ |
107 | #define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C) /* MPBlock Slave 1 Special Function Register */ | 107 | #define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C) /* MPBlock Slave 1 Special Function Register */ |
108 | 108 | ||
109 | #define AT91_MATRIX_UDPHS (AT91_MATRIX + 0x118) /* USBHS Special Function Register [AT91CAP9 only] */ | ||
110 | #define AT91_MATRIX_SELECT_UDPHS (0 << 31) /* select High Speed UDP */ | ||
111 | #define AT91_MATRIX_SELECT_UDP (1 << 31) /* select standard UDP */ | ||
112 | #define AT91_MATRIX_UDPHS_BYPASS_LOCK (1 << 30) /* bypass lock bit */ | ||
113 | |||
109 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI Chip Select Assignment Register */ | 114 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI Chip Select Assignment Register */ |
110 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 115 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
111 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) | 116 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) |