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