From: Imre Kaloz Date: Thu, 12 Jul 2007 14:11:31 +0000 (+0000) Subject: upgrade AVR32 to 2.6.22.1 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a92ca5e6b88f244554e72c60aa1d2372a7e1eeff;p=librecmc%2Flibrecmc.git upgrade AVR32 to 2.6.22.1 SVN-Revision: 7945 --- diff --git a/target/linux/avr32-2.6/Makefile b/target/linux/avr32-2.6/Makefile index 465d96c93d..f58b9e8386 100644 --- a/target/linux/avr32-2.6/Makefile +++ b/target/linux/avr32-2.6/Makefile @@ -11,7 +11,7 @@ BOARD:=avr32 BOARDNAME:=Atmel AVR32 FEATURES:=squashfs -LINUX_VERSION:=2.6.21.5 +LINUX_VERSION:=2.6.22.1 define Target/Description Build firmware images for ATNGW100 board diff --git a/target/linux/avr32-2.6/config/default b/target/linux/avr32-2.6/config/default index 5bd7078c94..1c0f9645af 100644 --- a/target/linux/avr32-2.6/config/default +++ b/target/linux/avr32-2.6/config/default @@ -6,11 +6,25 @@ CONFIG_AP7000_16_BIT_SMC=y CONFIG_AVR32=y CONFIG_BOARD_ATNGW100=y # CONFIG_BOARD_ATSTK1000 is not set +# CONFIG_BROADCOM_PHY is not set # CONFIG_BT is not set CONFIG_CPU_AT32AP7000=y +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_STAT is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_AT32AP=y CONFIG_DW_DMAC=y CONFIG_ENTRY_ADDRESS=0x90000000 +# CONFIG_FIXED_PHY is not set # CONFIG_GEN_RTC is not set +# CONFIG_GPIO_DEV is not set # CONFIG_HZ_100 is not set CONFIG_HZ=250 CONFIG_HZ_250=y @@ -18,6 +32,7 @@ CONFIG_HZ_250=y # CONFIG_I2C is not set # CONFIG_IDE is not set CONFIG_INITRAMFS_SOURCE="" +CONFIG_LEDS_GPIO=y CONFIG_MACB=y # CONFIG_MTD_ABSENT is not set CONFIG_MTD_BLKDEVS=y @@ -72,11 +87,13 @@ CONFIG_MTD=y # CONFIG_OWNERSHIP_TRACE is not set CONFIG_PHYS_OFFSET=0x10000000 CONFIG_PLATFORM_AT32AP=y +# CONFIG_QSEMI_PHY is not set # CONFIG_RTC is not set # CONFIG_SERIAL_8250 is not set CONFIG_SERIAL_ATMEL_CONSOLE=y # CONFIG_SERIAL_ATMEL_TTYAT is not set CONFIG_SERIAL_ATMEL=y +# CONFIG_SMSC_PHY is not set # CONFIG_SPI_AT25 is not set CONFIG_SPI_ATMEL=y # CONFIG_SPI_BITBANG is not set diff --git a/target/linux/avr32-2.6/patches/100-git_sync.patch b/target/linux/avr32-2.6/patches/100-git_sync.patch index 5c5cc8e7fb..7653c5ff0c 100644 --- a/target/linux/avr32-2.6/patches/100-git_sync.patch +++ b/target/linux/avr32-2.6/patches/100-git_sync.patch @@ -1,445 +1,391 @@ -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atngw100/flash.c avr32-git/arch/avr32/boards/atngw100/flash.c ---- linux-2.6.21.3/arch/avr32/boards/atngw100/flash.c 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atngw100/flash.c 2007-06-06 11:33:46.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* -+ * ATNGW100 board-specific flash initialization -+ * -+ * Copyright (C) 2005-2006 Atmel Corporation -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+static struct smc_config flash_config __initdata = { -+ .ncs_read_setup = 0, -+ .nrd_setup = 40, -+ .ncs_write_setup = 0, -+ .nwe_setup = 10, -+ -+ .ncs_read_pulse = 80, -+ .nrd_pulse = 40, -+ .ncs_write_pulse = 65, -+ .nwe_pulse = 55, -+ -+ .read_cycle = 120, -+ .write_cycle = 120, -+ -+ .bus_width = 2, -+ .nrd_controlled = 1, -+ .nwe_controlled = 1, -+ .byte_write = 1, +diff -x .git -Nur linux-2.6.22.1/arch/avr32/boards/atngw100/setup.c linux-avr32.git/arch/avr32/boards/atngw100/setup.c +--- linux-2.6.22.1/arch/avr32/boards/atngw100/setup.c 2007-07-10 20:56:30.000000000 +0200 ++++ linux-avr32.git/arch/avr32/boards/atngw100/setup.c 2007-07-12 13:59:49.000000000 +0200 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -21,6 +22,7 @@ + #include + #include + #include ++#include + + /* Initialized by bootloader-specific startup code. */ + struct tag *bootloader_tags __initdata; +@@ -39,6 +41,11 @@ + }, + }; + ++static struct mci_platform_data __initdata mci0_data = { ++ .detect_pin = GPIO_PIN_PC(25), ++ .wp_pin = GPIO_PIN_PE(0), +}; + -+static struct mtd_partition flash_parts[] = { -+ { -+ .name = "u-boot", -+ .offset = 0x00000000, -+ .size = 0x00020000, /* 128 KiB */ -+ .mask_flags = MTD_WRITEABLE, -+ }, -+ { -+ .name = "root", -+ .offset = 0x00020000, -+ .size = 0x007d0000, -+ }, -+ { -+ .name = "env", -+ .offset = 0x007f0000, -+ .size = 0x00010000, -+ .mask_flags = MTD_WRITEABLE, + /* + * The next two functions should go away as the boot loader is + * supposed to initialize the macb address registers with a valid +@@ -100,8 +107,31 @@ + at32_setup_serial_console(0); + } + ++static const struct gpio_led ngw_leds[] = { ++ { .name = "sys", .gpio = GPIO_PIN_PA(16), .active_low = 1, ++ .default_trigger = "heartbeat", + }, ++ { .name = "a", .gpio = GPIO_PIN_PA(19), .active_low = 1, }, ++ { .name = "b", .gpio = GPIO_PIN_PE(19), .active_low = 1, }, ++}; ++ ++static const struct gpio_led_platform_data ngw_led_data = { ++ .num_leds = ARRAY_SIZE(ngw_leds), ++ .leds = (void *) ngw_leds, ++}; ++ ++static struct platform_device ngw_gpio_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = (void *) &ngw_led_data, ++ } +}; + -+static struct physmap_flash_data flash_data = { -+ .width = 2, -+ .nr_parts = ARRAY_SIZE(flash_parts), -+ .parts = flash_parts, + static int __init atngw100_init(void) + { ++ unsigned i; ++ + /* + * ATNGW100 uses 16-bit SDRAM interface, so we don't need to + * reserve any pins for it. +@@ -115,6 +145,14 @@ + set_hw_addr(at32_add_device_eth(1, ð_data[1])); + + at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); ++ at32_add_device_mci(0, &mci0_data); ++ at32_add_device_usba(0, NULL); ++ ++ for (i = 0; i < ARRAY_SIZE(ngw_leds); i++) { ++ at32_select_gpio(ngw_leds[i].gpio, ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ } ++ platform_device_register(&ngw_gpio_leds); + + return 0; + } +diff -x .git -Nur linux-2.6.22.1/arch/avr32/boards/atstk1000/atstk1002.c linux-avr32.git/arch/avr32/boards/atstk1000/atstk1002.c +--- linux-2.6.22.1/arch/avr32/boards/atstk1000/atstk1002.c 2007-07-10 20:56:30.000000000 +0200 ++++ linux-avr32.git/arch/avr32/boards/atstk1000/atstk1002.c 2007-07-12 13:59:49.000000000 +0200 +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -27,7 +28,6 @@ + + #include "atstk1000.h" + +-#define SW2_DEFAULT /* MMCI and UART_A available */ + + struct eth_addr { + u8 addr[6]; +@@ -36,6 +36,7 @@ + static struct eth_addr __initdata hw_addr[2]; + static struct eth_platform_data __initdata eth_data[2]; + ++#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM + static struct spi_board_info spi0_board_info[] __initdata = { + { + /* QVGA display */ +@@ -45,6 +46,18 @@ + .mode = SPI_MODE_3, + }, + }; ++#endif ++ ++#ifdef CONFIG_BOARD_ATSTK1002_SPI1 ++static struct spi_board_info spi1_board_info[] __initdata = { { ++ /* patch in custom entries here */ ++} }; ++#endif ++ ++static struct mci_platform_data __initdata mci0_data = { ++ .detect_pin = GPIO_PIN_NONE, ++ .wp_pin = GPIO_PIN_NONE, ++}; + + /* + * The next two functions should go away as the boot loader is +@@ -101,12 +114,71 @@ + clk_put(pclk); + } + +-void __init setup_board(void) ++#ifdef CONFIG_BOARD_ATSTK1002_J2_LED ++ ++static struct gpio_led stk_j2_led[] = { ++#ifdef CONFIG_BOARD_ATSTK1002_J2_LED8 ++#define LEDSTRING "J2 jumpered to LED8" ++ { .name = "led0:amber", .gpio = GPIO_PIN_PB( 8), }, ++ { .name = "led1:amber", .gpio = GPIO_PIN_PB( 9), }, ++ { .name = "led2:amber", .gpio = GPIO_PIN_PB(10), }, ++ { .name = "led3:amber", .gpio = GPIO_PIN_PB(13), }, ++ { .name = "led4:amber", .gpio = GPIO_PIN_PB(14), }, ++ { .name = "led5:amber", .gpio = GPIO_PIN_PB(15), }, ++ { .name = "led6:amber", .gpio = GPIO_PIN_PB(16), }, ++ { .name = "led7:amber", .gpio = GPIO_PIN_PB(30), ++ .default_trigger = "heartbeat", }, ++#else /* RGB */ ++#define LEDSTRING "J2 jumpered to RGB LEDs" ++ { .name = "r1:red", .gpio = GPIO_PIN_PB( 8), }, ++ { .name = "g1:green", .gpio = GPIO_PIN_PB(10), }, ++ { .name = "b1:blue", .gpio = GPIO_PIN_PB(14), }, ++ ++ { .name = "r2:red", .gpio = GPIO_PIN_PB( 9), ++ .default_trigger = "heartbeat", }, ++ { .name = "g2:green", .gpio = GPIO_PIN_PB(13), }, ++ { .name = "b2:blue", .gpio = GPIO_PIN_PB(15), ++ .default_trigger = "heartbeat", }, ++ /* PB16, PB30 unused */ ++#endif +}; + -+static struct resource flash_resource = { -+ .start = 0x00000000, -+ .end = 0x007fffff, -+ .flags = IORESOURCE_MEM, ++static struct gpio_led_platform_data stk_j2_led_data = { ++ .num_leds = ARRAY_SIZE(stk_j2_led), ++ .leds = stk_j2_led, +}; + -+static struct platform_device flash_device = { -+ .name = "physmap-flash", -+ .id = 0, -+ .resource = &flash_resource, -+ .num_resources = 1, ++static struct platform_device stk_j2_led_dev = { ++ .name = "leds-gpio", ++ .id = 2, /* gpio block J2 */ + .dev = { -+ .platform_data = &flash_data, ++ .platform_data = &stk_j2_led_data, + }, +}; + -+/* This needs to be called after the SMC has been initialized */ -+static int __init atngw100_flash_init(void) -+{ -+ int ret; ++static void setup_j2_leds(void) + { +-#ifdef SW2_DEFAULT +- at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ ++ unsigned i; + -+ ret = smc_set_configuration(0, &flash_config); -+ if (ret < 0) { -+ printk(KERN_ERR "atngw100: failed to set NOR flash timing\n"); -+ return ret; -+ } ++ for (i = 0; i < ARRAY_SIZE(stk_j2_led); i++) ++ at32_select_gpio(stk_j2_led[i].gpio, AT32_GPIOF_OUTPUT); + -+ platform_device_register(&flash_device); ++ printk("STK1002: " LEDSTRING "\n"); ++ platform_device_register(&stk_j2_led_dev); ++} + -+ return 0; + #else ++static void setup_j2_leds(void) ++{ +} -+device_initcall(atngw100_flash_init); -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atngw100/Makefile avr32-git/arch/avr32/boards/atngw100/Makefile ---- linux-2.6.21.3/arch/avr32/boards/atngw100/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atngw100/Makefile 2007-06-06 11:33:46.000000000 +0200 -@@ -0,0 +1 @@ -+obj-y += setup.o flash.o -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atngw100/setup.c avr32-git/arch/avr32/boards/atngw100/setup.c ---- linux-2.6.21.3/arch/avr32/boards/atngw100/setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atngw100/setup.c 2007-06-06 11:33:46.000000000 +0200 -@@ -0,0 +1,131 @@ -+/* -+ * Board-specific setup code for the ATNGW100 Network Gateway -+ * -+ * Copyright (C) 2005-2006 Atmel Corporation -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include ++#endif + -+#include -+#include ++void __init setup_board(void) ++{ ++#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM + at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */ ++#else ++ at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ + #endif + /* USART 2/unused: expansion connector */ + at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */ +@@ -140,18 +212,40 @@ + + at32_add_system_devices(); + +-#ifdef SW2_DEFAULT +- at32_add_device_usart(0); +-#else ++#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM + at32_add_device_usart(1); ++#else ++ at32_add_device_usart(0); + #endif + at32_add_device_usart(2); + ++#ifndef CONFIG_BOARD_ATSTK1002_SW6_CUSTOM + set_hw_addr(at32_add_device_eth(0, ð_data[0])); +- +- at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); ++#endif ++#ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM ++ set_hw_addr(at32_add_device_eth(1, ð_data[1])); ++#else + at32_add_device_lcdc(0, &atstk1000_lcdc_data, + fbmem_start, fbmem_size); ++#endif + -+#include -+#include -+#include ++#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM ++ at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); ++#endif ++#ifdef CONFIG_BOARD_ATSTK1002_SPI1 ++ at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); ++#endif ++ at32_add_device_twi(0); ++#ifndef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM ++ at32_add_device_mci(0, &mci0_data); ++#endif ++ at32_add_device_usba(0, NULL); ++ at32_add_device_abdac(0); ++#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM ++ at32_add_device_ssc(0, ATMEL_SSC_TX); ++#endif + -+/* Initialized by bootloader-specific startup code. */ -+struct tag *bootloader_tags __initdata; ++ setup_j2_leds(); + + return 0; + } +diff -x .git -Nur linux-2.6.22.1/arch/avr32/boards/atstk1000/Kconfig linux-avr32.git/arch/avr32/boards/atstk1000/Kconfig +--- linux-2.6.22.1/arch/avr32/boards/atstk1000/Kconfig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-avr32.git/arch/avr32/boards/atstk1000/Kconfig 2007-07-12 13:59:49.000000000 +0200 +@@ -0,0 +1,79 @@ ++# STK1000 customization + -+struct eth_addr { -+ u8 addr[6]; -+}; -+static struct eth_addr __initdata hw_addr[2]; -+static struct eth_platform_data __initdata eth_data[2]; ++if BOARD_ATSTK1002 + -+static struct spi_board_info spi0_board_info[] __initdata = { -+ { -+ .modalias = "mtd_dataflash", -+ .max_speed_hz = 10000000, -+ .chip_select = 0, -+ }, -+}; ++config BOARD_ATSTK1002_CUSTOM ++ bool "Non-default STK-1002 jumper settings" ++ help ++ You will normally leave the jumpers on the CPU card at their ++ default settings. If you need to use certain peripherals, ++ you will need to change some of those jumpers. + -+static struct mci_platform_data __initdata mci0_data = { -+ .detect_pin = GPIO_PIN_PC(25), -+ .wp_pin = GPIO_PIN_PE(0), -+}; ++if BOARD_ATSTK1002_CUSTOM + -+/* -+ * The next two functions should go away as the boot loader is -+ * supposed to initialize the macb address registers with a valid -+ * ethernet address. But we need to keep it around for a while until -+ * we can be reasonably sure the boot loader does this. -+ * -+ * The phy_id is ignored as the driver will probe for it. -+ */ -+static int __init parse_tag_ethernet(struct tag *tag) -+{ -+ int i; ++config BOARD_ATSTK1002_SW1_CUSTOM ++ bool "SW1: use SSC1 (not SPI0)" ++ help ++ This also prevents using the external DAC as an audio interface, ++ and means you can't initialize the on-board QVGA display. + -+ i = tag->u.ethernet.mac_index; -+ if (i < ARRAY_SIZE(hw_addr)) -+ memcpy(hw_addr[i].addr, tag->u.ethernet.hw_address, -+ sizeof(hw_addr[i].addr)); ++config BOARD_ATSTK1002_SW2_CUSTOM ++ bool "SW2: use IRDA or TIMER0 (not UART-A, MMC/SD, and PS2-A)" ++ help ++ If you change this you'll want an updated boot loader putting ++ the console on UART-C not UART-A. + -+ return 0; -+} -+__tagtable(ATAG_ETHERNET, parse_tag_ethernet); ++config BOARD_ATSTK1002_SW3_CUSTOM ++ bool "SW3: use TIMER1 (not SSC0 and GCLK)" ++ help ++ This also prevents using the external DAC as an audio interface. + -+static void __init set_hw_addr(struct platform_device *pdev) -+{ -+ struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ const u8 *addr; -+ void __iomem *regs; -+ struct clk *pclk; ++config BOARD_ATSTK1002_SW4_CUSTOM ++ bool "SW4: use ISI/Camera (not GPIOs, SPI1, and PS2-B)" ++ help ++ To use the camera interface you'll need a custom card (on the ++ PCI-format connector) connect a video sensor. + -+ if (!res) -+ return; -+ if (pdev->id >= ARRAY_SIZE(hw_addr)) -+ return; ++config BOARD_ATSTK1002_SW5_CUSTOM ++ bool "SW5: use MACB1 (not LCDC)" + -+ addr = hw_addr[pdev->id].addr; -+ if (!is_valid_ether_addr(addr)) -+ return; ++config BOARD_ATSTK1002_SW6_CUSTOM ++ bool "SW6: more GPIOs (not MACB0)" + -+ /* -+ * Since this is board-specific code, we'll cheat and use the -+ * physical address directly as we happen to know that it's -+ * the same as the virtual address. -+ */ -+ regs = (void __iomem __force *)res->start; -+ pclk = clk_get(&pdev->dev, "pclk"); -+ if (!pclk) -+ return; ++endif # custom + -+ clk_enable(pclk); -+ __raw_writel((addr[3] << 24) | (addr[2] << 16) -+ | (addr[1] << 8) | addr[0], regs + 0x98); -+ __raw_writel((addr[5] << 8) | addr[4], regs + 0x9c); -+ clk_disable(pclk); -+ clk_put(pclk); -+} ++config BOARD_ATSTK1002_SPI1 ++ bool "Configure SPI1 controller" ++ depends on !BOARD_ATSTK1002_SW4_CUSTOM ++ help ++ All the signals for the second SPI controller are available on ++ GPIO lines and accessed through the J1 jumper block. Say "y" ++ here to configure that SPI controller. + -+struct platform_device *at32_usart_map[1]; -+unsigned int at32_nr_usarts = 1; ++config BOARD_ATSTK1002_J2_LED ++ bool ++ default BOARD_ATSTK1002_J2_LED8 || BOARD_ATSTK1002_J2_RGB + -+void __init setup_board(void) -+{ -+ at32_map_usart(1, 0); /* USART 1: /dev/ttyS0, DB9 */ -+ at32_setup_serial_console(0); -+} ++choice ++ prompt "LEDs connected to J2:" ++ depends on LEDS_GPIO && !BOARD_ATSTK1002_SW4_CUSTOM ++ optional ++ help ++ Select this if you have jumpered the J2 jumper block to the ++ LED0..LED7 amber leds, or to the RGB leds, using a ten-pin ++ IDC cable. A default "heartbeat" trigger is provided, but ++ you can of course override this. + -+static int __init atngw100_init(void) -+{ -+ /* -+ * ATNGW100 uses 16-bit SDRAM interface, so we don't need to -+ * reserve any pins for it. -+ */ ++config BOARD_ATSTK1002_J2_LED8 ++ bool "LED0..LED7" ++ help ++ Select this if J2 is jumpered to LED0..LED7 amber leds. + -+ at32_add_system_devices(); ++config BOARD_ATSTK1002_J2_RGB ++ bool "RGB leds" ++ help ++ Select this if J2 is jumpered to the RGB leds. + -+ at32_add_device_usart(0); ++endchoice + -+ set_hw_addr(at32_add_device_eth(0, ð_data[0])); -+ set_hw_addr(at32_add_device_eth(1, ð_data[1])); ++endif # stk 1002 +diff -x .git -Nur linux-2.6.22.1/arch/avr32/configs/atngw100_defconfig linux-avr32.git/arch/avr32/configs/atngw100_defconfig +--- linux-2.6.22.1/arch/avr32/configs/atngw100_defconfig 2007-07-10 20:56:30.000000000 +0200 ++++ linux-avr32.git/arch/avr32/configs/atngw100_defconfig 2007-07-12 13:59:49.000000000 +0200 +@@ -712,7 +712,21 @@ + # + # LED devices + # +-# CONFIG_NEW_LEDS is not set ++CONFIG_NEW_LEDS=y ++CONFIG_LEDS_CLASS=y + -+ at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); -+ at32_add_device_mci(0, &mci0_data); -+ at32_add_device_usba(0); ++# ++# LED drivers ++# ++CONFIG_LEDS_GPIO=y + -+ return 0; -+} -+postcore_initcall(atngw100_init); -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1000.h avr32-git/arch/avr32/boards/atstk1000/atstk1000.h ---- linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1000.h 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atstk1000/atstk1000.h 2007-06-06 11:33:46.000000000 +0200 -@@ -0,0 +1,15 @@ ++# ++# LED Triggers ++# ++CONFIG_LEDS_TRIGGERS=y ++CONFIG_LEDS_TRIGGER_TIMER=y ++CONFIG_LEDS_TRIGGER_HEARTBEAT=y ++ + + # + # LED drivers +diff -x .git -Nur linux-2.6.22.1/arch/avr32/drivers/dw-dmac.c linux-avr32.git/arch/avr32/drivers/dw-dmac.c +--- linux-2.6.22.1/arch/avr32/drivers/dw-dmac.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-avr32.git/arch/avr32/drivers/dw-dmac.c 2007-06-06 11:33:46.000000000 +0200 +@@ -0,0 +1,761 @@ +/* -+ * ATSTK1000 setup code: Daughterboard interface ++ * Driver for the Synopsys DesignWare DMA Controller + * -+ * Copyright (C) 2007 Atmel Corporation ++ * Copyright (C) 2005-2006 Atmel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ -+#ifndef __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H -+#define __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include + -+extern struct atmel_lcdfb_info atstk1000_lcdc_data; ++#include ++#include + -+#endif /* __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H */ -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1002.c avr32-git/arch/avr32/boards/atstk1000/atstk1002.c ---- linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1002.c 2007-05-24 23:22:47.000000000 +0200 -+++ avr32-git/arch/avr32/boards/atstk1000/atstk1002.c 2007-06-06 11:33:46.000000000 +0200 -@@ -16,6 +16,8 @@ - #include - #include - -+#include