From: Ulf Samuelsson Date: Sat, 29 Mar 2008 23:09:46 +0000 (-0000) Subject: Remove duplicate AVR32 patches, and add support for ARCH and conditional AVR32 patches X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c659b13a2fc07188f716327364f6080e9486f3de;p=buildroot.git Remove duplicate AVR32 patches, and add support for ARCH and conditional AVR32 patches --- diff --git a/target/Makefile.in b/target/Makefile.in index 8283aa4845..1875032602 100644 --- a/target/Makefile.in +++ b/target/Makefile.in @@ -32,4 +32,6 @@ ifeq ($(strip $(subst ",,$(BR2_KERNEL_LINUX_ADVANCED))),y) include target/linux/Makefile.in.advanced endif +include target/device/Makefile.in.linux + include target/hurd/Makefile.in diff --git a/target/device/Atmel/Config.in.linux.patches b/target/device/Atmel/Config.in.linux.patches new file mode 100644 index 0000000000..3812776772 --- /dev/null +++ b/target/device/Atmel/Config.in.linux.patches @@ -0,0 +1,6 @@ +if BR2_arm +source "target/device/Atmel/arch-arm/Config.in.linux.patches" +endif +if BR2_avr32 +source "target/device/Atmel/arch-avr32/Config.in.linux.patches" +endif diff --git a/target/device/Atmel/Makefile.in b/target/device/Atmel/Makefile.in index 63a3af33b3..6a998d0df1 100644 --- a/target/device/Atmel/Makefile.in +++ b/target/device/Atmel/Makefile.in @@ -30,8 +30,6 @@ endif LINUX26_RC_PATCH:=$(strip $(subst ",, $(BR2_LINUX26_RC_PATCH))) #")) -LINUX_BSP_PATCH:=$(strip $(subst ",, $(BR2_LINUX_BSP_ATMEL_PATCH))) -#")) # These are set by "new" Config.in LINUX26_KCONFIG:=$(BOARD_PATH)/$(BOARD_NAME)-linux-$(LINUX26_VERSION).config @@ -65,10 +63,6 @@ include target/device/Atmel/*/Makefile.in UBOOT_CONFIG:=$(UBOOT_BOARD_NAME)_config UBOOT_CONFIG_FILE:=$(BOARD_PATH)/u-boot/$(UBOOT_BOARD_NAME).h -ifeq ($(strip $(BR2_PACKAGE_LINUX)),y) -#include $(ATMEL_PATH)/Linux/linux.mk -endif - ifeq ($(strip $(BR2_TARGET_UBOOT_AT91)),y) include $(ATMEL_PATH)/u-boot/u-boot.mk endif diff --git a/target/device/Atmel/Makefile.in.linux b/target/device/Atmel/Makefile.in.linux new file mode 100644 index 0000000000..b529a9b272 --- /dev/null +++ b/target/device/Atmel/Makefile.in.linux @@ -0,0 +1,3 @@ +include target/device/Atmel/arch-arm/arch-arm.mk +include target/device/Atmel/arch-avr32/arch-avr32.mk + diff --git a/target/device/Atmel/arch-arm/Config.in.linux.patches b/target/device/Atmel/arch-arm/Config.in.linux.patches new file mode 100644 index 0000000000..48f754539b --- /dev/null +++ b/target/device/Atmel/arch-arm/Config.in.linux.patches @@ -0,0 +1,58 @@ +choice + prompt "Add AT91 specific patches" + depends on BR2_KERNEL_ARCH_PATCH_ENABLED + depends on BR2_TARGET_ATMEL && BR2_arm + default BR2_ARCH_AT91_2_6_24 if BR2_LINUX_2_6_24 + default BR2_ARCH_AT91_2_6_24 if BR2_LINUX_2_6_23 + default BR2_ARCH_AT91_2_6_22_1 if BR2_LINUX_2_6_22_1 + default BR2_ARCH_AT91_2_6_21_5 if BR2_LINUX_2_6_21 || BR2_LINUX_2_6_21_5 + default BR2_ARCH_AT91_2_6_21_1 if BR2_LINUX_2_6_21_1 + default BR2_ARCH_AT91_2_6_20_4 if BR2_LINUX_2_6_20 || BR2_LINUX_2_6_20_4 + default BR2_ARCH_AT91_2_6_24 + help + Select a patch to add to the Linux kernel + +config BR2_ARCH_AT91_2_6_24 + bool "2.6.24" + help + Apply the at91 linux-2.6.24 patches" + +config BR2_ARCH_AT91_2_6_22_1 + bool "2.6.22.1" + help + Apply the at91 linux-2.6.22.1 patches" + +config BR2_ARCH_AT91_2_6_21_5 + bool "2.6.21.5" + help + Apply the at91 linux-2.6.21.5 patches" + +config BR2_ARCH_AT91_2_6_21_1 + bool "2.6.21.1" + help + Apply the at91 linux-2.6.21.1 patches" + +config BR2_ARCH_AT91_2_6_20_4 + bool "2.6.20.4" + help + Apply the at91 linux-2.6.20.4 patches" + +endchoice + +config BR2_KERNEL_ARCH_PATCH_VERSION + string + depends on BR2_KERNEL_ARCH_PATCH_ENABLED + depends on BR2_TARGET_ATMEL && BR2_arm + default "2.6.24" if BR2_ARCH_AT91_2_6_24 + default "2.6.22.1" if BR2_ARCH_AT91_2_6_22_1 + default "2.6.21.5" if BR2_ARCH_AT91_2_6_21_5 + default "2.6.21.1" if BR2_ARCH_AT91_2_6_21_1 + default "2.6.20.4" if BR2_ARCH_AT91_2_6_20_4 + +config BR2_KERNEL_ARCH_PATCH_DIR + string + default "target/device/Atmel/arch-arm/kernel-patches-$(BR2_KERNEL_ARCH_PATCH_VERSION)" + + + + diff --git a/target/device/Atmel/arch-arm/Makefile.in b/target/device/Atmel/arch-arm/Makefile.in new file mode 100644 index 0000000000..1db111e9bf --- /dev/null +++ b/target/device/Atmel/arch-arm/Makefile.in @@ -0,0 +1,12 @@ +ifeq ($(BR2_avr32),y) +KERNEL_COND_PATCHES:= +ifeq ($(BR2_LINUX_AVR32_AC97_PATCH),y) +KERNEL_COND_PATCHES+=avr32.patched.ac97 +endif +ifeq ($(BR2_LINUX_AVR32_ISI_PATCH),y) +KERNEL_COND_PATCHES+=avr32.patched.isi +endif +ifeq ($(BR2_LINUX_AVR32_PSIF_PATCH),y) +KERNEL_COND_PATCHES+=avr32.patched.psif +endif +endif diff --git a/target/device/Atmel/arch-arm/arch-arm.mk b/target/device/Atmel/arch-arm/arch-arm.mk new file mode 100644 index 0000000000..49af525101 --- /dev/null +++ b/target/device/Atmel/arch-arm/arch-arm.mk @@ -0,0 +1,4 @@ +ifeq ($(BR2_arm),y) + +endif + diff --git a/target/device/Atmel/arch-avr32/Config.in.linux.patches b/target/device/Atmel/arch-avr32/Config.in.linux.patches new file mode 100644 index 0000000000..e6e3396c66 --- /dev/null +++ b/target/device/Atmel/arch-avr32/Config.in.linux.patches @@ -0,0 +1,79 @@ +choice + prompt "Add AVR32 specific patches" + depends on BR2_KERNEL_ARCH_PATCH_ENABLED + depends on BR2_avr32 + default BR2_ARCH_AVR32_2_6_24 if BR2_LINUX_2_6_24 + default BR2_ARCH_AVR32_2_6_23 if BR2_LINUX_2_6_23 + default BR2_ARCH_AVR32_2_6_22_10 if BR2_LINUX_2_6_22 || BR2_LINUX_2_6_22_10 + default BR2_ARCH_AVR32_2_6_22_1 if BR2_LINUX_2_6_22_1 + default BR2_ARCH_AVR32_2_6_21_5 if BR2_LINUX_2_6_21 || BR2_LINUX_2_6_21_5 + default BR2_ARCH_AVR32_2_6_20_4 if BR2_LINUX_2_6_20 || BR2_LINUX_2_6_20_4 + default BR2_ARCH_AVR32_2_6_24 + help + Select a patch to add to the Linux kernel + +config BR2_ARCH_AVR32_2_6_24 + bool "2.6.24" + help + Apply the avr32 linux-2.6.24 patches" + +config BR2_ARCH_AVR32_2_6_23 + bool "2.6.23" + help + Apply the avr32 linux-2.6.23 patches" + +config BR2_ARCH_AVR32_2_6_22_10 + bool "2.6.22.10" + help + Apply the avr32 linux-2.6.22.10 patches" + +config BR2_ARCH_AVR32_2_6_22_1 + bool "2.6.22.1" + help + Apply the avr32 linux-2.6.22.1 patches" + +config BR2_ARCH_AVR32_2_6_21_5 + bool "2.6.21.5" + help + Apply the avr32 linux-2.6.21.5 patches" + +config BR2_ARCH_AVR32_2_6_20_4 + bool "2.6.20.4" + help + Apply the avr32 linux-2.6.20.4 patches" + +endchoice + +config BR2_KERNEL_ARCH_PATCH_VERSION + string + depends on BR2_KERNEL_ARCH_PATCH_ENABLED + depends on BR2_avr32 + default "2.6.24" if BR2_ARCH_AVR32_2_6_24 + default "2.6.22.10" if BR2_ARCH_AVR32_2_6_22_10 + default "2.6.22.1" if BR2_ARCH_AVR32_2_6_22_1 + default "2.6.21.5" if BR2_ARCH_AVR32_2_6_21_5 + default "2.6.20.4" if BR2_ARCH_AVR32_2_6_20_4 + +config BR2_KERNEL_ARCH_PATCH_DIR + string + default "target/device/Atmel/arch-avr32/kernel-patches-$(BR2_KERNEL_ARCH_PATCH_VERSION)" + +config BR2_LINUX_AVR32_ISI_PATCH + bool "Add ISI patch" + default n + help + Add support for the Image Sensor Interface + +config BR2_LINUX_AVR32_AC97_PATCH + bool "Add AC97 patch" + default n + help + Add support for AC97. + Will need to be patched further to change GPIO_PIN_NONE + to the real pin used as AC-97 reset pin. + +config BR2_LINUX_AVR32_PSIF_PATCH + bool "Add PSIF patch" + default n + help + Add support for the PS/2 Interface diff --git a/target/device/Atmel/arch-avr32/arch-avr32.mk b/target/device/Atmel/arch-avr32/arch-avr32.mk new file mode 100644 index 0000000000..9fb888622c --- /dev/null +++ b/target/device/Atmel/arch-avr32/arch-avr32.mk @@ -0,0 +1,27 @@ +ifeq ($(BR2_avr32),y) + +avr32.patched.ac97: $(LINUX26_DIR)/.patched.ac97 + @echo avr32.patched.ac97 + +avr32.patched.isi: $(LINUX26_DIR)/.patched.isi + @echo avr32.patched.isi + +avr32.patched.psif: $(LINUX26_DIR)/.patched.psif + @echo avr32.patched.psif + + +$(LINUX26_DIR)/.patched.isi: $(LINUX26_DIR)/.patched.arch + toolchain/patch-kernel.sh $(LINUX26_DIR) $(BR2_KERNEL_ARCH_PATCH_DIR) \ + linux-*-500-v4l-avr32-isi.patch.cond + touch $@ + +$(LINUX26_DIR)/.patched.ac97: $(LINUX26_DIR)/.patched.arch + toolchain/patch-kernel.sh $(LINUX26_DIR) $(BR2_KERNEL_ARCH_PATCH_DIR) \ + linux-*-avr32-ac97-reset.patch.cond + touch $@ + +$(LINUX26_DIR)/.patched.psif: $(LINUX26_DIR)/.patched.arch + toolchain/patch-kernel.sh $(LINUX26_DIR) $(BR2_KERNEL_ARCH_PATCH_DIR) \ + linux-*-avr32-psif-2.patch.cond + touch $@ +endif diff --git a/target/device/Atmel/arch-avr32/kernel-patches-2.6.23/linux-2.6.23-100-avr32-atmel.2.patch b/target/device/Atmel/arch-avr32/kernel-patches-2.6.23/linux-2.6.23-100-avr32-atmel.2.patch new file mode 100644 index 0000000000..1f0a5f542a --- /dev/null +++ b/target/device/Atmel/arch-avr32/kernel-patches-2.6.23/linux-2.6.23-100-avr32-atmel.2.patch @@ -0,0 +1,19857 @@ + MAINTAINERS | 7 + + Makefile | 2 +- + arch/avr32/Kconfig | 34 +- + arch/avr32/Makefile | 3 +- + arch/avr32/boards/atngw100/Kconfig | 12 + + arch/avr32/boards/atngw100/flash.c | 5 +- + arch/avr32/boards/atngw100/setup.c | 26 +- + arch/avr32/boards/atstk1000/Kconfig | 82 +- + arch/avr32/boards/atstk1000/Makefile | 2 + + arch/avr32/boards/atstk1000/atstk1000.h | 2 + + arch/avr32/boards/atstk1000/atstk1002.c | 148 ++- + arch/avr32/boards/atstk1000/atstk1003.c | 181 +++ + arch/avr32/boards/atstk1000/atstk1004.c | 152 +++ + arch/avr32/boards/atstk1000/flash.c | 5 +- + arch/avr32/boards/atstk1000/setup.c | 64 + + arch/avr32/configs/atngw100_defconfig | 210 +++- + arch/avr32/configs/atstk1002_defconfig | 482 +++++-- + arch/avr32/configs/atstk1003_defconfig | 1045 ++++++++++++++ + arch/avr32/configs/atstk1004_defconfig | 722 ++++++++++ + arch/avr32/drivers/Makefile | 1 + + arch/avr32/drivers/dw-dmac.c | 761 +++++++++++ + arch/avr32/drivers/dw-dmac.h | 42 + + arch/avr32/kernel/Makefile | 6 +- + arch/avr32/kernel/dma-controller.c | 34 + + arch/avr32/kernel/entry-avr32b.S | 26 +- + arch/avr32/kernel/setup.c | 2 +- + arch/avr32/kernel/vmlinux.lds.S | 143 ++ + arch/avr32/kernel/vmlinux.lds.c | 142 -- + arch/avr32/mach-at32ap/Kconfig | 19 +- + arch/avr32/mach-at32ap/Makefile | 5 +- + arch/avr32/mach-at32ap/at32ap7000.c | 1324 ------------------ + arch/avr32/mach-at32ap/at32ap700x.c | 1754 ++++++++++++++++++++++++ + arch/avr32/mach-at32ap/clock.c | 116 ++ + arch/avr32/mach-at32ap/gpio-dev.c | 573 ++++++++ + arch/avr32/mach-at32ap/hsmc.c | 129 ++- + arch/avr32/mach-at32ap/pio.c | 80 ++ + arch/avr32/mach-at32ap/pm.h | 8 + + arch/avr32/mm/dma-coherent.c | 7 + + arch/avr32/mm/init.c | 12 +- + drivers/char/watchdog/Kconfig | 2 +- + drivers/char/watchdog/at32ap700x_wdt.c | 69 +- + drivers/i2c/busses/Kconfig | 8 + + drivers/i2c/busses/Makefile | 1 + + drivers/i2c/busses/i2c-atmeltwi.c | 436 ++++++ + drivers/i2c/busses/i2c-atmeltwi.h | 117 ++ + drivers/misc/Kconfig | 9 + + drivers/misc/Makefile | 1 + + drivers/misc/atmel-ssc.c | 174 +++ + drivers/mmc/host/Kconfig | 10 + + drivers/mmc/host/Makefile | 1 + + drivers/mmc/host/atmel-mci.c | 1176 ++++++++++++++++ + drivers/mmc/host/atmel-mci.h | 192 +++ + drivers/mtd/chips/cfi_cmdset_0001.c | 43 + + drivers/mtd/chips/cfi_cmdset_0002.c | 6 +- + drivers/pcmcia/Kconfig | 7 + + drivers/pcmcia/Makefile | 1 + + drivers/pcmcia/at32_cf.c | 531 ++++++++ + drivers/pcmcia/cistpl.c | 48 +- + drivers/spi/atmel_spi.c | 4 +- + drivers/usb/gadget/Kconfig | 26 +- + drivers/usb/gadget/Makefile | 1 + + drivers/usb/gadget/atmel_usba_udc.c | 2038 ++++++++++++++++++++++++++++ + drivers/usb/gadget/atmel_usba_udc.h | 350 +++++ + drivers/video/atmel_lcdfb.c | 6 +- + drivers/video/backlight/Kconfig | 12 + + drivers/video/backlight/Makefile | 2 + + drivers/video/backlight/ltv350qv.c | 339 +++++ + drivers/video/backlight/ltv350qv.h | 95 ++ + include/asm-avr32/arch-at32ap/at32ap7000.h | 35 - + include/asm-avr32/arch-at32ap/at32ap700x.h | 35 + + include/asm-avr32/arch-at32ap/board.h | 39 + + include/asm-avr32/arch-at32ap/cpu.h | 2 +- + include/asm-avr32/arch-at32ap/io.h | 4 +- + include/asm-avr32/arch-at32ap/portmux.h | 13 + + include/asm-avr32/arch-at32ap/smc.h | 51 +- + include/asm-avr32/dma-controller.h | 166 +++ + include/asm-avr32/dma-mapping.h | 17 +- + include/asm-avr32/system.h | 13 +- + include/asm-avr32/unistd.h | 13 + + include/linux/atmel-ssc.h | 312 +++++ + include/linux/spi/at73c213.h | 25 + + include/pcmcia/cs_types.h | 2 +- + init/do_mounts.c | 8 +- + scripts/checkstack.pl | 5 + + sound/Kconfig | 6 + + sound/Makefile | 3 +- + sound/avr32/Kconfig | 11 + + sound/avr32/Makefile | 3 + + sound/avr32/ac97c.c | 914 +++++++++++++ + sound/avr32/ac97c.h | 71 + + sound/oss/Kconfig | 4 + + sound/oss/Makefile | 1 + + sound/oss/at32_abdac.c | 722 ++++++++++ + sound/oss/at32_abdac.h | 59 + + sound/spi/Kconfig | 31 + + sound/spi/Makefile | 5 + + sound/spi/at73c213.c | 1121 +++++++++++++++ + sound/spi/at73c213.h | 119 ++ + 98 files changed, 16057 insertions(+), 1826 deletions(-) + create mode 100644 arch/avr32/boards/atngw100/Kconfig + create mode 100644 arch/avr32/boards/atstk1000/atstk1003.c + create mode 100644 arch/avr32/boards/atstk1000/atstk1004.c + create mode 100644 arch/avr32/configs/atstk1003_defconfig + create mode 100644 arch/avr32/configs/atstk1004_defconfig + create mode 100644 arch/avr32/drivers/Makefile + create mode 100644 arch/avr32/drivers/dw-dmac.c + create mode 100644 arch/avr32/drivers/dw-dmac.h + create mode 100644 arch/avr32/kernel/dma-controller.c + create mode 100644 arch/avr32/kernel/vmlinux.lds.S + delete mode 100644 arch/avr32/kernel/vmlinux.lds.c + delete mode 100644 arch/avr32/mach-at32ap/at32ap7000.c + create mode 100644 arch/avr32/mach-at32ap/at32ap700x.c + create mode 100644 arch/avr32/mach-at32ap/gpio-dev.c + create mode 100644 drivers/i2c/busses/i2c-atmeltwi.c + create mode 100644 drivers/i2c/busses/i2c-atmeltwi.h + create mode 100644 drivers/misc/atmel-ssc.c + create mode 100644 drivers/mmc/host/atmel-mci.c + create mode 100644 drivers/mmc/host/atmel-mci.h + create mode 100644 drivers/pcmcia/at32_cf.c + create mode 100644 drivers/usb/gadget/atmel_usba_udc.c + create mode 100644 drivers/usb/gadget/atmel_usba_udc.h + create mode 100644 drivers/video/backlight/ltv350qv.c + create mode 100644 drivers/video/backlight/ltv350qv.h + delete mode 100644 include/asm-avr32/arch-at32ap/at32ap7000.h + create mode 100644 include/asm-avr32/arch-at32ap/at32ap700x.h + create mode 100644 include/asm-avr32/dma-controller.h + create mode 100644 include/linux/atmel-ssc.h + create mode 100644 include/linux/spi/at73c213.h + create mode 100644 sound/avr32/Kconfig + create mode 100644 sound/avr32/Makefile + create mode 100644 sound/avr32/ac97c.c + create mode 100644 sound/avr32/ac97c.h + create mode 100644 sound/oss/at32_abdac.c + create mode 100644 sound/oss/at32_abdac.h + create mode 100644 sound/spi/Kconfig + create mode 100644 sound/spi/Makefile + create mode 100644 sound/spi/at73c213.c + create mode 100644 sound/spi/at73c213.h + +diff --git a/MAINTAINERS b/MAINTAINERS +index 9a91d9e..587afe3 100644 +--- a/MAINTAINERS ++++ b/MAINTAINERS +@@ -669,6 +669,13 @@ P: Haavard Skinnemoen + M: hskinnemoen@atmel.com + S: Supported + ++ATMEL USBA UDC DRIVER ++P: Haavard Skinnemoen ++M: hskinnemoen@atmel.com ++L: kernel@avr32linux.org ++W: http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver ++S: Supported ++ + ATMEL WIRELESS DRIVER + P: Simon Kelley + M: simon@thekelleys.org.uk +diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig +index d12346a..62913a4 100644 +--- a/arch/avr32/Kconfig ++++ b/arch/avr32/Kconfig +@@ -87,19 +87,36 @@ config PLATFORM_AT32AP + select MMU + select PERFORMANCE_COUNTERS + ++config CPU_AT32AP700X ++ bool ++ select PLATFORM_AT32AP ++ + choice + prompt "AVR32 CPU type" + default CPU_AT32AP7000 + + config CPU_AT32AP7000 + bool "AT32AP7000" +- select PLATFORM_AT32AP ++ select CPU_AT32AP700X ++ ++config CPU_AT32AP7001 ++ bool "AT32AP7001" ++ select CPU_AT32AP700X ++ ++config CPU_AT32AP7002 ++ bool "AT32AP7002" ++ select CPU_AT32AP700X ++ + endchoice + + # + # CPU Daughterboards for ATSTK1000 + config BOARD_ATSTK1002 + bool ++config BOARD_ATSTK1003 ++ bool ++config BOARD_ATSTK1004 ++ bool + + choice + prompt "AVR32 board type" +@@ -108,6 +125,8 @@ choice + config BOARD_ATSTK1000 + bool "ATSTK1000 evaluation board" + select BOARD_ATSTK1002 if CPU_AT32AP7000 ++ select BOARD_ATSTK1003 if CPU_AT32AP7001 ++ select BOARD_ATSTK1004 if CPU_AT32AP7002 + + config BOARD_ATNGW100 + bool "ATNGW100 Network Gateway" +@@ -116,6 +135,9 @@ endchoice + if BOARD_ATSTK1000 + source "arch/avr32/boards/atstk1000/Kconfig" + endif ++if BOARD_ATNGW100 ++source "arch/avr32/boards/atngw100/Kconfig" ++endif + + choice + prompt "Boot loader type" +@@ -129,15 +151,15 @@ source "arch/avr32/mach-at32ap/Kconfig" + + config LOAD_ADDRESS + hex +- default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y ++ default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y + + config ENTRY_ADDRESS + hex +- default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y ++ default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y + + config PHYS_OFFSET + hex +- default 0x10000000 if CPU_AT32AP7000=y ++ default 0x10000000 if CPU_AT32AP700X=y + + source "kernel/Kconfig.preempt" + +@@ -175,6 +197,10 @@ config OWNERSHIP_TRACE + enabling Nexus-compliant debuggers to keep track of the PID of the + currently executing task. + ++config DW_DMAC ++ tristate "Synopsys DesignWare DMA Controller support" ++ default y if CPU_AT32AP7000 ++ + # FPU emulation goes here + + source "kernel/Kconfig.hz" +diff --git a/arch/avr32/Makefile b/arch/avr32/Makefile +index dc6bc01..96f0030 100644 +--- a/arch/avr32/Makefile ++++ b/arch/avr32/Makefile +@@ -16,7 +16,7 @@ AFLAGS += -mrelax -mno-pic + CFLAGS_MODULE += -mno-relax + LDFLAGS_vmlinux += --relax + +-cpuflags-$(CONFIG_CPU_AT32AP7000) += -mcpu=ap7000 ++cpuflags-$(CONFIG_PLATFORM_AT32AP) += -march=ap + + CFLAGS += $(cpuflags-y) + AFLAGS += $(cpuflags-y) +@@ -31,6 +31,7 @@ core-$(CONFIG_BOARD_ATNGW100) += arch/avr32/boards/atngw100/ + core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ + core-y += arch/avr32/kernel/ + core-y += arch/avr32/mm/ ++drivers-y += arch/avr32/drivers/ + libs-y += arch/avr32/lib/ + + archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap +diff --git a/arch/avr32/boards/atngw100/Kconfig b/arch/avr32/boards/atngw100/Kconfig +new file mode 100644 +index 0000000..5d922df +--- /dev/null ++++ b/arch/avr32/boards/atngw100/Kconfig +@@ -0,0 +1,12 @@ ++# NGW100 customization ++ ++config BOARD_ATNGW100_I2C_GPIO ++ bool "Use GPIO for i2c instead of built-in TWI module" ++ help ++ The driver for the built-in TWI module has been plagued by ++ various problems, while the i2c-gpio driver is based on the ++ trusty old i2c-algo-bit bitbanging engine, making it work ++ on pretty much any setup. ++ ++ Choose 'Y' here if you're having i2c-related problems and ++ want to rule out the i2c bus driver. +diff --git a/arch/avr32/boards/atngw100/flash.c b/arch/avr32/boards/atngw100/flash.c +index f9b32a8..b07ae63 100644 +--- a/arch/avr32/boards/atngw100/flash.c ++++ b/arch/avr32/boards/atngw100/flash.c +@@ -15,7 +15,7 @@ + + #include + +-static struct smc_config flash_config __initdata = { ++static struct smc_timing flash_timing __initdata = { + .ncs_read_setup = 0, + .nrd_setup = 40, + .ncs_write_setup = 0, +@@ -28,7 +28,9 @@ static struct smc_config flash_config __initdata = { + + .read_cycle = 120, + .write_cycle = 120, ++}; + ++static struct smc_config flash_config __initdata = { + .bus_width = 2, + .nrd_controlled = 1, + .nwe_controlled = 1, +@@ -82,6 +84,7 @@ static int __init atngw100_flash_init(void) + { + int ret; + ++ smc_set_timing(&flash_config, &flash_timing); + ret = smc_set_configuration(0, &flash_config); + if (ret < 0) { + printk(KERN_ERR "atngw100: failed to set NOR flash timing\n"); +diff --git a/arch/avr32/boards/atngw100/setup.c b/arch/avr32/boards/atngw100/setup.c +index ef80156..2a5f587 100644 +--- a/arch/avr32/boards/atngw100/setup.c ++++ b/arch/avr32/boards/atngw100/setup.c +@@ -42,6 +42,11 @@ static struct spi_board_info spi0_board_info[] __initdata = { + }, + }; + ++static struct mci_platform_data __initdata mci0_data = { ++ .detect_pin = GPIO_PIN_PC(25), ++ .wp_pin = GPIO_PIN_PE(0), ++}; ++ + /* + * The next two functions should go away as the boot loader is + * supposed to initialize the macb address registers with a valid +@@ -124,9 +129,13 @@ static struct platform_device ngw_gpio_leds = { + } + }; + ++#ifdef CONFIG_BOARD_ATNGW100_I2C_GPIO + static struct i2c_gpio_platform_data i2c_gpio_data = { +- .sda_pin = GPIO_PIN_PA(6), +- .scl_pin = GPIO_PIN_PA(7), ++ .sda_pin = GPIO_PIN_PA(6), ++ .scl_pin = GPIO_PIN_PA(7), ++ .sda_is_open_drain = 1, ++ .scl_is_open_drain = 1, ++ .udelay = 2, /* close to 100 kHz */ + }; + + static struct platform_device i2c_gpio_device = { +@@ -136,6 +145,7 @@ static struct platform_device i2c_gpio_device = { + .platform_data = &i2c_gpio_data, + }, + }; ++#endif + + static int __init atngw100_init(void) + { +@@ -154,6 +164,8 @@ static int __init atngw100_init(void) + 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, +@@ -161,9 +173,15 @@ static int __init atngw100_init(void) + } + platform_device_register(&ngw_gpio_leds); + +- at32_select_gpio(i2c_gpio_data.sda_pin, 0); +- at32_select_gpio(i2c_gpio_data.scl_pin, 0); ++#ifdef CONFIG_BOARD_ATNGW100_I2C_GPIO ++ at32_select_gpio(i2c_gpio_data.sda_pin, ++ AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ at32_select_gpio(i2c_gpio_data.scl_pin, ++ AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); + platform_device_register(&i2c_gpio_device); ++#else ++ at32_add_device_twi(0); ++#endif + + return 0; + } +diff --git a/arch/avr32/boards/atstk1000/Kconfig b/arch/avr32/boards/atstk1000/Kconfig +index 718578f..aac73a6 100644 +--- a/arch/avr32/boards/atstk1000/Kconfig ++++ b/arch/avr32/boards/atstk1000/Kconfig +@@ -1,34 +1,34 @@ + # STK1000 customization + +-if BOARD_ATSTK1002 ++if BOARD_ATSTK1000 + +-config BOARD_ATSTK1002_CUSTOM +- bool "Non-default STK-1002 jumper settings" ++config BOARD_ATSTK100X_CUSTOM ++ bool "Non-default STK1002/STK1003/STK1004 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. + +-if BOARD_ATSTK1002_CUSTOM ++if BOARD_ATSTK100X_CUSTOM + +-config BOARD_ATSTK1002_SW1_CUSTOM ++config BOARD_ATSTK100X_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. + +-config BOARD_ATSTK1002_SW2_CUSTOM ++config BOARD_ATSTK100X_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. + +-config BOARD_ATSTK1002_SW3_CUSTOM ++config BOARD_ATSTK100X_SW3_CUSTOM + bool "SW3: use TIMER1 (not SSC0 and GCLK)" + help + This also prevents using the external DAC as an audio interface. + +-config BOARD_ATSTK1002_SW4_CUSTOM ++config BOARD_ATSTK100X_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 +@@ -36,27 +36,29 @@ config BOARD_ATSTK1002_SW4_CUSTOM + + config BOARD_ATSTK1002_SW5_CUSTOM + bool "SW5: use MACB1 (not LCDC)" ++ depends on BOARD_ATSTK1002 + + config BOARD_ATSTK1002_SW6_CUSTOM + bool "SW6: more GPIOs (not MACB0)" ++ depends on BOARD_ATSTK1002 + + endif # custom + +-config BOARD_ATSTK1002_SPI1 ++config BOARD_ATSTK100X_SPI1 + bool "Configure SPI1 controller" +- depends on !BOARD_ATSTK1002_SW4_CUSTOM ++ depends on !BOARD_ATSTK100X_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. + +-config BOARD_ATSTK1002_J2_LED ++config BOARD_ATSTK1000_J2_LED + bool +- default BOARD_ATSTK1002_J2_LED8 || BOARD_ATSTK1002_J2_RGB ++ default BOARD_ATSTK1000_J2_LED8 || BOARD_ATSTK1000_J2_RGB + + choice + prompt "LEDs connected to J2:" +- depends on LEDS_GPIO && !BOARD_ATSTK1002_SW4_CUSTOM ++ depends on LEDS_GPIO && !BOARD_ATSTK100X_SW4_CUSTOM + optional + help + Select this if you have jumpered the J2 jumper block to the +@@ -64,16 +66,64 @@ choice + IDC cable. A default "heartbeat" trigger is provided, but + you can of course override this. + +-config BOARD_ATSTK1002_J2_LED8 ++config BOARD_ATSTK1000_J2_LED8 + bool "LED0..LED7" + help + Select this if J2 is jumpered to LED0..LED7 amber leds. + +-config BOARD_ATSTK1002_J2_RGB ++config BOARD_ATSTK1000_J2_RGB + bool "RGB leds" + help + Select this if J2 is jumpered to the RGB leds. + + endchoice + +-endif # stk 1002 ++config BOARD_ATSTK1000_EXTDAC ++ bool ++ depends on !BOARD_ATSTK100X_SW1_CUSTOM && !BOARD_ATSTK100X_SW3_CUSTOM ++ default y ++ ++config BOARD_ATSTK100X_ENABLE_AC97 ++ bool "Use AC97C instead of ABDAC" ++ help ++ Select this if you want to use the built-in AC97 controller ++ instead of the built-in Audio Bitstream DAC. These share ++ the same I/O pins on the AP7000, so both can't be enabled ++ at the same time. ++ ++ Note that the STK1000 kit doesn't ship with an AC97 codec on ++ board, so say N unless you've got an expansion board with an ++ AC97 codec on it that you want to use. ++ ++config BOARD_ATSTK1000_CF_HACKS ++ bool "ATSTK1000 CompactFlash hacks" ++ depends on !BOARD_ATSTK100X_SW4_CUSTOM ++ help ++ Select this if you have re-routed the CompactFlash RESET and ++ CD signals to GPIOs on your STK1000. This is necessary for ++ reset and card detection to work properly, although some CF ++ cards may be able to cope without reset. ++ ++config BOARD_ATSTK1000_CF_RESET_PIN ++ hex "CompactFlash RESET pin" ++ default 0x30 ++ depends on BOARD_ATSTK1000_CF_HACKS ++ help ++ Select which GPIO pin to use for the CompactFlash RESET ++ signal. This is specified as a hexadecimal number and should ++ be defined as 0x20 * gpio_port + pin. ++ ++ The default is 0x30, which is pin 16 on PIOB, aka GPIO14. ++ ++config BOARD_ATSTK1000_CF_DETECT_PIN ++ hex "CompactFlash DETECT pin" ++ default 0x3e ++ depends on BOARD_ATSTK1000_CF_HACKS ++ help ++ Select which GPIO pin to use for the CompactFlash CD ++ signal. This is specified as a hexadecimal number and should ++ be defined as 0x20 * gpio_port + pin. ++ ++ The default is 0x3e, which is pin 30 on PIOB, aka GPIO15. ++ ++endif # stk 1000 +diff --git a/arch/avr32/boards/atstk1000/Makefile b/arch/avr32/boards/atstk1000/Makefile +index 8e09922..beead86 100644 +--- a/arch/avr32/boards/atstk1000/Makefile ++++ b/arch/avr32/boards/atstk1000/Makefile +@@ -1,2 +1,4 @@ + obj-y += setup.o flash.o + obj-$(CONFIG_BOARD_ATSTK1002) += atstk1002.o ++obj-$(CONFIG_BOARD_ATSTK1003) += atstk1003.o ++obj-$(CONFIG_BOARD_ATSTK1004) += atstk1004.o +diff --git a/arch/avr32/boards/atstk1000/atstk1000.h b/arch/avr32/boards/atstk1000/atstk1000.h +index 9a49ed0..9392d32 100644 +--- a/arch/avr32/boards/atstk1000/atstk1000.h ++++ b/arch/avr32/boards/atstk1000/atstk1000.h +@@ -12,4 +12,6 @@ + + extern struct atmel_lcdfb_info atstk1000_lcdc_data; + ++void atstk1000_setup_j2_leds(void); ++ + #endif /* __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H */ +diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c +index c9981b7..d30de89 100644 +--- a/arch/avr32/boards/atstk1000/atstk1002.c ++++ b/arch/avr32/boards/atstk1000/atstk1002.c +@@ -11,17 +11,17 @@ + #include + #include + #include +-#include + #include + #include + #include + #include ++#include + + #include