]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 into devel
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Fri, 13 Mar 2009 21:44:51 +0000 (21:44 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 13 Mar 2009 21:44:51 +0000 (21:44 +0000)
Conflicts:

arch/arm/mach-at91/gpio.c

13 files changed:
1  2 
MAINTAINERS
arch/arm/kernel/setup.c
arch/arm/mach-at91/gpio.c
arch/arm/mm/mmu.c
arch/arm/plat-mxc/dma-mx1-mx2.c
drivers/input/keyboard/corgikbd.c
drivers/input/keyboard/spitzkbd.c
drivers/input/touchscreen/corgi_ts.c
drivers/media/video/pxa_camera.c
drivers/net/smc911x.h
drivers/video/Kconfig
drivers/video/pxafb.c
lib/Kconfig.debug

diff --combined MAINTAINERS
index 799f9d818d183bb95ebb843b99a639747342f1ac,1c2ca1dc66f2006765dba54bb05edf8a5b57d258..9633fb0a92b085da2d55ba835ce050dfa5873e95
@@@ -622,7 -622,7 +622,7 @@@ P: Dirk Opfe
  M:    dirk@opfer-online.de
  S:    Maintained
  
 -ARM/PALMTX SUPPORT
 +ARM/PALMTX,PALMT5,PALMLD SUPPORT
  P:    Marek Vasut
  M:    marek.vasut@gmail.com
  W:    http://hackndev.com
@@@ -692,6 -692,13 +692,13 @@@ M:       kernel@wantstofly.or
  L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
  S:    Maintained
  
+ ARM/NUVOTON W90X900 ARM ARCHITECTURE
+ P:      Wan ZongShun
+ M:      mcuos.com@gmail.com
+ L:      linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+ W:      http://www.mcuos.com
+ S:      Maintained
  ARPD SUPPORT
  P:    Jonathan Layes
  L:    netdev@vger.kernel.org
@@@ -1202,6 -1209,8 +1209,8 @@@ S:      Supporte
  CONTROL GROUPS (CGROUPS)
  P:    Paul Menage
  M:    menage@google.com
+ P:    Li Zefan
+ M:    lizf@cn.fujitsu.com
  L:    containers@lists.linux-foundation.org
  S:    Maintained
  
@@@ -1903,10 -1912,10 +1912,10 @@@ W:   http://gigaset307x.sourceforge.net
  S:    Maintained
  
  HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
- P:    Robert Love
- M:    rlove@rlove.org
M:    linux-kernel@vger.kernel.org
- W:    http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
+ P:    Frank Seidel
+ M:    frank@f-seidel.de
L:    lm-sensors@lm-sensors.org
+ W:    http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/
  S:    Maintained
  
  GSPCA FINEPIX SUBDRIVER
@@@ -1999,7 -2008,7 +2008,7 @@@ S:      Maintaine
  
  HIBERNATION (aka Software Suspend, aka swsusp)
  P:    Pavel Machek
- M:    pavel@suse.cz
+ M:    pavel@ucw.cz
  P:    Rafael J. Wysocki
  M:    rjw@sisk.pl
  L:    linux-pm@lists.linux-foundation.org
@@@ -2455,7 -2464,7 +2464,7 @@@ S:      Maintaine
  
  ISDN SUBSYSTEM
  P:    Karsten Keil
- M:    kkeil@suse.de
+ M:    isdn@linux-pingi.de
  L:    isdn4linux@listserv.isdn4linux.de (subscribers-only)
  W:    http://www.isdn4linux.de
  T:    git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
@@@ -3325,8 -3334,8 +3334,8 @@@ P:      Jeremy Fitzharding
  M:    jeremy@xensource.com
  P:    Chris Wright
  M:    chrisw@sous-sol.org
- P:    Zachary Amsden
- M:    zach@vmware.com
+ P:    Alok Kataria
+ M:    akataria@vmware.com
  P:    Rusty Russell
  M:    rusty@rustcorp.com.au
  L:    virtualization@lists.osdl.org
@@@ -3537,6 -3546,12 +3546,12 @@@ S:    Maintaine
  PXA MMCI DRIVER
  S:    Orphan
  
+ PXA RTC DRIVER
+ P:    Robert Jarzmik
+ M:    robert.jarzmik@free.fr
+ L:    rtc-linux@googlegroups.com
+ S:    Maintained
  QLOGIC QLA2XXX FC-SCSI DRIVER
  P:    Andrew Vasquez
  M:    linux-driver@qlogic.com
@@@ -4164,7 -4179,7 +4179,7 @@@ SUSPEND TO RA
  P:    Len Brown
  M:    len.brown@intel.com
  P:    Pavel Machek
- M:    pavel@suse.cz
+ M:    pavel@ucw.cz
  P:    Rafael J. Wysocki
  M:    rjw@sisk.pl
  L:    linux-pm@lists.linux-foundation.org
@@@ -4285,8 -4300,8 +4300,8 @@@ P:      Rajiv Andrad
  M:    srajiv@linux.vnet.ibm.com
  W:    http://tpmdd.sourceforge.net
  P:    Marcel Selhorst
- M:    tpm@selhorst.net
- W:    http://www.prosec.rub.de/tpm/
+ M:    m.selhorst@sirrix.com
+ W:    http://www.sirrix.com
  L:    tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
  S:    Maintained
  
@@@ -4916,11 -4931,11 +4931,11 @@@ L:   zd1211-devs@lists.sourceforge.net (s
  S:    Maintained
  
  ZR36067 VIDEO FOR LINUX DRIVER
- P:    Ronald Bultje
- M:    rbultje@ronald.bitfreak.net
  L:    mjpeg-users@lists.sourceforge.net
+ L:    linux-media@vger.kernel.org
  W:    http://mjpeg.sourceforge.net/driver-zoran/
- S:    Maintained
+ T:    Mercurial http://linuxtv.org/hg/v4l-dvb
+ S:    Odd Fixes
  
  ZS DECSTATION Z85C30 SERIAL DRIVER
  P:    Maciej W. Rozycki
diff --combined arch/arm/kernel/setup.c
index 8d21427bb67976fd67b726f2c16918d42cdb91c4,68d6494c0389751d5584e94e833ae139ae53d76b..bc5e4128f9f318a50bd4abc2e2b426c8db11eecb
@@@ -40,7 -40,6 +40,7 @@@
  #include <asm/mach/irq.h>
  #include <asm/mach/time.h>
  #include <asm/traps.h>
 +#include <asm/unwind.h>
  
  #include "compat.h"
  #include "atags.h"
@@@ -234,12 -233,13 +234,13 @@@ static void __init cacheid_init(void
        unsigned int cachetype = read_cpuid_cachetype();
        unsigned int arch = cpu_architecture();
  
-       if (arch >= CPU_ARCH_ARMv7) {
-               cacheid = CACHEID_VIPT_NONALIASING;
-               if ((cachetype & (3 << 14)) == 1 << 14)
-                       cacheid |= CACHEID_ASID_TAGGED;
-       } else if (arch >= CPU_ARCH_ARMv6) {
-               if (cachetype & (1 << 23))
+       if (arch >= CPU_ARCH_ARMv6) {
+               if ((cachetype & (7 << 29)) == 4 << 29) {
+                       /* ARMv7 register format */
+                       cacheid = CACHEID_VIPT_NONALIASING;
+                       if ((cachetype & (3 << 14)) == 1 << 14)
+                               cacheid |= CACHEID_ASID_TAGGED;
+               } else if (cachetype & (1 << 23))
                        cacheid = CACHEID_VIPT_ALIASING;
                else
                        cacheid = CACHEID_VIPT_NONALIASING;
@@@ -685,8 -685,6 +686,8 @@@ void __init setup_arch(char **cmdline_p
        struct machine_desc *mdesc;
        char *from = default_command_line;
  
 +      unwind_init();
 +
        setup_processor();
        mdesc = setup_machine(machine_arch_type);
        machine_name = mdesc->name;
@@@ -782,8 -780,6 +783,8 @@@ static const char *hwcap_str[] = 
        "crunch",
        "thumbee",
        "neon",
 +      "vfpv3",
 +      "vfpv3d16",
        NULL
  };
  
index 028e4f7a88be9187950415e6c89eaf798e2e8236,2f7d4977dce95b3c43c575d2696b30888af5e187..f2236f0e101f6ba522529e1708c219cf587fa8b3
  #include <mach/at91_pio.h>
  #include <mach/gpio.h>
  
 +#include <asm/gpio.h>
 +
  #include "generic.h"
  
 +struct at91_gpio_chip {
 +      struct gpio_chip        chip;
 +      struct at91_gpio_chip   *next;          /* Bank sharing same clock */
 +      struct at91_gpio_bank   *bank;          /* Bank definition */
 +      void __iomem            *regbase;       /* Base of register bank */
 +};
  
 -static struct at91_gpio_bank *gpio;
 -static int gpio_banks;
 +#define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip)
 +
 +static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip);
 +static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val);
 +static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset);
 +static int at91_gpiolib_direction_output(struct gpio_chip *chip,
 +                                       unsigned offset, int val);
 +static int at91_gpiolib_direction_input(struct gpio_chip *chip,
 +                                      unsigned offset);
 +static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset);
 +
 +#define AT91_GPIO_CHIP(name, base_gpio, nr_gpio)                      \
 +      {                                                               \
 +              .chip = {                                               \
 +                      .label            = name,                       \
 +                      .request          = at91_gpiolib_request,       \
 +                      .direction_input  = at91_gpiolib_direction_input, \
 +                      .direction_output = at91_gpiolib_direction_output, \
 +                      .get              = at91_gpiolib_get,           \
 +                      .set              = at91_gpiolib_set,           \
 +                      .dbg_show         = at91_gpiolib_dbg_show,      \
 +                      .base             = base_gpio,                  \
 +                      .ngpio            = nr_gpio,                    \
 +              },                                                      \
 +      }
 +
 +static struct at91_gpio_chip gpio_chip[] = {
 +      AT91_GPIO_CHIP("A", 0x00 + PIN_BASE, 32),
 +      AT91_GPIO_CHIP("B", 0x20 + PIN_BASE, 32),
 +      AT91_GPIO_CHIP("C", 0x40 + PIN_BASE, 32),
 +      AT91_GPIO_CHIP("D", 0x60 + PIN_BASE, 32),
 +      AT91_GPIO_CHIP("E", 0x80 + PIN_BASE, 32),
 +};
  
 +static int gpio_banks;
  
  static inline void __iomem *pin_to_controller(unsigned pin)
  {
        pin -= PIN_BASE;
        pin /= 32;
        if (likely(pin < gpio_banks))
 -              return gpio[pin].regbase;
 +              return gpio_chip[pin].regbase;
  
        return NULL;
  }
@@@ -237,6 -197,39 +237,6 @@@ int __init_or_module at91_set_multi_dri
  }
  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_ODR);
 -      return 0;
 -}
 -EXPORT_SYMBOL(gpio_direction_input);
 -
 -int gpio_direction_output(unsigned pin, int value)
 -{
 -      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 + (value ? PIO_SODR : PIO_CODR));
 -      __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.
   */
@@@ -289,7 -282,7 +289,7 @@@ static int gpio_irq_set_wake(unsigned p
        else
                wakeups[bank] &= ~mask;
  
 -      set_irq_wake(gpio[bank].id, state);
 +      set_irq_wake(gpio_chip[bank].bank->id, state);
  
        return 0;
  }
@@@ -299,14 -292,14 +299,14 @@@ void at91_gpio_suspend(void
        int i;
  
        for (i = 0; i < gpio_banks; i++) {
 -              void __iomem    *pio = gpio[i].regbase;
 +              void __iomem    *pio = gpio_chip[i].regbase;
  
                backups[i] = __raw_readl(pio + PIO_IMR);
                __raw_writel(backups[i], pio + PIO_IDR);
                __raw_writel(wakeups[i], pio + PIO_IER);
  
                if (!wakeups[i])
 -                      clk_disable(gpio[i].clock);
 +                      clk_disable(gpio_chip[i].bank->clock);
                else {
  #ifdef CONFIG_PM_DEBUG
                        printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]);
@@@ -320,10 -313,10 +320,10 @@@ void at91_gpio_resume(void
        int i;
  
        for (i = 0; i < gpio_banks; i++) {
 -              void __iomem    *pio = gpio[i].regbase;
 +              void __iomem    *pio = gpio_chip[i].regbase;
  
                if (!wakeups[i])
 -                      clk_enable(gpio[i].clock);
 +                      clk_enable(gpio_chip[i].bank->clock);
  
                __raw_writel(wakeups[i], pio + PIO_IDR);
                __raw_writel(backups[i], pio + PIO_IER);
@@@ -387,12 -380,12 +387,12 @@@ static void gpio_irq_handler(unsigned i
  {
        unsigned        pin;
        struct irq_desc *gpio;
 -      struct at91_gpio_bank *bank;
 +      struct at91_gpio_chip *at91_gpio;
        void __iomem    *pio;
        u32             isr;
  
 -      bank = get_irq_chip_data(irq);
 -      pio = bank->regbase;
 +      at91_gpio = get_irq_chip_data(irq);
 +      pio = at91_gpio->regbase;
  
        /* temporarily mask (level sensitive) parent IRQ */
        desc->chip->ack(irq);
                 */
                isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR);
                if (!isr) {
 -                      if (!bank->next)
 +                      if (!at91_gpio->next)
                                break;
 -                      bank = bank->next;
 -                      pio = bank->regbase;
 +                      at91_gpio = at91_gpio->next;
 +                      pio = at91_gpio->regbase;
                        continue;
                }
  
 -              pin = bank->chipbase;
 +              pin = at91_gpio->chip.base;
                gpio = &irq_desc[pin];
  
                while (isr) {
  
  /*--------------------------------------------------------------------------*/
  
- /* This lock class tells lockdep that GPIO irqs are in a different
+ #ifdef CONFIG_DEBUG_FS
+ static int at91_gpio_show(struct seq_file *s, void *unused)
+ {
+       int bank, j;
+       /* print heading */
+       seq_printf(s, "Pin\t");
+       for (bank = 0; bank < gpio_banks; bank++) {
+               seq_printf(s, "PIO%c\t", 'A' + bank);
+       };
+       seq_printf(s, "\n\n");
+       /* print pin status */
+       for (j = 0; j < 32; j++) {
+               seq_printf(s, "%i:\t", j);
+               for (bank = 0; bank < gpio_banks; bank++) {
+                       unsigned        pin  = PIN_BASE + (32 * bank) + j;
+                       void __iomem    *pio = pin_to_controller(pin);
+                       unsigned        mask = pin_to_mask(pin);
+                       if (__raw_readl(pio + PIO_PSR) & mask)
+                               seq_printf(s, "GPIO:%s", __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0");
+                       else
+                               seq_printf(s, "%s", __raw_readl(pio + PIO_ABSR) & mask ? "B" : "A");
+                       seq_printf(s, "\t");
+               }
+               seq_printf(s, "\n");
+       }
+       return 0;
+ }
+ static int at91_gpio_open(struct inode *inode, struct file *file)
+ {
+       return single_open(file, at91_gpio_show, NULL);
+ }
+ static const struct file_operations at91_gpio_operations = {
+       .open           = at91_gpio_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+ };
+ static int __init at91_gpio_debugfs_init(void)
+ {
+       /* /sys/kernel/debug/at91_gpio */
+       (void) debugfs_create_file("at91_gpio", S_IFREG | S_IRUGO, NULL, NULL, &at91_gpio_operations);
+       return 0;
+ }
+ postcore_initcall(at91_gpio_debugfs_init);
+ #endif
+ /*--------------------------------------------------------------------------*/
+ /*
+  * This lock class tells lockdep that GPIO irqs are in a different
   * category than their parents, so it won't report false recursion.
   */
  static struct lock_class_key gpio_lock_class;
  void __init at91_gpio_irq_setup(void)
  {
        unsigned                pioc, pin;
 -      struct at91_gpio_bank   *this, *prev;
 +      struct at91_gpio_chip   *this, *prev;
  
 -      for (pioc = 0, pin = PIN_BASE, this = gpio, prev = NULL;
 +      for (pioc = 0, pin = PIN_BASE, this = gpio_chip, prev = NULL;
                        pioc++ < gpio_banks;
                        prev = this, this++) {
 -              unsigned        id = this->id;
 +              unsigned        id = this->bank->id;
                unsigned        i;
  
-               /* enable PIO controller's clock */
-               clk_enable(this->bank->clock);
                __raw_writel(~0, this->regbase + PIO_IDR);
  
 -              for (i = 0, pin = this->chipbase; i < 32; i++, pin++) {
 +              for (i = 0, pin = this->chip.base; i < 32; i++, pin++) {
                        lockdep_set_class(&irq_desc[pin].lock, &gpio_lock_class);
  
                        /*
        pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, gpio_banks);
  }
  
 +/* gpiolib support */
 +static int at91_gpiolib_direction_input(struct gpio_chip *chip,
 +                                      unsigned offset)
 +{
 +      struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 +      void __iomem *pio = at91_gpio->regbase;
 +      unsigned mask = 1 << offset;
 +
 +      __raw_writel(mask, pio + PIO_ODR);
 +      return 0;
 +}
 +
 +static int at91_gpiolib_direction_output(struct gpio_chip *chip,
 +                                       unsigned offset, int val)
 +{
 +      struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 +      void __iomem *pio = at91_gpio->regbase;
 +      unsigned mask = 1 << offset;
 +
 +      __raw_writel(mask, pio + (val ? PIO_SODR : PIO_CODR));
 +      __raw_writel(mask, pio + PIO_OER);
 +      return 0;
 +}
 +
 +static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset)
 +{
 +      struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 +      void __iomem *pio = at91_gpio->regbase;
 +      unsigned mask = 1 << offset;
 +      u32 pdsr;
 +
 +      pdsr = __raw_readl(pio + PIO_PDSR);
 +      return (pdsr & mask) != 0;
 +}
 +
 +static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val)
 +{
 +      struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
 +      void __iomem *pio = at91_gpio->regbase;
 +      unsigned mask = 1 << offset;
 +
 +      __raw_writel(mask, pio + (val ? PIO_SODR : PIO_CODR));
 +}
 +
 +static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset)
 +{
 +      unsigned pin = chip->base + offset;
 +      void __iomem *pio = pin_to_controller(pin);
 +      unsigned mask = pin_to_mask(pin);
 +
 +      /* Cannot request GPIOs that are in alternate function mode */
 +      if (!(__raw_readl(pio + PIO_PSR) & mask))
 +              return -EPERM;
 +
 +      return 0;
 +}
 +
 +static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
 +{
 +      int i;
 +
 +      for (i = 0; i < chip->ngpio; i++) {
 +              unsigned pin = chip->base + i;
 +              void __iomem *pio = pin_to_controller(pin);
 +              unsigned mask = pin_to_mask(pin);
 +              const char *gpio_label;
 +
 +              gpio_label = gpiochip_is_requested(chip, i);
 +              if (gpio_label) {
 +                      seq_printf(s, "[%s] GPIO%s%d: ",
 +                                 gpio_label, chip->label, i);
 +                      if (__raw_readl(pio + PIO_PSR) & mask)
 +                              seq_printf(s, "[gpio] %s\n",
 +                                         at91_get_gpio_value(pin) ?
 +                                         "set" : "clear");
 +                      else
 +                              seq_printf(s, "[periph %s]\n",
 +                                         __raw_readl(pio + PIO_ABSR) &
 +                                         mask ? "B" : "A");
 +              }
 +      }
 +}
 +
  /*
   * Called from the processor-specific init to enable GPIO pin support.
   */
  void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
  {
        unsigned                i;
 -      struct at91_gpio_bank   *last;
 +      struct at91_gpio_chip *at91_gpio, *last = NULL;
  
        BUG_ON(nr_banks > MAX_GPIO_BANKS);
  
 -      gpio = data;
        gpio_banks = nr_banks;
  
 -      for (i = 0, last = NULL; i < nr_banks; i++, last = data, data++) {
 -              data->chipbase = PIN_BASE + i * 32;
 -              data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS;
 +      for (i = 0; i < nr_banks; i++) {
 +              at91_gpio = &gpio_chip[i];
 +
 +              at91_gpio->bank = &data[i];
 +              at91_gpio->chip.base = PIN_BASE + i * 32;
 +              at91_gpio->regbase = at91_gpio->bank->offset +
 +                      (void __iomem *)AT91_VA_BASE_SYS;
  
 -              clk_enable(data->clock);
+               /* enable PIO controller's clock */
 -              /*
 -               * Some processors share peripheral ID between multiple GPIO banks.
 -               *  SAM9263 (PIOC, PIOD, PIOE)
 -               *  CAP9 (PIOA, PIOB, PIOC, PIOD)
 -               */
 -              if (last && last->id == data->id)
 -                      last->next = data;
++              clk_enable(at91_gpio->bank->clock);
 +              /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */
 +              if (last && last->bank->id == at91_gpio->bank->id)
 +                      last->next = at91_gpio;
 +              last = at91_gpio;
 +
 +              gpiochip_add(&at91_gpio->chip);
        }
  }
diff --combined arch/arm/mm/mmu.c
index aa424e1da8a1bf2ac8397adaeb223b53626277af,d4d082c5c2d4ad2be9f1eb331cce837fff3de325..8c6fc5a6237ec9af6d459bfd8097ed0ff07080d0
@@@ -243,10 -243,6 +243,10 @@@ static struct mem_type mem_types[] = 
                .prot_sect = PMD_TYPE_SECT,
                .domain    = DOMAIN_KERNEL,
        },
 +      [MT_MEMORY_NONCACHED] = {
 +              .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
 +              .domain    = DOMAIN_KERNEL,
 +      },
  };
  
  const struct mem_type *get_mem_type(unsigned int type)
@@@ -410,28 -406,9 +410,28 @@@ static void __init build_mem_type_table
                kern_pgprot |= L_PTE_SHARED;
                vecs_pgprot |= L_PTE_SHARED;
                mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
 +              mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_S;
  #endif
        }
  
 +      /*
 +       * Non-cacheable Normal - intended for memory areas that must
 +       * not cause dirty cache line writebacks when used
 +       */
 +      if (cpu_arch >= CPU_ARCH_ARMv6) {
 +              if (cpu_arch >= CPU_ARCH_ARMv7 && (cr & CR_TRE)) {
 +                      /* Non-cacheable Normal is XCB = 001 */
 +                      mem_types[MT_MEMORY_NONCACHED].prot_sect |=
 +                              PMD_SECT_BUFFERED;
 +              } else {
 +                      /* For both ARMv6 and non-TEX-remapping ARMv7 */
 +                      mem_types[MT_MEMORY_NONCACHED].prot_sect |=
 +                              PMD_SECT_TEX(1);
 +              }
 +      } else {
 +              mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_BUFFERABLE;
 +      }
 +
        for (i = 0; i < 16; i++) {
                unsigned long v = pgprot_val(protection_map[i]);
                protection_map[i] = __pgprot(v | user_pgprot);
@@@ -716,7 -693,8 +716,8 @@@ static void __init sanity_check_meminfo
                 * Check whether this memory bank would entirely overlap
                 * the vmalloc area.
                 */
-               if (__va(bank->start) >= VMALLOC_MIN) {
+               if (__va(bank->start) >= VMALLOC_MIN ||
+                   __va(bank->start) < PAGE_OFFSET) {
                        printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx "
                               "(vmalloc region overlap).\n",
                               bank->start, bank->start + bank->size - 1);
index a9bab15f0fd0b2972fb4451a7817ad2c864af53f,1d64287c3078b0aba34d5282cc52735de2b3c35c..e364a5ed10f1301bcd96ea02d7054b64930875d5
@@@ -113,7 -113,7 +113,7 @@@ struct imx_dma_channel 
        void (*err_handler) (int, void *, int errcode);
        void (*prog_handler) (int, void *, struct scatterlist *);
        void *data;
 -      unsigned int  dma_mode;
 +      unsigned int dma_mode;
        struct scatterlist *sg;
        unsigned int resbytes;
        int dma_num;
@@@ -802,7 -802,7 +802,7 @@@ static int __init imx_dma_init(void
        int ret = 0;
        int i;
  
-       dma_clk = clk_get(NULL, "dma_clk");
+       dma_clk = clk_get(NULL, "dma");
        clk_enable(dma_clk);
  
        /* reset DMA module */
index 529121be8a986be407513b4d9a36ebba01d74434,abb04c82c622edd638228054f1d6dc8a9066accd..634af6a8e6b3e31e6d27c6f095db7aa9f3614e9b
@@@ -21,6 -21,8 +21,6 @@@
  #include <linux/slab.h>
  
  #include <mach/corgi.h>
 -#include <mach/hardware.h>
 -#include <mach/pxa-regs.h>
  #include <mach/pxa2xx-gpio.h>
  #include <asm/hardware/scoop.h>
  
@@@ -286,7 -288,7 +286,7 @@@ static int corgikbd_resume(struct platf
  #define corgikbd_resume               NULL
  #endif
  
- static int __init corgikbd_probe(struct platform_device *pdev)
+ static int __devinit corgikbd_probe(struct platform_device *pdev)
  {
        struct corgikbd *corgikbd;
        struct input_dev *input_dev;
        return err;
  }
  
- static int corgikbd_remove(struct platform_device *pdev)
+ static int __devexit corgikbd_remove(struct platform_device *pdev)
  {
        int i;
        struct corgikbd *corgikbd = platform_get_drvdata(pdev);
  
  static struct platform_driver corgikbd_driver = {
        .probe          = corgikbd_probe,
-       .remove         = corgikbd_remove,
+       .remove         = __devexit_p(corgikbd_remove),
        .suspend        = corgikbd_suspend,
        .resume         = corgikbd_resume,
        .driver         = {
        },
  };
  
- static int __devinit corgikbd_init(void)
+ static int __init corgikbd_init(void)
  {
        return platform_driver_register(&corgikbd_driver);
  }
index 9a7371c93b3f121c4c353835c0781487d366d333,9d1781a618e99466f0855f480cbb8974e6a3fbd8..13967422658c4d2273539b18128bca93931b9012
@@@ -21,6 -21,8 +21,6 @@@
  #include <linux/slab.h>
  
  #include <mach/spitz.h>
 -#include <mach/hardware.h>
 -#include <mach/pxa-regs.h>
  #include <mach/pxa2xx-gpio.h>
  
  #define KB_ROWS                       7
@@@ -341,7 -343,7 +341,7 @@@ static int spitzkbd_resume(struct platf
  #define spitzkbd_resume               NULL
  #endif
  
- static int __init spitzkbd_probe(struct platform_device *dev)
+ static int __devinit spitzkbd_probe(struct platform_device *dev)
  {
        struct spitzkbd *spitzkbd;
        struct input_dev *input_dev;
        return err;
  }
  
- static int spitzkbd_remove(struct platform_device *dev)
+ static int __devexit spitzkbd_remove(struct platform_device *dev)
  {
        int i;
        struct spitzkbd *spitzkbd = platform_get_drvdata(dev);
  
  static struct platform_driver spitzkbd_driver = {
        .probe          = spitzkbd_probe,
-       .remove         = spitzkbd_remove,
+       .remove         = __devexit_p(spitzkbd_remove),
        .suspend        = spitzkbd_suspend,
        .resume         = spitzkbd_resume,
        .driver         = {
        },
  };
  
- static int __devinit spitzkbd_init(void)
+ static int __init spitzkbd_init(void)
  {
        return platform_driver_register(&spitzkbd_driver);
  }
index e7292853d2bfebea61b1f88cb3cf86ad9d1d73f7,3fb51b54fe61e22a9960ae0cb58d19721a5d1932..94a1919d439d90815836784c4d5c246f41b4017c
@@@ -21,6 -21,7 +21,6 @@@
  
  #include <mach/sharpsl.h>
  #include <mach/hardware.h>
 -#include <mach/pxa-regs.h>
  #include <mach/pxa2xx-gpio.h>
  
  
@@@ -267,7 -268,7 +267,7 @@@ static int corgits_resume(struct platfo
  #define corgits_resume                NULL
  #endif
  
- static int __init corgits_probe(struct platform_device *pdev)
+ static int __devinit corgits_probe(struct platform_device *pdev)
  {
        struct corgi_ts *corgi_ts;
        struct input_dev *input_dev;
        return err;
  }
  
- static int corgits_remove(struct platform_device *pdev)
+ static int __devexit corgits_remove(struct platform_device *pdev)
  {
        struct corgi_ts *corgi_ts = platform_get_drvdata(pdev);
  
        corgi_ts->machinfo->put_hsync();
        input_unregister_device(corgi_ts->input);
        kfree(corgi_ts);
        return 0;
  }
  
  static struct platform_driver corgits_driver = {
        .probe          = corgits_probe,
-       .remove         = corgits_remove,
+       .remove         = __devexit_p(corgits_remove),
        .suspend        = corgits_suspend,
        .resume         = corgits_resume,
        .driver         = {
        },
  };
  
- static int __devinit corgits_init(void)
+ static int __init corgits_init(void)
  {
        return platform_driver_register(&corgits_driver);
  }
index e3e6b29ea6d2cb7bf21796d1f7a8a2e464dd2aa0,07c334f25aae69bf257a2a0cff91465bd5e784b9..0c4ce58c53d53363afa9e7371a2e868b90dc34b5
@@@ -35,6 -35,7 +35,6 @@@
  #include <linux/videodev2.h>
  
  #include <mach/dma.h>
 -#include <mach/pxa-regs.h>
  #include <mach/camera.h>
  
  #define PXA_CAM_VERSION_CODE KERNEL_VERSION(0, 0, 5)
@@@ -1154,23 -1155,23 +1154,23 @@@ static int pxa_camera_set_fmt(struct so
  {
        struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
-       const struct soc_camera_data_format *host_fmt, *cam_fmt = NULL;
-       const struct soc_camera_format_xlate *xlate;
+       const struct soc_camera_data_format *cam_fmt = NULL;
+       const struct soc_camera_format_xlate *xlate = NULL;
        struct soc_camera_sense sense = {
                .master_clock = pcdev->mclk,
                .pixel_clock_max = pcdev->ciclk / 4,
        };
-       int ret, buswidth;
+       int ret;
  
-       xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);
-       if (!xlate) {
-               dev_warn(&ici->dev, "Format %x not found\n", pixfmt);
-               return -EINVAL;
-       }
+       if (pixfmt) {
+               xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);
+               if (!xlate) {
+                       dev_warn(&ici->dev, "Format %x not found\n", pixfmt);
+                       return -EINVAL;
+               }
  
-       buswidth = xlate->buswidth;
-       host_fmt = xlate->host_fmt;
-       cam_fmt = xlate->cam_fmt;
+               cam_fmt = xlate->cam_fmt;
+       }
  
        /* If PCLK is used to latch data from the sensor, check sense */
        if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
        }
  
        if (pixfmt && !ret) {
-               icd->buswidth = buswidth;
-               icd->current_fmt = host_fmt;
+               icd->buswidth = xlate->buswidth;
+               icd->current_fmt = xlate->host_fmt;
        }
  
        return ret;
diff --combined drivers/net/smc911x.h
index 611584ee7a016e64bd1ea12f149ee0fd2b65f092,a45952e72018b472f112bc94aadc48fe76197c86..8140f7cb4d856c1622df706939c7bb10ae8edf2d
    #define SMC_USE_16BIT               0
    #define SMC_USE_32BIT               1
    #define SMC_IRQ_SENSE               IRQF_TRIGGER_LOW
+ #elif defined(CONFIG_ARCH_OMAP34XX)
+   #define SMC_USE_16BIT               0
+   #define SMC_USE_32BIT               1
+   #define SMC_IRQ_SENSE               IRQF_TRIGGER_LOW
+   #define SMC_MEM_RESERVED    1
+ #elif defined(CONFIG_ARCH_OMAP24XX)
+   #define SMC_USE_16BIT               0
+   #define SMC_USE_32BIT               1
+   #define SMC_IRQ_SENSE               IRQF_TRIGGER_LOW
+   #define SMC_MEM_RESERVED    1
  #else
  /*
   * Default configuration
@@@ -226,7 -236,8 +236,7 @@@ static inline void SMC_outsl(struct smc
   * Use a DMA for RX and TX packets.
   */
  #include <linux/dma-mapping.h>
 -#include <asm/dma.h>
 -#include <mach/pxa-regs.h>
 +#include <mach/dma.h>
  
  static dma_addr_t rx_dmabuf, tx_dmabuf;
  static int rx_dmalen, tx_dmalen;
@@@ -674,6 -685,7 +684,7 @@@ smc_pxa_dma_outsl(struct smc911x_local 
  #define CHIP_9116     0x0116
  #define CHIP_9117     0x0117
  #define CHIP_9118     0x0118
+ #define CHIP_9211     0x9211
  #define CHIP_9215     0x115A
  #define CHIP_9217     0x117A
  #define CHIP_9218     0x118A
@@@ -688,6 -700,7 +699,7 @@@ static const struct chip_id chip_ids[] 
        { CHIP_9116, "LAN9116" },
        { CHIP_9117, "LAN9117" },
        { CHIP_9118, "LAN9118" },
+       { CHIP_9211, "LAN9211" },
        { CHIP_9215, "LAN9215" },
        { CHIP_9217, "LAN9217" },
        { CHIP_9218, "LAN9218" },
diff --combined drivers/video/Kconfig
index 5aa099bc7690f204ea17d496a8c45a9ef8b52f7f,967ac3d359a650d264fe499f9c02a2b03bf00a8e..330204a61ea8b561700dd4d54ef724de7e19e3d7
@@@ -397,7 -397,7 +397,7 @@@ config FB_SA110
  
  config FB_IMX
        tristate "Motorola i.MX LCD support"
-       depends on FB && ARM && ARCH_IMX
+       depends on FB && (ARCH_IMX || ARCH_MX2)
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
        select FB_CFB_IMAGEBLIT
@@@ -1054,9 -1054,7 +1054,7 @@@ config FB_RIVA_BACKLIGH
  
  config FB_I810
        tristate "Intel 810/815 support (EXPERIMENTAL)"
-       depends on FB && EXPERIMENTAL && PCI && X86_32
-       select AGP
-       select AGP_INTEL
+       depends on EXPERIMENTAL && FB && PCI && X86_32 && AGP_INTEL
        select FB_MODE_HELPERS
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
@@@ -1119,9 -1117,7 +1117,7 @@@ config FB_CARILLO_RANC
  
  config FB_INTEL
        tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support (EXPERIMENTAL)"
-       depends on FB && EXPERIMENTAL && PCI && X86
-       select AGP
-       select AGP_INTEL
+       depends on EXPERIMENTAL && FB && PCI && X86 && AGP_INTEL
        select FB_MODE_HELPERS
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
@@@ -2135,20 -2131,6 +2131,20 @@@ config FB_MX
           far only synchronous displays are supported. If you plan to use
           an LCD display with your i.MX31 system, say Y here.
  
 +config FB_BROADSHEET
 +      tristate "E-Ink Broadsheet/Epson S1D13521 controller support"
 +      depends on FB
 +      select FB_SYS_FILLRECT
 +      select FB_SYS_COPYAREA
 +      select FB_SYS_IMAGEBLIT
 +      select FB_SYS_FOPS
 +      select FB_DEFERRED_IO
 +      help
 +        This driver implements support for the E-Ink Broadsheet
 +        controller. The release name for this device was Epson S1D13521
 +        and could also have been called by other names when coupled with
 +        a bridge adapter.
 +
  source "drivers/video/omap/Kconfig"
  
  source "drivers/video/backlight/Kconfig"
diff --combined drivers/video/pxafb.c
index 287aa1d2a13ce8cf5501c0df6e92001b0abaf8a4,2552b9f325ee9b4c33eea202329e23e47b544c3e..07b371b4b072351715762ecfbc0fd7893a6534b4
@@@ -59,6 -59,7 +59,6 @@@
  #include <asm/io.h>
  #include <asm/irq.h>
  #include <asm/div64.h>
 -#include <mach/pxa-regs.h>
  #include <mach/bitfield.h>
  #include <mach/pxafb.h>
  
@@@ -2229,7 -2230,7 +2229,7 @@@ static int __devexit pxafb_remove(struc
  
  static struct platform_driver pxafb_driver = {
        .probe          = pxafb_probe,
-       .remove         = pxafb_remove,
+       .remove         = __devexit_p(pxafb_remove),
        .suspend        = pxafb_suspend,
        .resume         = pxafb_resume,
        .driver         = {
diff --combined lib/Kconfig.debug
index 08275a5aa00e6d29b69c81595491c2ff9d4b7754,1bcf9cd4baa08a85633e5758721b7ef21f4df787..c536b37a11cc5677743ae4ae0af0f9f3bc216d12
@@@ -402,7 -402,7 +402,7 @@@ config LOCKDE
        bool
        depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
        select STACKTRACE
 -      select FRAME_POINTER if !X86 && !MIPS && !PPC
 +      select FRAME_POINTER if !X86 && !MIPS && !PPC && !ARM_UNWIND
        select KALLSYMS
        select KALLSYMS_ALL
  
@@@ -838,7 -838,7 +838,7 @@@ config FIREWIRE_OHCI_REMOTE_DM
  
          If unsure, say N.
  
menuconfig BUILD_DOCSRC
+ config BUILD_DOCSRC
        bool "Build targets in Documentation/ tree"
        depends on HEADERS_CHECK
        help