Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 19 Feb 2007 21:18:39 +0000 (13:18 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 19 Feb 2007 21:18:39 +0000 (13:18 -0800)
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (117 commits)
  [ARM] 4058/2: iop32x: set ->broken_parity_status on n2100 onboard r8169 ports
  [ARM] 4140/1: AACI stability add ac97 timeout and retries
  [ARM] 4139/1: AACI record support
  [ARM] 4138/1: AACI: multiple channel support for IRQ handling
  [ARM] 4211/1: Provide a defconfig for ns9xxx
  [ARM] 4210/1: base for new machine type "NetSilicon NS9360"
  [ARM] 4222/1: S3C2443: Remove reference to missing S3C2443_PM
  [ARM] 4221/1: S3C2443: DMA support
  [ARM] 4220/1: S3C24XX: DMA system initialised from sysdev
  [ARM] 4219/1: S3C2443: DMA source definitions
  [ARM] 4218/1: S3C2412: fix CONFIG_CPU_S3C2412_ONLY wrt to S3C2443
  [ARM] 4217/1: S3C24XX: remove the dma channel show at startup
  [ARM] 4090/2: avoid clash between PXA and SA1111 defines
  [ARM] 4216/1: add .gitignore entries for ARM specific files
  [ARM] 4214/2: S3C2410: Add Armzone QT2410
  [ARM] 4215/1: s3c2410 usb device:  per-platform vbus_draw
  [ARM] 4213/1: S3C2410 - Update definition of ADCTSC_XY_PST
  [ARM] 4098/1: ARM: rtc_lock only used with rtc_cmos
  [ARM] 4137/1: Add kexec support
  [ARM] 4201/1: SMP barriers pair needed for the secondary boot process
  ...

Fix up conflict due to typedef removal in sound/arm/aaci.h

15 files changed:
1  2 
arch/arm/Kconfig
arch/arm/kernel/Makefile
arch/arm/kernel/setup.c
arch/arm/kernel/time.c
arch/arm/mach-at91/clock.c
arch/arm/mach-at91/gpio.c
arch/avr32/mach-at32ap/clock.c
drivers/i2c/busses/i2c-iop3xx.c
drivers/mmc/at91_mci.c
drivers/serial/Kconfig
drivers/serial/atmel_serial.c
drivers/usb/gadget/at91_udc.c
drivers/usb/gadget/pxa2xx_udc.c
include/asm-arm/arch-at91/gpio.h
sound/arm/aaci.h

diff --combined arch/arm/Kconfig
@@@ -9,7 -9,6 +9,7 @@@ config AR
        bool
        default y
        select RTC_LIB
 +      select SYS_SUPPORTS_APM_EMULATION
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -18,9 -17,6 +18,9 @@@
          Europe.  There is an ARM Linux project with a web page at
          <http://www.arm.linux.org.uk/>.
  
 +config SYS_SUPPORTS_APM_EMULATION
 +      bool
 +
  config GENERIC_TIME
        bool
        default n
@@@ -29,10 -25,6 +29,10 @@@ config MM
        bool
        default y
  
 +config NO_IOPORT
 +      bool
 +      default n
 +
  config EISA
        bool
        ---help---
@@@ -104,10 -96,6 +104,10 @@@ config GENERIC_BUST_SPINLOC
  config ARCH_MAY_HAVE_PC_FDC
        bool
  
 +config ZONE_DMA
 +      bool
 +      default y
 +
  config GENERIC_ISA_DMA
        bool
  
@@@ -245,6 -233,8 +245,8 @@@ config ARCH_IOP33
  
  config ARCH_IOP13XX
        bool "IOP13xx-based"
+       depends on MMU
+       select PLAT_IOP
        select PCI
        help
          Support for Intel's IOP13XX (XScale) family of processors.
@@@ -283,6 -273,14 +285,14 @@@ config ARCH_L720
          If you have any questions or comments about the Linux kernel port
          to this board, send e-mail to <sjhill@cotw.com>.
  
+ config ARCH_NS9XXX
+       bool "NetSilicon NS9xxx"
+       help
+         Say Y here if you intend to run this kernel on a NetSilicon NS9xxx
+         System.
+         <http://www.digi.com/products/microprocessors/index.jsp>
  config ARCH_PNX4008
        bool "Philips Nexperia PNX4008 Mobile"
        help
@@@ -292,6 -290,7 +302,7 @@@ config ARCH_PX
        bool "PXA2xx-based"
        depends on MMU
        select ARCH_MTD_XIP
+       select GENERIC_TIME
        help
          Support for Intel's PXA2XX processor line.
  
@@@ -302,7 -301,6 +313,7 @@@ config ARCH_RP
        select TIMER_ACORN
        select ARCH_MAY_HAVE_PC_FDC
        select ISA_DMA_API
 +      select NO_IOPORT
        help
          On the Acorn Risc-PC, Linux can support the internal IDE disk and
          CD-ROM interface, serial and parallel port, and the floppy drive.
@@@ -316,7 -314,7 +327,7 @@@ config ARCH_SA110
          Support for StrongARM 11x0 based boards.
  
  config ARCH_S3C2410
-       bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442"
+       bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443"
        help
          Samsung S3C2410X CPU based systems, such as the Simtec Electronics
          BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
@@@ -376,7 -374,16 +387,16 @@@ source "arch/arm/mach-omap1/Kconfig
  
  source "arch/arm/mach-omap2/Kconfig"
  
+ source "arch/arm/plat-s3c24xx/Kconfig"
+ if ARCH_S3C2410
+ source "arch/arm/mach-s3c2400/Kconfig"
  source "arch/arm/mach-s3c2410/Kconfig"
+ source "arch/arm/mach-s3c2412/Kconfig"
+ source "arch/arm/mach-s3c2440/Kconfig"
+ source "arch/arm/mach-s3c2442/Kconfig"
+ source "arch/arm/mach-s3c2443/Kconfig"
+ endif
  
  source "arch/arm/mach-lh7a40x/Kconfig"
  
@@@ -390,10 -397,12 +410,12 @@@ source "arch/arm/mach-aaec2000/Kconfig
  
  source "arch/arm/mach-realview/Kconfig"
  
- source "arch/arm/mach-at91rm9200/Kconfig"
+ source "arch/arm/mach-at91/Kconfig"
  
  source "arch/arm/mach-netx/Kconfig"
  
+ source "arch/arm/mach-ns9xxx/Kconfig"
  # Definitions to make life easier
  config ARCH_ACORN
        bool
@@@ -751,6 -760,20 +773,20 @@@ config XIP_PHYS_ADD
          be linked for and stored to.  This address is dependent on your
          own flash usage.
  
+ config KEXEC
+       bool "Kexec system call (EXPERIMENTAL)"
+       depends on EXPERIMENTAL
+       help
+         kexec is a system call that implements the ability to shutdown your
+         current kernel, and to start another kernel.  It is like a reboot
+         but it is indepedent of the system firmware.   And like a reboot
+         you can start any kernel with it, not just Linux.
+         It is an ongoing process to be certain the hardware in a machine
+         is properly shutdown, so do not be surprised if this code does not
+         initially work for you.  It may help to enable device hotplugging
+         support.
  endmenu
  
  if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX )
@@@ -869,6 -892,31 +905,6 @@@ menu "Power management options
  
  source "kernel/power/Kconfig"
  
 -config APM
 -      tristate "Advanced Power Management Emulation"
 -      ---help---
 -        APM is a BIOS specification for saving power using several different
 -        techniques. This is mostly useful for battery powered laptops with
 -        APM compliant BIOSes. If you say Y here, the system time will be
 -        reset after a RESUME operation, the /proc/apm device will provide
 -        battery status information, and user-space programs will receive
 -        notification of APM "events" (e.g. battery status change).
 -
 -        In order to use APM, you will need supporting software. For location
 -        and more information, read <file:Documentation/pm.txt> and the
 -        Battery Powered Linux mini-HOWTO, available from
 -        <http://www.tldp.org/docs.html#howto>.
 -
 -        This driver does not spin down disk drives (see the hdparm(8)
 -        manpage ("man 8 hdparm") for that), and it doesn't turn off
 -        VESA-compliant "green" monitors.
 -
 -        Generally, if you don't have a battery in your machine, there isn't
 -        much point in using this driver and you should say N. If you get
 -        random kernel OOPSes or reboots that don't seem to be related to
 -        anything, try disabling/enabling this option (or disabling/enabling
 -        APM in your BIOS).
 -
  endmenu
  
  source "net/Kconfig"
diff --combined arch/arm/kernel/Makefile
@@@ -10,6 -10,7 +10,6 @@@ obj-y         := compat.o entry-armv.o entry-c
                   process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \
                   time.o traps.o
  
 -obj-$(CONFIG_APM)             += apm.o
  obj-$(CONFIG_ISA_DMA_API)     += dma.o
  obj-$(CONFIG_ARCH_ACORN)      += ecard.o 
  obj-$(CONFIG_FIQ)             += fiq.o
@@@ -18,6 -19,7 +18,7 @@@ obj-$(CONFIG_ARTHUR)          += arthur.
  obj-$(CONFIG_ISA_DMA)         += dma-isa.o
  obj-$(CONFIG_PCI)             += bios32.o isa.o
  obj-$(CONFIG_SMP)             += smp.o
+ obj-$(CONFIG_KEXEC)           += machine_kexec.o relocate_kernel.o
  obj-$(CONFIG_OABI_COMPAT)     += sys_oabi-compat.o
  
  obj-$(CONFIG_CRUNCH)          += crunch.o crunch-bits.o
diff --combined arch/arm/kernel/setup.c
@@@ -88,6 -88,9 +88,9 @@@ struct cpu_user_fns cpu_user
  #ifdef MULTI_CACHE
  struct cpu_cache_fns cpu_cache;
  #endif
+ #ifdef CONFIG_OUTER_CACHE
+ struct outer_cache_fns outer_cache;
+ #endif
  
  struct stack {
        u32 irq[3];
@@@ -106,7 -109,7 +109,7 @@@ unsigned long phys_initrd_size __initda
  static struct meminfo meminfo __initdata = { 0, };
  static const char *cpu_name;
  static const char *machine_name;
 -static char command_line[COMMAND_LINE_SIZE];
 +static char __initdata command_line[COMMAND_LINE_SIZE];
  
  static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
  static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
@@@ -803,8 -806,8 +806,8 @@@ void __init setup_arch(char **cmdline_p
        init_mm.end_data   = (unsigned long) &_edata;
        init_mm.brk        = (unsigned long) &_end;
  
 -      memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
 -      saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
 +      memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
 +      boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
        parse_cmdline(cmdline_p, from);
        paging_init(&meminfo, mdesc);
        request_standard_resources(&meminfo, mdesc);
diff --combined arch/arm/kernel/time.c
   */
  struct sys_timer *system_timer;
  
+ #if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE)
  /* this needs a better home */
  DEFINE_SPINLOCK(rtc_lock);
  
- #ifdef CONFIG_SA1100_RTC_MODULE
+ #ifdef CONFIG_RTC_DRV_CMOS_MODULE
  EXPORT_SYMBOL(rtc_lock);
  #endif
+ #endif        /* pc-style 'CMOS' RTC support */
  
  /* change this if you have some constant time drift */
  #define USECS_PER_JIFFY       (1000000/HZ)
@@@ -77,6 -79,16 +79,6 @@@ static unsigned long dummy_gettimeoffse
  }
  #endif
  
 -/*
 - * Scheduler clock - returns current time in nanosec units.
 - * This is the default implementation.  Sub-architecture
 - * implementations can override this.
 - */
 -unsigned long long __attribute__((weak)) sched_clock(void)
 -{
 -      return (unsigned long long)jiffies * (1000000000 / HZ);
 -}
 -
  /*
   * An implementation of printk_clock() independent from
   * sched_clock().  This avoids non-bootable kernels when
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * linux/arch/arm/mach-at91rm9200/clock.c
+  * linux/arch/arm/mach-at91/clock.c
   *
   * Copyright (C) 2005 David Brownell
   * Copyright (C) 2005 Ivan Kokshaysky
@@@ -407,7 -407,7 +407,7 @@@ static int at91_clk_open(struct inode *
        return single_open(file, at91_clk_show, NULL);
  }
  
 -static struct file_operations at91_clk_operations = {
 +static const struct file_operations at91_clk_operations = {
        .open           = at91_clk_open,
        .read           = seq_read,
        .llseek         = seq_lseek,
@@@ -525,27 -525,6 +525,6 @@@ fail
        return 0;
  }
  
- /*
-  * Several unused clocks may be active.  Turn them off.
-  */
- static void __init at91_periphclk_reset(void)
- {
-       unsigned long reg;
-       struct clk *clk;
-       reg = at91_sys_read(AT91_PMC_PCSR);
-       list_for_each_entry(clk, &clocks, node) {
-               if (clk->mode != pmc_periph_mode)
-                       continue;
-               if (clk->users > 0)
-                       reg &= ~clk->pmc_mask;
-       }
-       at91_sys_write(AT91_PMC_PCDR, reg);
- }
  static struct clk *const standard_pmc_clocks[] __initdata = {
        /* four primary clocks */
        &clk32k,
@@@ -586,7 -565,7 +565,7 @@@ int __init at91_clock_init(unsigned lon
                pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000);
  
        /*
-        * USB clock init:  choose 48 MHz PLLB value, turn all clocks off,
+        * USB clock init:  choose 48 MHz PLLB value,
         * disable 48MHz clock during usb peripheral suspend.
         *
         * REVISIT:  assumes MCK doesn't derive from PLLB!
        if (cpu_is_at91rm9200()) {
                uhpck.pmc_mask = AT91RM9200_PMC_UHP;
                udpck.pmc_mask = AT91RM9200_PMC_UDP;
-               at91_sys_write(AT91_PMC_SCDR, AT91RM9200_PMC_UHP | AT91RM9200_PMC_UDP);
                at91_sys_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP);
-       } else if (cpu_is_at91sam9260()) {
+       } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263()) {
                uhpck.pmc_mask = AT91SAM926x_PMC_UHP;
                udpck.pmc_mask = AT91SAM926x_PMC_UDP;
-               at91_sys_write(AT91_PMC_SCDR, AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP);
-       } else if (cpu_is_at91sam9261()) {
-               uhpck.pmc_mask = (AT91SAM926x_PMC_UHP | AT91_PMC_HCK0);
-               udpck.pmc_mask = AT91SAM926x_PMC_UDP;
-               at91_sys_write(AT91_PMC_SCDR, AT91SAM926x_PMC_UHP | AT91_PMC_HCK0 | AT91SAM926x_PMC_UDP);
        }
        at91_sys_write(AT91_CKGR_PLLBR, 0);
  
                (unsigned) main_clock / 1000000,
                ((unsigned) main_clock % 1000000) / 1000);
  
-       /* disable all programmable clocks */
-       at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK0 | AT91_PMC_PCK1 | AT91_PMC_PCK2 | AT91_PMC_PCK3);
+       return 0;
+ }
+ /*
+  * Several unused clocks may be active.  Turn them off.
+  */
+ static int __init at91_clock_reset(void)
+ {
+       unsigned long pcdr = 0;
+       unsigned long scdr = 0;
+       struct clk *clk;
+       list_for_each_entry(clk, &clocks, node) {
+               if (clk->users > 0)
+                       continue;
+               if (clk->mode == pmc_periph_mode)
+                       pcdr |= clk->pmc_mask;
+               if (clk->mode == pmc_sys_mode)
+                       scdr |= clk->pmc_mask;
+               pr_debug("Clocks: disable unused %s\n", clk->name);
+       }
  
-       /* disable all other unused peripheral clocks */
-       at91_periphclk_reset();
+       at91_sys_write(AT91_PMC_PCDR, pcdr);
+       at91_sys_write(AT91_PMC_SCDR, scdr);
  
        return 0;
  }
+ late_initcall(at91_clock_reset);
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * linux/arch/arm/mach-at91rm9200/gpio.c
+  * linux/arch/arm/mach-at91/gpio.c
   *
   * Copyright (C) 2005 HP Labs
   *
@@@ -64,24 -64,6 +64,24 @@@ static inline unsigned pin_to_mask(unsi
   */
  
  
 +/*
 + * mux the pin to the "GPIO" peripheral role.
 + */
 +int __init_or_module at91_set_GPIO_periph(unsigned pin, int use_pullup)
 +{
 +      void __iomem    *pio = pin_to_controller(pin);
 +      unsigned        mask = pin_to_mask(pin);
 +
 +      if (!pio)
 +              return -EINVAL;
 +      __raw_writel(mask, pio + PIO_IDR);
 +      __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
 +      __raw_writel(mask, pio + PIO_PER);
 +      return 0;
 +}
 +EXPORT_SYMBOL(at91_set_GPIO_periph);
 +
 +
  /*
   * mux the pin to the "A" internal peripheral role.
   */
@@@ -199,36 -181,6 +199,36 @@@ EXPORT_SYMBOL(at91_set_multi_drive)
  
  /*--------------------------------------------------------------------------*/
  
 +/* new-style GPIO calls; these expect at91_set_GPIO_periph to have been
 + * called, and maybe at91_set_multi_drive() for putout pins.
 + */
 +
 +int gpio_direction_input(unsigned pin)
 +{
 +      void __iomem    *pio = pin_to_controller(pin);
 +      unsigned        mask = pin_to_mask(pin);
 +
 +      if (!pio || !(__raw_readl(pio + PIO_PSR) & mask))
 +              return -EINVAL;
 +      __raw_writel(mask, pio + PIO_OER);
 +      return 0;
 +}
 +EXPORT_SYMBOL(gpio_direction_input);
 +
 +int gpio_direction_output(unsigned pin)
 +{
 +      void __iomem    *pio = pin_to_controller(pin);
 +      unsigned        mask = pin_to_mask(pin);
 +
 +      if (!pio || !(__raw_readl(pio + PIO_PSR) & mask))
 +              return -EINVAL;
 +      __raw_writel(mask, pio + PIO_OER);
 +      return 0;
 +}
 +EXPORT_SYMBOL(gpio_direction_output);
 +
 +/*--------------------------------------------------------------------------*/
 +
  /*
   * assuming the pin is muxed as a gpio output, set its value.
   */
@@@ -3,7 -3,7 +3,7 @@@
   *
   * Copyright (C) 2006 Atmel Corporation
   *
-  * Based on arch/arm/mach-at91rm9200/clock.c
+  * Based on arch/arm/mach-at91/clock.c
   *   Copyright (C) 2005 David Brownell
   *   Copyright (C) 2005 Ivan Kokshaysky
   *
@@@ -63,11 -63,7 +63,11 @@@ EXPORT_SYMBOL(clk_enable)
  
  static void __clk_disable(struct clk *clk)
  {
 -      BUG_ON(clk->users == 0);
 +      if (clk->users == 0) {
 +              printk(KERN_ERR "%s: mismatched disable\n", clk->name);
 +              WARN_ON(1);
 +              return;
 +      }
  
        if (--clk->users == 0 && clk->mode)
                clk->mode(clk, 0);
@@@ -36,6 -36,7 +36,6 @@@
  #include <linux/slab.h>
  #include <linux/init.h>
  #include <linux/errno.h>
 -#include <linux/sched.h>
  #include <linux/platform_device.h>
  #include <linux/i2c.h>
  
@@@ -83,7 -84,7 +83,7 @@@ iop3xx_i2c_enable(struct i2c_algo_iop3x
         * Every time unit enable is asserted, GPOD needs to be cleared
         * on IOP3XX to avoid data corruption on the bus.
         */
- #ifdef CONFIG_PLAT_IOP
+ #if defined(CONFIG_ARCH_IOP32X) || defined(CONFIG_ARCH_IOP33X)
        if (iop3xx_adap->id == 0) {
                gpio_line_set(IOP3XX_GPIO_LINE(7), GPIO_LOW);
                gpio_line_set(IOP3XX_GPIO_LINE(6), GPIO_LOW);
diff --combined drivers/mmc/at91_mci.c
@@@ -64,6 -64,7 +64,7 @@@
  #include <linux/err.h>
  #include <linux/dma-mapping.h>
  #include <linux/clk.h>
+ #include <linux/atmel_pdc.h>
  
  #include <linux/mmc/host.h>
  #include <linux/mmc/protocol.h>
@@@ -75,7 -76,6 +76,6 @@@
  #include <asm/arch/cpu.h>
  #include <asm/arch/gpio.h>
  #include <asm/arch/at91_mci.h>
- #include <asm/arch/at91_pdc.h>
  
  #define DRIVER_NAME "at91_mci"
  
@@@ -211,13 -211,13 +211,13 @@@ static void at91mci_pre_dma_read(struc
  
                /* Check to see if this needs filling */
                if (i == 0) {
-                       if (at91_mci_read(host, AT91_PDC_RCR) != 0) {
+                       if (at91_mci_read(host, ATMEL_PDC_RCR) != 0) {
                                pr_debug("Transfer active in current\n");
                                continue;
                        }
                }
                else {
-                       if (at91_mci_read(host, AT91_PDC_RNCR) != 0) {
+                       if (at91_mci_read(host, ATMEL_PDC_RNCR) != 0) {
                                pr_debug("Transfer active in next\n");
                                continue;
                        }
                pr_debug("dma address = %08X, length = %d\n", sg->dma_address, sg->length);
  
                if (i == 0) {
-                       at91_mci_write(host, AT91_PDC_RPR, sg->dma_address);
-                       at91_mci_write(host, AT91_PDC_RCR, sg->length / 4);
+                       at91_mci_write(host, ATMEL_PDC_RPR, sg->dma_address);
+                       at91_mci_write(host, ATMEL_PDC_RCR, sg->length / 4);
                }
                else {
-                       at91_mci_write(host, AT91_PDC_RNPR, sg->dma_address);
-                       at91_mci_write(host, AT91_PDC_RNCR, sg->length / 4);
+                       at91_mci_write(host, ATMEL_PDC_RNPR, sg->dma_address);
+                       at91_mci_write(host, ATMEL_PDC_RNCR, sg->length / 4);
                }
        }
  
@@@ -303,7 -303,7 +303,7 @@@ static void at91mci_post_dma_read(struc
                at91mci_pre_dma_read(host);
        else {
                at91_mci_write(host, AT91_MCI_IER, AT91_MCI_RXBUFF);
-               at91_mci_write(host, AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS);
+               at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
        }
  
        pr_debug("post dma read done\n");
@@@ -320,7 -320,7 +320,7 @@@ static void at91_mci_handle_transmitted
        pr_debug("Handling the transmit\n");
  
        /* Disable the transfer */
-       at91_mci_write(host, AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS);
+       at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
  
        /* Now wait for cmd ready */
        at91_mci_write(host, AT91_MCI_IDR, AT91_MCI_TXBUFE);
@@@ -431,15 -431,15 +431,15 @@@ static unsigned int at91_mci_send_comma
                cmd->opcode, cmdr, cmd->arg, blocks, block_length, at91_mci_read(host, AT91_MCI_MR));
  
        if (!data) {
-               at91_mci_write(host, AT91_PDC_PTCR, AT91_PDC_TXTDIS | AT91_PDC_RXTDIS);
-               at91_mci_write(host, AT91_PDC_RPR, 0);
-               at91_mci_write(host, AT91_PDC_RCR, 0);
-               at91_mci_write(host, AT91_PDC_RNPR, 0);
-               at91_mci_write(host, AT91_PDC_RNCR, 0);
-               at91_mci_write(host, AT91_PDC_TPR, 0);
-               at91_mci_write(host, AT91_PDC_TCR, 0);
-               at91_mci_write(host, AT91_PDC_TNPR, 0);
-               at91_mci_write(host, AT91_PDC_TNCR, 0);
+               at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS | ATMEL_PDC_RXTDIS);
+               at91_mci_write(host, ATMEL_PDC_RPR, 0);
+               at91_mci_write(host, ATMEL_PDC_RCR, 0);
+               at91_mci_write(host, ATMEL_PDC_RNPR, 0);
+               at91_mci_write(host, ATMEL_PDC_RNCR, 0);
+               at91_mci_write(host, ATMEL_PDC_TPR, 0);
+               at91_mci_write(host, ATMEL_PDC_TCR, 0);
+               at91_mci_write(host, ATMEL_PDC_TNPR, 0);
+               at91_mci_write(host, ATMEL_PDC_TNCR, 0);
  
                at91_mci_write(host, AT91_MCI_ARGR, cmd->arg);
                at91_mci_write(host, AT91_MCI_CMDR, cmdr);
        /*
         * Disable the PDC controller
         */
-       at91_mci_write(host, AT91_PDC_PTCR, AT91_PDC_RXTDIS | AT91_PDC_TXTDIS);
+       at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
  
        if (cmdr & AT91_MCI_TRCMD_START) {
                data->bytes_xfered = 0;
  
                        pr_debug("Transmitting %d bytes\n", host->total_length);
  
-                       at91_mci_write(host, AT91_PDC_TPR, host->physical_address);
-                       at91_mci_write(host, AT91_PDC_TCR, host->total_length / 4);
+                       at91_mci_write(host, ATMEL_PDC_TPR, host->physical_address);
+                       at91_mci_write(host, ATMEL_PDC_TCR, host->total_length / 4);
                        ier = AT91_MCI_TXBUFE;
                }
        }
  
        if (cmdr & AT91_MCI_TRCMD_START) {
                if (cmdr & AT91_MCI_TRDIR)
-                       at91_mci_write(host, AT91_PDC_PTCR, AT91_PDC_RXTEN);
+                       at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN);
                else
-                       at91_mci_write(host, AT91_PDC_PTCR, AT91_PDC_TXTEN);
+                       at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN);
        }
        return ier;
  }
@@@ -823,9 -823,6 +823,9 @@@ static int __init at91_mci_probe(struc
        mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
        mmc->caps = MMC_CAP_BYTEBLOCK;
  
 +      mmc->max_blk_size = 4095;
 +      mmc->max_blk_count = mmc->max_req_size;
 +
        host = mmc_priv(mmc);
        host->mmc = mmc;
        host->buffer = NULL;
diff --combined drivers/serial/Kconfig
@@@ -262,7 -262,8 +262,8 @@@ config SERIAL_AMBA_PL01
        select SERIAL_CORE
        help
          This selects the ARM(R) AMBA(R) PrimeCell PL010 UART.  If you have
-         an Integrator/AP or Integrator/PP2 platform, say Y or M here.
+         an Integrator/AP or Integrator/PP2 platform, or if you have a
+         Cirrus Logic EP93xx CPU, say Y or M here.
  
          If unsure, say N.
  
@@@ -686,22 -687,6 +687,22 @@@ config SERIAL_SH_SCI_CONSOL
        depends on SERIAL_SH_SCI=y
        select SERIAL_CORE_CONSOLE
  
 +config SERIAL_PNX8XXX
 +      bool "Enable PNX8XXX SoCs' UART Support"
 +      depends on MIPS && SOC_PNX8550
 +      select SERIAL_CORE
 +      help
 +        If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
 +        and you want to use serial ports, say Y.  Otherwise, say N.
 +
 +config SERIAL_PNX8XXX_CONSOLE
 +      bool "Enable PNX8XX0 serial console"
 +      depends on SERIAL_PNX8XXX
 +      select SERIAL_CORE_CONSOLE
 +      help
 +        If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
 +        and you want to use serial console, say Y. Otherwise, say N.
 +
  config SERIAL_CORE
        tristate
  
@@@ -932,11 -917,6 +933,11 @@@ config SERIAL_TXX
  config HAS_TXX9_SERIAL
        bool
  
 +config SERIAL_TXX9_NR_UARTS
 +      int "Maximum number of TMPTX39XX/49XX SIO ports"
 +      depends on SERIAL_TXX9
 +      default "6"
 +
  config SERIAL_TXX9_CONSOLE
        bool "TMPTX39XX/49XX SIO Console support"
        depends on SERIAL_TXX9=y
@@@ -1015,14 -995,4 +1016,14 @@@ config SERIAL_NETX_CONSOL
          If you have enabled the serial port on the Motorola IMX
          CPU you can make it the console by answering Y to this option.
  
 +config SERIAL_OF_PLATFORM
 +      tristate "Serial port on Open Firmware platform bus"
 +      depends on PPC_OF
 +      depends on SERIAL_8250
 +      help
 +        If you have a PowerPC based system that has serial ports
 +        on a platform specific bus, you should enable this option.
 +        Currently, only 8250 compatible ports are supported, but
 +        others can easily be added.
 +
  endmenu
  #include <linux/sysrq.h>
  #include <linux/tty_flip.h>
  #include <linux/platform_device.h>
+ #include <linux/atmel_pdc.h>
  
  #include <asm/io.h>
  
  #include <asm/mach/serial_at91.h>
  #include <asm/arch/board.h>
- #include <asm/arch/at91_pdc.h>
  #ifdef CONFIG_ARM
  #include <asm/arch/cpu.h>
  #include <asm/arch/gpio.h>
  
  #define ATMEL_ISR_PASS_LIMIT  256
  
 -#define UART_PUT_CR(port,v)   writel(v, (port)->membase + ATMEL_US_CR)
 -#define UART_GET_MR(port)     readl((port)->membase + ATMEL_US_MR)
 -#define UART_PUT_MR(port,v)   writel(v, (port)->membase + ATMEL_US_MR)
 -#define UART_PUT_IER(port,v)  writel(v, (port)->membase + ATMEL_US_IER)
 -#define UART_PUT_IDR(port,v)  writel(v, (port)->membase + ATMEL_US_IDR)
 -#define UART_GET_IMR(port)    readl((port)->membase + ATMEL_US_IMR)
 -#define UART_GET_CSR(port)    readl((port)->membase + ATMEL_US_CSR)
 -#define UART_GET_CHAR(port)   readl((port)->membase + ATMEL_US_RHR)
 -#define UART_PUT_CHAR(port,v) writel(v, (port)->membase + ATMEL_US_THR)
 -#define UART_GET_BRGR(port)   readl((port)->membase + ATMEL_US_BRGR)
 -#define UART_PUT_BRGR(port,v) writel(v, (port)->membase + ATMEL_US_BRGR)
 -#define UART_PUT_RTOR(port,v) writel(v, (port)->membase + ATMEL_US_RTOR)
 -
 -// #define UART_GET_CR(port)  readl((port)->membase + ATMEL_US_CR)            // is write-only
 +#define UART_PUT_CR(port,v)   __raw_writel(v, (port)->membase + ATMEL_US_CR)
 +#define UART_GET_MR(port)     __raw_readl((port)->membase + ATMEL_US_MR)
 +#define UART_PUT_MR(port,v)   __raw_writel(v, (port)->membase + ATMEL_US_MR)
 +#define UART_PUT_IER(port,v)  __raw_writel(v, (port)->membase + ATMEL_US_IER)
 +#define UART_PUT_IDR(port,v)  __raw_writel(v, (port)->membase + ATMEL_US_IDR)
 +#define UART_GET_IMR(port)    __raw_readl((port)->membase + ATMEL_US_IMR)
 +#define UART_GET_CSR(port)    __raw_readl((port)->membase + ATMEL_US_CSR)
 +#define UART_GET_CHAR(port)   __raw_readl((port)->membase + ATMEL_US_RHR)
 +#define UART_PUT_CHAR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_THR)
 +#define UART_GET_BRGR(port)   __raw_readl((port)->membase + ATMEL_US_BRGR)
 +#define UART_PUT_BRGR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_BRGR)
 +#define UART_PUT_RTOR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_RTOR)
 +
 +// #define UART_GET_CR(port)  __raw_readl((port)->membase + ATMEL_US_CR)              // is write-only
  
   /* PDC registers */
 -#define UART_PUT_PTCR(port,v) writel(v, (port)->membase + ATMEL_PDC_PTCR)
 -#define UART_GET_PTSR(port)   readl((port)->membase + ATMEL_PDC_PTSR)
 -
 -#define UART_PUT_RPR(port,v)  writel(v, (port)->membase + ATMEL_PDC_RPR)
 -#define UART_GET_RPR(port)    readl((port)->membase + ATMEL_PDC_RPR)
 -#define UART_PUT_RCR(port,v)  writel(v, (port)->membase + ATMEL_PDC_RCR)
 -#define UART_PUT_RNPR(port,v) writel(v, (port)->membase + ATMEL_PDC_RNPR)
 -#define UART_PUT_RNCR(port,v) writel(v, (port)->membase + ATMEL_PDC_RNCR)
 -
 -#define UART_PUT_TPR(port,v)  writel(v, (port)->membase + ATMEL_PDC_TPR)
 -#define UART_PUT_TCR(port,v)  writel(v, (port)->membase + ATMEL_PDC_TCR)
 -//#define UART_PUT_TNPR(port,v)       writel(v, (port)->membase + ATMEL_PDC_TNPR)
 -//#define UART_PUT_TNCR(port,v)       writel(v, (port)->membase + ATMEL_PDC_TNCR)
 +#define UART_PUT_PTCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_PTCR)
 +#define UART_GET_PTSR(port)   __raw_readl((port)->membase + ATMEL_PDC_PTSR)
 +
 +#define UART_PUT_RPR(port,v)  __raw_writel(v, (port)->membase + ATMEL_PDC_RPR)
 +#define UART_GET_RPR(port)    __raw_readl((port)->membase + ATMEL_PDC_RPR)
 +#define UART_PUT_RCR(port,v)  __raw_writel(v, (port)->membase + ATMEL_PDC_RCR)
 +#define UART_PUT_RNPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RNPR)
 +#define UART_PUT_RNCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RNCR)
 +
 +#define UART_PUT_TPR(port,v)  __raw_writel(v, (port)->membase + ATMEL_PDC_TPR)
 +#define UART_PUT_TCR(port,v)  __raw_writel(v, (port)->membase + ATMEL_PDC_TCR)
 +//#define UART_PUT_TNPR(port,v)       __raw_writel(v, (port)->membase + ATMEL_PDC_TNPR)
 +//#define UART_PUT_TNCR(port,v)       __raw_writel(v, (port)->membase + ATMEL_PDC_TNCR)
  
  static int (*atmel_open_hook)(struct uart_port *);
  static void (*atmel_close_hook)(struct uart_port *);
@@@ -30,6 -30,7 +30,6 @@@
  #include <linux/platform_device.h>
  #include <linux/delay.h>
  #include <linux/ioport.h>
 -#include <linux/sched.h>
  #include <linux/slab.h>
  #include <linux/smp_lock.h>
  #include <linux/errno.h>
@@@ -38,7 -39,7 +38,7 @@@
  #include <linux/interrupt.h>
  #include <linux/proc_fs.h>
  #include <linux/clk.h>
 -#include <linux/usb_ch9.h>
 +#include <linux/usb/ch9.h>
  #include <linux/usb_gadget.h>
  
  #include <asm/byteorder.h>
@@@ -784,7 -785,7 +784,7 @@@ static int at91_ep_set_halt(struct usb_
        return status;
  }
  
 -static struct usb_ep_ops at91_ep_ops = {
 +static const struct usb_ep_ops at91_ep_ops = {
        .enable         = at91_ep_enable,
        .disable        = at91_ep_disable,
        .alloc_request  = at91_ep_alloc_request,
@@@ -912,7 -913,7 +912,7 @@@ static void pullup(struct at91_udc *udc
                at91_udp_write(udc, AT91_UDP_TXVC, 0);
                if (cpu_is_at91rm9200())
                        at91_set_gpio_value(udc->board.pullup_pin, 1);
-               else if (cpu_is_at91sam9260()) {
+               else if (cpu_is_at91sam9260() || cpu_is_at91sam9263()) {
                        u32     txvc = at91_udp_read(udc, AT91_UDP_TXVC);
  
                        txvc |= AT91_UDP_TXVC_PUON;
                at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
                if (cpu_is_at91rm9200())
                        at91_set_gpio_value(udc->board.pullup_pin, 0);
-               else if (cpu_is_at91sam9260()) {
+               else if (cpu_is_at91sam9260() || cpu_is_at91sam9263()) {
                        u32     txvc = at91_udp_read(udc, AT91_UDP_TXVC);
  
                        txvc &= ~AT91_UDP_TXVC_PUON;
@@@ -1651,7 -1652,7 +1651,7 @@@ static void at91udc_shutdown(struct pla
        pullup(platform_get_drvdata(dev), 0);
  }
  
 -static int __devinit at91udc_probe(struct platform_device *pdev)
 +static int __init at91udc_probe(struct platform_device *pdev)
  {
        struct device   *dev = &pdev->dev;
        struct at91_udc *udc;
@@@ -1762,7 -1763,7 +1762,7 @@@ fail0
        return retval;
  }
  
 -static int __devexit at91udc_remove(struct platform_device *pdev)
 +static int __exit at91udc_remove(struct platform_device *pdev)
  {
        struct at91_udc *udc = platform_get_drvdata(pdev);
        struct resource *res;
@@@ -1806,13 -1807,16 +1806,13 @@@ static int at91udc_suspend(struct platf
                        || !wake
                        || at91_suspend_entering_slow_clock()) {
                pullup(udc, 0);
 -              disable_irq_wake(udc->udp_irq);
 +              wake = 0;
        } else
                enable_irq_wake(udc->udp_irq);
  
 -      if (udc->board.vbus_pin > 0) {
 -              if (wake)
 -                      enable_irq_wake(udc->board.vbus_pin);
 -              else
 -                      disable_irq_wake(udc->board.vbus_pin);
 -      }
 +      udc->active_suspend = wake;
 +      if (udc->board.vbus_pin > 0 && wake)
 +              enable_irq_wake(udc->board.vbus_pin);
        return 0;
  }
  
@@@ -1820,14 -1824,8 +1820,14 @@@ static int at91udc_resume(struct platfo
  {
        struct at91_udc *udc = platform_get_drvdata(pdev);
  
 +      if (udc->board.vbus_pin > 0 && udc->active_suspend)
 +              disable_irq_wake(udc->board.vbus_pin);
 +
        /* maybe reconnect to host; if so, clocks on */
 -      pullup(udc, 1);
 +      if (udc->active_suspend)
 +              disable_irq_wake(udc->udp_irq);
 +      else
 +              pullup(udc, 1);
        return 0;
  }
  #else
  #endif
  
  static struct platform_driver at91_udc = {
 -      .probe          = at91udc_probe,
 -      .remove         = __devexit_p(at91udc_remove),
 +      .remove         = __exit_p(at91udc_remove),
        .shutdown       = at91udc_shutdown,
        .suspend        = at91udc_suspend,
        .resume         = at91udc_resume,
        },
  };
  
 -static int __devinit udc_init_module(void)
 +static int __init udc_init_module(void)
  {
 -      return platform_driver_register(&at91_udc);
 +      return platform_driver_probe(&at91_udc, at91udc_probe);
  }
  module_init(udc_init_module);
  
 -static void __devexit udc_exit_module(void)
 +static void __exit udc_exit_module(void)
  {
        platform_driver_unregister(&at91_udc);
  }
@@@ -33,6 -33,7 +33,6 @@@
  #include <linux/types.h>
  #include <linux/errno.h>
  #include <linux/delay.h>
 -#include <linux/sched.h>
  #include <linux/slab.h>
  #include <linux/init.h>
  #include <linux/timer.h>
@@@ -55,7 -56,7 +55,7 @@@
  #include <asm/arch/pxa-regs.h>
  #endif
  
 -#include <linux/usb_ch9.h>
 +#include <linux/usb/ch9.h>
  #include <linux/usb_gadget.h>
  
  #include <asm/arch/udc.h>
@@@ -155,7 -156,7 +155,7 @@@ static int is_vbus_present(void
        struct pxa2xx_udc_mach_info             *mach = the_controller->mach;
  
        if (mach->gpio_vbus)
-               return pxa_gpio_get(mach->gpio_vbus);
+               return udc_gpio_get(mach->gpio_vbus);
        if (mach->udc_is_connected)
                return mach->udc_is_connected();
        return 1;
@@@ -167,7 -168,7 +167,7 @@@ static void pullup_off(void
        struct pxa2xx_udc_mach_info             *mach = the_controller->mach;
  
        if (mach->gpio_pullup)
-               pxa_gpio_set(mach->gpio_pullup, 0);
+               udc_gpio_set(mach->gpio_pullup, 0);
        else if (mach->udc_command)
                mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
  }
@@@ -177,7 -178,7 +177,7 @@@ static void pullup_on(void
        struct pxa2xx_udc_mach_info             *mach = the_controller->mach;
  
        if (mach->gpio_pullup)
-               pxa_gpio_set(mach->gpio_pullup, 1);
+               udc_gpio_set(mach->gpio_pullup, 1);
        else if (mach->udc_command)
                mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
  }
@@@ -1755,7 -1756,7 +1755,7 @@@ lubbock_vbus_irq(int irq, void *_dev
  static irqreturn_t udc_vbus_irq(int irq, void *_dev)
  {
        struct pxa2xx_udc       *dev = _dev;
-       int                     vbus = pxa_gpio_get(dev->mach->gpio_vbus);
+       int                     vbus = udc_gpio_get(dev->mach->gpio_vbus);
  
        pxa2xx_udc_vbus_session(&dev->gadget, vbus);
        return IRQ_HANDLED;
@@@ -2545,15 -2546,13 +2545,13 @@@ static int __init pxa2xx_udc_probe(stru
        dev->dev = &pdev->dev;
        dev->mach = pdev->dev.platform_data;
        if (dev->mach->gpio_vbus) {
-               vbus_irq = IRQ_GPIO(dev->mach->gpio_vbus & GPIO_MD_MASK_NR);
-               pxa_gpio_mode((dev->mach->gpio_vbus & GPIO_MD_MASK_NR)
-                               | GPIO_IN);
+               udc_gpio_init_vbus(dev->mach->gpio_vbus);
+               vbus_irq = udc_gpio_to_irq(dev->mach->gpio_vbus);
                set_irq_type(vbus_irq, IRQT_BOTHEDGE);
        } else
                vbus_irq = 0;
        if (dev->mach->gpio_pullup)
-               pxa_gpio_mode((dev->mach->gpio_pullup & GPIO_MD_MASK_NR)
-                               | GPIO_OUT | GPIO_DFLT_LOW);
+               udc_gpio_init_pullup(dev->mach->gpio_pullup);
  
        init_timer(&dev->timer);
        dev->timer.function = udc_watchdog;
@@@ -2613,7 -2612,7 +2611,7 @@@ lubbock_fail0
  #endif
        if (vbus_irq) {
                retval = request_irq(vbus_irq, udc_vbus_irq,
 -                              SA_INTERRUPT | SA_SAMPLE_RANDOM,
 +                              IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
                                driver_name, dev);
                if (retval != 0) {
                        printk(KERN_ERR "%s: can't get irq %i, err %d\n",
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * include/asm-arm/arch-at91rm9200/gpio.h
+  * include/asm-arm/arch-at91/gpio.h
   *
   *  Copyright (C) 2005 HP Labs
   *
@@@ -17,7 -17,7 +17,7 @@@
  
  #define PIN_BASE              NR_AIC_IRQS
  
- #define MAX_GPIO_BANKS                4
+ #define MAX_GPIO_BANKS                5
  
  /* these pin numbers double as IRQ numbers, like AT91xxx_ID_* values */
  
  #define       AT91_PIN_PA2    (PIN_BASE + 0x00 + 2)
  #define       AT91_PIN_PA3    (PIN_BASE + 0x00 + 3)
  #define       AT91_PIN_PA4    (PIN_BASE + 0x00 + 4)
  #define       AT91_PIN_PA5    (PIN_BASE + 0x00 + 5)
  #define       AT91_PIN_PA6    (PIN_BASE + 0x00 + 6)
  #define       AT91_PIN_PA7    (PIN_BASE + 0x00 + 7)
  #define       AT91_PIN_PA8    (PIN_BASE + 0x00 + 8)
  #define       AT91_PIN_PA9    (PIN_BASE + 0x00 + 9)
  #define       AT91_PIN_PA10   (PIN_BASE + 0x00 + 10)
  #define       AT91_PIN_PA11   (PIN_BASE + 0x00 + 11)
  #define       AT91_PIN_PA12   (PIN_BASE + 0x00 + 12)
  #define       AT91_PIN_PA13   (PIN_BASE + 0x00 + 13)
  #define       AT91_PIN_PA14   (PIN_BASE + 0x00 + 14)
  #define       AT91_PIN_PA15   (PIN_BASE + 0x00 + 15)
  #define       AT91_PIN_PA16   (PIN_BASE + 0x00 + 16)
  #define       AT91_PIN_PA17   (PIN_BASE + 0x00 + 17)
  #define       AT91_PIN_PA18   (PIN_BASE + 0x00 + 18)
  #define       AT91_PIN_PA19   (PIN_BASE + 0x00 + 19)
  #define       AT91_PIN_PA20   (PIN_BASE + 0x00 + 20)
  #define       AT91_PIN_PA21   (PIN_BASE + 0x00 + 21)
  #define       AT91_PIN_PA22   (PIN_BASE + 0x00 + 22)
  #define       AT91_PIN_PA23   (PIN_BASE + 0x00 + 23)
  #define       AT91_PIN_PA24   (PIN_BASE + 0x00 + 24)
  #define       AT91_PIN_PA25   (PIN_BASE + 0x00 + 25)
  #define       AT91_PIN_PA26   (PIN_BASE + 0x00 + 26)
  #define       AT91_PIN_PA27   (PIN_BASE + 0x00 + 27)
  #define       AT91_PIN_PA28   (PIN_BASE + 0x00 + 28)
  #define       AT91_PIN_PA29   (PIN_BASE + 0x00 + 29)
  #define       AT91_PIN_PA30   (PIN_BASE + 0x00 + 30)
  #define       AT91_PIN_PA31   (PIN_BASE + 0x00 + 31)
  
  #define       AT91_PIN_PB2    (PIN_BASE + 0x20 + 2)
  #define       AT91_PIN_PB3    (PIN_BASE + 0x20 + 3)
  #define       AT91_PIN_PB4    (PIN_BASE + 0x20 + 4)
  #define       AT91_PIN_PB5    (PIN_BASE + 0x20 + 5)
  #define       AT91_PIN_PB6    (PIN_BASE + 0x20 + 6)
  #define       AT91_PIN_PB7    (PIN_BASE + 0x20 + 7)
  #define       AT91_PIN_PB8    (PIN_BASE + 0x20 + 8)
  #define       AT91_PIN_PB9    (PIN_BASE + 0x20 + 9)
  #define       AT91_PIN_PB10   (PIN_BASE + 0x20 + 10)
  #define       AT91_PIN_PB11   (PIN_BASE + 0x20 + 11)
  #define       AT91_PIN_PB12   (PIN_BASE + 0x20 + 12)
  #define       AT91_PIN_PB13   (PIN_BASE + 0x20 + 13)
  #define       AT91_PIN_PB14   (PIN_BASE + 0x20 + 14)
  #define       AT91_PIN_PB15   (PIN_BASE + 0x20 + 15)
  #define       AT91_PIN_PB16   (PIN_BASE + 0x20 + 16)
  #define       AT91_PIN_PB17   (PIN_BASE + 0x20 + 17)
  #define       AT91_PIN_PB18   (PIN_BASE + 0x20 + 18)
  #define       AT91_PIN_PB19   (PIN_BASE + 0x20 + 19)
  #define       AT91_PIN_PB20   (PIN_BASE + 0x20 + 20)
  #define       AT91_PIN_PB21   (PIN_BASE + 0x20 + 21)
  #define       AT91_PIN_PB22   (PIN_BASE + 0x20 + 22)
  #define       AT91_PIN_PB23   (PIN_BASE + 0x20 + 23)
  #define       AT91_PIN_PB24   (PIN_BASE + 0x20 + 24)
  #define       AT91_PIN_PB25   (PIN_BASE + 0x20 + 25)
  #define       AT91_PIN_PB26   (PIN_BASE + 0x20 + 26)
  #define       AT91_PIN_PB27   (PIN_BASE + 0x20 + 27)
  #define       AT91_PIN_PB28   (PIN_BASE + 0x20 + 28)
  #define       AT91_PIN_PB29   (PIN_BASE + 0x20 + 29)
  #define       AT91_PIN_PB30   (PIN_BASE + 0x20 + 30)
  #define       AT91_PIN_PB31   (PIN_BASE + 0x20 + 31)
  
  #define       AT91_PIN_PC2    (PIN_BASE + 0x40 + 2)
  #define       AT91_PIN_PC3    (PIN_BASE + 0x40 + 3)
  #define       AT91_PIN_PC4    (PIN_BASE + 0x40 + 4)
  #define       AT91_PIN_PC5    (PIN_BASE + 0x40 + 5)
  #define       AT91_PIN_PC6    (PIN_BASE + 0x40 + 6)
  #define       AT91_PIN_PC7    (PIN_BASE + 0x40 + 7)
  #define       AT91_PIN_PC8    (PIN_BASE + 0x40 + 8)
  #define       AT91_PIN_PC9    (PIN_BASE + 0x40 + 9)
  #define       AT91_PIN_PC10   (PIN_BASE + 0x40 + 10)
  #define       AT91_PIN_PC11   (PIN_BASE + 0x40 + 11)
  #define       AT91_PIN_PC12   (PIN_BASE + 0x40 + 12)
  #define       AT91_PIN_PC13   (PIN_BASE + 0x40 + 13)
  #define       AT91_PIN_PC14   (PIN_BASE + 0x40 + 14)
  #define       AT91_PIN_PC15   (PIN_BASE + 0x40 + 15)
  #define       AT91_PIN_PC16   (PIN_BASE + 0x40 + 16)
  #define       AT91_PIN_PC17   (PIN_BASE + 0x40 + 17)
  #define       AT91_PIN_PC18   (PIN_BASE + 0x40 + 18)
  #define       AT91_PIN_PC19   (PIN_BASE + 0x40 + 19)
  #define       AT91_PIN_PC20   (PIN_BASE + 0x40 + 20)
  #define       AT91_PIN_PC21   (PIN_BASE + 0x40 + 21)
  #define       AT91_PIN_PC22   (PIN_BASE + 0x40 + 22)
  #define       AT91_PIN_PC23   (PIN_BASE + 0x40 + 23)
  #define       AT91_PIN_PC24   (PIN_BASE + 0x40 + 24)
  #define       AT91_PIN_PC25   (PIN_BASE + 0x40 + 25)
  #define       AT91_PIN_PC26   (PIN_BASE + 0x40 + 26)
  #define       AT91_PIN_PC27   (PIN_BASE + 0x40 + 27)
  #define       AT91_PIN_PC28   (PIN_BASE + 0x40 + 28)
  #define       AT91_PIN_PC29   (PIN_BASE + 0x40 + 29)
  #define       AT91_PIN_PC30   (PIN_BASE + 0x40 + 30)
  #define       AT91_PIN_PC31   (PIN_BASE + 0x40 + 31)
  
  #define       AT91_PIN_PD2    (PIN_BASE + 0x60 + 2)
  #define       AT91_PIN_PD3    (PIN_BASE + 0x60 + 3)
  #define       AT91_PIN_PD4    (PIN_BASE + 0x60 + 4)
  #define       AT91_PIN_PD5    (PIN_BASE + 0x60 + 5)
  #define       AT91_PIN_PD6    (PIN_BASE + 0x60 + 6)
  #define       AT91_PIN_PD7    (PIN_BASE + 0x60 + 7)
  #define       AT91_PIN_PD8    (PIN_BASE + 0x60 + 8)
  #define       AT91_PIN_PD9    (PIN_BASE + 0x60 + 9)
  #define       AT91_PIN_PD10   (PIN_BASE + 0x60 + 10)
  #define       AT91_PIN_PD11   (PIN_BASE + 0x60 + 11)
  #define       AT91_PIN_PD12   (PIN_BASE + 0x60 + 12)
  #define       AT91_PIN_PD13   (PIN_BASE + 0x60 + 13)
  #define       AT91_PIN_PD14   (PIN_BASE + 0x60 + 14)
  #define       AT91_PIN_PD15   (PIN_BASE + 0x60 + 15)
  #define       AT91_PIN_PD16   (PIN_BASE + 0x60 + 16)
  #define       AT91_PIN_PD17   (PIN_BASE + 0x60 + 17)
  #define       AT91_PIN_PD18   (PIN_BASE + 0x60 + 18)
  #define       AT91_PIN_PD19   (PIN_BASE + 0x60 + 19)
  #define       AT91_PIN_PD20   (PIN_BASE + 0x60 + 20)
  #define       AT91_PIN_PD21   (PIN_BASE + 0x60 + 21)
  #define       AT91_PIN_PD22   (PIN_BASE + 0x60 + 22)
  #define       AT91_PIN_PD23   (PIN_BASE + 0x60 + 23)
  #define       AT91_PIN_PD24   (PIN_BASE + 0x60 + 24)
  #define       AT91_PIN_PD25   (PIN_BASE + 0x60 + 25)
  #define       AT91_PIN_PD26   (PIN_BASE + 0x60 + 26)
  #define       AT91_PIN_PD27   (PIN_BASE + 0x60 + 27)
  #define       AT91_PIN_PD28   (PIN_BASE + 0x60 + 28)
  #define       AT91_PIN_PD29   (PIN_BASE + 0x60 + 29)
  #define       AT91_PIN_PD30   (PIN_BASE + 0x60 + 30)
  #define       AT91_PIN_PD31   (PIN_BASE + 0x60 + 31)
  
+ #define       AT91_PIN_PE0    (PIN_BASE + 0x80 + 0)
+ #define       AT91_PIN_PE1    (PIN_BASE + 0x80 + 1)
+ #define       AT91_PIN_PE2    (PIN_BASE + 0x80 + 2)
+ #define       AT91_PIN_PE3    (PIN_BASE + 0x80 + 3)
+ #define       AT91_PIN_PE4    (PIN_BASE + 0x80 + 4)
+ #define       AT91_PIN_PE5    (PIN_BASE + 0x80 + 5)
+ #define       AT91_PIN_PE6    (PIN_BASE + 0x80 + 6)
+ #define       AT91_PIN_PE7    (PIN_BASE + 0x80 + 7)
+ #define       AT91_PIN_PE8    (PIN_BASE + 0x80 + 8)
+ #define       AT91_PIN_PE9    (PIN_BASE + 0x80 + 9)
+ #define       AT91_PIN_PE10   (PIN_BASE + 0x80 + 10)
+ #define       AT91_PIN_PE11   (PIN_BASE + 0x80 + 11)
+ #define       AT91_PIN_PE12   (PIN_BASE + 0x80 + 12)
+ #define       AT91_PIN_PE13   (PIN_BASE + 0x80 + 13)
+ #define       AT91_PIN_PE14   (PIN_BASE + 0x80 + 14)
+ #define       AT91_PIN_PE15   (PIN_BASE + 0x80 + 15)
+ #define       AT91_PIN_PE16   (PIN_BASE + 0x80 + 16)
+ #define       AT91_PIN_PE17   (PIN_BASE + 0x80 + 17)
+ #define       AT91_PIN_PE18   (PIN_BASE + 0x80 + 18)
+ #define       AT91_PIN_PE19   (PIN_BASE + 0x80 + 19)
+ #define       AT91_PIN_PE20   (PIN_BASE + 0x80 + 20)
+ #define       AT91_PIN_PE21   (PIN_BASE + 0x80 + 21)
+ #define       AT91_PIN_PE22   (PIN_BASE + 0x80 + 22)
+ #define       AT91_PIN_PE23   (PIN_BASE + 0x80 + 23)
+ #define       AT91_PIN_PE24   (PIN_BASE + 0x80 + 24)
+ #define       AT91_PIN_PE25   (PIN_BASE + 0x80 + 25)
+ #define       AT91_PIN_PE26   (PIN_BASE + 0x80 + 26)
+ #define       AT91_PIN_PE27   (PIN_BASE + 0x80 + 27)
+ #define       AT91_PIN_PE28   (PIN_BASE + 0x80 + 28)
+ #define       AT91_PIN_PE29   (PIN_BASE + 0x80 + 29)
+ #define       AT91_PIN_PE30   (PIN_BASE + 0x80 + 30)
+ #define       AT91_PIN_PE31   (PIN_BASE + 0x80 + 31)
  #ifndef __ASSEMBLY__
  /* setup setup routines, called from board init or driver probe() */
 +extern int __init_or_module at91_set_GPIO_periph(unsigned pin, int use_pullup);
  extern int __init_or_module at91_set_A_periph(unsigned pin, int use_pullup);
  extern int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup);
  extern int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup);
@@@ -194,50 -202,7 +203,50 @@@ extern int at91_get_gpio_value(unsigne
  /* callable only from core power-management code */
  extern void at91_gpio_suspend(void);
  extern void at91_gpio_resume(void);
 -#endif
  
 -#endif
 +/*-------------------------------------------------------------------------*/
 +
 +/* wrappers for "new style" GPIO calls. the old AT91-specfic ones should
 + * eventually be removed (along with this errno.h inclusion), and the
 + * gpio request/free calls should probably be implemented.
 + */
 +
 +#include <asm/errno.h>
 +
 +static inline int gpio_request(unsigned gpio, const char *label)
 +{
 +      return 0;
 +}
 +
 +static inline void gpio_free(unsigned gpio)
 +{
 +}
 +
 +extern int gpio_direction_input(unsigned gpio);
 +extern int gpio_direction_output(unsigned gpio);
  
 +static inline int gpio_get_value(unsigned gpio)
 +{
 +      return at91_get_gpio_value(gpio);
 +}
 +
 +static inline void gpio_set_value(unsigned gpio, int value)
 +{
 +      at91_set_gpio_value(gpio, value);
 +}
 +
 +#include <asm-generic/gpio.h>         /* cansleep wrappers */
 +
 +static inline int gpio_to_irq(unsigned gpio)
 +{
 +      return gpio;
 +}
 +
 +static inline int irq_to_gpio(unsigned irq)
 +{
 +      return irq;
 +}
 +
 +#endif        /* __ASSEMBLY__ */
 +
 +#endif
diff --combined sound/arm/aaci.h
  #define AACI_DR4      0x0f0   /* data read/written fifo 4 */
  
  /*
-  * transmit fifo control register. P48
+  * TX/RX fifo control register (CR). P48
   */
- #define TXCR_FEN      (1 << 16)       /* fifo enable */
- #define TXCR_COMPACT  (1 << 15)       /* compact mode */
- #define TXCR_TSZ16    (0 << 13)       /* 16 bits */
- #define TXCR_TSZ18    (1 << 13)       /* 18 bits */
- #define TXCR_TSZ20    (2 << 13)       /* 20 bits */
- #define TXCR_TSZ12    (3 << 13)       /* 12 bits */
- #define TXCR_TX12     (1 << 12)       /* transmits slot 12 */
- #define TXCR_TX11     (1 << 11)       /* transmits slot 12 */
- #define TXCR_TX10     (1 << 10)       /* transmits slot 12 */
- #define TXCR_TX9      (1 << 9)        /* transmits slot 12 */
- #define TXCR_TX8      (1 << 8)        /* transmits slot 12 */
- #define TXCR_TX7      (1 << 7)        /* transmits slot 12 */
- #define TXCR_TX6      (1 << 6)        /* transmits slot 12 */
- #define TXCR_TX5      (1 << 5)        /* transmits slot 12 */
- #define TXCR_TX4      (1 << 4)        /* transmits slot 12 */
- #define TXCR_TX3      (1 << 3)        /* transmits slot 12 */
- #define TXCR_TX2      (1 << 2)        /* transmits slot 12 */
- #define TXCR_TX1      (1 << 1)        /* transmits slot 12 */
- #define TXCR_TXEN     (1 << 0)        /* transmit enable */
+ #define CR_FEN                (1 << 16)       /* fifo enable */
+ #define CR_COMPACT    (1 << 15)       /* compact mode */
+ #define CR_SZ16               (0 << 13)       /* 16 bits */
+ #define CR_SZ18               (1 << 13)       /* 18 bits */
+ #define CR_SZ20               (2 << 13)       /* 20 bits */
+ #define CR_SZ12               (3 << 13)       /* 12 bits */
+ #define CR_SL12               (1 << 12)
+ #define CR_SL11               (1 << 11)
+ #define CR_SL10               (1 << 10)
+ #define CR_SL9                (1 << 9)
+ #define CR_SL8                (1 << 8)
+ #define CR_SL7                (1 << 7)
+ #define CR_SL6                (1 << 6)
+ #define CR_SL5                (1 << 5)
+ #define CR_SL4                (1 << 4)
+ #define CR_SL3                (1 << 3)
+ #define CR_SL2                (1 << 2)
+ #define CR_SL1                (1 << 1)
+ #define CR_EN         (1 << 0)        /* transmit enable */
  
  /*
   * status register bits. P49
@@@ -228,7 -228,8 +228,8 @@@ struct aaci 
  
        /* AC'97 */
        struct mutex            ac97_sem;
 -      ac97_bus_t              *ac97_bus;
 -      ac97_t                  *ac97;
 +      struct snd_ac97_bus     *ac97_bus;
++      struct snd_ac97         *ac97;
  
        u32                     maincr;
        spinlock_t              lock;