aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/avr32/Kconfig14
-rw-r--r--arch/avr32/Makefile1
-rw-r--r--arch/avr32/boards/atngw100/evklcd10x.c50
-rw-r--r--arch/avr32/boards/atngw100/setup.c7
-rw-r--r--arch/avr32/boards/atstk1000/atstk1002.c6
-rw-r--r--arch/avr32/boards/atstk1000/atstk1003.c6
-rw-r--r--arch/avr32/boards/atstk1000/atstk1004.c6
-rw-r--r--arch/avr32/boards/favr-32/setup.c9
-rw-r--r--arch/avr32/boards/hammerhead/setup.c6
-rw-r--r--arch/avr32/boards/merisc/Kconfig5
-rw-r--r--arch/avr32/boards/merisc/Makefile1
-rw-r--r--arch/avr32/boards/merisc/display.c65
-rw-r--r--arch/avr32/boards/merisc/flash.c139
-rw-r--r--arch/avr32/boards/merisc/merisc.h18
-rw-r--r--arch/avr32/boards/merisc/merisc_sysfs.c65
-rw-r--r--arch/avr32/boards/merisc/setup.c297
-rw-r--r--arch/avr32/boards/mimc200/setup.c8
-rw-r--r--arch/avr32/configs/merisc_defconfig1237
-rw-r--r--arch/avr32/mach-at32ap/at32ap700x.c112
-rw-r--r--arch/avr32/mach-at32ap/include/mach/at32ap700x.h52
-rw-r--r--arch/avr32/mach-at32ap/include/mach/board.h24
-rw-r--r--drivers/serial/atmel_serial.c9
-rw-r--r--drivers/usb/gadget/atmel_usba_udc.c14
23 files changed, 2049 insertions, 102 deletions
diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig
index 414a8ad97f52..35e3bd9858df 100644
--- a/arch/avr32/Kconfig
+++ b/arch/avr32/Kconfig
@@ -144,6 +144,19 @@ config BOARD_FAVR_32
144 bool "Favr-32 LCD-board" 144 bool "Favr-32 LCD-board"
145 select CPU_AT32AP7000 145 select CPU_AT32AP7000
146 146
147config BOARD_MERISC
148 bool "Merisc board"
149 select CPU_AT32AP7000
150 help
151 Merisc is the family name for a range of AVR32-based boards.
152
153 The boards are designed to be used in a man-machine
154 interfacing environment, utilizing a touch-based graphical
155 user interface. They host a vast range of I/O peripherals as
156 well as a large SDRAM & Flash memory bank.
157
158 For more information see: http://www.martinsson.se/merisc
159
147config BOARD_MIMC200 160config BOARD_MIMC200
148 bool "MIMC200 CPU board" 161 bool "MIMC200 CPU board"
149 select CPU_AT32AP7000 162 select CPU_AT32AP7000
@@ -153,6 +166,7 @@ source "arch/avr32/boards/atstk1000/Kconfig"
153source "arch/avr32/boards/atngw100/Kconfig" 166source "arch/avr32/boards/atngw100/Kconfig"
154source "arch/avr32/boards/hammerhead/Kconfig" 167source "arch/avr32/boards/hammerhead/Kconfig"
155source "arch/avr32/boards/favr-32/Kconfig" 168source "arch/avr32/boards/favr-32/Kconfig"
169source "arch/avr32/boards/merisc/Kconfig"
156 170
157choice 171choice
158 prompt "Boot loader type" 172 prompt "Boot loader type"
diff --git a/arch/avr32/Makefile b/arch/avr32/Makefile
index f3ef3bbf797c..0b97e14f73f6 100644
--- a/arch/avr32/Makefile
+++ b/arch/avr32/Makefile
@@ -35,6 +35,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/
35core-$(CONFIG_BOARD_ATNGW100) += arch/avr32/boards/atngw100/ 35core-$(CONFIG_BOARD_ATNGW100) += arch/avr32/boards/atngw100/
36core-$(CONFIG_BOARD_HAMMERHEAD) += arch/avr32/boards/hammerhead/ 36core-$(CONFIG_BOARD_HAMMERHEAD) += arch/avr32/boards/hammerhead/
37core-$(CONFIG_BOARD_FAVR_32) += arch/avr32/boards/favr-32/ 37core-$(CONFIG_BOARD_FAVR_32) += arch/avr32/boards/favr-32/
38core-$(CONFIG_BOARD_MERISC) += arch/avr32/boards/merisc/
38core-$(CONFIG_BOARD_MIMC200) += arch/avr32/boards/mimc200/ 39core-$(CONFIG_BOARD_MIMC200) += arch/avr32/boards/mimc200/
39core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ 40core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
40core-y += arch/avr32/kernel/ 41core-y += arch/avr32/kernel/
diff --git a/arch/avr32/boards/atngw100/evklcd10x.c b/arch/avr32/boards/atngw100/evklcd10x.c
index 8140b22b3461..00337112c5ac 100644
--- a/arch/avr32/boards/atngw100/evklcd10x.c
+++ b/arch/avr32/boards/atngw100/evklcd10x.c
@@ -11,6 +11,7 @@
11 11
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/linkage.h> 13#include <linux/linkage.h>
14#include <linux/gpio.h>
14#include <linux/fb.h> 15#include <linux/fb.h>
15#include <linux/platform_device.h> 16#include <linux/platform_device.h>
16 17
@@ -19,26 +20,26 @@
19#include <asm/setup.h> 20#include <asm/setup.h>
20 21
21#include <mach/at32ap700x.h> 22#include <mach/at32ap700x.h>
23#include <mach/portmux.h>
22#include <mach/board.h> 24#include <mach/board.h>
23 25
26#include <sound/atmel-ac97c.h>
27
24static struct ac97c_platform_data __initdata ac97c0_data = { 28static struct ac97c_platform_data __initdata ac97c0_data = {
25 .dma_rx_periph_id = 3, 29 .reset_pin = GPIO_PIN_PB(19),
26 .dma_tx_periph_id = 4,
27 .dma_controller_id = 0,
28 .reset_pin = GPIO_PIN_PB(19),
29}; 30};
30 31
31#ifdef CONFIG_BOARD_ATNGW100_EVKLCD10X_VGA 32#ifdef CONFIG_BOARD_ATNGW100_EVKLCD10X_VGA
32static struct fb_videomode __initdata tcg057vglad_modes[] = { 33static struct fb_videomode __initdata tcg057vglad_modes[] = {
33 { 34 {
34 .name = "640x480 @ 60", 35 .name = "640x480 @ 50",
35 .refresh = 60, 36 .refresh = 50,
36 .xres = 640, .yres = 480, 37 .xres = 640, .yres = 480,
37 .pixclock = KHZ2PICOS(25180), 38 .pixclock = KHZ2PICOS(25180),
38 39
39 .left_margin = 64, .right_margin = 31, 40 .left_margin = 64, .right_margin = 96,
40 .upper_margin = 34, .lower_margin = 2, 41 .upper_margin = 34, .lower_margin = 11,
41 .hsync_len = 96, .vsync_len = 4, 42 .hsync_len = 64, .vsync_len = 15,
42 43
43 .sync = 0, 44 .sync = 0,
44 .vmode = FB_VMODE_NONINTERLACED, 45 .vmode = FB_VMODE_NONINTERLACED,
@@ -69,14 +70,14 @@ static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = {
69#elif CONFIG_BOARD_ATNGW100_EVKLCD10X_QVGA 70#elif CONFIG_BOARD_ATNGW100_EVKLCD10X_QVGA
70static struct fb_videomode __initdata tcg057qvlad_modes[] = { 71static struct fb_videomode __initdata tcg057qvlad_modes[] = {
71 { 72 {
72 .name = "320x240 @ 60", 73 .name = "320x240 @ 50",
73 .refresh = 60, 74 .refresh = 50,
74 .xres = 320, .yres = 240, 75 .xres = 320, .yres = 240,
75 .pixclock = KHZ2PICOS(6300), 76 .pixclock = KHZ2PICOS(6300),
76 77
77 .left_margin = 52, .right_margin = 28, 78 .left_margin = 34, .right_margin = 46,
78 .upper_margin = 7, .lower_margin = 2, 79 .upper_margin = 7, .lower_margin = 15,
79 .hsync_len = 96, .vsync_len = 4, 80 .hsync_len = 64, .vsync_len = 12,
80 81
81 .sync = 0, 82 .sync = 0,
82 .vmode = FB_VMODE_NONINTERLACED, 83 .vmode = FB_VMODE_NONINTERLACED,
@@ -144,12 +145,29 @@ static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = {
144}; 145};
145#endif 146#endif
146 147
148static void atevklcd10x_lcdc_power_control(int on)
149{
150 gpio_set_value(GPIO_PIN_PB(15), on);
151}
152
147static int __init atevklcd10x_init(void) 153static int __init atevklcd10x_init(void)
148{ 154{
149 at32_add_device_ac97c(0, &ac97c0_data); 155 /* PB15 is connected to the enable line on the boost regulator
156 * controlling the backlight for the LCD panel.
157 */
158 at32_select_gpio(GPIO_PIN_PB(15), AT32_GPIOF_OUTPUT);
159 gpio_request(GPIO_PIN_PB(15), "backlight");
160 gpio_direction_output(GPIO_PIN_PB(15), 0);
161
162 atevklcd10x_lcdc_data.atmel_lcdfb_power_control =
163 atevklcd10x_lcdc_power_control;
150 164
151 at32_add_device_lcdc(0, &atevklcd10x_lcdc_data, 165 at32_add_device_lcdc(0, &atevklcd10x_lcdc_data,
152 fbmem_start, fbmem_size, 1); 166 fbmem_start, fbmem_size,
167 ATMEL_LCDC_ALT_18BIT | ATMEL_LCDC_PE_DVAL);
168
169 at32_add_device_ac97c(0, &ac97c0_data, AC97C_BOTH);
170
153 return 0; 171 return 0;
154} 172}
155postcore_initcall(atevklcd10x_init); 173postcore_initcall(atevklcd10x_init);
diff --git a/arch/avr32/boards/atngw100/setup.c b/arch/avr32/boards/atngw100/setup.c
index 05d3722fff18..5b022aad4bd9 100644
--- a/arch/avr32/boards/atngw100/setup.c
+++ b/arch/avr32/boards/atngw100/setup.c
@@ -56,13 +56,8 @@ static struct spi_board_info spi0_board_info[] __initdata = {
56static struct mci_platform_data __initdata mci0_data = { 56static struct mci_platform_data __initdata mci0_data = {
57 .slot[0] = { 57 .slot[0] = {
58 .bus_width = 4, 58 .bus_width = 4,
59#ifndef CONFIG_BOARD_ATNGW100_EVKLCD10X
60 .detect_pin = GPIO_PIN_PC(25), 59 .detect_pin = GPIO_PIN_PC(25),
61 .wp_pin = GPIO_PIN_PE(0), 60 .wp_pin = GPIO_PIN_PE(0),
62#else
63 .detect_pin = GPIO_PIN_NONE,
64 .wp_pin = GPIO_PIN_NONE,
65#endif
66 }, 61 },
67}; 62};
68 63
@@ -123,7 +118,7 @@ static void __init set_hw_addr(struct platform_device *pdev)
123 118
124void __init setup_board(void) 119void __init setup_board(void)
125{ 120{
126 at32_map_usart(1, 0); /* USART 1: /dev/ttyS0, DB9 */ 121 at32_map_usart(1, 0, 0); /* USART 1: /dev/ttyS0, DB9 */
127 at32_setup_serial_console(0); 122 at32_setup_serial_console(0);
128} 123}
129 124
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c
index 1f33a106905c..2adc261c9e3d 100644
--- a/arch/avr32/boards/atstk1000/atstk1002.c
+++ b/arch/avr32/boards/atstk1000/atstk1002.c
@@ -252,12 +252,12 @@ static void __init atstk1002_setup_extdac(void)
252void __init setup_board(void) 252void __init setup_board(void)
253{ 253{
254#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM 254#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
255 at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */ 255 at32_map_usart(0, 1, 0); /* USART 0/B: /dev/ttyS1, IRDA */
256#else 256#else
257 at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ 257 at32_map_usart(1, 0, 0); /* USART 1/A: /dev/ttyS0, DB9 */
258#endif 258#endif
259 /* USART 2/unused: expansion connector */ 259 /* USART 2/unused: expansion connector */
260 at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */ 260 at32_map_usart(3, 2, 0); /* USART 3/C: /dev/ttyS2, DB9 */
261 261
262 at32_setup_serial_console(0); 262 at32_setup_serial_console(0);
263} 263}
diff --git a/arch/avr32/boards/atstk1000/atstk1003.c b/arch/avr32/boards/atstk1000/atstk1003.c
index b3a23c88bcfe..ff7e23298827 100644
--- a/arch/avr32/boards/atstk1000/atstk1003.c
+++ b/arch/avr32/boards/atstk1000/atstk1003.c
@@ -115,12 +115,12 @@ static void __init atstk1003_setup_extdac(void)
115void __init setup_board(void) 115void __init setup_board(void)
116{ 116{
117#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM 117#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
118 at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */ 118 at32_map_usart(0, 1, 0); /* USART 0/B: /dev/ttyS1, IRDA */
119#else 119#else
120 at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ 120 at32_map_usart(1, 0, 0); /* USART 1/A: /dev/ttyS0, DB9 */
121#endif 121#endif
122 /* USART 2/unused: expansion connector */ 122 /* USART 2/unused: expansion connector */
123 at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */ 123 at32_map_usart(3, 2, 0); /* USART 3/C: /dev/ttyS2, DB9 */
124 124
125 at32_setup_serial_console(0); 125 at32_setup_serial_console(0);
126} 126}
diff --git a/arch/avr32/boards/atstk1000/atstk1004.c b/arch/avr32/boards/atstk1000/atstk1004.c
index 29b35aca96cd..69a9f0f08c6e 100644
--- a/arch/avr32/boards/atstk1000/atstk1004.c
+++ b/arch/avr32/boards/atstk1000/atstk1004.c
@@ -120,12 +120,12 @@ static void __init atstk1004_setup_extdac(void)
120void __init setup_board(void) 120void __init setup_board(void)
121{ 121{
122#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM 122#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
123 at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */ 123 at32_map_usart(0, 1, 0); /* USART 0/B: /dev/ttyS1, IRDA */
124#else 124#else
125 at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ 125 at32_map_usart(1, 0, 0); /* USART 1/A: /dev/ttyS0, DB9 */
126#endif 126#endif
127 /* USART 2/unused: expansion connector */ 127 /* USART 2/unused: expansion connector */
128 at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */ 128 at32_map_usart(3, 2, 0); /* USART 3/C: /dev/ttyS2, DB9 */
129 129
130 at32_setup_serial_console(0); 130 at32_setup_serial_console(0);
131} 131}
diff --git a/arch/avr32/boards/favr-32/setup.c b/arch/avr32/boards/favr-32/setup.c
index 745c408c2ac5..46c9b0a224cf 100644
--- a/arch/avr32/boards/favr-32/setup.c
+++ b/arch/avr32/boards/favr-32/setup.c
@@ -22,6 +22,8 @@
22#include <linux/spi/spi.h> 22#include <linux/spi/spi.h>
23#include <linux/spi/ads7846.h> 23#include <linux/spi/ads7846.h>
24 24
25#include <sound/atmel-abdac.h>
26
25#include <video/atmel_lcdc.h> 27#include <video/atmel_lcdc.h>
26 28
27#include <asm/setup.h> 29#include <asm/setup.h>
@@ -41,6 +43,9 @@ unsigned long at32_board_osc_rates[3] = {
41/* Initialized by bootloader-specific startup code. */ 43/* Initialized by bootloader-specific startup code. */
42struct tag *bootloader_tags __initdata; 44struct tag *bootloader_tags __initdata;
43 45
46static struct atmel_abdac_pdata __initdata abdac0_data = {
47};
48
44struct eth_addr { 49struct eth_addr {
45 u8 addr[6]; 50 u8 addr[6];
46}; 51};
@@ -245,7 +250,7 @@ static void __init favr32_setup_atmel_pwm_bl(void)
245 250
246void __init setup_board(void) 251void __init setup_board(void)
247{ 252{
248 at32_map_usart(3, 0); /* USART 3 => /dev/ttyS0 */ 253 at32_map_usart(3, 0, 0); /* USART 3 => /dev/ttyS0 */
249 at32_setup_serial_console(0); 254 at32_setup_serial_console(0);
250} 255}
251 256
@@ -326,7 +331,7 @@ static int __init favr32_init(void)
326 331
327 spi1_board_info[0].irq = gpio_to_irq(GPIO_PIN_PB(3)); 332 spi1_board_info[0].irq = gpio_to_irq(GPIO_PIN_PB(3));
328 333
329 set_abdac_rate(at32_add_device_abdac(0)); 334 set_abdac_rate(at32_add_device_abdac(0, &abdac0_data));
330 335
331 at32_add_device_pwm(1 << atmel_pwm_bl_pdata.pwm_channel); 336 at32_add_device_pwm(1 << atmel_pwm_bl_pdata.pwm_channel);
332 at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); 337 at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
diff --git a/arch/avr32/boards/hammerhead/setup.c b/arch/avr32/boards/hammerhead/setup.c
index 4d2fe82b2029..dd009875a405 100644
--- a/arch/avr32/boards/hammerhead/setup.c
+++ b/arch/avr32/boards/hammerhead/setup.c
@@ -29,6 +29,8 @@
29#include <mach/init.h> 29#include <mach/init.h>
30#include <mach/portmux.h> 30#include <mach/portmux.h>
31 31
32#include <sound/atmel-ac97c.h>
33
32#include "../../mach-at32ap/clock.h" 34#include "../../mach-at32ap/clock.h"
33#include "flash.h" 35#include "flash.h"
34 36
@@ -163,7 +165,7 @@ static void __init set_hw_addr(struct platform_device *pdev)
163 165
164void __init setup_board(void) 166void __init setup_board(void)
165{ 167{
166 at32_map_usart(1, 0); /* USART 1: /dev/ttyS0, DB9 */ 168 at32_map_usart(1, 0, 0); /* USART 1: /dev/ttyS0, DB9 */
167 at32_setup_serial_console(0); 169 at32_setup_serial_console(0);
168} 170}
169 171
@@ -233,7 +235,7 @@ static int __init hammerhead_init(void)
233 i2c_register_board_info(0, i2c_info, ARRAY_SIZE(i2c_info)); 235 i2c_register_board_info(0, i2c_info, ARRAY_SIZE(i2c_info));
234 236
235#ifdef CONFIG_BOARD_HAMMERHEAD_SND 237#ifdef CONFIG_BOARD_HAMMERHEAD_SND
236 at32_add_device_ac97c(0, &ac97c_data); 238 at32_add_device_ac97c(0, &ac97c_data, AC97C_BOTH);
237#endif 239#endif
238 240
239 /* Select the Touchscreen interrupt pin mode */ 241 /* Select the Touchscreen interrupt pin mode */
diff --git a/arch/avr32/boards/merisc/Kconfig b/arch/avr32/boards/merisc/Kconfig
new file mode 100644
index 000000000000..7e043275d5a9
--- /dev/null
+++ b/arch/avr32/boards/merisc/Kconfig
@@ -0,0 +1,5 @@
1# Merisc customization
2
3if BOARD_MERISC
4
5endif # BOARD_MERISC
diff --git a/arch/avr32/boards/merisc/Makefile b/arch/avr32/boards/merisc/Makefile
new file mode 100644
index 000000000000..d24c78729bd1
--- /dev/null
+++ b/arch/avr32/boards/merisc/Makefile
@@ -0,0 +1 @@
obj-y += setup.o flash.o display.o merisc_sysfs.o
diff --git a/arch/avr32/boards/merisc/display.c b/arch/avr32/boards/merisc/display.c
new file mode 100644
index 000000000000..85a543cd4abc
--- /dev/null
+++ b/arch/avr32/boards/merisc/display.c
@@ -0,0 +1,65 @@
1/*
2 * Display setup code for the Merisc board
3 *
4 * Copyright (C) 2008 Martinsson Elektronik AB
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#include <linux/init.h>
11#include <linux/platform_device.h>
12#include <linux/fb.h>
13#include <video/atmel_lcdc.h>
14#include <asm/setup.h>
15#include <mach/board.h>
16#include "merisc.h"
17
18static struct fb_videomode merisc_fb_videomode[] = {
19 {
20 .refresh = 44,
21 .xres = 640,
22 .yres = 480,
23 .left_margin = 96,
24 .right_margin = 96,
25 .upper_margin = 34,
26 .lower_margin = 8,
27 .hsync_len = 64,
28 .vsync_len = 64,
29 .name = "640x480 @ 44",
30 .pixclock = KHZ2PICOS(25180),
31 .sync = 0,
32 .vmode = FB_VMODE_NONINTERLACED,
33 },
34};
35
36static struct fb_monspecs merisc_fb_monspecs = {
37 .manufacturer = "Kyo",
38 .monitor = "TCG075VG2AD",
39 .modedb = merisc_fb_videomode,
40 .modedb_len = ARRAY_SIZE(merisc_fb_videomode),
41 .hfmin = 30000,
42 .hfmax = 33333,
43 .vfmin = 60,
44 .vfmax = 90,
45 .dclkmax = 30000000,
46};
47
48struct atmel_lcdfb_info merisc_lcdc_data = {
49 .default_bpp = 24,
50 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
51 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
52 | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
53 | ATMEL_LCDC_MEMOR_BIG),
54 .default_monspecs = &merisc_fb_monspecs,
55 .guard_time = 2,
56};
57
58static int __init merisc_display_init(void)
59{
60 at32_add_device_lcdc(0, &merisc_lcdc_data, fbmem_start,
61 fbmem_size, 0);
62
63 return 0;
64}
65device_initcall(merisc_display_init);
diff --git a/arch/avr32/boards/merisc/flash.c b/arch/avr32/boards/merisc/flash.c
new file mode 100644
index 000000000000..8e856fd6f013
--- /dev/null
+++ b/arch/avr32/boards/merisc/flash.c
@@ -0,0 +1,139 @@
1/*
2 * Merisc board-specific flash initialization
3 *
4 * Copyright (C) 2008 Martinsson Elektronik AB
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#include <linux/init.h>
11#include <linux/platform_device.h>
12#include <linux/mtd/mtd.h>
13#include <linux/mtd/partitions.h>
14#include <linux/mtd/physmap.h>
15#include <mach/smc.h>
16
17/* Will be translated to units of 14.3 ns, rounded up */
18static struct smc_timing flash_timing __initdata = {
19 .ncs_read_setup = 1 * 14,
20 .nrd_setup = 5 * 14,
21 .ncs_write_setup = 1 * 14,
22 .nwe_setup = 2 * 14,
23
24 .ncs_read_pulse = 12 * 14,
25 .nrd_pulse = 7 * 14,
26 .ncs_write_pulse = 8 * 14,
27 .nwe_pulse = 4 * 14,
28
29 .read_cycle = 14 * 14,
30 .write_cycle = 10 * 14,
31};
32
33static struct smc_config flash_config __initdata = {
34 .bus_width = 2,
35 .nrd_controlled = 1,
36 .nwe_controlled = 1,
37 .byte_write = 1,
38 .tdf_cycles = 3,
39};
40
41static struct mtd_partition flash_0_parts[] = {
42 {
43 .name = "boot",
44 .offset = 0x00000000,
45 .size = 0x00060000,
46 .mask_flags = 0,
47 },
48 {
49 .name = "kernel",
50 .offset = 0x00060000,
51 .size = 0x00200000,
52 .mask_flags = 0,
53 },
54 {
55 .name = "root",
56 .offset = 0x00260000,
57 .size = MTDPART_SIZ_FULL,
58 .mask_flags = 0,
59 },
60};
61
62static struct mtd_partition flash_1_parts[] = {
63 {
64 .name = "2ndflash",
65 .offset = 0x00000000,
66 .size = MTDPART_SIZ_FULL,
67 .mask_flags = 0,
68 },
69};
70
71static struct physmap_flash_data flash_data[] = {
72 {
73 .width = 2,
74 .nr_parts = ARRAY_SIZE(flash_0_parts),
75 .parts = flash_0_parts,
76 },
77 {
78 .width = 2,
79 .nr_parts = ARRAY_SIZE(flash_1_parts),
80 .parts = flash_1_parts,
81 }
82};
83
84static struct resource flash_resource[] = {
85 {
86 .start = 0x00000000,
87 .end = 0x03ffffff,
88 .flags = IORESOURCE_MEM,
89 },
90 {
91 .start = 0x04000000,
92 .end = 0x07ffffff,
93 .flags = IORESOURCE_MEM,
94 },
95};
96
97static struct platform_device flash_device[] = {
98 {
99 .name = "physmap-flash",
100 .id = 0,
101 .resource = &flash_resource[0],
102 .num_resources = 1,
103 .dev = {
104 .platform_data = &flash_data[0],
105 },
106 },
107 {
108 .name = "physmap-flash",
109 .id = 1,
110 .resource = &flash_resource[1],
111 .num_resources = 1,
112 .dev = {
113 .platform_data = &flash_data[1],
114 },
115 },
116};
117
118static int __init merisc_flash_init(void)
119{
120 int ret;
121 smc_set_timing(&flash_config, &flash_timing);
122
123 ret = smc_set_configuration(0, &flash_config);
124 if (ret < 0) {
125 printk(KERN_ERR "Merisc: failed to set NOR flash timing #0\n");
126 return ret;
127 }
128
129 ret = smc_set_configuration(4, &flash_config);
130 if (ret < 0) {
131 printk(KERN_ERR "Merisc: failed to set NOR flash timing #1\n");
132 return ret;
133 }
134
135 platform_device_register(&flash_device[0]);
136 platform_device_register(&flash_device[1]);
137 return 0;
138}
139device_initcall(merisc_flash_init);
diff --git a/arch/avr32/boards/merisc/merisc.h b/arch/avr32/boards/merisc/merisc.h
new file mode 100644
index 000000000000..50ffb2f3fcbf
--- /dev/null
+++ b/arch/avr32/boards/merisc/merisc.h
@@ -0,0 +1,18 @@
1/*
2 * Merisc exports
3 *
4 * Copyright (C) 2008 Martinsson Elektronik AB
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#ifndef __ARCH_AVR32_BOARDS_MERISC_MERISC_H
11#define __ARCH_AVR32_BOARDS_MERISC_MERISC_H
12
13const char *merisc_revision(void);
14const char *merisc_model(void);
15
16extern struct class merisc_class;
17
18#endif /* __ARCH_AVR32_BOARDS_MERISC_MERISC_H */
diff --git a/arch/avr32/boards/merisc/merisc_sysfs.c b/arch/avr32/boards/merisc/merisc_sysfs.c
new file mode 100644
index 000000000000..df431fdba9ad
--- /dev/null
+++ b/arch/avr32/boards/merisc/merisc_sysfs.c
@@ -0,0 +1,65 @@
1/*
2 * Merisc sysfs exports
3 *
4 * Copyright (C) 2008 Martinsson Elektronik AB
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#include <linux/module.h>
11#include <linux/kernel.h>
12#include <linux/init.h>
13#include <linux/list.h>
14#include <linux/spinlock.h>
15#include <linux/device.h>
16#include <linux/sysdev.h>
17#include <linux/timer.h>
18#include <linux/err.h>
19#include <linux/ctype.h>
20#include "merisc.h"
21
22static ssize_t merisc_model_show(struct class *class, char *buf)
23{
24 ssize_t ret = 0;
25
26 sprintf(buf, "%s\n", merisc_model());
27 ret = strlen(buf) + 1;
28
29 return ret;
30}
31
32static ssize_t merisc_revision_show(struct class *class, char *buf)
33{
34 ssize_t ret = 0;
35
36 sprintf(buf, "%s\n", merisc_revision());
37 ret = strlen(buf) + 1;
38
39 return ret;
40}
41
42static struct class_attribute merisc_class_attrs[] = {
43 __ATTR(model, S_IRUGO, merisc_model_show, NULL),
44 __ATTR(revision, S_IRUGO, merisc_revision_show, NULL),
45 __ATTR_NULL,
46};
47
48struct class merisc_class = {
49 .name = "merisc",
50 .owner = THIS_MODULE,
51 .class_attrs = merisc_class_attrs,
52};
53
54static int __init merisc_sysfs_init(void)
55{
56 int status;
57
58 status = class_register(&merisc_class);
59 if (status < 0)
60 return status;
61
62 return 0;
63}
64
65postcore_initcall(merisc_sysfs_init);
diff --git a/arch/avr32/boards/merisc/setup.c b/arch/avr32/boards/merisc/setup.c
new file mode 100644
index 000000000000..20b300cf105a
--- /dev/null
+++ b/arch/avr32/boards/merisc/setup.c
@@ -0,0 +1,297 @@
1/*
2 * Board-specific setup code for the Merisc
3 *
4 * Copyright (C) 2008 Martinsson Elektronik AB
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#include <linux/clk.h>
11#include <linux/etherdevice.h>
12#include <linux/i2c.h>
13#include <linux/i2c-gpio.h>
14#include <linux/gpio.h>
15#include <linux/init.h>
16#include <linux/linkage.h>
17#include <linux/platform_device.h>
18#include <linux/types.h>
19#include <linux/leds.h>
20#include <linux/spi/spi.h>
21#include <linux/spi/ads7846.h>
22#include <linux/irq.h>
23#include <linux/fb.h>
24#include <linux/atmel-mci.h>
25
26#include <asm/io.h>
27#include <asm/setup.h>
28#include <asm/gpio.h>
29
30#include <mach/at32ap700x.h>
31#include <mach/board.h>
32#include <mach/init.h>
33#include <mach/portmux.h>
34
35#include "merisc.h"
36
37/* Holds the autodetected board model and revision */
38static int merisc_board_id;
39
40/* Initialized by bootloader-specific startup code. */
41struct tag *bootloader_tags __initdata;
42
43/* Oscillator frequencies. These are board specific */
44unsigned long at32_board_osc_rates[3] = {
45 [0] = 32768, /* 32.768 kHz on RTC osc */
46 [1] = 20000000, /* 20 MHz on osc0 */
47 [2] = 12000000, /* 12 MHz on osc1 */
48};
49
50struct eth_addr {
51 u8 addr[6];
52};
53
54static struct eth_addr __initdata hw_addr[2];
55static struct eth_platform_data __initdata eth_data[2];
56
57static int ads7846_get_pendown_state_PB26(void)
58{
59 return !gpio_get_value(GPIO_PIN_PB(26));
60}
61
62static int ads7846_get_pendown_state_PB28(void)
63{
64 return !gpio_get_value(GPIO_PIN_PB(28));
65}
66
67static struct ads7846_platform_data __initdata ads7846_data = {
68 .model = 7846,
69 .vref_delay_usecs = 100,
70 .vref_mv = 0,
71 .keep_vref_on = 0,
72 .settle_delay_usecs = 150,
73 .penirq_recheck_delay_usecs = 1,
74 .x_plate_ohms = 800,
75 .debounce_rep = 4,
76 .debounce_max = 10,
77 .debounce_tol = 50,
78 .get_pendown_state = ads7846_get_pendown_state_PB26,
79 .filter_init = NULL,
80 .filter = NULL,
81 .filter_cleanup = NULL,
82};
83
84static struct spi_board_info __initdata spi0_board_info[] = {
85 {
86 .modalias = "ads7846",
87 .max_speed_hz = 3250000,
88 .chip_select = 0,
89 .bus_num = 0,
90 .platform_data = &ads7846_data,
91 .mode = SPI_MODE_0,
92 },
93};
94
95static struct mci_platform_data __initdata mci0_data = {
96 .slot[0] = {
97 .bus_width = 4,
98 .detect_pin = GPIO_PIN_PE(19),
99 .wp_pin = GPIO_PIN_PE(20),
100 },
101};
102
103static int __init parse_tag_ethernet(struct tag *tag)
104{
105 int i;
106
107 i = tag->u.ethernet.mac_index;
108 if (i < ARRAY_SIZE(hw_addr)) {
109 memcpy(hw_addr[i].addr, tag->u.ethernet.hw_address,
110 sizeof(hw_addr[i].addr));
111 }
112
113 return 0;
114}
115__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
116
117static void __init set_hw_addr(struct platform_device *pdev)
118{
119 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
120 const u8 *addr;
121 void __iomem *regs;
122 struct clk *pclk;
123
124 if (!res)
125 return;
126
127 if (pdev->id >= ARRAY_SIZE(hw_addr))
128 return;
129
130 addr = hw_addr[pdev->id].addr;
131 if (!is_valid_ether_addr(addr))
132 return;
133
134 regs = (void __iomem __force *)res->start;
135 pclk = clk_get(&pdev->dev, "pclk");
136 if (!pclk)
137 return;
138
139 clk_enable(pclk);
140 __raw_writel((addr[3] << 24) | (addr[2] << 16)
141 | (addr[1] << 8) | addr[0], regs + 0x98);
142 __raw_writel((addr[5] << 8) | addr[4], regs + 0x9c);
143 clk_disable(pclk);
144 clk_put(pclk);
145}
146
147static struct i2c_gpio_platform_data i2c_gpio_data = {
148 .sda_pin = GPIO_PIN_PA(6),
149 .scl_pin = GPIO_PIN_PA(7),
150 .sda_is_open_drain = 1,
151 .scl_is_open_drain = 1,
152 .udelay = 2,
153};
154
155static struct platform_device i2c_gpio_device = {
156 .name = "i2c-gpio",
157 .id = 0,
158 .dev = {
159 .platform_data = &i2c_gpio_data,
160 },
161};
162
163static struct i2c_board_info __initdata i2c_info[] = {
164 {
165 I2C_BOARD_INFO("pcf8563", 0x51)
166 },
167};
168
169#ifdef CONFIG_LEDS_ATMEL_PWM
170static struct gpio_led stk_pwm_led[] = {
171 {
172 .name = "backlight",
173 .gpio = 0, /* PWM channel 0 (LCD backlight) */
174 },
175};
176
177static struct gpio_led_platform_data stk_pwm_led_data = {
178 .num_leds = ARRAY_SIZE(stk_pwm_led),
179 .leds = stk_pwm_led,
180};
181
182static struct platform_device stk_pwm_led_dev = {
183 .name = "leds-atmel-pwm",
184 .id = -1,
185 .dev = {
186 .platform_data = &stk_pwm_led_data,
187 },
188};
189#endif
190
191const char *merisc_model(void)
192{
193 switch (merisc_board_id) {
194 case 0:
195 case 1:
196 return "500-01";
197 case 2:
198 return "BT";
199 default:
200 return "Unknown";
201 }
202}
203
204const char *merisc_revision(void)
205{
206 switch (merisc_board_id) {
207 case 0:
208 return "B";
209 case 1:
210 return "D";
211 case 2:
212 return "A";
213 default:
214 return "Unknown";
215 }
216}
217
218static void detect_merisc_board_id(void)
219{
220 /* Board ID pins MUST be set as input or the board may be damaged */
221 at32_select_gpio(GPIO_PIN_PA(24), AT32_GPIOF_PULLUP);
222 at32_select_gpio(GPIO_PIN_PA(25), AT32_GPIOF_PULLUP);
223 at32_select_gpio(GPIO_PIN_PA(26), AT32_GPIOF_PULLUP);
224 at32_select_gpio(GPIO_PIN_PA(27), AT32_GPIOF_PULLUP);
225
226 merisc_board_id = !gpio_get_value(GPIO_PIN_PA(24)) +
227 !gpio_get_value(GPIO_PIN_PA(25)) * 2 +
228 !gpio_get_value(GPIO_PIN_PA(26)) * 4 +
229 !gpio_get_value(GPIO_PIN_PA(27)) * 8;
230}
231
232void __init setup_board(void)
233{
234 at32_map_usart(0, 0, 0);
235 at32_map_usart(1, 1, 0);
236 at32_map_usart(3, 3, 0);
237 at32_setup_serial_console(1);
238}
239
240static int __init merisc_init(void)
241{
242 detect_merisc_board_id();
243
244 printk(KERN_NOTICE "BOARD: Merisc %s revision %s\n", merisc_model(),
245 merisc_revision());
246
247 /* Reserve pins for SDRAM */
248 at32_reserve_pin(GPIO_PIOE_BASE, ATMEL_EBI_PE_DATA_ALL | (1 << 26));
249
250 if (merisc_board_id >= 1)
251 at32_map_usart(2, 2, 0);
252
253 at32_add_device_usart(0);
254 at32_add_device_usart(1);
255 if (merisc_board_id >= 1)
256 at32_add_device_usart(2);
257 at32_add_device_usart(3);
258 set_hw_addr(at32_add_device_eth(0, &eth_data[0]));
259
260 /* ADS7846 PENIRQ */
261 if (merisc_board_id == 0) {
262 ads7846_data.get_pendown_state = ads7846_get_pendown_state_PB26;
263 at32_select_periph(GPIO_PIOB_BASE, 1 << 26,
264 GPIO_PERIPH_A, AT32_GPIOF_PULLUP);
265 spi0_board_info[0].irq = AT32_EXTINT(1);
266 } else {
267 ads7846_data.get_pendown_state = ads7846_get_pendown_state_PB28;
268 at32_select_periph(GPIO_PIOB_BASE, 1 << 28, GPIO_PERIPH_A,
269 AT32_GPIOF_PULLUP);
270 spi0_board_info[0].irq = AT32_EXTINT(3);
271 }
272
273 /* ADS7846 busy pin */
274 at32_select_gpio(GPIO_PIN_PA(4), AT32_GPIOF_PULLUP);
275
276 at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
277
278 at32_add_device_mci(0, &mci0_data);
279
280#ifdef CONFIG_LEDS_ATMEL_PWM
281 at32_add_device_pwm((1 << 0) | (1 << 2));
282 platform_device_register(&stk_pwm_led_dev);
283#else
284 at32_add_device_pwm((1 << 2));
285#endif
286
287 at32_select_gpio(i2c_gpio_data.sda_pin,
288 AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
289 at32_select_gpio(i2c_gpio_data.scl_pin,
290 AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
291 platform_device_register(&i2c_gpio_device);
292
293 i2c_register_board_info(0, i2c_info, ARRAY_SIZE(i2c_info));
294
295 return 0;
296}
297postcore_initcall(merisc_init);
diff --git a/arch/avr32/boards/mimc200/setup.c b/arch/avr32/boards/mimc200/setup.c
index 2b58d61f0afc..c1b2175b4fea 100644
--- a/arch/avr32/boards/mimc200/setup.c
+++ b/arch/avr32/boards/mimc200/setup.c
@@ -175,10 +175,10 @@ static void __init set_hw_addr(struct platform_device *pdev)
175 175
176void __init setup_board(void) 176void __init setup_board(void)
177{ 177{
178 at32_map_usart(0, 0); /* USART 0: /dev/ttyS0 (TTL --> Altera) */ 178 at32_map_usart(0, 0, 0); /* USART 0: /dev/ttyS0 (TTL --> Altera) */
179 at32_map_usart(1, 1); /* USART 1: /dev/ttyS1 (RS232) */ 179 at32_map_usart(1, 1, 0); /* USART 1: /dev/ttyS1 (RS232) */
180 at32_map_usart(2, 2); /* USART 2: /dev/ttyS2 (RS485) */ 180 at32_map_usart(2, 2, 0); /* USART 2: /dev/ttyS2 (RS485) */
181 at32_map_usart(3, 3); /* USART 3: /dev/ttyS3 (RS422 Multidrop) */ 181 at32_map_usart(3, 3, 0); /* USART 3: /dev/ttyS3 (RS422 Multidrop) */
182} 182}
183 183
184static struct i2c_gpio_platform_data i2c_gpio_data = { 184static struct i2c_gpio_platform_data i2c_gpio_data = {
diff --git a/arch/avr32/configs/merisc_defconfig b/arch/avr32/configs/merisc_defconfig
new file mode 100644
index 000000000000..41554db4877f
--- /dev/null
+++ b/arch/avr32/configs/merisc_defconfig
@@ -0,0 +1,1237 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.29-rc1
4# Wed Mar 25 14:06:15 2009
5#
6CONFIG_AVR32=y
7CONFIG_GENERIC_GPIO=y
8CONFIG_GENERIC_HARDIRQS=y
9CONFIG_STACKTRACE_SUPPORT=y
10CONFIG_LOCKDEP_SUPPORT=y
11CONFIG_TRACE_IRQFLAGS_SUPPORT=y
12CONFIG_HARDIRQS_SW_RESEND=y
13CONFIG_GENERIC_IRQ_PROBE=y
14CONFIG_RWSEM_GENERIC_SPINLOCK=y
15CONFIG_GENERIC_TIME=y
16CONFIG_GENERIC_CLOCKEVENTS=y
17# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
18# CONFIG_ARCH_HAS_ILOG2_U32 is not set
19# CONFIG_ARCH_HAS_ILOG2_U64 is not set
20CONFIG_GENERIC_HWEIGHT=y
21CONFIG_GENERIC_CALIBRATE_DELAY=y
22CONFIG_GENERIC_BUG=y
23CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
24
25#
26# General setup
27#
28CONFIG_EXPERIMENTAL=y
29CONFIG_BROKEN_ON_SMP=y
30CONFIG_INIT_ENV_ARG_LIMIT=32
31CONFIG_LOCALVERSION=""
32# CONFIG_LOCALVERSION_AUTO is not set
33CONFIG_SWAP=y
34CONFIG_SYSVIPC=y
35CONFIG_SYSVIPC_SYSCTL=y
36CONFIG_POSIX_MQUEUE=y
37CONFIG_BSD_PROCESS_ACCT=y
38CONFIG_BSD_PROCESS_ACCT_V3=y
39# CONFIG_TASKSTATS is not set
40# CONFIG_AUDIT is not set
41# CONFIG_IKCONFIG is not set
42CONFIG_LOG_BUF_SHIFT=14
43CONFIG_GROUP_SCHED=y
44CONFIG_FAIR_GROUP_SCHED=y
45# CONFIG_RT_GROUP_SCHED is not set
46CONFIG_USER_SCHED=y
47# CONFIG_CGROUP_SCHED is not set
48# CONFIG_CGROUPS is not set
49CONFIG_SYSFS_DEPRECATED=y
50CONFIG_SYSFS_DEPRECATED_V2=y
51# CONFIG_RELAY is not set
52# CONFIG_NAMESPACES is not set
53CONFIG_BLK_DEV_INITRD=y
54CONFIG_INITRAMFS_SOURCE=""
55CONFIG_CC_OPTIMIZE_FOR_SIZE=y
56CONFIG_SYSCTL=y
57CONFIG_EMBEDDED=y
58# CONFIG_SYSCTL_SYSCALL is not set
59CONFIG_KALLSYMS=y
60# CONFIG_KALLSYMS_EXTRA_PASS is not set
61CONFIG_HOTPLUG=y
62CONFIG_PRINTK=y
63CONFIG_BUG=y
64CONFIG_ELF_CORE=y
65CONFIG_COMPAT_BRK=y
66# CONFIG_BASE_FULL is not set
67CONFIG_FUTEX=y
68CONFIG_ANON_INODES=y
69CONFIG_EPOLL=y
70CONFIG_SIGNALFD=y
71CONFIG_TIMERFD=y
72CONFIG_EVENTFD=y
73CONFIG_SHMEM=y
74CONFIG_AIO=y
75CONFIG_VM_EVENT_COUNTERS=y
76CONFIG_SLUB_DEBUG=y
77# CONFIG_SLAB is not set
78CONFIG_SLUB=y
79# CONFIG_SLOB is not set
80# CONFIG_PROFILING is not set
81CONFIG_HAVE_OPROFILE=y
82# CONFIG_KPROBES is not set
83CONFIG_HAVE_KPROBES=y
84CONFIG_HAVE_CLK=y
85# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
86CONFIG_SLABINFO=y
87CONFIG_RT_MUTEXES=y
88CONFIG_BASE_SMALL=1
89CONFIG_MODULES=y
90# CONFIG_MODULE_FORCE_LOAD is not set
91CONFIG_MODULE_UNLOAD=y
92CONFIG_MODULE_FORCE_UNLOAD=y
93# CONFIG_MODVERSIONS is not set
94# CONFIG_MODULE_SRCVERSION_ALL is not set
95CONFIG_BLOCK=y
96# CONFIG_LBD is not set
97# CONFIG_BLK_DEV_IO_TRACE is not set
98# CONFIG_BLK_DEV_BSG is not set
99# CONFIG_BLK_DEV_INTEGRITY is not set
100
101#
102# IO Schedulers
103#
104CONFIG_IOSCHED_NOOP=y
105# CONFIG_IOSCHED_AS is not set
106# CONFIG_IOSCHED_DEADLINE is not set
107CONFIG_IOSCHED_CFQ=y
108# CONFIG_DEFAULT_AS is not set
109# CONFIG_DEFAULT_DEADLINE is not set
110CONFIG_DEFAULT_CFQ=y
111# CONFIG_DEFAULT_NOOP is not set
112CONFIG_DEFAULT_IOSCHED="cfq"
113CONFIG_CLASSIC_RCU=y
114# CONFIG_TREE_RCU is not set
115# CONFIG_PREEMPT_RCU is not set
116# CONFIG_TREE_RCU_TRACE is not set
117# CONFIG_PREEMPT_RCU_TRACE is not set
118# CONFIG_FREEZER is not set
119
120#
121# System Type and features
122#
123CONFIG_TICK_ONESHOT=y
124CONFIG_NO_HZ=y
125CONFIG_HIGH_RES_TIMERS=y
126CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
127CONFIG_SUBARCH_AVR32B=y
128CONFIG_MMU=y
129CONFIG_PERFORMANCE_COUNTERS=y
130CONFIG_PLATFORM_AT32AP=y
131CONFIG_CPU_AT32AP700X=y
132CONFIG_CPU_AT32AP7000=y
133# CONFIG_BOARD_ATSTK1000 is not set
134# CONFIG_BOARD_ATNGW100 is not set
135# CONFIG_BOARD_HAMMERHEAD is not set
136# CONFIG_BOARD_FAVR_32 is not set
137# CONFIG_BOARD_MIMC200 is not set
138CONFIG_BOARD_MERISC=y
139CONFIG_LOADER_U_BOOT=y
140
141#
142# Atmel AVR32 AP options
143#
144CONFIG_AP700X_32_BIT_SMC=y
145# CONFIG_AP700X_16_BIT_SMC is not set
146# CONFIG_AP700X_8_BIT_SMC is not set
147CONFIG_LOAD_ADDRESS=0x10000000
148CONFIG_ENTRY_ADDRESS=0x90000000
149CONFIG_PHYS_OFFSET=0x10000000
150CONFIG_PREEMPT_NONE=y
151# CONFIG_PREEMPT_VOLUNTARY is not set
152# CONFIG_PREEMPT is not set
153CONFIG_QUICKLIST=y
154# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
155# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
156# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
157CONFIG_ARCH_FLATMEM_ENABLE=y
158# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
159# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
160CONFIG_SELECT_MEMORY_MODEL=y
161CONFIG_FLATMEM_MANUAL=y
162# CONFIG_DISCONTIGMEM_MANUAL is not set
163# CONFIG_SPARSEMEM_MANUAL is not set
164CONFIG_FLATMEM=y
165CONFIG_FLAT_NODE_MEM_MAP=y
166CONFIG_PAGEFLAGS_EXTENDED=y
167CONFIG_SPLIT_PTLOCK_CPUS=4
168# CONFIG_PHYS_ADDR_T_64BIT is not set
169CONFIG_ZONE_DMA_FLAG=0
170CONFIG_NR_QUICK=2
171CONFIG_VIRT_TO_BUS=y
172CONFIG_UNEVICTABLE_LRU=y
173# CONFIG_OWNERSHIP_TRACE is not set
174# CONFIG_NMI_DEBUGGING is not set
175# CONFIG_HZ_100 is not set
176CONFIG_HZ_250=y
177# CONFIG_HZ_300 is not set
178# CONFIG_HZ_1000 is not set
179CONFIG_HZ=250
180CONFIG_SCHED_HRTICK=y
181CONFIG_CMDLINE=""
182
183#
184# Power management options
185#
186# CONFIG_PM is not set
187CONFIG_ARCH_SUSPEND_POSSIBLE=y
188
189#
190# CPU Frequency scaling
191#
192# CONFIG_CPU_FREQ is not set
193
194#
195# Bus options
196#
197# CONFIG_ARCH_SUPPORTS_MSI is not set
198# CONFIG_PCCARD is not set
199
200#
201# Executable file formats
202#
203CONFIG_BINFMT_ELF=y
204# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
205# CONFIG_HAVE_AOUT is not set
206# CONFIG_BINFMT_MISC is not set
207CONFIG_NET=y
208
209#
210# Networking options
211#
212CONFIG_COMPAT_NET_DEV_OPS=y
213CONFIG_PACKET=y
214CONFIG_PACKET_MMAP=y
215CONFIG_UNIX=y
216CONFIG_XFRM=y
217CONFIG_XFRM_USER=y
218# CONFIG_XFRM_SUB_POLICY is not set
219# CONFIG_XFRM_MIGRATE is not set
220# CONFIG_XFRM_STATISTICS is not set
221CONFIG_XFRM_IPCOMP=y
222CONFIG_NET_KEY=y
223# CONFIG_NET_KEY_MIGRATE is not set
224CONFIG_INET=y
225CONFIG_IP_MULTICAST=y
226CONFIG_IP_ADVANCED_ROUTER=y
227CONFIG_ASK_IP_FIB_HASH=y
228# CONFIG_IP_FIB_TRIE is not set
229CONFIG_IP_FIB_HASH=y
230# CONFIG_IP_MULTIPLE_TABLES is not set
231# CONFIG_IP_ROUTE_MULTIPATH is not set
232# CONFIG_IP_ROUTE_VERBOSE is not set
233CONFIG_IP_PNP=y
234CONFIG_IP_PNP_DHCP=y
235# CONFIG_IP_PNP_BOOTP is not set
236# CONFIG_IP_PNP_RARP is not set
237# CONFIG_NET_IPIP is not set
238# CONFIG_NET_IPGRE is not set
239CONFIG_IP_MROUTE=y
240CONFIG_IP_PIMSM_V1=y
241# CONFIG_IP_PIMSM_V2 is not set
242# CONFIG_ARPD is not set
243CONFIG_SYN_COOKIES=y
244CONFIG_INET_AH=y
245CONFIG_INET_ESP=y
246CONFIG_INET_IPCOMP=y
247CONFIG_INET_XFRM_TUNNEL=y
248CONFIG_INET_TUNNEL=y
249CONFIG_INET_XFRM_MODE_TRANSPORT=y
250CONFIG_INET_XFRM_MODE_TUNNEL=y
251CONFIG_INET_XFRM_MODE_BEET=y
252# CONFIG_INET_LRO is not set
253CONFIG_INET_DIAG=y
254CONFIG_INET_TCP_DIAG=y
255# CONFIG_TCP_CONG_ADVANCED is not set
256CONFIG_TCP_CONG_CUBIC=y
257CONFIG_DEFAULT_TCP_CONG="cubic"
258# CONFIG_TCP_MD5SIG is not set
259# CONFIG_IPV6 is not set
260# CONFIG_NETWORK_SECMARK is not set
261# CONFIG_NETFILTER is not set
262# CONFIG_IP_DCCP is not set
263# CONFIG_IP_SCTP is not set
264# CONFIG_TIPC is not set
265# CONFIG_ATM is not set
266# CONFIG_BRIDGE is not set
267# CONFIG_NET_DSA is not set
268# CONFIG_VLAN_8021Q is not set
269# CONFIG_DECNET is not set
270# CONFIG_LLC2 is not set
271# CONFIG_IPX is not set
272# CONFIG_ATALK is not set
273# CONFIG_X25 is not set
274# CONFIG_LAPB is not set
275# CONFIG_ECONET is not set
276# CONFIG_WAN_ROUTER is not set
277# CONFIG_NET_SCHED is not set
278# CONFIG_DCB is not set
279
280#
281# Network testing
282#
283# CONFIG_NET_PKTGEN is not set
284# CONFIG_HAMRADIO is not set
285CONFIG_CAN=y
286CONFIG_CAN_RAW=y
287CONFIG_CAN_BCM=y
288
289#
290# CAN Device Drivers
291#
292# CONFIG_CAN_VCAN is not set
293# CONFIG_CAN_DEBUG_DEVICES is not set
294# CONFIG_IRDA is not set
295# CONFIG_BT is not set
296# CONFIG_AF_RXRPC is not set
297# CONFIG_PHONET is not set
298# CONFIG_WIRELESS is not set
299# CONFIG_WIMAX is not set
300# CONFIG_RFKILL is not set
301# CONFIG_NET_9P is not set
302
303#
304# Device Drivers
305#
306
307#
308# Generic Driver Options
309#
310CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
311CONFIG_STANDALONE=y
312# CONFIG_PREVENT_FIRMWARE_BUILD is not set
313# CONFIG_FW_LOADER is not set
314# CONFIG_SYS_HYPERVISOR is not set
315# CONFIG_CONNECTOR is not set
316CONFIG_MTD=y
317# CONFIG_MTD_DEBUG is not set
318CONFIG_MTD_CONCAT=y
319CONFIG_MTD_PARTITIONS=y
320# CONFIG_MTD_TESTS is not set
321# CONFIG_MTD_REDBOOT_PARTS is not set
322# CONFIG_MTD_CMDLINE_PARTS is not set
323# CONFIG_MTD_AR7_PARTS is not set
324
325#
326# User Modules And Translation Layers
327#
328CONFIG_MTD_CHAR=y
329CONFIG_MTD_BLKDEVS=y
330CONFIG_MTD_BLOCK=y
331# CONFIG_FTL is not set
332# CONFIG_NFTL is not set
333# CONFIG_INFTL is not set
334# CONFIG_RFD_FTL is not set
335# CONFIG_SSFDC is not set
336# CONFIG_MTD_OOPS is not set
337
338#
339# RAM/ROM/Flash chip drivers
340#
341CONFIG_MTD_CFI=y
342CONFIG_MTD_JEDECPROBE=y
343CONFIG_MTD_GEN_PROBE=y
344# CONFIG_MTD_CFI_ADV_OPTIONS is not set
345CONFIG_MTD_MAP_BANK_WIDTH_1=y
346CONFIG_MTD_MAP_BANK_WIDTH_2=y
347CONFIG_MTD_MAP_BANK_WIDTH_4=y
348# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
349# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
350# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
351CONFIG_MTD_CFI_I1=y
352CONFIG_MTD_CFI_I2=y
353# CONFIG_MTD_CFI_I4 is not set
354# CONFIG_MTD_CFI_I8 is not set
355# CONFIG_MTD_CFI_INTELEXT is not set
356CONFIG_MTD_CFI_AMDSTD=y
357# CONFIG_MTD_CFI_STAA is not set
358CONFIG_MTD_CFI_UTIL=y
359# CONFIG_MTD_RAM is not set
360# CONFIG_MTD_ROM is not set
361CONFIG_MTD_ABSENT=y
362
363#
364# Mapping drivers for chip access
365#
366# CONFIG_MTD_COMPLEX_MAPPINGS is not set
367CONFIG_MTD_PHYSMAP=y
368# CONFIG_MTD_PHYSMAP_COMPAT is not set
369# CONFIG_MTD_PLATRAM is not set
370
371#
372# Self-contained MTD device drivers
373#
374# CONFIG_MTD_DATAFLASH is not set
375# CONFIG_MTD_M25P80 is not set
376# CONFIG_MTD_SLRAM is not set
377# CONFIG_MTD_PHRAM is not set
378# CONFIG_MTD_MTDRAM is not set
379CONFIG_MTD_BLOCK2MTD=y
380
381#
382# Disk-On-Chip Device Drivers
383#
384# CONFIG_MTD_DOC2000 is not set
385# CONFIG_MTD_DOC2001 is not set
386# CONFIG_MTD_DOC2001PLUS is not set
387# CONFIG_MTD_NAND is not set
388# CONFIG_MTD_ONENAND is not set
389
390#
391# LPDDR flash memory drivers
392#
393# CONFIG_MTD_LPDDR is not set
394# CONFIG_MTD_QINFO_PROBE is not set
395
396#
397# UBI - Unsorted block images
398#
399# CONFIG_MTD_UBI is not set
400# CONFIG_PARPORT is not set
401CONFIG_BLK_DEV=y
402# CONFIG_BLK_DEV_COW_COMMON is not set
403CONFIG_BLK_DEV_LOOP=y
404# CONFIG_BLK_DEV_CRYPTOLOOP is not set
405# CONFIG_BLK_DEV_NBD is not set
406# CONFIG_BLK_DEV_RAM is not set
407# CONFIG_CDROM_PKTCDVD is not set
408# CONFIG_ATA_OVER_ETH is not set
409CONFIG_MISC_DEVICES=y
410CONFIG_ATMEL_PWM=y
411# CONFIG_ATMEL_TCLIB is not set
412# CONFIG_EEPROM_93CX6 is not set
413# CONFIG_ICS932S401 is not set
414CONFIG_ATMEL_SSC=y
415# CONFIG_ENCLOSURE_SERVICES is not set
416# CONFIG_C2PORT is not set
417
418#
419# SCSI device support
420#
421# CONFIG_RAID_ATTRS is not set
422CONFIG_SCSI=y
423CONFIG_SCSI_DMA=y
424# CONFIG_SCSI_TGT is not set
425# CONFIG_SCSI_NETLINK is not set
426CONFIG_SCSI_PROC_FS=y
427
428#
429# SCSI support type (disk, tape, CD-ROM)
430#
431CONFIG_BLK_DEV_SD=y
432# CONFIG_CHR_DEV_ST is not set
433# CONFIG_CHR_DEV_OSST is not set
434# CONFIG_BLK_DEV_SR is not set
435# CONFIG_CHR_DEV_SG is not set
436# CONFIG_CHR_DEV_SCH is not set
437
438#
439# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
440#
441# CONFIG_SCSI_MULTI_LUN is not set
442# CONFIG_SCSI_CONSTANTS is not set
443# CONFIG_SCSI_LOGGING is not set
444# CONFIG_SCSI_SCAN_ASYNC is not set
445CONFIG_SCSI_WAIT_SCAN=m
446
447#
448# SCSI Transports
449#
450# CONFIG_SCSI_SPI_ATTRS is not set
451# CONFIG_SCSI_FC_ATTRS is not set
452# CONFIG_SCSI_ISCSI_ATTRS is not set
453# CONFIG_SCSI_SAS_LIBSAS is not set
454# CONFIG_SCSI_SRP_ATTRS is not set
455# CONFIG_SCSI_LOWLEVEL is not set
456# CONFIG_SCSI_DH is not set
457# CONFIG_ATA is not set
458# CONFIG_MD is not set
459CONFIG_NETDEVICES=y
460# CONFIG_DUMMY is not set
461# CONFIG_BONDING is not set
462# CONFIG_MACVLAN is not set
463# CONFIG_EQUALIZER is not set
464# CONFIG_TUN is not set
465# CONFIG_VETH is not set
466CONFIG_PHYLIB=y
467
468#
469# MII PHY device drivers
470#
471# CONFIG_MARVELL_PHY is not set
472# CONFIG_DAVICOM_PHY is not set
473# CONFIG_QSEMI_PHY is not set
474# CONFIG_LXT_PHY is not set
475# CONFIG_CICADA_PHY is not set
476# CONFIG_VITESSE_PHY is not set
477# CONFIG_SMSC_PHY is not set
478# CONFIG_BROADCOM_PHY is not set
479# CONFIG_ICPLUS_PHY is not set
480# CONFIG_REALTEK_PHY is not set
481# CONFIG_NATIONAL_PHY is not set
482# CONFIG_STE10XP is not set
483# CONFIG_LSI_ET1011C_PHY is not set
484# CONFIG_FIXED_PHY is not set
485# CONFIG_MDIO_BITBANG is not set
486CONFIG_NET_ETHERNET=y
487# CONFIG_MII is not set
488CONFIG_MACB=y
489# CONFIG_ENC28J60 is not set
490# CONFIG_IBM_NEW_EMAC_ZMII is not set
491# CONFIG_IBM_NEW_EMAC_RGMII is not set
492# CONFIG_IBM_NEW_EMAC_TAH is not set
493# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
494# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
495# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
496# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
497# CONFIG_B44 is not set
498# CONFIG_NETDEV_1000 is not set
499# CONFIG_NETDEV_10000 is not set
500
501#
502# Wireless LAN
503#
504# CONFIG_WLAN_PRE80211 is not set
505# CONFIG_WLAN_80211 is not set
506# CONFIG_IWLWIFI_LEDS is not set
507
508#
509# Enable WiMAX (Networking options) to see the WiMAX drivers
510#
511# CONFIG_WAN is not set
512# CONFIG_PPP is not set
513# CONFIG_SLIP is not set
514# CONFIG_NETCONSOLE is not set
515# CONFIG_NETPOLL is not set
516# CONFIG_NET_POLL_CONTROLLER is not set
517# CONFIG_ISDN is not set
518# CONFIG_PHONE is not set
519
520#
521# Input device support
522#
523CONFIG_INPUT=y
524# CONFIG_INPUT_FF_MEMLESS is not set
525# CONFIG_INPUT_POLLDEV is not set
526
527#
528# Userland interfaces
529#
530# CONFIG_INPUT_MOUSEDEV is not set
531# CONFIG_INPUT_JOYDEV is not set
532CONFIG_INPUT_EVDEV=y
533# CONFIG_INPUT_EVBUG is not set
534
535#
536# Input Device Drivers
537#
538CONFIG_INPUT_KEYBOARD=y
539# CONFIG_KEYBOARD_ATKBD is not set
540# CONFIG_KEYBOARD_SUNKBD is not set
541# CONFIG_KEYBOARD_LKKBD is not set
542# CONFIG_KEYBOARD_XTKBD is not set
543# CONFIG_KEYBOARD_NEWTON is not set
544# CONFIG_KEYBOARD_STOWAWAY is not set
545# CONFIG_KEYBOARD_GPIO is not set
546# CONFIG_INPUT_MOUSE is not set
547# CONFIG_INPUT_JOYSTICK is not set
548# CONFIG_INPUT_TABLET is not set
549CONFIG_INPUT_TOUCHSCREEN=y
550CONFIG_TOUCHSCREEN_ADS7846=y
551# CONFIG_TOUCHSCREEN_FUJITSU is not set
552# CONFIG_TOUCHSCREEN_GUNZE is not set
553# CONFIG_TOUCHSCREEN_ELO is not set
554# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
555# CONFIG_TOUCHSCREEN_MTOUCH is not set
556# CONFIG_TOUCHSCREEN_INEXIO is not set
557# CONFIG_TOUCHSCREEN_MK712 is not set
558# CONFIG_TOUCHSCREEN_PENMOUNT is not set
559# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
560# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
561# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
562# CONFIG_TOUCHSCREEN_TSC2007 is not set
563CONFIG_INPUT_MISC=y
564CONFIG_INPUT_UINPUT=y
565
566#
567# Hardware I/O ports
568#
569# CONFIG_SERIO is not set
570# CONFIG_GAMEPORT is not set
571
572#
573# Character devices
574#
575CONFIG_VT=y
576# CONFIG_CONSOLE_TRANSLATIONS is not set
577CONFIG_VT_CONSOLE=y
578CONFIG_HW_CONSOLE=y
579CONFIG_VT_HW_CONSOLE_BINDING=y
580# CONFIG_DEVKMEM is not set
581# CONFIG_SERIAL_NONSTANDARD is not set
582
583#
584# Serial drivers
585#
586# CONFIG_SERIAL_8250 is not set
587
588#
589# Non-8250 serial port support
590#
591CONFIG_SERIAL_ATMEL=y
592CONFIG_SERIAL_ATMEL_CONSOLE=y
593CONFIG_SERIAL_ATMEL_PDC=y
594# CONFIG_SERIAL_ATMEL_TTYAT is not set
595CONFIG_SERIAL_CORE=y
596CONFIG_SERIAL_CORE_CONSOLE=y
597CONFIG_UNIX98_PTYS=y
598# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
599# CONFIG_LEGACY_PTYS is not set
600# CONFIG_IPMI_HANDLER is not set
601# CONFIG_HW_RANDOM is not set
602# CONFIG_R3964 is not set
603# CONFIG_RAW_DRIVER is not set
604# CONFIG_TCG_TPM is not set
605CONFIG_I2C=y
606CONFIG_I2C_BOARDINFO=y
607CONFIG_I2C_CHARDEV=y
608CONFIG_I2C_HELPER_AUTO=y
609CONFIG_I2C_ALGOBIT=y
610
611#
612# I2C Hardware Bus support
613#
614
615#
616# I2C system bus drivers (mostly embedded / system-on-chip)
617#
618CONFIG_I2C_GPIO=y
619# CONFIG_I2C_OCORES is not set
620# CONFIG_I2C_SIMTEC is not set
621
622#
623# External I2C/SMBus adapter drivers
624#
625# CONFIG_I2C_PARPORT_LIGHT is not set
626# CONFIG_I2C_TAOS_EVM is not set
627
628#
629# Other I2C/SMBus bus drivers
630#
631# CONFIG_I2C_PCA_PLATFORM is not set
632# CONFIG_I2C_STUB is not set
633
634#
635# Miscellaneous I2C Chip support
636#
637# CONFIG_DS1682 is not set
638# CONFIG_AT24 is not set
639# CONFIG_SENSORS_EEPROM is not set
640# CONFIG_SENSORS_PCF8574 is not set
641# CONFIG_PCF8575 is not set
642# CONFIG_SENSORS_PCA9539 is not set
643# CONFIG_SENSORS_PCF8591 is not set
644# CONFIG_SENSORS_MAX6875 is not set
645# CONFIG_SENSORS_TSL2550 is not set
646# CONFIG_I2C_DEBUG_CORE is not set
647# CONFIG_I2C_DEBUG_ALGO is not set
648# CONFIG_I2C_DEBUG_BUS is not set
649# CONFIG_I2C_DEBUG_CHIP is not set
650CONFIG_SPI=y
651CONFIG_SPI_MASTER=y
652
653#
654# SPI Master Controller Drivers
655#
656CONFIG_SPI_ATMEL=y
657# CONFIG_SPI_BITBANG is not set
658# CONFIG_SPI_GPIO is not set
659
660#
661# SPI Protocol Masters
662#
663# CONFIG_SPI_AT25 is not set
664CONFIG_SPI_SPIDEV=y
665# CONFIG_SPI_TLE62X0 is not set
666CONFIG_ARCH_REQUIRE_GPIOLIB=y
667CONFIG_GPIOLIB=y
668CONFIG_GPIO_SYSFS=y
669
670#
671# Memory mapped GPIO expanders:
672#
673
674#
675# I2C GPIO expanders:
676#
677# CONFIG_GPIO_MAX732X is not set
678# CONFIG_GPIO_PCA953X is not set
679# CONFIG_GPIO_PCF857X is not set
680
681#
682# PCI GPIO expanders:
683#
684
685#
686# SPI GPIO expanders:
687#
688# CONFIG_GPIO_MAX7301 is not set
689# CONFIG_GPIO_MCP23S08 is not set
690# CONFIG_W1 is not set
691# CONFIG_POWER_SUPPLY is not set
692# CONFIG_HWMON is not set
693# CONFIG_THERMAL is not set
694# CONFIG_THERMAL_HWMON is not set
695CONFIG_WATCHDOG=y
696# CONFIG_WATCHDOG_NOWAYOUT is not set
697
698#
699# Watchdog Device Drivers
700#
701# CONFIG_SOFT_WATCHDOG is not set
702# CONFIG_AT32AP700X_WDT is not set
703CONFIG_SSB_POSSIBLE=y
704
705#
706# Sonics Silicon Backplane
707#
708# CONFIG_SSB is not set
709
710#
711# Multifunction device drivers
712#
713# CONFIG_MFD_CORE is not set
714# CONFIG_MFD_SM501 is not set
715# CONFIG_HTC_PASIC3 is not set
716# CONFIG_TPS65010 is not set
717# CONFIG_TWL4030_CORE is not set
718# CONFIG_MFD_TMIO is not set
719# CONFIG_PMIC_DA903X is not set
720# CONFIG_MFD_WM8400 is not set
721# CONFIG_MFD_WM8350_I2C is not set
722# CONFIG_MFD_PCF50633 is not set
723# CONFIG_REGULATOR is not set
724
725#
726# Multimedia devices
727#
728
729#
730# Multimedia core support
731#
732# CONFIG_VIDEO_DEV is not set
733# CONFIG_DVB_CORE is not set
734# CONFIG_VIDEO_MEDIA is not set
735
736#
737# Multimedia drivers
738#
739# CONFIG_DAB is not set
740
741#
742# Graphics support
743#
744# CONFIG_VGASTATE is not set
745CONFIG_VIDEO_OUTPUT_CONTROL=y
746CONFIG_FB=y
747# CONFIG_FIRMWARE_EDID is not set
748# CONFIG_FB_DDC is not set
749# CONFIG_FB_BOOT_VESA_SUPPORT is not set
750CONFIG_FB_CFB_FILLRECT=y
751CONFIG_FB_CFB_COPYAREA=y
752CONFIG_FB_CFB_IMAGEBLIT=y
753# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
754# CONFIG_FB_SYS_FILLRECT is not set
755# CONFIG_FB_SYS_COPYAREA is not set
756# CONFIG_FB_SYS_IMAGEBLIT is not set
757# CONFIG_FB_FOREIGN_ENDIAN is not set
758# CONFIG_FB_SYS_FOPS is not set
759# CONFIG_FB_SVGALIB is not set
760# CONFIG_FB_MACMODES is not set
761# CONFIG_FB_BACKLIGHT is not set
762# CONFIG_FB_MODE_HELPERS is not set
763# CONFIG_FB_TILEBLITTING is not set
764
765#
766# Frame buffer hardware drivers
767#
768# CONFIG_FB_S1D13XXX is not set
769CONFIG_FB_ATMEL=y
770# CONFIG_FB_VIRTUAL is not set
771# CONFIG_FB_METRONOME is not set
772# CONFIG_FB_MB862XX is not set
773CONFIG_BACKLIGHT_LCD_SUPPORT=y
774# CONFIG_LCD_CLASS_DEVICE is not set
775# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
776
777#
778# Display device support
779#
780CONFIG_DISPLAY_SUPPORT=y
781
782#
783# Display hardware drivers
784#
785
786#
787# Console display driver support
788#
789CONFIG_DUMMY_CONSOLE=y
790CONFIG_FRAMEBUFFER_CONSOLE=y
791# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
792# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
793# CONFIG_FONTS is not set
794CONFIG_FONT_8x8=y
795CONFIG_FONT_8x16=y
796CONFIG_LOGO=y
797CONFIG_LOGO_LINUX_MONO=y
798CONFIG_LOGO_LINUX_VGA16=y
799CONFIG_LOGO_LINUX_CLUT224=y
800# CONFIG_SOUND is not set
801CONFIG_HID_SUPPORT=y
802CONFIG_HID=y
803# CONFIG_HID_DEBUG is not set
804# CONFIG_HIDRAW is not set
805# CONFIG_HID_PID is not set
806
807#
808# Special HID drivers
809#
810CONFIG_HID_COMPAT=y
811CONFIG_USB_SUPPORT=y
812# CONFIG_USB_ARCH_HAS_HCD is not set
813# CONFIG_USB_ARCH_HAS_OHCI is not set
814# CONFIG_USB_ARCH_HAS_EHCI is not set
815# CONFIG_USB_OTG_WHITELIST is not set
816# CONFIG_USB_OTG_BLACKLIST_HUB is not set
817
818#
819# Enable Host or Gadget support to see Inventra options
820#
821
822#
823# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
824#
825# CONFIG_USB_GADGET is not set
826
827#
828# OTG and related infrastructure
829#
830CONFIG_MMC=y
831# CONFIG_MMC_DEBUG is not set
832# CONFIG_MMC_UNSAFE_RESUME is not set
833
834#
835# MMC/SD/SDIO Card Drivers
836#
837CONFIG_MMC_BLOCK=y
838CONFIG_MMC_BLOCK_BOUNCE=y
839# CONFIG_SDIO_UART is not set
840# CONFIG_MMC_TEST is not set
841
842#
843# MMC/SD/SDIO Host Controller Drivers
844#
845# CONFIG_MMC_SDHCI is not set
846CONFIG_MMC_ATMELMCI=y
847CONFIG_MMC_ATMELMCI_DMA=y
848# CONFIG_MMC_SPI is not set
849# CONFIG_MEMSTICK is not set
850CONFIG_NEW_LEDS=y
851CONFIG_LEDS_CLASS=y
852
853#
854# LED drivers
855#
856CONFIG_LEDS_ATMEL_PWM=y
857# CONFIG_LEDS_PCA9532 is not set
858# CONFIG_LEDS_GPIO is not set
859# CONFIG_LEDS_PCA955X is not set
860
861#
862# LED Triggers
863#
864# CONFIG_LEDS_TRIGGERS is not set
865# CONFIG_ACCESSIBILITY is not set
866CONFIG_RTC_LIB=y
867CONFIG_RTC_CLASS=y
868# CONFIG_RTC_HCTOSYS is not set
869# CONFIG_RTC_DEBUG is not set
870
871#
872# RTC interfaces
873#
874CONFIG_RTC_INTF_SYSFS=y
875CONFIG_RTC_INTF_PROC=y
876CONFIG_RTC_INTF_DEV=y
877# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
878# CONFIG_RTC_DRV_TEST is not set
879
880#
881# I2C RTC drivers
882#
883# CONFIG_RTC_DRV_DS1307 is not set
884# CONFIG_RTC_DRV_DS1374 is not set
885# CONFIG_RTC_DRV_DS1672 is not set
886# CONFIG_RTC_DRV_MAX6900 is not set
887# CONFIG_RTC_DRV_RS5C372 is not set
888# CONFIG_RTC_DRV_ISL1208 is not set
889# CONFIG_RTC_DRV_X1205 is not set
890CONFIG_RTC_DRV_PCF8563=y
891# CONFIG_RTC_DRV_PCF8583 is not set
892# CONFIG_RTC_DRV_M41T80 is not set
893# CONFIG_RTC_DRV_S35390A is not set
894# CONFIG_RTC_DRV_FM3130 is not set
895# CONFIG_RTC_DRV_RX8581 is not set
896
897#
898# SPI RTC drivers
899#
900# CONFIG_RTC_DRV_M41T94 is not set
901# CONFIG_RTC_DRV_DS1305 is not set
902# CONFIG_RTC_DRV_DS1390 is not set
903# CONFIG_RTC_DRV_MAX6902 is not set
904# CONFIG_RTC_DRV_R9701 is not set
905# CONFIG_RTC_DRV_RS5C348 is not set
906# CONFIG_RTC_DRV_DS3234 is not set
907
908#
909# Platform RTC drivers
910#
911# CONFIG_RTC_DRV_DS1286 is not set
912# CONFIG_RTC_DRV_DS1511 is not set
913# CONFIG_RTC_DRV_DS1553 is not set
914# CONFIG_RTC_DRV_DS1742 is not set
915# CONFIG_RTC_DRV_STK17TA8 is not set
916# CONFIG_RTC_DRV_M48T86 is not set
917# CONFIG_RTC_DRV_M48T35 is not set
918# CONFIG_RTC_DRV_M48T59 is not set
919# CONFIG_RTC_DRV_BQ4802 is not set
920# CONFIG_RTC_DRV_V3020 is not set
921
922#
923# on-CPU RTC drivers
924#
925# CONFIG_RTC_DRV_AT32AP700X is not set
926CONFIG_DMADEVICES=y
927
928#
929# DMA Devices
930#
931CONFIG_DW_DMAC=y
932CONFIG_DMA_ENGINE=y
933
934#
935# DMA Clients
936#
937# CONFIG_NET_DMA is not set
938# CONFIG_DMATEST is not set
939CONFIG_UIO=y
940# CONFIG_UIO_PDRV is not set
941# CONFIG_UIO_PDRV_GENIRQ is not set
942# CONFIG_UIO_SMX is not set
943# CONFIG_UIO_SERCOS3 is not set
944# CONFIG_STAGING is not set
945
946#
947# File systems
948#
949CONFIG_EXT2_FS=y
950# CONFIG_EXT2_FS_XATTR is not set
951# CONFIG_EXT2_FS_XIP is not set
952# CONFIG_EXT3_FS is not set
953# CONFIG_EXT4_FS is not set
954# CONFIG_REISERFS_FS is not set
955# CONFIG_JFS_FS is not set
956# CONFIG_FS_POSIX_ACL is not set
957CONFIG_FILE_LOCKING=y
958# CONFIG_XFS_FS is not set
959# CONFIG_OCFS2_FS is not set
960# CONFIG_BTRFS_FS is not set
961# CONFIG_DNOTIFY is not set
962CONFIG_INOTIFY=y
963CONFIG_INOTIFY_USER=y
964# CONFIG_QUOTA is not set
965# CONFIG_AUTOFS_FS is not set
966# CONFIG_AUTOFS4_FS is not set
967CONFIG_FUSE_FS=y
968
969#
970# CD-ROM/DVD Filesystems
971#
972# CONFIG_ISO9660_FS is not set
973# CONFIG_UDF_FS is not set
974
975#
976# DOS/FAT/NT Filesystems
977#
978CONFIG_FAT_FS=y
979CONFIG_MSDOS_FS=y
980CONFIG_VFAT_FS=y
981CONFIG_FAT_DEFAULT_CODEPAGE=437
982CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
983# CONFIG_NTFS_FS is not set
984
985#
986# Pseudo filesystems
987#
988CONFIG_PROC_FS=y
989# CONFIG_PROC_KCORE is not set
990CONFIG_PROC_SYSCTL=y
991CONFIG_PROC_PAGE_MONITOR=y
992CONFIG_SYSFS=y
993CONFIG_TMPFS=y
994# CONFIG_TMPFS_POSIX_ACL is not set
995# CONFIG_HUGETLB_PAGE is not set
996CONFIG_CONFIGFS_FS=y
997CONFIG_MISC_FILESYSTEMS=y
998# CONFIG_ADFS_FS is not set
999# CONFIG_AFFS_FS is not set
1000# CONFIG_HFS_FS is not set
1001# CONFIG_HFSPLUS_FS is not set
1002# CONFIG_BEFS_FS is not set
1003# CONFIG_BFS_FS is not set
1004# CONFIG_EFS_FS is not set
1005CONFIG_JFFS2_FS=y
1006CONFIG_JFFS2_FS_DEBUG=0
1007CONFIG_JFFS2_FS_WRITEBUFFER=y
1008CONFIG_JFFS2_FS_WBUF_VERIFY=y
1009# CONFIG_JFFS2_SUMMARY is not set
1010# CONFIG_JFFS2_FS_XATTR is not set
1011# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1012CONFIG_JFFS2_ZLIB=y
1013# CONFIG_JFFS2_LZO is not set
1014CONFIG_JFFS2_RTIME=y
1015# CONFIG_JFFS2_RUBIN is not set
1016CONFIG_CRAMFS=y
1017# CONFIG_SQUASHFS is not set
1018# CONFIG_VXFS_FS is not set
1019# CONFIG_MINIX_FS is not set
1020# CONFIG_OMFS_FS is not set
1021# CONFIG_HPFS_FS is not set
1022# CONFIG_QNX4FS_FS is not set
1023# CONFIG_ROMFS_FS is not set
1024# CONFIG_SYSV_FS is not set
1025# CONFIG_UFS_FS is not set
1026CONFIG_NETWORK_FILESYSTEMS=y
1027CONFIG_NFS_FS=y
1028CONFIG_NFS_V3=y
1029# CONFIG_NFS_V3_ACL is not set
1030# CONFIG_NFS_V4 is not set
1031CONFIG_ROOT_NFS=y
1032# CONFIG_NFSD is not set
1033CONFIG_LOCKD=y
1034CONFIG_LOCKD_V4=y
1035CONFIG_NFS_COMMON=y
1036CONFIG_SUNRPC=y
1037# CONFIG_SUNRPC_REGISTER_V4 is not set
1038# CONFIG_RPCSEC_GSS_KRB5 is not set
1039# CONFIG_RPCSEC_GSS_SPKM3 is not set
1040# CONFIG_SMB_FS is not set
1041# CONFIG_CIFS is not set
1042# CONFIG_NCP_FS is not set
1043# CONFIG_CODA_FS is not set
1044# CONFIG_AFS_FS is not set
1045
1046#
1047# Partition Types
1048#
1049# CONFIG_PARTITION_ADVANCED is not set
1050CONFIG_MSDOS_PARTITION=y
1051CONFIG_NLS=y
1052CONFIG_NLS_DEFAULT="iso8859-1"
1053CONFIG_NLS_CODEPAGE_437=y
1054# CONFIG_NLS_CODEPAGE_737 is not set
1055# CONFIG_NLS_CODEPAGE_775 is not set
1056CONFIG_NLS_CODEPAGE_850=y
1057# CONFIG_NLS_CODEPAGE_852 is not set
1058# CONFIG_NLS_CODEPAGE_855 is not set
1059# CONFIG_NLS_CODEPAGE_857 is not set
1060# CONFIG_NLS_CODEPAGE_860 is not set
1061# CONFIG_NLS_CODEPAGE_861 is not set
1062# CONFIG_NLS_CODEPAGE_862 is not set
1063# CONFIG_NLS_CODEPAGE_863 is not set
1064# CONFIG_NLS_CODEPAGE_864 is not set
1065# CONFIG_NLS_CODEPAGE_865 is not set
1066# CONFIG_NLS_CODEPAGE_866 is not set
1067# CONFIG_NLS_CODEPAGE_869 is not set
1068# CONFIG_NLS_CODEPAGE_936 is not set
1069# CONFIG_NLS_CODEPAGE_950 is not set
1070# CONFIG_NLS_CODEPAGE_932 is not set
1071# CONFIG_NLS_CODEPAGE_949 is not set
1072# CONFIG_NLS_CODEPAGE_874 is not set
1073# CONFIG_NLS_ISO8859_8 is not set
1074# CONFIG_NLS_CODEPAGE_1250 is not set
1075# CONFIG_NLS_CODEPAGE_1251 is not set
1076# CONFIG_NLS_ASCII is not set
1077CONFIG_NLS_ISO8859_1=y
1078# CONFIG_NLS_ISO8859_2 is not set
1079# CONFIG_NLS_ISO8859_3 is not set
1080# CONFIG_NLS_ISO8859_4 is not set
1081# CONFIG_NLS_ISO8859_5 is not set
1082# CONFIG_NLS_ISO8859_6 is not set
1083# CONFIG_NLS_ISO8859_7 is not set
1084# CONFIG_NLS_ISO8859_9 is not set
1085# CONFIG_NLS_ISO8859_13 is not set
1086# CONFIG_NLS_ISO8859_14 is not set
1087# CONFIG_NLS_ISO8859_15 is not set
1088# CONFIG_NLS_KOI8_R is not set
1089# CONFIG_NLS_KOI8_U is not set
1090CONFIG_NLS_UTF8=y
1091# CONFIG_DLM is not set
1092
1093#
1094# Kernel hacking
1095#
1096# CONFIG_PRINTK_TIME is not set
1097CONFIG_ENABLE_WARN_DEPRECATED=y
1098CONFIG_ENABLE_MUST_CHECK=y
1099CONFIG_FRAME_WARN=1024
1100# CONFIG_MAGIC_SYSRQ is not set
1101# CONFIG_UNUSED_SYMBOLS is not set
1102# CONFIG_DEBUG_FS is not set
1103# CONFIG_HEADERS_CHECK is not set
1104# CONFIG_DEBUG_KERNEL is not set
1105# CONFIG_SLUB_DEBUG_ON is not set
1106# CONFIG_SLUB_STATS is not set
1107# CONFIG_DEBUG_BUGVERBOSE is not set
1108# CONFIG_DEBUG_MEMORY_INIT is not set
1109# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1110
1111#
1112# Tracers
1113#
1114# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
1115# CONFIG_SAMPLES is not set
1116
1117#
1118# Security options
1119#
1120# CONFIG_KEYS is not set
1121# CONFIG_SECURITY is not set
1122# CONFIG_SECURITYFS is not set
1123# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1124CONFIG_CRYPTO=y
1125
1126#
1127# Crypto core or helper
1128#
1129# CONFIG_CRYPTO_FIPS is not set
1130CONFIG_CRYPTO_ALGAPI=y
1131CONFIG_CRYPTO_ALGAPI2=y
1132CONFIG_CRYPTO_AEAD=y
1133CONFIG_CRYPTO_AEAD2=y
1134CONFIG_CRYPTO_BLKCIPHER=y
1135CONFIG_CRYPTO_BLKCIPHER2=y
1136CONFIG_CRYPTO_HASH=y
1137CONFIG_CRYPTO_HASH2=y
1138CONFIG_CRYPTO_RNG2=y
1139CONFIG_CRYPTO_MANAGER=y
1140CONFIG_CRYPTO_MANAGER2=y
1141# CONFIG_CRYPTO_GF128MUL is not set
1142# CONFIG_CRYPTO_NULL is not set
1143# CONFIG_CRYPTO_CRYPTD is not set
1144CONFIG_CRYPTO_AUTHENC=y
1145# CONFIG_CRYPTO_TEST is not set
1146
1147#
1148# Authenticated Encryption with Associated Data
1149#
1150# CONFIG_CRYPTO_CCM is not set
1151# CONFIG_CRYPTO_GCM is not set
1152# CONFIG_CRYPTO_SEQIV is not set
1153
1154#
1155# Block modes
1156#
1157CONFIG_CRYPTO_CBC=y
1158# CONFIG_CRYPTO_CTR is not set
1159# CONFIG_CRYPTO_CTS is not set
1160# CONFIG_CRYPTO_ECB is not set
1161# CONFIG_CRYPTO_LRW is not set
1162# CONFIG_CRYPTO_PCBC is not set
1163# CONFIG_CRYPTO_XTS is not set
1164
1165#
1166# Hash modes
1167#
1168CONFIG_CRYPTO_HMAC=y
1169# CONFIG_CRYPTO_XCBC is not set
1170
1171#
1172# Digest
1173#
1174# CONFIG_CRYPTO_CRC32C is not set
1175# CONFIG_CRYPTO_MD4 is not set
1176CONFIG_CRYPTO_MD5=y
1177# CONFIG_CRYPTO_MICHAEL_MIC is not set
1178# CONFIG_CRYPTO_RMD128 is not set
1179# CONFIG_CRYPTO_RMD160 is not set
1180# CONFIG_CRYPTO_RMD256 is not set
1181# CONFIG_CRYPTO_RMD320 is not set
1182CONFIG_CRYPTO_SHA1=y
1183# CONFIG_CRYPTO_SHA256 is not set
1184# CONFIG_CRYPTO_SHA512 is not set
1185# CONFIG_CRYPTO_TGR192 is not set
1186# CONFIG_CRYPTO_WP512 is not set
1187
1188#
1189# Ciphers
1190#
1191# CONFIG_CRYPTO_AES is not set
1192# CONFIG_CRYPTO_ANUBIS is not set
1193# CONFIG_CRYPTO_ARC4 is not set
1194# CONFIG_CRYPTO_BLOWFISH is not set
1195# CONFIG_CRYPTO_CAMELLIA is not set
1196# CONFIG_CRYPTO_CAST5 is not set
1197# CONFIG_CRYPTO_CAST6 is not set
1198CONFIG_CRYPTO_DES=y
1199# CONFIG_CRYPTO_FCRYPT is not set
1200# CONFIG_CRYPTO_KHAZAD is not set
1201# CONFIG_CRYPTO_SALSA20 is not set
1202# CONFIG_CRYPTO_SEED is not set
1203# CONFIG_CRYPTO_SERPENT is not set
1204# CONFIG_CRYPTO_TEA is not set
1205# CONFIG_CRYPTO_TWOFISH is not set
1206
1207#
1208# Compression
1209#
1210CONFIG_CRYPTO_DEFLATE=y
1211# CONFIG_CRYPTO_LZO is not set
1212
1213#
1214# Random Number Generation
1215#
1216# CONFIG_CRYPTO_ANSI_CPRNG is not set
1217# CONFIG_CRYPTO_HW is not set
1218
1219#
1220# Library routines
1221#
1222CONFIG_BITREVERSE=y
1223CONFIG_GENERIC_FIND_LAST_BIT=y
1224# CONFIG_CRC_CCITT is not set
1225# CONFIG_CRC16 is not set
1226# CONFIG_CRC_T10DIF is not set
1227# CONFIG_CRC_ITU_T is not set
1228CONFIG_CRC32=y
1229# CONFIG_CRC7 is not set
1230# CONFIG_LIBCRC32C is not set
1231CONFIG_ZLIB_INFLATE=y
1232CONFIG_ZLIB_DEFLATE=y
1233CONFIG_GENERIC_ALLOCATOR=y
1234CONFIG_PLIST=y
1235CONFIG_HAS_IOMEM=y
1236CONFIG_HAS_IOPORT=y
1237CONFIG_HAS_DMA=y
diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c
index 3fbfd1e32a9e..7cc653798327 100644
--- a/arch/avr32/mach-at32ap/at32ap700x.c
+++ b/arch/avr32/mach-at32ap/at32ap700x.c
@@ -26,6 +26,9 @@
26#include <mach/portmux.h> 26#include <mach/portmux.h>
27#include <mach/sram.h> 27#include <mach/sram.h>
28 28
29#include <sound/atmel-abdac.h>
30#include <sound/atmel-ac97c.h>
31
29#include <video/atmel_lcdc.h> 32#include <video/atmel_lcdc.h>
30 33
31#include "clock.h" 34#include "clock.h"
@@ -963,56 +966,68 @@ static struct resource atmel_usart3_resource[] = {
963DEFINE_DEV_DATA(atmel_usart, 3); 966DEFINE_DEV_DATA(atmel_usart, 3);
964DEV_CLK(usart, atmel_usart3, pba, 6); 967DEV_CLK(usart, atmel_usart3, pba, 6);
965 968
966static inline void configure_usart0_pins(void) 969static inline void configure_usart0_pins(int flags)
967{ 970{
968 u32 pin_mask = (1 << 8) | (1 << 9); /* RXD & TXD */ 971 u32 pin_mask = (1 << 8) | (1 << 9); /* RXD & TXD */
972 if (flags & ATMEL_USART_RTS) pin_mask |= (1 << 6);
973 if (flags & ATMEL_USART_CTS) pin_mask |= (1 << 7);
974 if (flags & ATMEL_USART_CLK) pin_mask |= (1 << 10);
969 975
970 select_peripheral(PIOA, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP); 976 select_peripheral(PIOA, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP);
971} 977}
972 978
973static inline void configure_usart1_pins(void) 979static inline void configure_usart1_pins(int flags)
974{ 980{
975 u32 pin_mask = (1 << 17) | (1 << 18); /* RXD & TXD */ 981 u32 pin_mask = (1 << 17) | (1 << 18); /* RXD & TXD */
982 if (flags & ATMEL_USART_RTS) pin_mask |= (1 << 19);
983 if (flags & ATMEL_USART_CTS) pin_mask |= (1 << 20);
984 if (flags & ATMEL_USART_CLK) pin_mask |= (1 << 16);
976 985
977 select_peripheral(PIOA, pin_mask, PERIPH_A, AT32_GPIOF_PULLUP); 986 select_peripheral(PIOA, pin_mask, PERIPH_A, AT32_GPIOF_PULLUP);
978} 987}
979 988
980static inline void configure_usart2_pins(void) 989static inline void configure_usart2_pins(int flags)
981{ 990{
982 u32 pin_mask = (1 << 26) | (1 << 27); /* RXD & TXD */ 991 u32 pin_mask = (1 << 26) | (1 << 27); /* RXD & TXD */
992 if (flags & ATMEL_USART_RTS) pin_mask |= (1 << 30);
993 if (flags & ATMEL_USART_CTS) pin_mask |= (1 << 29);
994 if (flags & ATMEL_USART_CLK) pin_mask |= (1 << 28);
983 995
984 select_peripheral(PIOB, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP); 996 select_peripheral(PIOB, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP);
985} 997}
986 998
987static inline void configure_usart3_pins(void) 999static inline void configure_usart3_pins(int flags)
988{ 1000{
989 u32 pin_mask = (1 << 18) | (1 << 17); /* RXD & TXD */ 1001 u32 pin_mask = (1 << 18) | (1 << 17); /* RXD & TXD */
1002 if (flags & ATMEL_USART_RTS) pin_mask |= (1 << 16);
1003 if (flags & ATMEL_USART_CTS) pin_mask |= (1 << 15);
1004 if (flags & ATMEL_USART_CLK) pin_mask |= (1 << 19);
990 1005
991 select_peripheral(PIOB, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP); 1006 select_peripheral(PIOB, pin_mask, PERIPH_B, AT32_GPIOF_PULLUP);
992} 1007}
993 1008
994static struct platform_device *__initdata at32_usarts[4]; 1009static struct platform_device *__initdata at32_usarts[4];
995 1010
996void __init at32_map_usart(unsigned int hw_id, unsigned int line) 1011void __init at32_map_usart(unsigned int hw_id, unsigned int line, int flags)
997{ 1012{
998 struct platform_device *pdev; 1013 struct platform_device *pdev;
999 1014
1000 switch (hw_id) { 1015 switch (hw_id) {
1001 case 0: 1016 case 0:
1002 pdev = &atmel_usart0_device; 1017 pdev = &atmel_usart0_device;
1003 configure_usart0_pins(); 1018 configure_usart0_pins(flags);
1004 break; 1019 break;
1005 case 1: 1020 case 1:
1006 pdev = &atmel_usart1_device; 1021 pdev = &atmel_usart1_device;
1007 configure_usart1_pins(); 1022 configure_usart1_pins(flags);
1008 break; 1023 break;
1009 case 2: 1024 case 2:
1010 pdev = &atmel_usart2_device; 1025 pdev = &atmel_usart2_device;
1011 configure_usart2_pins(); 1026 configure_usart2_pins(flags);
1012 break; 1027 break;
1013 case 3: 1028 case 3:
1014 pdev = &atmel_usart3_device; 1029 pdev = &atmel_usart3_device;
1015 configure_usart3_pins(); 1030 configure_usart3_pins(flags);
1016 break; 1031 break;
1017 default: 1032 default:
1018 return; 1033 return;
@@ -1753,7 +1768,7 @@ at32_add_device_usba(unsigned int id, struct usba_platform_data *data)
1753 if (platform_device_add_data(pdev, data, sizeof(usba_data))) 1768 if (platform_device_add_data(pdev, data, sizeof(usba_data)))
1754 goto out_free_pdev; 1769 goto out_free_pdev;
1755 1770
1756 if (data->vbus_pin >= 0) 1771 if (gpio_is_valid(data->vbus_pin))
1757 at32_select_gpio(data->vbus_pin, 0); 1772 at32_select_gpio(data->vbus_pin, 0);
1758 1773
1759 usba0_pclk.dev = &pdev->dev; 1774 usba0_pclk.dev = &pdev->dev;
@@ -1980,11 +1995,14 @@ static struct clk atmel_ac97c0_pclk = {
1980}; 1995};
1981 1996
1982struct platform_device *__init 1997struct platform_device *__init
1983at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data) 1998at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data,
1999 unsigned int flags)
1984{ 2000{
1985 struct platform_device *pdev; 2001 struct platform_device *pdev;
1986 struct ac97c_platform_data _data; 2002 struct dw_dma_slave *rx_dws;
1987 u32 pin_mask; 2003 struct dw_dma_slave *tx_dws;
2004 struct ac97c_platform_data _data;
2005 u32 pin_mask;
1988 2006
1989 if (id != 0) 2007 if (id != 0)
1990 return NULL; 2008 return NULL;
@@ -1995,37 +2013,52 @@ at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data)
1995 2013
1996 if (platform_device_add_resources(pdev, atmel_ac97c0_resource, 2014 if (platform_device_add_resources(pdev, atmel_ac97c0_resource,
1997 ARRAY_SIZE(atmel_ac97c0_resource))) 2015 ARRAY_SIZE(atmel_ac97c0_resource)))
1998 goto fail; 2016 goto out_free_resources;
1999 2017
2000 if (!data) { 2018 if (!data) {
2001 data = &_data; 2019 data = &_data;
2002 memset(data, 0, sizeof(struct ac97c_platform_data)); 2020 memset(data, 0, sizeof(struct ac97c_platform_data));
2003 data->reset_pin = GPIO_PIN_NONE; 2021 data->reset_pin = -ENODEV;
2004 } 2022 }
2005 2023
2006 data->dma_rx_periph_id = 3; 2024 rx_dws = &data->rx_dws;
2007 data->dma_tx_periph_id = 4; 2025 tx_dws = &data->tx_dws;
2008 data->dma_controller_id = 0; 2026
2027 /* Check if DMA slave interface for capture should be configured. */
2028 if (flags & AC97C_CAPTURE) {
2029 rx_dws->dma_dev = &dw_dmac0_device.dev;
2030 rx_dws->reg_width = DW_DMA_SLAVE_WIDTH_16BIT;
2031 rx_dws->cfg_hi = DWC_CFGH_SRC_PER(3);
2032 rx_dws->cfg_lo &= ~(DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL);
2033 }
2034
2035 /* Check if DMA slave interface for playback should be configured. */
2036 if (flags & AC97C_PLAYBACK) {
2037 tx_dws->dma_dev = &dw_dmac0_device.dev;
2038 tx_dws->reg_width = DW_DMA_SLAVE_WIDTH_16BIT;
2039 tx_dws->cfg_hi = DWC_CFGH_DST_PER(4);
2040 tx_dws->cfg_lo &= ~(DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL);
2041 }
2009 2042
2010 if (platform_device_add_data(pdev, data, 2043 if (platform_device_add_data(pdev, data,
2011 sizeof(struct ac97c_platform_data))) 2044 sizeof(struct ac97c_platform_data)))
2012 goto fail; 2045 goto out_free_resources;
2013 2046
2014 pin_mask = (1 << 20) | (1 << 21); /* SDO & SYNC */ 2047 /* SDO | SYNC | SCLK | SDI */
2015 pin_mask |= (1 << 22) | (1 << 23); /* SCLK & SDI */ 2048 pin_mask = (1 << 20) | (1 << 21) | (1 << 22) | (1 << 23);
2016 2049
2017 select_peripheral(PIOB, pin_mask, PERIPH_B, 0); 2050 select_peripheral(PIOB, pin_mask, PERIPH_B, 0);
2018 2051
2019 /* TODO: gpio_is_valid(data->reset_pin) with kernel 2.6.26. */ 2052 if (gpio_is_valid(data->reset_pin))
2020 if (data->reset_pin != GPIO_PIN_NONE) 2053 at32_select_gpio(data->reset_pin, AT32_GPIOF_OUTPUT
2021 at32_select_gpio(data->reset_pin, 0); 2054 | AT32_GPIOF_HIGH);
2022 2055
2023 atmel_ac97c0_pclk.dev = &pdev->dev; 2056 atmel_ac97c0_pclk.dev = &pdev->dev;
2024 2057
2025 platform_device_add(pdev); 2058 platform_device_add(pdev);
2026 return pdev; 2059 return pdev;
2027 2060
2028fail: 2061out_free_resources:
2029 platform_device_put(pdev); 2062 platform_device_put(pdev);
2030 return NULL; 2063 return NULL;
2031} 2064}
@@ -2053,21 +2086,34 @@ static struct clk abdac0_sample_clk = {
2053 .index = 6, 2086 .index = 6,
2054}; 2087};
2055 2088
2056struct platform_device *__init at32_add_device_abdac(unsigned int id) 2089struct platform_device *__init
2090at32_add_device_abdac(unsigned int id, struct atmel_abdac_pdata *data)
2057{ 2091{
2058 struct platform_device *pdev; 2092 struct platform_device *pdev;
2059 u32 pin_mask; 2093 struct dw_dma_slave *dws;
2094 u32 pin_mask;
2060 2095
2061 if (id != 0) 2096 if (id != 0 || !data)
2062 return NULL; 2097 return NULL;
2063 2098
2064 pdev = platform_device_alloc("abdac", id); 2099 pdev = platform_device_alloc("atmel_abdac", id);
2065 if (!pdev) 2100 if (!pdev)
2066 return NULL; 2101 return NULL;
2067 2102
2068 if (platform_device_add_resources(pdev, abdac0_resource, 2103 if (platform_device_add_resources(pdev, abdac0_resource,
2069 ARRAY_SIZE(abdac0_resource))) 2104 ARRAY_SIZE(abdac0_resource)))
2070 goto err_add_resources; 2105 goto out_free_resources;
2106
2107 dws = &data->dws;
2108
2109 dws->dma_dev = &dw_dmac0_device.dev;
2110 dws->reg_width = DW_DMA_SLAVE_WIDTH_32BIT;
2111 dws->cfg_hi = DWC_CFGH_DST_PER(2);
2112 dws->cfg_lo &= ~(DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL);
2113
2114 if (platform_device_add_data(pdev, data,
2115 sizeof(struct atmel_abdac_pdata)))
2116 goto out_free_resources;
2071 2117
2072 pin_mask = (1 << 20) | (1 << 22); /* DATA1 & DATAN1 */ 2118 pin_mask = (1 << 20) | (1 << 22); /* DATA1 & DATAN1 */
2073 pin_mask |= (1 << 21) | (1 << 23); /* DATA0 & DATAN0 */ 2119 pin_mask |= (1 << 21) | (1 << 23); /* DATA0 & DATAN0 */
@@ -2080,7 +2126,7 @@ struct platform_device *__init at32_add_device_abdac(unsigned int id)
2080 platform_device_add(pdev); 2126 platform_device_add(pdev);
2081 return pdev; 2127 return pdev;
2082 2128
2083err_add_resources: 2129out_free_resources:
2084 platform_device_put(pdev); 2130 platform_device_put(pdev);
2085 return NULL; 2131 return NULL;
2086} 2132}
diff --git a/arch/avr32/mach-at32ap/include/mach/at32ap700x.h b/arch/avr32/mach-at32ap/include/mach/at32ap700x.h
index 5c4c971eed8e..b9222bf895bc 100644
--- a/arch/avr32/mach-at32ap/include/mach/at32ap700x.h
+++ b/arch/avr32/mach-at32ap/include/mach/at32ap700x.h
@@ -171,25 +171,49 @@
171 ATMEL_LCDC(PE, DATA20) | ATMEL_LCDC(PE, DATA21) | \ 171 ATMEL_LCDC(PE, DATA20) | ATMEL_LCDC(PE, DATA21) | \
172 ATMEL_LCDC(PD, DATA22) | ATMEL_LCDC(PD, DATA23)) 172 ATMEL_LCDC(PD, DATA22) | ATMEL_LCDC(PD, DATA23))
173 173
174#define ATMEL_LCDC_PRI_15B_DATA ( \ 174#define ATMEL_LCDC_PRI_18B_DATA ( \
175 ATMEL_LCDC(PC, DATA0) | ATMEL_LCDC(PC, DATA1) | \
176 ATMEL_LCDC(PC, DATA2) | ATMEL_LCDC(PC, DATA3) | \ 175 ATMEL_LCDC(PC, DATA2) | ATMEL_LCDC(PC, DATA3) | \
177 ATMEL_LCDC(PC, DATA4) | ATMEL_LCDC(PC, DATA5) | \ 176 ATMEL_LCDC(PC, DATA4) | ATMEL_LCDC(PC, DATA5) | \
178 ATMEL_LCDC(PD, DATA8) | ATMEL_LCDC(PD, DATA9) | \ 177 ATMEL_LCDC(PD, DATA6) | ATMEL_LCDC(PD, DATA7) | \
179 ATMEL_LCDC(PD, DATA10) | ATMEL_LCDC(PD, DATA11) | \ 178 ATMEL_LCDC(PD, DATA10) | ATMEL_LCDC(PD, DATA11) | \
180 ATMEL_LCDC(PD, DATA12) | ATMEL_LCDC(PD, DATA16) | \ 179 ATMEL_LCDC(PD, DATA12) | ATMEL_LCDC(PD, DATA13) | \
181 ATMEL_LCDC(PD, DATA17) | ATMEL_LCDC(PD, DATA18) | \ 180 ATMEL_LCDC(PD, DATA14) | ATMEL_LCDC(PD, DATA15) | \
182 ATMEL_LCDC(PD, DATA19) | ATMEL_LCDC(PD, DATA20)) 181 ATMEL_LCDC(PD, DATA18) | ATMEL_LCDC(PD, DATA19) | \
182 ATMEL_LCDC(PD, DATA20) | ATMEL_LCDC(PD, DATA21) | \
183 ATMEL_LCDC(PD, DATA22) | ATMEL_LCDC(PD, DATA23))
183 184
184#define ATMEL_LCDC_ALT_15B_DATA ( \ 185#define ATMEL_LCDC_ALT_18B_DATA ( \
185 ATMEL_LCDC(PE, DATA0) | ATMEL_LCDC(PE, DATA1) | \
186 ATMEL_LCDC(PE, DATA2) | ATMEL_LCDC(PE, DATA3) | \ 186 ATMEL_LCDC(PE, DATA2) | ATMEL_LCDC(PE, DATA3) | \
187 ATMEL_LCDC(PE, DATA4) | ATMEL_LCDC(PC, DATA5) | \ 187 ATMEL_LCDC(PE, DATA4) | ATMEL_LCDC(PC, DATA5) | \
188 ATMEL_LCDC(PE, DATA8) | ATMEL_LCDC(PE, DATA9) | \ 188 ATMEL_LCDC(PD, DATA6) | ATMEL_LCDC(PD, DATA7) | \
189 ATMEL_LCDC(PE, DATA10) | ATMEL_LCDC(PE, DATA11) | \ 189 ATMEL_LCDC(PE, DATA10) | ATMEL_LCDC(PE, DATA11) | \
190 ATMEL_LCDC(PE, DATA12) | ATMEL_LCDC(PE, DATA16) | \ 190 ATMEL_LCDC(PE, DATA12) | ATMEL_LCDC(PD, DATA13) | \
191 ATMEL_LCDC(PE, DATA17) | ATMEL_LCDC(PE, DATA18) | \ 191 ATMEL_LCDC(PD, DATA14) | ATMEL_LCDC(PD, DATA15) | \
192 ATMEL_LCDC(PE, DATA19) | ATMEL_LCDC(PE, DATA20)) 192 ATMEL_LCDC(PE, DATA18) | ATMEL_LCDC(PE, DATA19) | \
193 ATMEL_LCDC(PE, DATA20) | ATMEL_LCDC(PE, DATA21) | \
194 ATMEL_LCDC(PD, DATA22) | ATMEL_LCDC(PD, DATA23))
195
196#define ATMEL_LCDC_PRI_15B_DATA ( \
197 ATMEL_LCDC(PC, DATA3) | ATMEL_LCDC(PC, DATA4) | \
198 ATMEL_LCDC(PC, DATA5) | ATMEL_LCDC(PD, DATA6) | \
199 ATMEL_LCDC(PD, DATA7) | \
200 ATMEL_LCDC(PD, DATA11) | ATMEL_LCDC(PD, DATA12) | \
201 ATMEL_LCDC(PD, DATA13) | ATMEL_LCDC(PD, DATA14) | \
202 ATMEL_LCDC(PD, DATA15) | \
203 ATMEL_LCDC(PD, DATA19) | ATMEL_LCDC(PD, DATA20) | \
204 ATMEL_LCDC(PD, DATA21) | ATMEL_LCDC(PD, DATA22) | \
205 ATMEL_LCDC(PD, DATA23))
206
207#define ATMEL_LCDC_ALT_15B_DATA ( \
208 ATMEL_LCDC(PE, DATA3) | ATMEL_LCDC(PE, DATA4) | \
209 ATMEL_LCDC(PC, DATA5) | ATMEL_LCDC(PD, DATA6) | \
210 ATMEL_LCDC(PD, DATA7) | \
211 ATMEL_LCDC(PE, DATA11) | ATMEL_LCDC(PE, DATA12) | \
212 ATMEL_LCDC(PD, DATA13) | ATMEL_LCDC(PD, DATA14) | \
213 ATMEL_LCDC(PD, DATA15) | \
214 ATMEL_LCDC(PE, DATA19) | ATMEL_LCDC(PE, DATA20) | \
215 ATMEL_LCDC(PE, DATA21) | ATMEL_LCDC(PD, DATA22) | \
216 ATMEL_LCDC(PD, DATA23))
193 217
194#define ATMEL_LCDC_PRI_CONTROL ( \ 218#define ATMEL_LCDC_PRI_CONTROL ( \
195 ATMEL_LCDC(PC, CC) | ATMEL_LCDC(PC, DVAL) | \ 219 ATMEL_LCDC(PC, CC) | ATMEL_LCDC(PC, DVAL) | \
@@ -207,6 +231,10 @@
207 231
208#define ATMEL_LCDC_ALT_24BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_24B_DATA) 232#define ATMEL_LCDC_ALT_24BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_24B_DATA)
209 233
234#define ATMEL_LCDC_PRI_18BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_PRI_18B_DATA)
235
236#define ATMEL_LCDC_ALT_18BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_18B_DATA)
237
210#define ATMEL_LCDC_PRI_15BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_PRI_15B_DATA) 238#define ATMEL_LCDC_PRI_15BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_PRI_15B_DATA)
211 239
212#define ATMEL_LCDC_ALT_15BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_15B_DATA) 240#define ATMEL_LCDC_ALT_15BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_15B_DATA)
diff --git a/arch/avr32/mach-at32ap/include/mach/board.h b/arch/avr32/mach-at32ap/include/mach/board.h
index cff8e84f78f2..0b8164281899 100644
--- a/arch/avr32/mach-at32ap/include/mach/board.h
+++ b/arch/avr32/mach-at32ap/include/mach/board.h
@@ -13,7 +13,7 @@
13 * in this array is chip-dependent. 13 * in this array is chip-dependent.
14 */ 14 */
15extern unsigned long at32_board_osc_rates[]; 15extern unsigned long at32_board_osc_rates[];
16 16
17/* 17/*
18 * This used to add essential system devices, but this is now done 18 * This used to add essential system devices, but this is now done
19 * automatically. Please don't use it in new board code. 19 * automatically. Please don't use it in new board code.
@@ -26,12 +26,17 @@ static inline void __deprecated at32_add_system_devices(void)
26#define ATMEL_MAX_UART 4 26#define ATMEL_MAX_UART 4
27extern struct platform_device *atmel_default_console_device; 27extern struct platform_device *atmel_default_console_device;
28 28
29/* Flags for selecting USART extra pins */
30#define ATMEL_USART_RTS 0x01
31#define ATMEL_USART_CTS 0x02
32#define ATMEL_USART_CLK 0x03
33
29struct atmel_uart_data { 34struct atmel_uart_data {
30 short use_dma_tx; /* use transmit DMA? */ 35 short use_dma_tx; /* use transmit DMA? */
31 short use_dma_rx; /* use receive DMA? */ 36 short use_dma_rx; /* use receive DMA? */
32 void __iomem *regs; /* virtual base address, if any */ 37 void __iomem *regs; /* virtual base address, if any */
33}; 38};
34void at32_map_usart(unsigned int hw_id, unsigned int line); 39void at32_map_usart(unsigned int hw_id, unsigned int line, int flags);
35struct platform_device *at32_add_device_usart(unsigned int id); 40struct platform_device *at32_add_device_usart(unsigned int id);
36 41
37struct eth_platform_data { 42struct eth_platform_data {
@@ -88,16 +93,15 @@ struct mci_platform_data;
88struct platform_device * 93struct platform_device *
89at32_add_device_mci(unsigned int id, struct mci_platform_data *data); 94at32_add_device_mci(unsigned int id, struct mci_platform_data *data);
90 95
91struct ac97c_platform_data { 96struct ac97c_platform_data;
92 unsigned short dma_rx_periph_id; 97struct platform_device *
93 unsigned short dma_tx_periph_id; 98at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data,
94 unsigned short dma_controller_id; 99 unsigned int flags);
95 int reset_pin; 100
96}; 101struct atmel_abdac_pdata;
97struct platform_device * 102struct platform_device *
98at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data); 103at32_add_device_abdac(unsigned int id, struct atmel_abdac_pdata *data);
99 104
100struct platform_device *at32_add_device_abdac(unsigned int id);
101struct platform_device *at32_add_device_psif(unsigned int id); 105struct platform_device *at32_add_device_psif(unsigned int id);
102 106
103struct cf_platform_data { 107struct cf_platform_data {
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c
index 8f58f7ff0dd7..b3497d7e5354 100644
--- a/drivers/serial/atmel_serial.c
+++ b/drivers/serial/atmel_serial.c
@@ -1020,7 +1020,8 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
1020 1020
1021 /* Get current mode register */ 1021 /* Get current mode register */
1022 mode = UART_GET_MR(port) & ~(ATMEL_US_USCLKS | ATMEL_US_CHRL 1022 mode = UART_GET_MR(port) & ~(ATMEL_US_USCLKS | ATMEL_US_CHRL
1023 | ATMEL_US_NBSTOP | ATMEL_US_PAR); 1023 | ATMEL_US_NBSTOP | ATMEL_US_PAR
1024 | ATMEL_US_USMODE);
1024 1025
1025 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); 1026 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
1026 quot = uart_get_divisor(port, baud); 1027 quot = uart_get_divisor(port, baud);
@@ -1065,6 +1066,12 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
1065 } else 1066 } else
1066 mode |= ATMEL_US_PAR_NONE; 1067 mode |= ATMEL_US_PAR_NONE;
1067 1068
1069 /* hardware handshake (RTS/CTS) */
1070 if (termios->c_cflag & CRTSCTS)
1071 mode |= ATMEL_US_USMODE_HWHS;
1072 else
1073 mode |= ATMEL_US_USMODE_NORMAL;
1074
1068 spin_lock_irqsave(&port->lock, flags); 1075 spin_lock_irqsave(&port->lock, flags);
1069 1076
1070 port->read_status_mask = ATMEL_US_OVRE; 1077 port->read_status_mask = ATMEL_US_OVRE;
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index c22fab164113..563d57275448 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -319,7 +319,7 @@ static inline void usba_cleanup_debugfs(struct usba_udc *udc)
319 319
320static int vbus_is_present(struct usba_udc *udc) 320static int vbus_is_present(struct usba_udc *udc)
321{ 321{
322 if (udc->vbus_pin != -1) 322 if (gpio_is_valid(udc->vbus_pin))
323 return gpio_get_value(udc->vbus_pin); 323 return gpio_get_value(udc->vbus_pin);
324 324
325 /* No Vbus detection: Assume always present */ 325 /* No Vbus detection: Assume always present */
@@ -1821,7 +1821,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1821 DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name); 1821 DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
1822 1822
1823 udc->vbus_prev = 0; 1823 udc->vbus_prev = 0;
1824 if (udc->vbus_pin != -1) 1824 if (gpio_is_valid(udc->vbus_pin))
1825 enable_irq(gpio_to_irq(udc->vbus_pin)); 1825 enable_irq(gpio_to_irq(udc->vbus_pin));
1826 1826
1827 /* If Vbus is present, enable the controller and wait for reset */ 1827 /* If Vbus is present, enable the controller and wait for reset */
@@ -1852,7 +1852,7 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
1852 if (driver != udc->driver || !driver->unbind) 1852 if (driver != udc->driver || !driver->unbind)
1853 return -EINVAL; 1853 return -EINVAL;
1854 1854
1855 if (udc->vbus_pin != -1) 1855 if (gpio_is_valid(udc->vbus_pin))
1856 disable_irq(gpio_to_irq(udc->vbus_pin)); 1856 disable_irq(gpio_to_irq(udc->vbus_pin));
1857 1857
1858 spin_lock_irqsave(&udc->lock, flags); 1858 spin_lock_irqsave(&udc->lock, flags);
@@ -1910,7 +1910,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
1910 udc->pdev = pdev; 1910 udc->pdev = pdev;
1911 udc->pclk = pclk; 1911 udc->pclk = pclk;
1912 udc->hclk = hclk; 1912 udc->hclk = hclk;
1913 udc->vbus_pin = -1; 1913 udc->vbus_pin = -ENODEV;
1914 1914
1915 ret = -ENOMEM; 1915 ret = -ENOMEM;
1916 udc->regs = ioremap(regs->start, regs->end - regs->start + 1); 1916 udc->regs = ioremap(regs->start, regs->end - regs->start + 1);
@@ -1996,7 +1996,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
1996 goto err_device_add; 1996 goto err_device_add;
1997 } 1997 }
1998 1998
1999 if (pdata->vbus_pin >= 0) { 1999 if (gpio_is_valid(pdata->vbus_pin)) {
2000 if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) { 2000 if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) {
2001 udc->vbus_pin = pdata->vbus_pin; 2001 udc->vbus_pin = pdata->vbus_pin;
2002 2002
@@ -2005,7 +2005,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
2005 "atmel_usba_udc", udc); 2005 "atmel_usba_udc", udc);
2006 if (ret) { 2006 if (ret) {
2007 gpio_free(udc->vbus_pin); 2007 gpio_free(udc->vbus_pin);
2008 udc->vbus_pin = -1; 2008 udc->vbus_pin = -ENODEV;
2009 dev_warn(&udc->pdev->dev, 2009 dev_warn(&udc->pdev->dev,
2010 "failed to request vbus irq; " 2010 "failed to request vbus irq; "
2011 "assuming always on\n"); 2011 "assuming always on\n");
@@ -2051,7 +2051,7 @@ static int __exit usba_udc_remove(struct platform_device *pdev)
2051 usba_ep_cleanup_debugfs(&usba_ep[i]); 2051 usba_ep_cleanup_debugfs(&usba_ep[i]);
2052 usba_cleanup_debugfs(udc); 2052 usba_cleanup_debugfs(udc);
2053 2053
2054 if (udc->vbus_pin != -1) 2054 if (gpio_is_valid(udc->vbus_pin))
2055 gpio_free(udc->vbus_pin); 2055 gpio_free(udc->vbus_pin);
2056 2056
2057 free_irq(udc->irq, udc); 2057 free_irq(udc->irq, udc);