Merge tag 'mfd-3.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 25 Feb 2013 04:00:58 +0000 (20:00 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 25 Feb 2013 04:00:58 +0000 (20:00 -0800)
Pull MFS updates from Samuel Ortiz:
 "This is the MFD pull request for the 3.9 merge window.

  No new drivers this time, but a bunch of fairly big cleanups:

   - Roger Quadros worked on a OMAP USBHS and TLL platform data
     consolidation, OMAP5 support and clock management code cleanup.

   - The first step of a major sync for the ab8500 driver from Lee
     Jones.  In particular, the debugfs and the sysct interfaces got
     extended and improved.

   - Peter Ujfalusi sent a nice patchset for cleaning and fixing the
     twl-core driver, with a much needed module id lookup code
     improvement.

   - The regular wm5102 and arizona cleanups and fixes from Mark Brown.

   - Laxman Dewangan extended the palmas APIs in order to implement the
     palmas GPIO and rt drivers.

   - Laxman also added DT support for the tps65090 driver.

   - The Intel SCH and ICH drivers got a couple fixes from Aaron Sierra
     and Darren Hart.

   - Linus Walleij patchset for the ab8500 driver allowed ab8500 and
     ab9540 based devices to switch to the new abx500 pin-ctrl driver.

   - The max8925 now has device tree and irqdomain support thanks to
     Qing Xu.

   - The recently added rtsx driver got a few cleanups and fixes for a
     better card detection code path and now also supports the RTS5227
     chipset, thanks to Wei Wang and Roger Tseng."

* tag 'mfd-3.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: (109 commits)
  mfd: lpc_ich: Use devres API to allocate private data
  mfd: lpc_ich: Add Device IDs for Intel Wellsburg PCH
  mfd: lpc_sch: Accomodate partial population of the MFD devices
  mfd: da9052-i2c: Staticize da9052_i2c_fix()
  mfd: syscon: Fix sparse warning
  mfd: twl-core: Fix kernel panic on boot
  mfd: rtsx: Fix issue that booting OS with SD card inserted
  mfd: ab8500: Fix compile error
  mfd: Add missing GENERIC_HARDIRQS dependecies
  Documentation: Add docs for max8925 dt
  mfd: max8925: Add dts
  mfd: max8925: Support dt for backlight
  mfd: max8925: Fix onkey driver irq base
  mfd: max8925: Fix mfd device register failure
  mfd: max8925: Add irqdomain for dt
  mfd: vexpress: Allow vexpress-sysreg to self-initialise
  mfd: rtsx: Support RTS5227
  mfd: rtsx: Implement driving adjustment to device-dependent callbacks
  mfd: vexpress: Add pseudo-GPIO based LEDs
  mfd: ab8500: Rename ab8500 to abx500 for hwmon driver
  ...

14 files changed:
1  2 
drivers/gpio/Kconfig
drivers/gpio/Makefile
drivers/mfd/ab8500-core.c
drivers/mfd/db8500-prcmu.c
drivers/mfd/vexpress-sysreg.c
drivers/mfd/wm5102-tables.c
drivers/rtc/Kconfig
drivers/rtc/Makefile
drivers/usb/host/ehci-omap.c
include/linux/mfd/abx500.h
include/linux/mfd/abx500/ab8500.h
include/linux/mfd/arizona/pdata.h
include/linux/mfd/arizona/registers.h
include/linux/mfd/dbx500-prcmu.h

diff --combined drivers/gpio/Kconfig
index b89d250f56e747744bfa98cbd92383bf3d63f203,40a0ec3b7c4033df015500a9abd834255516d55a..74e17f19cc3386f6a43d857231c0fc2fca351903
@@@ -66,7 -66,7 +66,7 @@@ config DEBUG_GPI
  
  config GPIO_SYSFS
        bool "/sys/class/gpio/... (sysfs interface)"
 -      depends on SYSFS && EXPERIMENTAL
 +      depends on SYSFS
        help
          Say Y here to add a sysfs interface for GPIOs.
  
@@@ -277,7 -277,7 +277,7 @@@ config GPIO_IC
  
  config GPIO_VX855
        tristate "VIA VX855/VX875 GPIO"
 -      depends on PCI
 +      depends on PCI && GENERIC_HARDIRQS
        select MFD_CORE
        select MFD_VX855
        help
@@@ -599,7 -599,7 +599,7 @@@ config GPIO_TIMBERDAL
  
  config GPIO_RDC321X
        tristate "RDC R-321x GPIO support"
 -      depends on PCI
 +      depends on PCI && GENERIC_HARDIRQS
        select MFD_CORE
        select MFD_RDC321X
        help
@@@ -657,6 -657,19 +657,13 @@@ config GPIO_JANZ_TT
          This driver provides support for driving the pins in output
          mode only. Input mode is not supported.
  
 -config GPIO_AB8500
 -      bool "ST-Ericsson AB8500 Mixed Signal Circuit gpio functions"
 -      depends on AB8500_CORE && BROKEN
 -      help
 -        Select this to enable the AB8500 IC GPIO driver
 -
+ config GPIO_PALMAS
+       bool "TI PALMAS series PMICs GPIO"
+       depends on MFD_PALMAS
+       help
+         Select this option to enable GPIO driver for the TI PALMAS
+         series chip family.
  config GPIO_TPS6586X
        bool "TPS6586X GPIO"
        depends on MFD_TPS6586X
diff --combined drivers/gpio/Makefile
index 45a388c21d0468f54782492dc014dcdbb0a5df14,8962c5f7b02641f0d30f4d7cdef9f8006454b178..6dbcba2e5cacc43c61b7a3a429a939248fc4df22
@@@ -10,6 -10,7 +10,6 @@@ obj-$(CONFIG_GPIO_ACPI)               += gpiolib-acp
  obj-$(CONFIG_GPIO_GENERIC)    += gpio-generic.o
  
  obj-$(CONFIG_GPIO_74X164)     += gpio-74x164.o
 -obj-$(CONFIG_GPIO_AB8500)     += gpio-ab8500.o
  obj-$(CONFIG_GPIO_ADNP)               += gpio-adnp.o
  obj-$(CONFIG_GPIO_ADP5520)    += gpio-adp5520.o
  obj-$(CONFIG_GPIO_ADP5588)    += gpio-adp5588.o
@@@ -68,6 -69,7 +68,7 @@@ obj-$(CONFIG_GPIO_TC3589X)    += gpio-tc35
  obj-$(CONFIG_ARCH_TEGRA)      += gpio-tegra.o
  obj-$(CONFIG_GPIO_TIMBERDALE) += gpio-timberdale.o
  obj-$(CONFIG_ARCH_DAVINCI_TNETV107X) += gpio-tnetv107x.o
+ obj-$(CONFIG_GPIO_PALMAS)     += gpio-palmas.o
  obj-$(CONFIG_GPIO_TPS6586X)   += gpio-tps6586x.o
  obj-$(CONFIG_GPIO_TPS65910)   += gpio-tps65910.o
  obj-$(CONFIG_GPIO_TPS65912)   += gpio-tps65912.o
index 8b5d685ab98089bdbc0afa2b29d33064193d8f85,5b1c29685a7c6fb46b6ec9fbb459f7f7d0b76236..7c84ced2e01b44e2de6e2991ebae0e7a388ba246
@@@ -320,6 -320,7 +320,7 @@@ static struct abx500_ops ab8500_ops = 
        .mask_and_set_register = ab8500_mask_and_set_register,
        .event_registers_startup_state_get = NULL,
        .startup_irq_enabled = NULL,
+       .dump_all_banks = ab8500_dump_all_banks,
  };
  
  static void ab8500_irq_lock(struct irq_data *data)
@@@ -368,16 -369,48 +369,48 @@@ static void ab8500_irq_mask(struct irq_
        int mask = 1 << (offset % 8);
  
        ab8500->mask[index] |= mask;
+       /* The AB8500 GPIOs have two interrupts each (rising & falling). */
+       if (offset >= AB8500_INT_GPIO6R && offset <= AB8500_INT_GPIO41R)
+               ab8500->mask[index + 2] |= mask;
+       if (offset >= AB9540_INT_GPIO50R && offset <= AB9540_INT_GPIO54R)
+               ab8500->mask[index + 1] |= mask;
+       if (offset == AB8540_INT_GPIO43R || offset == AB8540_INT_GPIO44R)
+               /* Here the falling IRQ is one bit lower */
+               ab8500->mask[index] |= (mask << 1);
  }
  
  static void ab8500_irq_unmask(struct irq_data *data)
  {
        struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
+       unsigned int type = irqd_get_trigger_type(data);
        int offset = data->hwirq;
        int index = offset / 8;
        int mask = 1 << (offset % 8);
  
-       ab8500->mask[index] &= ~mask;
+       if (type & IRQ_TYPE_EDGE_RISING)
+               ab8500->mask[index] &= ~mask;
+       /* The AB8500 GPIOs have two interrupts each (rising & falling). */
+       if (type & IRQ_TYPE_EDGE_FALLING) {
+               if (offset >= AB8500_INT_GPIO6R && offset <= AB8500_INT_GPIO41R)
+                       ab8500->mask[index + 2] &= ~mask;
+               else if (offset >= AB9540_INT_GPIO50R && offset <= AB9540_INT_GPIO54R)
+                       ab8500->mask[index + 1] &= ~mask;
+               else if (offset == AB8540_INT_GPIO43R || offset == AB8540_INT_GPIO44R)
+                       /* Here the falling IRQ is one bit lower */
+                       ab8500->mask[index] &= ~(mask << 1);
+               else
+                       ab8500->mask[index] &= ~mask;
+       } else {
+               /* Satisfies the case where type is not set. */
+               ab8500->mask[index] &= ~mask;
+       }
+ }
+ static int ab8500_irq_set_type(struct irq_data *data, unsigned int type)
+ {
+       return 0;
  }
  
  static struct irq_chip ab8500_irq_chip = {
        .irq_mask               = ab8500_irq_mask,
        .irq_disable            = ab8500_irq_mask,
        .irq_unmask             = ab8500_irq_unmask,
+       .irq_set_type           = ab8500_irq_set_type,
  };
  
  static int ab8500_handle_hierarchical_line(struct ab8500 *ab8500,
                line = (i << 3) + int_bit;
                latch_val &= ~(1 << int_bit);
  
+               /*
+                * This handles the falling edge hwirqs from the GPIO
+                * lines. Route them back to the line registered for the
+                * rising IRQ, as this is merely a flag for the same IRQ
+                * in linux terms.
+                */
+               if (line >= AB8500_INT_GPIO6F && line <= AB8500_INT_GPIO41F)
+                       line -= 16;
+               if (line >= AB9540_INT_GPIO50F && line <= AB9540_INT_GPIO54F)
+                       line -= 8;
+               if (line == AB8540_INT_GPIO43F || line == AB8540_INT_GPIO44F)
+                       line += 1;
                handle_nested_irq(ab8500->irq_base + line);
        } while (latch_val);
  
@@@ -521,6 -568,7 +568,7 @@@ static irqreturn_t ab8500_irq(int irq, 
                        int virq = ab8500_irq_get_virq(ab8500, line);
  
                        handle_nested_irq(virq);
+                       ab8500_debug_register_interrupt(line);
                        value &= ~(1 << bit);
  
                } while (value);
@@@ -750,12 -798,6 +798,12 @@@ static struct resource ab8500_charger_r
                .end = AB8500_INT_CH_WD_EXP,
                .flags = IORESOURCE_IRQ,
        },
 +      {
 +              .name = "VBUS_CH_DROP_END",
 +              .start = AB8500_INT_VBUS_CH_DROP_END,
 +              .end = AB8500_INT_VBUS_CH_DROP_END,
 +              .flags = IORESOURCE_IRQ,
 +      },
  };
  
  static struct resource ab8500_btemp_resources[] = {
@@@ -929,7 -971,7 +977,7 @@@ static struct resource ab8505_iddet_res
  
  static struct resource ab8500_temp_resources[] = {
        {
-               .name  = "AB8500_TEMP_WARM",
+               .name  = "ABX500_TEMP_WARM",
                .start = AB8500_INT_TEMP_WARM,
                .end   = AB8500_INT_TEMP_WARM,
                .flags = IORESOURCE_IRQ,
@@@ -1005,8 -1047,8 +1053,8 @@@ static struct mfd_cell abx500_common_de
                .of_compatible = "stericsson,ab8500-denc",
        },
        {
-               .name = "ab8500-temp",
-               .of_compatible = "stericsson,ab8500-temp",
+               .name = "abx500-temp",
+               .of_compatible = "stericsson,abx500-temp",
                .num_resources = ARRAY_SIZE(ab8500_temp_resources),
                .resources = ab8500_temp_resources,
        },
@@@ -1018,38 -1060,46 +1066,38 @@@ static struct mfd_cell ab8500_bm_devs[
                .of_compatible = "stericsson,ab8500-charger",
                .num_resources = ARRAY_SIZE(ab8500_charger_resources),
                .resources = ab8500_charger_resources,
 -#ifndef CONFIG_OF
                .platform_data = &ab8500_bm_data,
                .pdata_size = sizeof(ab8500_bm_data),
 -#endif
        },
        {
                .name = "ab8500-btemp",
                .of_compatible = "stericsson,ab8500-btemp",
                .num_resources = ARRAY_SIZE(ab8500_btemp_resources),
                .resources = ab8500_btemp_resources,
 -#ifndef CONFIG_OF
                .platform_data = &ab8500_bm_data,
                .pdata_size = sizeof(ab8500_bm_data),
 -#endif
        },
        {
                .name = "ab8500-fg",
                .of_compatible = "stericsson,ab8500-fg",
                .num_resources = ARRAY_SIZE(ab8500_fg_resources),
                .resources = ab8500_fg_resources,
 -#ifndef CONFIG_OF
                .platform_data = &ab8500_bm_data,
                .pdata_size = sizeof(ab8500_bm_data),
 -#endif
        },
        {
                .name = "ab8500-chargalg",
                .of_compatible = "stericsson,ab8500-chargalg",
                .num_resources = ARRAY_SIZE(ab8500_chargalg_resources),
                .resources = ab8500_chargalg_resources,
 -#ifndef CONFIG_OF
                .platform_data = &ab8500_bm_data,
                .pdata_size = sizeof(ab8500_bm_data),
 -#endif
        },
  };
  
  static struct mfd_cell ab8500_devs[] = {
        {
-               .name = "ab8500-gpio",
+               .name = "pinctrl-ab8500",
                .of_compatible = "stericsson,ab8500-gpio",
        },
        {
  
  static struct mfd_cell ab9540_devs[] = {
        {
-               .name = "ab8500-gpio",
+               .name = "pinctrl-ab9540",
+               .of_compatible = "stericsson,ab9540-gpio",
        },
        {
                .name = "ab9540-usb",
index a2bacf95b59ea543ca46104f9137a72497b89905,e42a417adc5ff60b9ded23bae32c5ee6965cac19..21f261bf9e95fd27825a50af02e6e014ec768dea
  #include <linux/fs.h>
  #include <linux/platform_device.h>
  #include <linux/uaccess.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/mfd/core.h>
  #include <linux/mfd/dbx500-prcmu.h>
  #include <linux/mfd/abx500/ab8500.h>
  #include <linux/regulator/db8500-prcmu.h>
  #include <linux/regulator/machine.h>
  #include <linux/cpufreq.h>
 -#include <asm/hardware/gic.h>
+ #include <linux/platform_data/ux500_wdt.h>
  #include <mach/hardware.h>
  #include <mach/irqs.h>
  #include <mach/db8500-regs.h>
 -#include <mach/id.h>
  #include "dbx500-prcmu-regs.h"
  
 -/* Offset for the firmware version within the TCPM */
 -#define PRCMU_FW_VERSION_OFFSET 0xA4
 -
  /* Index of different voltages to be used when accessing AVSData */
  #define PRCM_AVS_BASE         0x2FC
  #define PRCM_AVS_VBB_RET      (PRCM_AVS_BASE + 0x0)
  #define PRCM_REQ_MB5_I2C_HW_BITS      (PRCM_REQ_MB5 + 0x1)
  #define PRCM_REQ_MB5_I2C_REG          (PRCM_REQ_MB5 + 0x2)
  #define PRCM_REQ_MB5_I2C_VAL          (PRCM_REQ_MB5 + 0x3)
 -#define PRCMU_I2C_WRITE(slave) \
 -      (((slave) << 1) | (cpu_is_u8500v2() ? BIT(6) : 0))
 -#define PRCMU_I2C_READ(slave) \
 -      (((slave) << 1) | BIT(0) | (cpu_is_u8500v2() ? BIT(6) : 0))
 +#define PRCMU_I2C_WRITE(slave) (((slave) << 1) | BIT(6))
 +#define PRCMU_I2C_READ(slave) (((slave) << 1) | BIT(0) | BIT(6))
  #define PRCMU_I2C_STOP_EN             BIT(3)
  
  /* Mailbox 5 ACKs */
@@@ -1043,13 -1050,12 +1044,13 @@@ int db8500_prcmu_get_ddr_opp(void
   *
   * This function sets the operating point of the DDR.
   */
 +static bool enable_set_ddr_opp;
  int db8500_prcmu_set_ddr_opp(u8 opp)
  {
        if (opp < DDR_100_OPP || opp > DDR_25_OPP)
                return -EINVAL;
        /* Changing the DDR OPP can hang the hardware pre-v21 */
 -      if (cpu_is_u8500v20_or_later() && !cpu_is_u8500v20())
 +      if (enable_set_ddr_opp)
                writeb(opp, PRCM_DDR_SUBSYS_APE_MINBW);
  
        return 0;
@@@ -2207,21 -2213,25 +2208,25 @@@ int db8500_prcmu_config_a9wdog(u8 num, 
                            sleep_auto_off ? A9WDOG_AUTO_OFF_EN :
                            A9WDOG_AUTO_OFF_DIS);
  }
+ EXPORT_SYMBOL(db8500_prcmu_config_a9wdog);
  
  int db8500_prcmu_enable_a9wdog(u8 id)
  {
        return prcmu_a9wdog(MB4H_A9WDOG_EN, id, 0, 0, 0);
  }
+ EXPORT_SYMBOL(db8500_prcmu_enable_a9wdog);
  
  int db8500_prcmu_disable_a9wdog(u8 id)
  {
        return prcmu_a9wdog(MB4H_A9WDOG_DIS, id, 0, 0, 0);
  }
+ EXPORT_SYMBOL(db8500_prcmu_disable_a9wdog);
  
  int db8500_prcmu_kick_a9wdog(u8 id)
  {
        return prcmu_a9wdog(MB4H_A9WDOG_KICK, id, 0, 0, 0);
  }
+ EXPORT_SYMBOL(db8500_prcmu_kick_a9wdog);
  
  /*
   * timeout is 28 bit, in ms.
@@@ -2239,6 -2249,7 +2244,7 @@@ int db8500_prcmu_load_a9wdog(u8 id, u3
                            (u8)((timeout >> 12) & 0xff),
                            (u8)((timeout >> 20) & 0xff));
  }
+ EXPORT_SYMBOL(db8500_prcmu_load_a9wdog);
  
  /**
   * prcmu_abb_read() - Read register value(s) from the ABB.
@@@ -2701,43 -2712,21 +2707,43 @@@ static struct irq_chip prcmu_irq_chip 
        .irq_unmask     = prcmu_irq_unmask,
  };
  
 -static char *fw_project_name(u8 project)
 +static __init char *fw_project_name(u32 project)
  {
        switch (project) {
        case PRCMU_FW_PROJECT_U8500:
                return "U8500";
 -      case PRCMU_FW_PROJECT_U8500_C2:
 -              return "U8500 C2";
 +      case PRCMU_FW_PROJECT_U8400:
 +              return "U8400";
        case PRCMU_FW_PROJECT_U9500:
                return "U9500";
 -      case PRCMU_FW_PROJECT_U9500_C2:
 -              return "U9500 C2";
 +      case PRCMU_FW_PROJECT_U8500_MBB:
 +              return "U8500 MBB";
 +      case PRCMU_FW_PROJECT_U8500_C1:
 +              return "U8500 C1";
 +      case PRCMU_FW_PROJECT_U8500_C2:
 +              return "U8500 C2";
 +      case PRCMU_FW_PROJECT_U8500_C3:
 +              return "U8500 C3";
 +      case PRCMU_FW_PROJECT_U8500_C4:
 +              return "U8500 C4";
 +      case PRCMU_FW_PROJECT_U9500_MBL:
 +              return "U9500 MBL";
 +      case PRCMU_FW_PROJECT_U8500_MBL:
 +              return "U8500 MBL";
 +      case PRCMU_FW_PROJECT_U8500_MBL2:
 +              return "U8500 MBL2";
        case PRCMU_FW_PROJECT_U8520:
 -              return "U8520";
 +              return "U8520 MBL";
        case PRCMU_FW_PROJECT_U8420:
                return "U8420";
 +      case PRCMU_FW_PROJECT_U9540:
 +              return "U9540";
 +      case PRCMU_FW_PROJECT_A9420:
 +              return "A9420";
 +      case PRCMU_FW_PROJECT_L8540:
 +              return "L8540";
 +      case PRCMU_FW_PROJECT_L8580:
 +              return "L8580";
        default:
                return "Unknown";
        }
@@@ -2783,44 -2772,36 +2789,44 @@@ static int db8500_irq_init(struct devic
        return 0;
  }
  
 -void __init db8500_prcmu_early_init(void)
 +static void dbx500_fw_version_init(struct platform_device *pdev,
 +                          u32 version_offset)
  {
 -      if (cpu_is_u8500v2() || cpu_is_u9540()) {
 -              void *tcpm_base = ioremap_nocache(U8500_PRCMU_TCPM_BASE, SZ_4K);
 -
 -              if (tcpm_base != NULL) {
 -                      u32 version;
 -                      version = readl(tcpm_base + PRCMU_FW_VERSION_OFFSET);
 -                      fw_info.version.project = version & 0xFF;
 -                      fw_info.version.api_version = (version >> 8) & 0xFF;
 -                      fw_info.version.func_version = (version >> 16) & 0xFF;
 -                      fw_info.version.errata = (version >> 24) & 0xFF;
 -                      fw_info.valid = true;
 -                      pr_info("PRCMU firmware: %s, version %d.%d.%d\n",
 -                              fw_project_name(fw_info.version.project),
 -                              (version >> 8) & 0xFF, (version >> 16) & 0xFF,
 -                              (version >> 24) & 0xFF);
 -                      iounmap(tcpm_base);
 -              }
 +      struct resource *res;
 +      void __iomem *tcpm_base;
  
 -              if (cpu_is_u9540())
 -                      tcdm_base = ioremap_nocache(U8500_PRCMU_TCDM_BASE,
 -                                              SZ_4K + SZ_8K) + SZ_8K;
 -              else
 -                      tcdm_base = __io_address(U8500_PRCMU_TCDM_BASE);
 -      } else {
 -              pr_err("prcmu: Unsupported chip version\n");
 -              BUG();
 +      res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
 +                                         "prcmu-tcpm");
 +      if (!res) {
 +              dev_err(&pdev->dev,
 +                      "Error: no prcmu tcpm memory region provided\n");
 +              return;
        }
 +      tcpm_base = ioremap(res->start, resource_size(res));
 +      if (tcpm_base != NULL) {
 +              u32 version;
 +
 +              version = readl(tcpm_base + version_offset);
 +              fw_info.version.project = (version & 0xFF);
 +              fw_info.version.api_version = (version >> 8) & 0xFF;
 +              fw_info.version.func_version = (version >> 16) & 0xFF;
 +              fw_info.version.errata = (version >> 24) & 0xFF;
 +              strncpy(fw_info.version.project_name,
 +                      fw_project_name(fw_info.version.project),
 +                      PRCMU_FW_PROJECT_NAME_LEN);
 +              fw_info.valid = true;
 +              pr_info("PRCMU firmware: %s(%d), version %d.%d.%d\n",
 +                      fw_info.version.project_name,
 +                      fw_info.version.project,
 +                      fw_info.version.api_version,
 +                      fw_info.version.func_version,
 +                      fw_info.version.errata);
 +              iounmap(tcpm_base);
 +      }
 +}
  
 +void __init db8500_prcmu_early_init(void)
 +{
        spin_lock_init(&mb0_transfer.lock);
        spin_lock_init(&mb0_transfer.dbb_irqs_lock);
        mutex_init(&mb0_transfer.ac_wake_lock);
@@@ -3094,6 -3075,11 +3100,11 @@@ static struct resource ab8500_resources
        }
  };
  
+ static struct ux500_wdt_data db8500_wdt_pdata = {
+       .timeout = 600, /* 10 minutes */
+       .has_28_bits_resolution = true,
+ };
  static struct mfd_cell db8500_prcmu_devs[] = {
        {
                .name = "db8500-prcmu-regulators",
                .pdata_size = sizeof(db8500_regulators),
        },
        {
 -              .name = "cpufreq-u8500",
 -              .of_compatible = "stericsson,cpufreq-u8500",
 +              .name = "cpufreq-ux500",
 +              .of_compatible = "stericsson,cpufreq-ux500",
                .platform_data = &db8500_cpufreq_table,
                .pdata_size = sizeof(db8500_cpufreq_table),
        },
+       {
+               .name = "ux500_wdt",
+               .platform_data = &db8500_wdt_pdata,
+               .pdata_size = sizeof(db8500_wdt_pdata),
+               .id = -1,
+       },
        {
                .name = "ab8500-core",
                .of_compatible = "stericsson,ab8500",
@@@ -3130,30 -3122,23 +3147,30 @@@ static void db8500_prcmu_update_cpufreq
   */
  static int db8500_prcmu_probe(struct platform_device *pdev)
  {
 -      struct ab8500_platform_data *ab8500_platdata = pdev->dev.platform_data;
        struct device_node *np = pdev->dev.of_node;
 +      struct prcmu_pdata *pdata = dev_get_platdata(&pdev->dev);
        int irq = 0, err = 0, i;
 -
 -      if (ux500_is_svp())
 -              return -ENODEV;
 +      struct resource *res;
  
        init_prcm_registers();
  
 +      dbx500_fw_version_init(pdev, pdata->version_offset);
 +      res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "prcmu-tcdm");
 +      if (!res) {
 +              dev_err(&pdev->dev, "no prcmu tcdm region provided\n");
 +              return -ENOENT;
 +      }
 +      tcdm_base = devm_ioremap(&pdev->dev, res->start,
 +                      resource_size(res));
 +
        /* Clean up the mailbox interrupts after pre-kernel code. */
        writel(ALL_MBOX_BITS, PRCM_ARM_IT1_CLR);
  
 -      if (np)
 -              irq = platform_get_irq(pdev, 0);
 -
 -      if (!np || irq <= 0)
 -              irq = IRQ_DB8500_PRCMU1;
 +      irq = platform_get_irq(pdev, 0);
 +      if (irq <= 0) {
 +              dev_err(&pdev->dev, "no prcmu irq provided\n");
 +              return -ENOENT;
 +      }
  
        err = request_threaded_irq(irq, prcmu_irq_handler,
                prcmu_irq_thread_fn, IRQF_NO_SUSPEND, "prcmu", NULL);
  
        for (i = 0; i < ARRAY_SIZE(db8500_prcmu_devs); i++) {
                if (!strcmp(db8500_prcmu_devs[i].name, "ab8500-core")) {
 -                      db8500_prcmu_devs[i].platform_data = ab8500_platdata;
 +                      db8500_prcmu_devs[i].platform_data = pdata->ab_platdata;
                        db8500_prcmu_devs[i].pdata_size = sizeof(struct ab8500_platform_data);
                }
        }
  
 -      if (cpu_is_u8500v20_or_later())
 -              prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
 +      prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
  
        db8500_prcmu_update_cpufreq();
  
index 558c2928f2613f9011b00dafcbac5da71e0551d4,a4a43230abcda29e74bd7044d9b16fa131a6e52a..bf75e967a1f304f1b102d275464353c2067319b4
@@@ -49,6 -49,8 +49,8 @@@
  #define SYS_ID_HBI_SHIFT      16
  #define SYS_PROCIDx_HBI_SHIFT 0
  
+ #define SYS_LED_LED(n)                (1 << (n))
  #define SYS_MCI_CARDIN                (1 << 0)
  #define SYS_MCI_WPROT         (1 << 1)
  
@@@ -313,7 -315,7 +315,7 @@@ static void vexpress_sysreg_config_comp
  }
  
  
 -void __init vexpress_sysreg_setup(struct device_node *node)
 +void vexpress_sysreg_setup(struct device_node *node)
  {
        if (WARN_ON(!vexpress_sysreg_base))
                return;
@@@ -336,34 -338,40 +338,40 @@@ void __init vexpress_sysreg_early_init(
  
  void __init vexpress_sysreg_of_early_init(void)
  {
-       struct device_node *node = of_find_compatible_node(NULL, NULL,
-                       "arm,vexpress-sysreg");
+       struct device_node *node;
+       if (vexpress_sysreg_base)
+               return;
  
+       node = of_find_compatible_node(NULL, NULL, "arm,vexpress-sysreg");
        if (node) {
                vexpress_sysreg_base = of_iomap(node, 0);
                vexpress_sysreg_setup(node);
-       } else {
-               pr_info("vexpress-sysreg: No Device Tree node found.");
        }
  }
  
  
+ #define VEXPRESS_SYSREG_GPIO(_name, _reg, _value) \
+       [VEXPRESS_GPIO_##_name] = { \
+               .reg = _reg, \
+               .value = _reg##_##_value, \
+       }
  static struct vexpress_sysreg_gpio {
        unsigned long reg;
        u32 value;
  } vexpress_sysreg_gpios[] = {
-       [VEXPRESS_GPIO_MMC_CARDIN] = {
-               .reg = SYS_MCI,
-               .value = SYS_MCI_CARDIN,
-       },
-       [VEXPRESS_GPIO_MMC_WPROT] = {
-               .reg = SYS_MCI,
-               .value = SYS_MCI_WPROT,
-       },
-       [VEXPRESS_GPIO_FLASH_WPn] = {
-               .reg = SYS_FLASH,
-               .value = SYS_FLASH_WPn,
-       },
+       VEXPRESS_SYSREG_GPIO(MMC_CARDIN,        SYS_MCI,        CARDIN),
+       VEXPRESS_SYSREG_GPIO(MMC_WPROT,         SYS_MCI,        WPROT),
+       VEXPRESS_SYSREG_GPIO(FLASH_WPn,         SYS_FLASH,      WPn),
+       VEXPRESS_SYSREG_GPIO(LED0,              SYS_LED,        LED(0)),
+       VEXPRESS_SYSREG_GPIO(LED1,              SYS_LED,        LED(1)),
+       VEXPRESS_SYSREG_GPIO(LED2,              SYS_LED,        LED(2)),
+       VEXPRESS_SYSREG_GPIO(LED3,              SYS_LED,        LED(3)),
+       VEXPRESS_SYSREG_GPIO(LED4,              SYS_LED,        LED(4)),
+       VEXPRESS_SYSREG_GPIO(LED5,              SYS_LED,        LED(5)),
+       VEXPRESS_SYSREG_GPIO(LED6,              SYS_LED,        LED(6)),
+       VEXPRESS_SYSREG_GPIO(LED7,              SYS_LED,        LED(7)),
  };
  
  static int vexpress_sysreg_gpio_direction_input(struct gpio_chip *chip,
        return 0;
  }
  
- static int vexpress_sysreg_gpio_direction_output(struct gpio_chip *chip,
-                                               unsigned offset, int value)
- {
-       return 0;
- }
  static int vexpress_sysreg_gpio_get(struct gpio_chip *chip,
                                       unsigned offset)
  {
@@@ -401,6 -403,14 +403,14 @@@ static void vexpress_sysreg_gpio_set(st
        writel(reg_value, vexpress_sysreg_base + gpio->reg);
  }
  
+ static int vexpress_sysreg_gpio_direction_output(struct gpio_chip *chip,
+                                               unsigned offset, int value)
+ {
+       vexpress_sysreg_gpio_set(chip, offset, value);
+       return 0;
+ }
  static struct gpio_chip vexpress_sysreg_gpio_chip = {
        .label = "vexpress-sysreg",
        .direction_input = vexpress_sysreg_gpio_direction_input,
  };
  
  
+ #define VEXPRESS_SYSREG_GREEN_LED(_name, _default_trigger, _gpio) \
+       { \
+               .name = "v2m:green:"_name, \
+               .default_trigger = _default_trigger, \
+               .gpio = VEXPRESS_GPIO_##_gpio, \
+       }
+ struct gpio_led vexpress_sysreg_leds[] = {
+       VEXPRESS_SYSREG_GREEN_LED("user1",      "heartbeat",    LED0),
+       VEXPRESS_SYSREG_GREEN_LED("user2",      "mmc0",         LED1),
+       VEXPRESS_SYSREG_GREEN_LED("user3",      "cpu0",         LED2),
+       VEXPRESS_SYSREG_GREEN_LED("user4",      "cpu1",         LED3),
+       VEXPRESS_SYSREG_GREEN_LED("user5",      "cpu2",         LED4),
+       VEXPRESS_SYSREG_GREEN_LED("user6",      "cpu3",         LED5),
+       VEXPRESS_SYSREG_GREEN_LED("user7",      "cpu4",         LED6),
+       VEXPRESS_SYSREG_GREEN_LED("user8",      "cpu5",         LED7),
+ };
+ struct gpio_led_platform_data vexpress_sysreg_leds_pdata = {
+       .num_leds = ARRAY_SIZE(vexpress_sysreg_leds),
+       .leds = vexpress_sysreg_leds,
+ };
  static ssize_t vexpress_sysreg_sys_id_show(struct device *dev,
                struct device_attribute *attr, char *buf)
  {
@@@ -456,6 -490,10 +490,10 @@@ static int vexpress_sysreg_probe(struc
                return err;
        }
  
+       platform_device_register_data(vexpress_sysreg_dev, "leds-gpio",
+                       PLATFORM_DEVID_AUTO, &vexpress_sysreg_leds_pdata,
+                       sizeof(vexpress_sysreg_leds_pdata));
        vexpress_sysreg_dev = &pdev->dev;
  
        device_create_file(vexpress_sysreg_dev, &dev_attr_sys_id);
@@@ -478,6 -516,7 +516,7 @@@ static struct platform_driver vexpress_
  
  static int __init vexpress_sysreg_init(void)
  {
+       vexpress_sysreg_of_early_init();
        return platform_driver_register(&vexpress_sysreg_driver);
  }
  core_initcall(vexpress_sysreg_init);
index a9d9d41d95d342df8bcc95fa38055ac0bd47bec5,d754596eb942987925496c9ce3ce5f87b8df9262..a433f580aa4c4edb94810685684e317a6afd3575
@@@ -59,12 -59,13 +59,13 @@@ static const struct reg_default wm5102_
  static const struct reg_default wm5102_revb_patch[] = {
        { 0x80, 0x0003 },
        { 0x081, 0xE022 },
-       { 0x410, 0x6080 },
-       { 0x418, 0x6080 },
-       { 0x420, 0x6080 },
+       { 0x410, 0x4080 },
+       { 0x418, 0x4080 },
+       { 0x420, 0x4080 },
        { 0x428, 0xC000 },
-       { 0x441, 0x8014 },
+       { 0x4B0, 0x0066 },
        { 0x458, 0x000b },
+       { 0x212, 0x0000 },
        { 0x80, 0x0000 },
  };
  
@@@ -84,12 -85,6 +85,12 @@@ int wm5102_patch(struct arizona *arizon
  }
  
  static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = {
 +      [ARIZONA_IRQ_MICD_CLAMP_FALL] = {
 +              .mask = ARIZONA_MICD_CLAMP_FALL_EINT1
 +      },
 +      [ARIZONA_IRQ_MICD_CLAMP_RISE] = {
 +              .mask = ARIZONA_MICD_CLAMP_RISE_EINT1
 +      },
        [ARIZONA_IRQ_GP5_FALL] = { .mask = ARIZONA_GP5_FALL_EINT1 },
        [ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 },
        [ARIZONA_IRQ_JD_FALL] = { .mask = ARIZONA_JD1_FALL_EINT1 },
@@@ -102,7 -97,6 +103,7 @@@ const struct regmap_irq_chip wm5102_ao
        .mask_base = ARIZONA_AOD_IRQ_MASK_IRQ1,
        .ack_base = ARIZONA_AOD_IRQ1,
        .wake_base = ARIZONA_WAKE_CONTROL,
 +      .wake_invert = 1,
        .num_regs = 1,
        .irqs = wm5102_aod_irqs,
        .num_irqs = ARRAY_SIZE(wm5102_aod_irqs),
@@@ -231,11 -225,9 +232,9 @@@ const struct regmap_irq_chip wm5102_ir
  static const struct reg_default wm5102_reg_default[] = {
        { 0x00000008, 0x0019 },   /* R8     - Ctrl IF SPI CFG 1 */ 
        { 0x00000009, 0x0001 },   /* R9     - Ctrl IF I2C1 CFG 1 */ 
-       { 0x0000000D, 0x0000 },   /* R13    - Ctrl IF Status 1 */ 
        { 0x00000016, 0x0000 },   /* R22    - Write Sequencer Ctrl 0 */ 
        { 0x00000017, 0x0000 },   /* R23    - Write Sequencer Ctrl 1 */ 
        { 0x00000018, 0x0000 },   /* R24    - Write Sequencer Ctrl 2 */ 
-       { 0x0000001A, 0x0000 },   /* R26    - Write Sequencer PROM */ 
        { 0x00000020, 0x0000 },   /* R32    - Tone Generator 1 */ 
        { 0x00000021, 0x1000 },   /* R33    - Tone Generator 2 */ 
        { 0x00000022, 0x0000 },   /* R34    - Tone Generator 3 */ 
        { 0x00000062, 0x01FF },   /* R98    - Sample Rate Sequence Select 2 */ 
        { 0x00000063, 0x01FF },   /* R99    - Sample Rate Sequence Select 3 */ 
        { 0x00000064, 0x01FF },   /* R100   - Sample Rate Sequence Select 4 */ 
-       { 0x00000068, 0x01FF },   /* R104   - Always On Triggers Sequence Select 1 */ 
-       { 0x00000069, 0x01FF },   /* R105   - Always On Triggers Sequence Select 2 */ 
-       { 0x0000006A, 0x01FF },   /* R106   - Always On Triggers Sequence Select 3 */ 
-       { 0x0000006B, 0x01FF },   /* R107   - Always On Triggers Sequence Select 4 */ 
-       { 0x0000006C, 0x01FF },   /* R108   - Always On Triggers Sequence Select 5 */ 
-       { 0x0000006D, 0x01FF },   /* R109   - Always On Triggers Sequence Select 6 */ 
+       { 0x00000066, 0x01FF },   /* R102   - Always On Triggers Sequence Select 1 */
+       { 0x00000067, 0x01FF },   /* R103   - Always On Triggers Sequence Select 2 */
+       { 0x00000068, 0x01FF },   /* R104   - Always On Triggers Sequence Select 3 */
+       { 0x00000069, 0x01FF },   /* R105   - Always On Triggers Sequence Select 4 */
+       { 0x0000006A, 0x01FF },   /* R106   - Always On Triggers Sequence Select 5 */
+       { 0x0000006B, 0x01FF },   /* R107   - Always On Triggers Sequence Select 6 */
+       { 0x0000006E, 0x01FF },   /* R110   - Trigger Sequence Select 32 */
+       { 0x0000006F, 0x01FF },   /* R111   - Trigger Sequence Select 33 */
        { 0x00000070, 0x0000 },   /* R112   - Comfort Noise Generator */ 
        { 0x00000090, 0x0000 },   /* R144   - Haptics Control 1 */ 
        { 0x00000091, 0x7FFF },   /* R145   - Haptics Control 2 */ 
        { 0x00000095, 0x0000 },   /* R149   - Haptics phase 2 duration */ 
        { 0x00000096, 0x0000 },   /* R150   - Haptics phase 3 intensity */ 
        { 0x00000097, 0x0000 },   /* R151   - Haptics phase 3 duration */ 
-       { 0x00000100, 0x0001 },   /* R256   - Clock 32k 1 */ 
+       { 0x00000100, 0x0002 },   /* R256   - Clock 32k 1 */
        { 0x00000101, 0x0304 },   /* R257   - System Clock 1 */ 
        { 0x00000102, 0x0011 },   /* R258   - Sample rate 1 */ 
        { 0x00000103, 0x0011 },   /* R259   - Sample rate 2 */ 
        { 0x00000104, 0x0011 },   /* R260   - Sample rate 3 */ 
        { 0x00000112, 0x0305 },   /* R274   - Async clock 1 */ 
        { 0x00000113, 0x0011 },   /* R275   - Async sample rate 1 */ 
+       { 0x00000114, 0x0011 },   /* R276   - Async sample rate 2 */
        { 0x00000149, 0x0000 },   /* R329   - Output system clock */ 
        { 0x0000014A, 0x0000 },   /* R330   - Output async clock */ 
        { 0x00000152, 0x0000 },   /* R338   - Rate Estimator 1 */ 
        { 0x00000155, 0x0000 },   /* R341   - Rate Estimator 4 */ 
        { 0x00000156, 0x0000 },   /* R342   - Rate Estimator 5 */ 
        { 0x00000161, 0x0000 },   /* R353   - Dynamic Frequency Scaling 1 */ 
-       { 0x00000171, 0x0000 },   /* R369   - FLL1 Control 1 */ 
+       { 0x00000171, 0x0002 },   /* R369   - FLL1 Control 1 */
        { 0x00000172, 0x0008 },   /* R370   - FLL1 Control 2 */ 
        { 0x00000173, 0x0018 },   /* R371   - FLL1 Control 3 */ 
        { 0x00000174, 0x007D },   /* R372   - FLL1 Control 4 */ 
        { 0x00000175, 0x0004 },   /* R373   - FLL1 Control 5 */ 
        { 0x00000176, 0x0000 },   /* R374   - FLL1 Control 6 */ 
        { 0x00000177, 0x0181 },   /* R375   - FLL1 Loop Filter Test 1 */ 
+       { 0x00000178, 0x0000 },   /* R376   - FLL1 NCO Test 0 */
        { 0x00000181, 0x0000 },   /* R385   - FLL1 Synchroniser 1 */ 
        { 0x00000182, 0x0000 },   /* R386   - FLL1 Synchroniser 2 */ 
        { 0x00000183, 0x0000 },   /* R387   - FLL1 Synchroniser 3 */ 
        { 0x00000195, 0x0004 },   /* R405   - FLL2 Control 5 */ 
        { 0x00000196, 0x0000 },   /* R406   - FLL2 Control 6 */ 
        { 0x00000197, 0x0000 },   /* R407   - FLL2 Loop Filter Test 1 */ 
+       { 0x00000198, 0x0000 },   /* R408   - FLL2 NCO Test 0 */
        { 0x000001A1, 0x0000 },   /* R417   - FLL2 Synchroniser 1 */ 
        { 0x000001A2, 0x0000 },   /* R418   - FLL2 Synchroniser 2 */ 
        { 0x000001A3, 0x0000 },   /* R419   - FLL2 Synchroniser 3 */ 
        { 0x00000218, 0x01A6 },   /* R536   - Mic Bias Ctrl 1 */ 
        { 0x00000219, 0x01A6 },   /* R537   - Mic Bias Ctrl 2 */ 
        { 0x0000021A, 0x01A6 },   /* R538   - Mic Bias Ctrl 3 */ 
+       { 0x00000225, 0x0400 },   /* R549   - HP Ctrl 1L */
+       { 0x00000226, 0x0400 },   /* R550   - HP Ctrl 1R */
        { 0x00000293, 0x0000 },   /* R659   - Accessory Detect Mode 1 */ 
        { 0x0000029B, 0x0020 },   /* R667   - Headphone Detect 1 */ 
 -      { 0x000002A2, 0x0000 },   /* R674   - Micd Clamp control */
+       { 0x0000029C, 0x0000 },   /* R668   - Headphone Detect 2 */
+       { 0x0000029F, 0x0000 },   /* R671   - Headphone Detect Test */
 +      { 0x000002A2, 0x0000 },   /* R674   - Micd clamp control */
        { 0x000002A3, 0x1102 },   /* R675   - Mic Detect 1 */ 
        { 0x000002A4, 0x009F },   /* R676   - Mic Detect 2 */ 
        { 0x000002A5, 0x0000 },   /* R677   - Mic Detect 3 */ 
        { 0x00000400, 0x0000 },   /* R1024  - Output Enables 1 */ 
        { 0x00000408, 0x0000 },   /* R1032  - Output Rate 1 */ 
        { 0x00000409, 0x0022 },   /* R1033  - Output Volume Ramp */ 
-       { 0x00000410, 0x0080 },   /* R1040  - Output Path Config 1L */ 
+       { 0x00000410, 0x4080 },   /* R1040  - Output Path Config 1L */
        { 0x00000411, 0x0180 },   /* R1041  - DAC Digital Volume 1L */ 
-       { 0x00000412, 0x0080 },   /* R1042  - DAC Volume Limit 1L */ 
+       { 0x00000412, 0x0081 },   /* R1042  - DAC Volume Limit 1L */
        { 0x00000413, 0x0001 },   /* R1043  - Noise Gate Select 1L */ 
        { 0x00000414, 0x0080 },   /* R1044  - Output Path Config 1R */ 
        { 0x00000415, 0x0180 },   /* R1045  - DAC Digital Volume 1R */ 
-       { 0x00000416, 0x0080 },   /* R1046  - DAC Volume Limit 1R */ 
+       { 0x00000416, 0x0081 },   /* R1046  - DAC Volume Limit 1R */
        { 0x00000417, 0x0002 },   /* R1047  - Noise Gate Select 1R */ 
-       { 0x00000418, 0x0080 },   /* R1048  - Output Path Config 2L */ 
+       { 0x00000418, 0x4080 },   /* R1048  - Output Path Config 2L */
        { 0x00000419, 0x0180 },   /* R1049  - DAC Digital Volume 2L */ 
-       { 0x0000041A, 0x0080 },   /* R1050  - DAC Volume Limit 2L */ 
+       { 0x0000041A, 0x0081 },   /* R1050  - DAC Volume Limit 2L */
        { 0x0000041B, 0x0004 },   /* R1051  - Noise Gate Select 2L */ 
        { 0x0000041C, 0x0080 },   /* R1052  - Output Path Config 2R */ 
        { 0x0000041D, 0x0180 },   /* R1053  - DAC Digital Volume 2R */ 
-       { 0x0000041E, 0x0080 },   /* R1054  - DAC Volume Limit 2R */ 
+       { 0x0000041E, 0x0081 },   /* R1054  - DAC Volume Limit 2R */
        { 0x0000041F, 0x0008 },   /* R1055  - Noise Gate Select 2R */ 
-       { 0x00000420, 0x0080 },   /* R1056  - Output Path Config 3L */ 
+       { 0x00000420, 0x4080 },   /* R1056  - Output Path Config 3L */
        { 0x00000421, 0x0180 },   /* R1057  - DAC Digital Volume 3L */ 
-       { 0x00000422, 0x0080 },   /* R1058  - DAC Volume Limit 3L */ 
+       { 0x00000422, 0x0081 },   /* R1058  - DAC Volume Limit 3L */
        { 0x00000423, 0x0010 },   /* R1059  - Noise Gate Select 3L */ 
-       { 0x00000424, 0x0080 },   /* R1060  - Output Path Config 3R */ 
-       { 0x00000425, 0x0180 },   /* R1061  - DAC Digital Volume 3R */ 
-       { 0x00000426, 0x0080 },   /* R1062  - DAC Volume Limit 3R */ 
-       { 0x00000428, 0x0000 },   /* R1064  - Output Path Config 4L */ 
+       { 0x00000428, 0xC000 },   /* R1064  - Output Path Config 4L */
        { 0x00000429, 0x0180 },   /* R1065  - DAC Digital Volume 4L */ 
-       { 0x0000042A, 0x0080 },   /* R1066  - Out Volume 4L */ 
+       { 0x0000042A, 0x0081 },   /* R1066  - Out Volume 4L */
        { 0x0000042B, 0x0040 },   /* R1067  - Noise Gate Select 4L */ 
-       { 0x0000042C, 0x0000 },   /* R1068  - Output Path Config 4R */ 
        { 0x0000042D, 0x0180 },   /* R1069  - DAC Digital Volume 4R */ 
-       { 0x0000042E, 0x0080 },   /* R1070  - Out Volume 4R */ 
+       { 0x0000042E, 0x0081 },   /* R1070  - Out Volume 4R */
        { 0x0000042F, 0x0080 },   /* R1071  - Noise Gate Select 4R */ 
        { 0x00000430, 0x0000 },   /* R1072  - Output Path Config 5L */ 
        { 0x00000431, 0x0180 },   /* R1073  - DAC Digital Volume 5L */ 
-       { 0x00000432, 0x0080 },   /* R1074  - DAC Volume Limit 5L */ 
+       { 0x00000432, 0x0081 },   /* R1074  - DAC Volume Limit 5L */
        { 0x00000433, 0x0100 },   /* R1075  - Noise Gate Select 5L */ 
-       { 0x00000434, 0x0000 },   /* R1076  - Output Path Config 5R */ 
        { 0x00000435, 0x0180 },   /* R1077  - DAC Digital Volume 5R */ 
-       { 0x00000436, 0x0080 },   /* R1078  - DAC Volume Limit 5R */ 
-       { 0x00000437, 0x0200 },   /* R1079  - Noise Gate Select 5R */ 
+       { 0x00000436, 0x0081 },   /* R1078  - DAC Volume Limit 5R */
+       { 0x00000437, 0x0200 },   /* R1079  - Noise Gate Select 5R */
        { 0x00000450, 0x0000 },   /* R1104  - DAC AEC Control 1 */ 
        { 0x00000458, 0x0001 },   /* R1112  - Noise Gate Control */ 
        { 0x00000490, 0x0069 },   /* R1168  - PDM SPK1 CTRL 1 */ 
        { 0x00000491, 0x0000 },   /* R1169  - PDM SPK1 CTRL 2 */ 
-       { 0x000004DC, 0x0000 },   /* R1244  - DAC comp 1 */ 
-       { 0x000004DD, 0x0000 },   /* R1245  - DAC comp 2 */ 
-       { 0x000004DE, 0x0000 },   /* R1246  - DAC comp 3 */ 
-       { 0x000004DF, 0x0000 },   /* R1247  - DAC comp 4 */ 
        { 0x00000500, 0x000C },   /* R1280  - AIF1 BCLK Ctrl */ 
        { 0x00000501, 0x0008 },   /* R1281  - AIF1 Tx Pin Ctrl */ 
        { 0x00000502, 0x0000 },   /* R1282  - AIF1 Rx Pin Ctrl */ 
        { 0x00000518, 0x0007 },   /* R1304  - AIF1 Frame Ctrl 18 */ 
        { 0x00000519, 0x0000 },   /* R1305  - AIF1 Tx Enables */ 
        { 0x0000051A, 0x0000 },   /* R1306  - AIF1 Rx Enables */ 
-       { 0x0000051B, 0x0000 },   /* R1307  - AIF1 Force Write */ 
        { 0x00000540, 0x000C },   /* R1344  - AIF2 BCLK Ctrl */ 
        { 0x00000541, 0x0008 },   /* R1345  - AIF2 Tx Pin Ctrl */ 
        { 0x00000542, 0x0000 },   /* R1346  - AIF2 Rx Pin Ctrl */ 
        { 0x00000552, 0x0001 },   /* R1362  - AIF2 Frame Ctrl 12 */ 
        { 0x00000559, 0x0000 },   /* R1369  - AIF2 Tx Enables */ 
        { 0x0000055A, 0x0000 },   /* R1370  - AIF2 Rx Enables */ 
-       { 0x0000055B, 0x0000 },   /* R1371  - AIF2 Force Write */ 
        { 0x00000580, 0x000C },   /* R1408  - AIF3 BCLK Ctrl */ 
        { 0x00000581, 0x0008 },   /* R1409  - AIF3 Tx Pin Ctrl */ 
        { 0x00000582, 0x0000 },   /* R1410  - AIF3 Rx Pin Ctrl */ 
        { 0x00000592, 0x0001 },   /* R1426  - AIF3 Frame Ctrl 12 */ 
        { 0x00000599, 0x0000 },   /* R1433  - AIF3 Tx Enables */ 
        { 0x0000059A, 0x0000 },   /* R1434  - AIF3 Rx Enables */ 
-       { 0x0000059B, 0x0000 },   /* R1435  - AIF3 Force Write */ 
        { 0x000005E3, 0x0004 },   /* R1507  - SLIMbus Framer Ref Gear */ 
        { 0x000005E5, 0x0000 },   /* R1509  - SLIMbus Rates 1 */ 
        { 0x000005E6, 0x0000 },   /* R1510  - SLIMbus Rates 2 */ 
        { 0x000008CD, 0x0080 },   /* R2253  - DRC1RMIX Input 3 Volume */ 
        { 0x000008CE, 0x0000 },   /* R2254  - DRC1RMIX Input 4 Source */ 
        { 0x000008CF, 0x0080 },   /* R2255  - DRC1RMIX Input 4 Volume */ 
-       { 0x000008D0, 0x0000 },   /* R2256  - DRC2LMIX Input 1 Source */ 
-       { 0x000008D1, 0x0080 },   /* R2257  - DRC2LMIX Input 1 Volume */ 
-       { 0x000008D2, 0x0000 },   /* R2258  - DRC2LMIX Input 2 Source */ 
-       { 0x000008D3, 0x0080 },   /* R2259  - DRC2LMIX Input 2 Volume */ 
-       { 0x000008D4, 0x0000 },   /* R2260  - DRC2LMIX Input 3 Source */ 
-       { 0x000008D5, 0x0080 },   /* R2261  - DRC2LMIX Input 3 Volume */ 
-       { 0x000008D6, 0x0000 },   /* R2262  - DRC2LMIX Input 4 Source */ 
-       { 0x000008D7, 0x0080 },   /* R2263  - DRC2LMIX Input 4 Volume */ 
-       { 0x000008D8, 0x0000 },   /* R2264  - DRC2RMIX Input 1 Source */ 
-       { 0x000008D9, 0x0080 },   /* R2265  - DRC2RMIX Input 1 Volume */ 
-       { 0x000008DA, 0x0000 },   /* R2266  - DRC2RMIX Input 2 Source */ 
-       { 0x000008DB, 0x0080 },   /* R2267  - DRC2RMIX Input 2 Volume */ 
-       { 0x000008DC, 0x0000 },   /* R2268  - DRC2RMIX Input 3 Source */ 
-       { 0x000008DD, 0x0080 },   /* R2269  - DRC2RMIX Input 3 Volume */ 
-       { 0x000008DE, 0x0000 },   /* R2270  - DRC2RMIX Input 4 Source */ 
-       { 0x000008DF, 0x0080 },   /* R2271  - DRC2RMIX Input 4 Volume */ 
        { 0x00000900, 0x0000 },   /* R2304  - HPLP1MIX Input 1 Source */ 
        { 0x00000901, 0x0080 },   /* R2305  - HPLP1MIX Input 1 Volume */ 
        { 0x00000902, 0x0000 },   /* R2306  - HPLP1MIX Input 2 Source */ 
        { 0x00000D1B, 0xFFFF },   /* R3355  - IRQ2 Status 4 Mask */ 
        { 0x00000D1C, 0xFFFF },   /* R3356  - IRQ2 Status 5 Mask */ 
        { 0x00000D1F, 0x0000 },   /* R3359  - IRQ2 Control */ 
-       { 0x00000D41, 0x0000 },   /* R3393  - ADSP2 IRQ0 */ 
+       { 0x00000D50, 0x0000 },   /* R3408  - AOD wkup and trig */
        { 0x00000D53, 0xFFFF },   /* R3411  - AOD IRQ Mask IRQ1 */ 
        { 0x00000D54, 0xFFFF },   /* R3412  - AOD IRQ Mask IRQ2 */ 
        { 0x00000D56, 0x0000 },   /* R3414  - Jack detect debounce */ 
        { 0x00000E82, 0x0018 },   /* R3714  - DRC1 ctrl3 */ 
        { 0x00000E83, 0x0000 },   /* R3715  - DRC1 ctrl4 */ 
        { 0x00000E84, 0x0000 },   /* R3716  - DRC1 ctrl5 */ 
-       { 0x00000E89, 0x0018 },   /* R3721  - DRC2 ctrl1 */ 
-       { 0x00000E8A, 0x0933 },   /* R3722  - DRC2 ctrl2 */ 
-       { 0x00000E8B, 0x0018 },   /* R3723  - DRC2 ctrl3 */ 
-       { 0x00000E8C, 0x0000 },   /* R3724  - DRC2 ctrl4 */ 
-       { 0x00000E8D, 0x0000 },   /* R3725  - DRC2 ctrl5 */ 
        { 0x00000EC0, 0x0000 },   /* R3776  - HPLPF1_1 */ 
        { 0x00000EC1, 0x0000 },   /* R3777  - HPLPF1_2 */ 
        { 0x00000EC4, 0x0000 },   /* R3780  - HPLPF2_1 */ 
        { 0x00000ECD, 0x0000 },   /* R3789  - HPLPF4_2 */ 
        { 0x00000EE0, 0x0000 },   /* R3808  - ASRC_ENABLE */ 
        { 0x00000EE2, 0x0000 },   /* R3810  - ASRC_RATE1 */ 
-       { 0x00000EE3, 0x4000 },   /* R3811  - ASRC_RATE2 */ 
        { 0x00000EF0, 0x0000 },   /* R3824  - ISRC 1 CTRL 1 */ 
        { 0x00000EF1, 0x0000 },   /* R3825  - ISRC 1 CTRL 2 */ 
        { 0x00000EF2, 0x0000 },   /* R3826  - ISRC 1 CTRL 3 */ 
        { 0x00000EF3, 0x0000 },   /* R3827  - ISRC 2 CTRL 1 */ 
        { 0x00000EF4, 0x0000 },   /* R3828  - ISRC 2 CTRL 2 */ 
        { 0x00000EF5, 0x0000 },   /* R3829  - ISRC 2 CTRL 3 */ 
-       { 0x00000EF6, 0x0000 },   /* R3830  - ISRC 3 CTRL 1 */ 
-       { 0x00000EF7, 0x0000 },   /* R3831  - ISRC 3 CTRL 2 */ 
-       { 0x00000EF8, 0x0000 },   /* R3832  - ISRC 3 CTRL 3 */ 
        { 0x00001100, 0x0010 },   /* R4352  - DSP1 Control 1 */ 
        { 0x00001101, 0x0000 },   /* R4353  - DSP1 Clocking 1 */ 
  };
@@@ -1114,8 -1078,6 +1085,8 @@@ static bool wm5102_readable_register(st
        case ARIZONA_ACCESSORY_DETECT_MODE_1:
        case ARIZONA_HEADPHONE_DETECT_1:
        case ARIZONA_HEADPHONE_DETECT_2:
 +      case ARIZONA_HP_DACVAL:
 +      case ARIZONA_MICD_CLAMP_CONTROL:
        case ARIZONA_MIC_DETECT_1:
        case ARIZONA_MIC_DETECT_2:
        case ARIZONA_MIC_DETECT_3:
        case ARIZONA_DSP1_STATUS_1:
        case ARIZONA_DSP1_STATUS_2:
        case ARIZONA_DSP1_STATUS_3:
+       case ARIZONA_DSP1_SCRATCH_0:
+       case ARIZONA_DSP1_SCRATCH_1:
+       case ARIZONA_DSP1_SCRATCH_2:
+       case ARIZONA_DSP1_SCRATCH_3:
                return true;
        default:
-               return false;
+               if ((reg >= 0x100000 && reg < 0x106000) ||
+                   (reg >= 0x180000 && reg < 0x180800) ||
+                   (reg >= 0x190000 && reg < 0x194800) ||
+                   (reg >= 0x1a8000 && reg < 0x1a9800))
+                       return true;
+               else
+                       return false;
        }
  }
  
  static bool wm5102_volatile_register(struct device *dev, unsigned int reg)
  {
-       if (reg > 0xffff)
-               return true;
        switch (reg) {
        case ARIZONA_SOFTWARE_RESET:
        case ARIZONA_DEVICE_REVISION:
        case ARIZONA_DSP1_STATUS_1:
        case ARIZONA_DSP1_STATUS_2:
        case ARIZONA_DSP1_STATUS_3:
+       case ARIZONA_DSP1_SCRATCH_0:
+       case ARIZONA_DSP1_SCRATCH_1:
+       case ARIZONA_DSP1_SCRATCH_2:
+       case ARIZONA_DSP1_SCRATCH_3:
        case ARIZONA_HEADPHONE_DETECT_2:
 +      case ARIZONA_HP_DACVAL:
        case ARIZONA_MIC_DETECT_3:
                return true;
        default:
-               return false;
+               if ((reg >= 0x100000 && reg < 0x106000) ||
+                   (reg >= 0x180000 && reg < 0x180800) ||
+                   (reg >= 0x190000 && reg < 0x194800) ||
+                   (reg >= 0x1a8000 && reg < 0x1a9800))
+                       return true;
+               else
+                       return false;
        }
  }
  
diff --combined drivers/rtc/Kconfig
index e6ab071fb6fddece886b00be334fe6810f17993d,f11f746f7a3507bece3c126ce95d4cb73c306029..79fbe3832dfc6f3bfd5e140143b0b51bb40cc36c
@@@ -20,24 -20,14 +20,24 @@@ if RTC_CLAS
  config RTC_HCTOSYS
        bool "Set system time from RTC on startup and resume"
        default y
 +      depends on !ALWAYS_USE_PERSISTENT_CLOCK
        help
          If you say yes here, the system time (wall clock) will be set using
          the value read from a specified RTC device. This is useful to avoid
          unnecessary fsck runs at boot time, and to network better.
  
 +config RTC_SYSTOHC
 +      bool "Set the RTC time based on NTP synchronization"
 +      default y
 +      depends on !ALWAYS_USE_PERSISTENT_CLOCK
 +      help
 +        If you say yes here, the system time (wall clock) will be stored
 +        in the RTC specified by RTC_HCTOSYS_DEVICE approximately every 11
 +        minutes if userspace reports synchronized NTP status.
 +
  config RTC_HCTOSYS_DEVICE
        string "RTC used to set the system time"
 -      depends on RTC_HCTOSYS = y
 +      depends on RTC_HCTOSYS = y || RTC_SYSTOHC = y
        default "rtc0"
        help
          The RTC device that will be used to (re)initialize the system
@@@ -204,12 -194,6 +204,12 @@@ config RTC_DRV_DS323
          This driver can also be built as a module.  If so, the module
          will be called rtc-ds3232.
  
 +config RTC_DRV_LP8788
 +      tristate "TI LP8788 RTC driver"
 +      depends on MFD_LP8788
 +      help
 +        Say Y to enable support for the LP8788 RTC/ALARM driver.
 +
  config RTC_DRV_MAX6900
        tristate "Maxim MAX6900"
        help
@@@ -249,26 -233,6 +249,26 @@@ config RTC_DRV_MAX899
          This driver can also be built as a module. If so, the module
          will be called rtc-max8998.
  
 +config RTC_DRV_MAX8997
 +      tristate "Maxim MAX8997"
 +      depends on MFD_MAX8997
 +      help
 +        If you say yes here you will get support for the
 +        RTC of Maxim MAX8997 PMIC.
 +
 +        This driver can also be built as a module. If so, the module
 +        will be called rtc-max8997.
 +
 +config RTC_DRV_MAX77686
 +      tristate "Maxim MAX77686"
 +      depends on MFD_MAX77686
 +      help
 +        If you say yes here you will get support for the
 +        RTC of Maxim MAX77686 PMIC.
 +
 +        This driver can also be built as a module. If so, the module
 +        will be called rtc-max77686.
 +
  config RTC_DRV_RS5C372
        tristate "Ricoh R2025S/D, RS5C372A/B, RV5C386, RV5C387A"
        help
@@@ -305,6 -269,16 +305,16 @@@ config RTC_DRV_X120
          This driver can also be built as a module. If so, the module
          will be called rtc-x1205.
  
+ config RTC_DRV_PALMAS
+       tristate "TI Palmas RTC driver"
+       depends on MFD_PALMAS
+       help
+         If you say yes here you get support for the RTC of TI PALMA series PMIC
+         chips.
+         This driver can also be built as a module. If so, the module
+         will be called rtc-palma.
  config RTC_DRV_PCF8523
        tristate "NXP PCF8523"
        help
@@@ -406,14 -380,6 +416,14 @@@ config RTC_DRV_TPS6591
          This driver can also be built as a module. If so, the module
          will be called rtc-tps65910.
  
 +config RTC_DRV_TPS80031
 +      tristate "TI TPS80031/TPS80032 RTC driver"
 +      depends on MFD_TPS80031
 +      help
 +        TI Power Managment IC TPS80031 supports RTC functionality
 +        along with alarm. This driver supports the RTC driver for
 +        the TPS80031 RTC module.
 +
  config RTC_DRV_RC5T583
        tristate "RICOH 5T583 RTC driver"
        depends on MFD_RC5T583
@@@ -571,14 -537,6 +581,14 @@@ config RTC_DRV_PCF212
          This driver can also be built as a module. If so, the module
          will be called rtc-pcf2123.
  
 +config RTC_DRV_RX4581
 +      tristate "Epson RX-4581"
 +      help
 +        If you say yes here you will get support for the Epson RX-4581.
 +
 +        This driver can also be built as a module. If so the module
 +        will be called rtc-rx4581.
 +
  endif # SPI_MASTER
  
  comment "Platform RTC drivers"
@@@ -1075,7 -1033,7 +1085,7 @@@ config RTC_DRV_TX493
  
  config RTC_DRV_MV
        tristate "Marvell SoC RTC"
 -      depends on ARCH_KIRKWOOD || ARCH_DOVE
 +      depends on ARCH_KIRKWOOD || ARCH_DOVE || ARCH_MVEBU
        help
          If you say yes here you will get support for the in-chip RTC
          that can be found in some of Marvell's SoC devices, such as
@@@ -1225,20 -1183,4 +1235,20 @@@ config RTC_DRV_SNV
           This driver can also be built as a module, if so, the module
           will be called "rtc-snvs".
  
 +comment "HID Sensor RTC drivers"
 +
 +config RTC_DRV_HID_SENSOR_TIME
 +      tristate "HID Sensor Time"
 +      depends on USB_HID
 +      select IIO
 +      select HID_SENSOR_HUB
 +      select HID_SENSOR_IIO_COMMON
 +      help
 +        Say yes here to build support for the HID Sensors of type Time.
 +        This drivers makes such sensors available as RTCs.
 +
 +        If this driver is compiled as a module, it will be named
 +        rtc-hid-sensor-time.
 +
 +
  endif # RTC_CLASS
diff --combined drivers/rtc/Makefile
index e8f2e2fee06f59ac5298b68529e722bbc43af8cc,3b66c75f6c76f12cd3d728ee8fa78d0a7b85380a..c33f86f1a69b313f84f7c0e5ceb492474a59f892
@@@ -6,7 -6,6 +6,7 @@@ ccflags-$(CONFIG_RTC_DEBUG)      := -DDEBU
  
  obj-$(CONFIG_RTC_LIB)         += rtc-lib.o
  obj-$(CONFIG_RTC_HCTOSYS)     += hctosys.o
 +obj-$(CONFIG_RTC_SYSTOHC)     += systohc.o
  obj-$(CONFIG_RTC_CLASS)               += rtc-core.o
  rtc-core-y                    := class.o interface.o
  
@@@ -53,12 -52,10 +53,12 @@@ obj-$(CONFIG_RTC_DRV_EM3027)       += rtc-em3
  obj-$(CONFIG_RTC_DRV_EP93XX)  += rtc-ep93xx.o
  obj-$(CONFIG_RTC_DRV_FM3130)  += rtc-fm3130.o
  obj-$(CONFIG_RTC_DRV_GENERIC) += rtc-generic.o
 +obj-$(CONFIG_RTC_DRV_HID_SENSOR_TIME) += rtc-hid-sensor-time.o
  obj-$(CONFIG_RTC_DRV_IMXDI)   += rtc-imxdi.o
  obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o
  obj-$(CONFIG_RTC_DRV_ISL12022)        += rtc-isl12022.o
  obj-$(CONFIG_RTC_DRV_JZ4740)  += rtc-jz4740.o
 +obj-$(CONFIG_RTC_DRV_LP8788)  += rtc-lp8788.o
  obj-$(CONFIG_RTC_DRV_LPC32XX) += rtc-lpc32xx.o
  obj-$(CONFIG_RTC_DRV_LOONGSON1)       += rtc-ls1x.o
  obj-$(CONFIG_RTC_DRV_M41T80)  += rtc-m41t80.o
@@@ -72,15 -69,14 +72,16 @@@ obj-$(CONFIG_RTC_DRV_MAX6900)      += rtc-ma
  obj-$(CONFIG_RTC_DRV_MAX8907) += rtc-max8907.o
  obj-$(CONFIG_RTC_DRV_MAX8925) += rtc-max8925.o
  obj-$(CONFIG_RTC_DRV_MAX8998) += rtc-max8998.o
 +obj-$(CONFIG_RTC_DRV_MAX8997) += rtc-max8997.o
  obj-$(CONFIG_RTC_DRV_MAX6902) += rtc-max6902.o
 +obj-$(CONFIG_RTC_DRV_MAX77686)        += rtc-max77686.o
  obj-$(CONFIG_RTC_DRV_MC13XXX) += rtc-mc13xxx.o
  obj-$(CONFIG_RTC_DRV_MSM6242) += rtc-msm6242.o
  obj-$(CONFIG_RTC_DRV_MPC5121) += rtc-mpc5121.o
  obj-$(CONFIG_RTC_DRV_MV)      += rtc-mv.o
  obj-$(CONFIG_RTC_DRV_NUC900)  += rtc-nuc900.o
  obj-$(CONFIG_RTC_DRV_OMAP)    += rtc-omap.o
+ obj-$(CONFIG_RTC_DRV_PALMAS)  += rtc-palmas.o
  obj-$(CONFIG_RTC_DRV_PCAP)    += rtc-pcap.o
  obj-$(CONFIG_RTC_DRV_PCF8523) += rtc-pcf8523.o
  obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o
@@@ -100,7 -96,6 +101,7 @@@ obj-$(CONFIG_RTC_DRV_RS5C313)       += rtc-rs
  obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o
  obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o
  obj-$(CONFIG_RTC_DRV_RV3029C2)        += rtc-rv3029c2.o
 +obj-$(CONFIG_RTC_DRV_RX4581)  += rtc-rx4581.o
  obj-$(CONFIG_RTC_DRV_RX8025)  += rtc-rx8025.o
  obj-$(CONFIG_RTC_DRV_RX8581)  += rtc-rx8581.o
  obj-$(CONFIG_RTC_DRV_S35390A) += rtc-s35390a.o
@@@ -119,7 -114,6 +120,7 @@@ obj-$(CONFIG_RTC_DRV_TILE) += rtc-tile.
  obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o
  obj-$(CONFIG_RTC_DRV_TPS6586X)        += rtc-tps6586x.o
  obj-$(CONFIG_RTC_DRV_TPS65910)        += rtc-tps65910.o
 +obj-$(CONFIG_RTC_DRV_TPS80031)        += rtc-tps80031.o
  obj-$(CONFIG_RTC_DRV_TX4939)  += rtc-tx4939.o
  obj-$(CONFIG_RTC_DRV_V3020)   += rtc-v3020.o
  obj-$(CONFIG_RTC_DRV_VR41XX)  += rtc-vr41xx.o
index 99899e808c6afc83af6e428fa96e2e781983effd,5d954d7b290d57ed023f0cc37873a90737729b0f..0555ee42d7cb1882cf284a2f8019ce8a091be961
@@@ -107,7 -107,7 +107,7 @@@ static int omap_ehci_init(struct usb_hc
  {
        struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
        int                     rc;
-       struct ehci_hcd_omap_platform_data      *pdata;
+       struct usbhs_omap_platform_data *pdata;
  
        pdata = hcd->self.controller->platform_data;
  
  }
  
  static void disable_put_regulator(
-               struct ehci_hcd_omap_platform_data *pdata)
+               struct usbhs_omap_platform_data *pdata)
  {
        int i;
  
  static int ehci_hcd_omap_probe(struct platform_device *pdev)
  {
        struct device                           *dev = &pdev->dev;
-       struct ehci_hcd_omap_platform_data      *pdata = dev->platform_data;
+       struct usbhs_omap_platform_data         *pdata = dev->platform_data;
        struct resource                         *res;
        struct usb_hcd                          *hcd;
        void __iomem                            *regs;
@@@ -288,6 -288,7 +288,6 @@@ static int ehci_hcd_omap_remove(struct 
  {
        struct device *dev                              = &pdev->dev;
        struct usb_hcd *hcd                             = dev_get_drvdata(dev);
 -      struct ehci_hcd_omap_platform_data *pdata       = dev->platform_data;
  
        usb_remove_hcd(hcd);
        disable_put_regulator(dev->platform_data);
        pm_runtime_put_sync(dev);
        pm_runtime_disable(dev);
  
 -      if (pdata->phy_reset) {
 -              if (gpio_is_valid(pdata->reset_gpio_port[0]))
 -                      gpio_free(pdata->reset_gpio_port[0]);
 -
 -              if (gpio_is_valid(pdata->reset_gpio_port[1]))
 -                      gpio_free(pdata->reset_gpio_port[1]);
 -      }
        return 0;
  }
  
@@@ -364,7 -372,7 +364,7 @@@ static const struct hc_driver ehci_omap
        .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
  };
  
 -MODULE_ALIAS("platform:omap-ehci");
 +MODULE_ALIAS("platform:ehci-omap");
  MODULE_AUTHOR("Texas Instruments, Inc.");
  MODULE_AUTHOR("Felipe Balbi <felipe.balbi@nokia.com>");
  
index 80e3b8683a84f1c51fb793e8439bc436cb36117f,76ca1bab0cea276e9c4a9fb985c26abb9388e876..9ead60bc66b73be3de722213d91e3eb8d51cbae2
@@@ -131,7 -131,7 +131,7 @@@ struct abx500_maxim_parameters 
   * @nominal_voltage:          Nominal voltage of the battery in mV
   * @termination_vol:          max voltage upto which battery can be charged
   * @termination_curr          battery charging termination current in mA
 - * @recharge_vol              battery voltage limit that will trigger a new
 + * @recharge_cap              battery capacity limit that will trigger a new
   *                            full charging cycle in the case where maintenan-
   *                            -ce charging has been disabled
   * @normal_cur_lvl:           charger current in normal state in mA
@@@ -160,7 -160,7 +160,7 @@@ struct abx500_battery_type 
        int nominal_voltage;
        int termination_vol;
        int termination_curr;
 -      int recharge_vol;
 +      int recharge_cap;
        int normal_cur_lvl;
        int normal_vol_lvl;
        int maint_a_cur_lvl;
@@@ -224,7 -224,6 +224,7 @@@ struct abx500_bm_charger_parameters 
   * @bkup_bat_v                voltage which we charge the backup battery with
   * @bkup_bat_i                current which we charge the backup battery with
   * @no_maintenance    indicates that maintenance charging is disabled
 + * @capacity_scaling    indicates whether capacity scaling is to be used
   * @abx500_adc_therm  placement of thermistor, batctrl or battemp adc
   * @chg_unknown_bat   flag to enable charging of unknown batteries
   * @enable_overshoot  flag to enable VBAT overshoot control
@@@ -254,11 -253,7 +254,11 @@@ struct abx500_bm_data 
        int usb_safety_tmr_h;
        int bkup_bat_v;
        int bkup_bat_i;
 +      bool autopower_cfg;
 +      bool ac_enabled;
 +      bool usb_enabled;
        bool no_maintenance;
 +      bool capacity_scaling;
        bool chg_unknown_bat;
        bool enable_overshoot;
        bool auto_trig;
@@@ -282,9 -277,9 +282,9 @@@ enum 
        NTC_INTERNAL,
  };
  
 -int bmdevs_of_probe(struct device *dev,
 -              struct device_node *np,
 -              struct abx500_bm_data **battery);
 +int ab8500_bm_of_probe(struct device *dev,
 +                     struct device_node *np,
 +                     struct abx500_bm_data *bm);
  
  int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg,
        u8 value);
@@@ -311,6 -306,7 +311,7 @@@ int abx500_mask_and_set_register_interr
  int abx500_get_chip_id(struct device *dev);
  int abx500_event_registers_startup_state_get(struct device *dev, u8 *event);
  int abx500_startup_irq_enabled(struct device *dev, unsigned int irq);
+ void abx500_dump_all_banks(void);
  
  struct abx500_ops {
        int (*get_chip_id) (struct device *);
        int (*mask_and_set_register) (struct device *, u8, u8, u8, u8);
        int (*event_registers_startup_state_get) (struct device *, u8 *);
        int (*startup_irq_enabled) (struct device *, unsigned int);
+       void (*dump_all_banks) (struct device *);
  };
  
  int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops);
index fc0534483c726daaefb0cd5e50116b142a17a4dc,fa7173dd71f20bf88e889acafc200c8a6334d599..9db0bda446a0794a9460178e248162727556e79b
@@@ -24,7 -24,7 +24,7 @@@ enum ab8500_version 
        AB8500_VERSION_AB8500 = 0x0,
        AB8500_VERSION_AB8505 = 0x1,
        AB8500_VERSION_AB9540 = 0x2,
 -      AB8500_VERSION_AB8540 = 0x3,
 +      AB8500_VERSION_AB8540 = 0x4,
        AB8500_VERSION_UNDEFINED,
  };
  
@@@ -32,7 -32,6 +32,7 @@@
  #define AB8500_CUTEARLY       0x00
  #define AB8500_CUT1P0 0x10
  #define AB8500_CUT1P1 0x11
 +#define AB8500_CUT1P2 0x12 /* Only valid for AB8540 */
  #define AB8500_CUT2P0 0x20
  #define AB8500_CUT3P0 0x30
  #define AB8500_CUT3P3 0x33
@@@ -40,7 -39,6 +40,7 @@@
  /*
   * AB8500 bank addresses
   */
 +#define AB8500_M_FSM_RANK     0x0
  #define AB8500_SYS_CTRL1_BLOCK        0x1
  #define AB8500_SYS_CTRL2_BLOCK        0x2
  #define AB8500_REGU_CTRL1     0x3
@@@ -60,7 -58,6 +60,7 @@@
  #define AB8500_DEVELOPMENT    0x11
  #define AB8500_DEBUG          0x12
  #define AB8500_PROD_TEST      0x13
 +#define AB8500_STE_TEST               0x14
  #define AB8500_OTP_EMUL               0x15
  
  /*
   * Values used to index into array ab8500_irq_regoffset[] defined in
   * drivers/mdf/ab8500-core.c
   */
 -/* Definitions for AB8500 and AB9540 */
 +/* Definitions for AB8500, AB9540 and AB8540 */
  /* ab8500_irq_regoffset[0] -> IT[Source|Latch|Mask]1 */
  #define AB8500_INT_MAIN_EXT_CH_NOT_OK 0 /* not 8505/9540 */
 -#define AB8500_INT_UN_PLUG_TV_DET     1 /* not 8505/9540 */
 -#define AB8500_INT_PLUG_TV_DET                2 /* not 8505/9540 */
 +#define AB8500_INT_UN_PLUG_TV_DET     1 /* not 8505/9540/8540 */
 +#define AB8500_INT_PLUG_TV_DET                2 /* not 8505/9540/8540 */
  #define AB8500_INT_TEMP_WARM          3
  #define AB8500_INT_PON_KEY2DB_F               4
  #define AB8500_INT_PON_KEY2DB_R               5
  #define AB8500_INT_PON_KEY1DB_R               7
  /* ab8500_irq_regoffset[1] -> IT[Source|Latch|Mask]2 */
  #define AB8500_INT_BATT_OVV           8
 -#define AB8500_INT_MAIN_CH_UNPLUG_DET 10 /* not 8505 */
 -#define AB8500_INT_MAIN_CH_PLUG_DET   11 /* not 8505 */
 +#define AB8500_INT_MAIN_CH_UNPLUG_DET 10 /* not 8505/8540 */
 +#define AB8500_INT_MAIN_CH_PLUG_DET   11 /* not 8505/8540 */
  #define AB8500_INT_VBUS_DET_F         14
  #define AB8500_INT_VBUS_DET_R         15
  /* ab8500_irq_regoffset[2] -> IT[Source|Latch|Mask]3 */
  #define AB8500_INT_VBUS_CH_DROP_END   16
  #define AB8500_INT_RTC_60S            17
  #define AB8500_INT_RTC_ALARM          18
 +#define AB8540_INT_BIF_INT            19
  #define AB8500_INT_BAT_CTRL_INDB      20
  #define AB8500_INT_CH_WD_EXP          21
  #define AB8500_INT_VBUS_OVV           22
 -#define AB8500_INT_MAIN_CH_DROP_END   23 /* not 8505/9540 */
 +#define AB8500_INT_MAIN_CH_DROP_END   23 /* not 8505/9540/8540 */
  /* ab8500_irq_regoffset[3] -> IT[Source|Latch|Mask]4 */
  #define AB8500_INT_CCN_CONV_ACC               24
  #define AB8500_INT_INT_AUD            25
  #define AB8500_INT_BUP_CHG_NOT_OK     30
  #define AB8500_INT_BUP_CHG_OK         31
  /* ab8500_irq_regoffset[4] -> IT[Source|Latch|Mask]5 */
 -#define AB8500_INT_GP_HW_ADC_CONV_END 32 /* not 8505 */
 +#define AB8500_INT_GP_HW_ADC_CONV_END 32 /* not 8505/8540 */
  #define AB8500_INT_ACC_DETECT_1DB_F   33
  #define AB8500_INT_ACC_DETECT_1DB_R   34
  #define AB8500_INT_ACC_DETECT_22DB_F  35
  #define AB8500_INT_ACC_DETECT_21DB_R  38
  #define AB8500_INT_GP_SW_ADC_CONV_END 39
  /* ab8500_irq_regoffset[5] -> IT[Source|Latch|Mask]7 */
 -#define AB8500_INT_GPIO6R             40 /* not 8505/9540 */
 -#define AB8500_INT_GPIO7R             41 /* not 8505/9540 */
 -#define AB8500_INT_GPIO8R             42 /* not 8505/9540 */
 -#define AB8500_INT_GPIO9R             43 /* not 8505/9540 */
 -#define AB8500_INT_GPIO10R            44
 -#define AB8500_INT_GPIO11R            45
 -#define AB8500_INT_GPIO12R            46 /* not 8505 */
 -#define AB8500_INT_GPIO13R            47
 +#define AB8500_INT_GPIO6R             40 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO7R             41 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO8R             42 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO9R             43 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO10R            44 /* not 8540 */
 +#define AB8500_INT_GPIO11R            45 /* not 8540 */
 +#define AB8500_INT_GPIO12R            46 /* not 8505/8540 */
 +#define AB8500_INT_GPIO13R            47 /* not 8540 */
  /* ab8500_irq_regoffset[6] -> IT[Source|Latch|Mask]8 */
 -#define AB8500_INT_GPIO24R            48 /* not 8505 */
 -#define AB8500_INT_GPIO25R            49 /* not 8505 */
 -#define AB8500_INT_GPIO36R            50 /* not 8505/9540 */
 -#define AB8500_INT_GPIO37R            51 /* not 8505/9540 */
 -#define AB8500_INT_GPIO38R            52 /* not 8505/9540 */
 -#define AB8500_INT_GPIO39R            53 /* not 8505/9540 */
 -#define AB8500_INT_GPIO40R            54
 -#define AB8500_INT_GPIO41R            55
 +#define AB8500_INT_GPIO24R            48 /* not 8505/8540 */
 +#define AB8500_INT_GPIO25R            49 /* not 8505/8540 */
 +#define AB8500_INT_GPIO36R            50 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO37R            51 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO38R            52 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO39R            53 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO40R            54 /* not 8540 */
 +#define AB8500_INT_GPIO41R            55 /* not 8540 */
  /* ab8500_irq_regoffset[7] -> IT[Source|Latch|Mask]9 */
  #define AB8500_INT_GPIO6F             56 /* not 8505/9540 */
  #define AB8500_INT_GPIO7F             57 /* not 8505/9540 */
  #define AB8500_INT_GPIO12F            62 /* not 8505 */
  #define AB8500_INT_GPIO13F            63
  /* ab8500_irq_regoffset[8] -> IT[Source|Latch|Mask]10 */
 -#define AB8500_INT_GPIO24F            64 /* not 8505 */
 -#define AB8500_INT_GPIO25F            65 /* not 8505 */
 -#define AB8500_INT_GPIO36F            66 /* not 8505/9540 */
 -#define AB8500_INT_GPIO37F            67 /* not 8505/9540 */
 -#define AB8500_INT_GPIO38F            68 /* not 8505/9540 */
 -#define AB8500_INT_GPIO39F            69 /* not 8505/9540 */
 -#define AB8500_INT_GPIO40F            70
 -#define AB8500_INT_GPIO41F            71
 +#define AB8500_INT_GPIO24F            64 /* not 8505/8540 */
 +#define AB8500_INT_GPIO25F            65 /* not 8505/8540 */
 +#define AB8500_INT_GPIO36F            66 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO37F            67 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO38F            68 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO39F            69 /* not 8505/9540/8540 */
 +#define AB8500_INT_GPIO40F            70 /* not 8540 */
 +#define AB8500_INT_GPIO41F            71 /* not 8540 */
  /* ab8500_irq_regoffset[9] -> IT[Source|Latch|Mask]12 */
  #define AB8500_INT_ADP_SOURCE_ERROR   72
  #define AB8500_INT_ADP_SINK_ERROR     73
  #define AB8500_INT_SRP_DETECT         88
  #define AB8500_INT_USB_CHARGER_NOT_OKR        89
  #define AB8500_INT_ID_WAKEUP_R                90
 +#define AB8500_INT_ID_DET_PLUGR         91 /* 8505/9540 cut2.0 */
  #define AB8500_INT_ID_DET_R1R         92
  #define AB8500_INT_ID_DET_R2R         93
  #define AB8500_INT_ID_DET_R3R         94
  #define AB8500_INT_ID_DET_R4R         95
  /* ab8500_irq_regoffset[12] -> IT[Source|Latch|Mask]21 */
 -#define AB8500_INT_ID_WAKEUP_F                96
 -#define AB8500_INT_ID_DET_R1F         98
 -#define AB8500_INT_ID_DET_R2F         99
 -#define AB8500_INT_ID_DET_R3F         100
 -#define AB8500_INT_ID_DET_R4F         101
 -#define AB8500_INT_CHAUTORESTARTAFTSEC  102
 +#define AB8500_INT_ID_WAKEUP_F                96 /* not 8505/9540 */
 +#define AB8500_INT_ID_DET_PLUGF               97 /* 8505/9540 cut2.0 */
 +#define AB8500_INT_ID_DET_R1F         98 /* not 8505/9540 */
 +#define AB8500_INT_ID_DET_R2F         99 /* not 8505/9540 */
 +#define AB8500_INT_ID_DET_R3F         100 /* not 8505/9540 */
 +#define AB8500_INT_ID_DET_R4F         101 /* not 8505/9540 */
 +#define AB8500_INT_CHAUTORESTARTAFTSEC        102 /* not 8505/9540 */
  #define AB8500_INT_CHSTOPBYSEC                103
  /* ab8500_irq_regoffset[13] -> IT[Source|Latch|Mask]22 */
  #define AB8500_INT_USB_CH_TH_PROT_F   104
 -#define AB8500_INT_USB_CH_TH_PROT_R    105
 +#define AB8500_INT_USB_CH_TH_PROT_R   105
  #define AB8500_INT_MAIN_CH_TH_PROT_F  106 /* not 8505/9540 */
  #define AB8500_INT_MAIN_CH_TH_PROT_R  107 /* not 8505/9540 */
  #define AB8500_INT_CHCURLIMNOHSCHIRP  109
  #define AB8500_INT_CHCURLIMHSCHIRP    110
  #define AB8500_INT_XTAL32K_KO         111
  
 -/* Definitions for AB9540 */
 +/* Definitions for AB9540 / AB8505 */
  /* ab8500_irq_regoffset[14] -> IT[Source|Latch|Mask]13 */
 -#define AB9540_INT_GPIO50R            113
 -#define AB9540_INT_GPIO51R            114 /* not 8505 */
 -#define AB9540_INT_GPIO52R            115
 -#define AB9540_INT_GPIO53R            116
 -#define AB9540_INT_GPIO54R            117 /* not 8505 */
 +#define AB9540_INT_GPIO50R            113 /* not 8540 */
 +#define AB9540_INT_GPIO51R            114 /* not 8505/8540 */
 +#define AB9540_INT_GPIO52R            115 /* not 8540 */
 +#define AB9540_INT_GPIO53R            116 /* not 8540 */
 +#define AB9540_INT_GPIO54R            117 /* not 8505/8540 */
  #define AB9540_INT_IEXT_CH_RF_BFN_R   118
 -#define AB9540_INT_IEXT_CH_RF_BFN_F   119
  /* ab8500_irq_regoffset[15] -> IT[Source|Latch|Mask]14 */
 -#define AB9540_INT_GPIO50F            121
 -#define AB9540_INT_GPIO51F            122 /* not 8505 */
 -#define AB9540_INT_GPIO52F            123
 -#define AB9540_INT_GPIO53F            124
 -#define AB9540_INT_GPIO54F            125 /* not 8505 */
 +#define AB9540_INT_GPIO50F            121 /* not 8540 */
 +#define AB9540_INT_GPIO51F            122 /* not 8505/8540 */
 +#define AB9540_INT_GPIO52F            123 /* not 8540 */
 +#define AB9540_INT_GPIO53F            124 /* not 8540 */
 +#define AB9540_INT_GPIO54F            125 /* not 8505/8540 */
 +#define AB9540_INT_IEXT_CH_RF_BFN_F   126
  /* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */
  #define AB8505_INT_KEYSTUCK           128
  #define AB8505_INT_IKR                        129
  #define AB8505_INT_KEYDEGLITCH                132
  #define AB8505_INT_MODPWRSTATUSF      134
  #define AB8505_INT_MODPWRSTATUSR      135
 +/* ab8500_irq_regoffset[17] -> IT[Source|Latch|Mask]6 */
 +#define AB8500_INT_HOOK_DET_NEG_F     138
 +#define AB8500_INT_HOOK_DET_NEG_R     139
 +#define AB8500_INT_HOOK_DET_POS_F     140
 +#define AB8500_INT_HOOK_DET_POS_R     141
 +#define AB8500_INT_PLUG_DET_COMP_F    142
 +#define AB8500_INT_PLUG_DET_COMP_R    143
 +/* ab8500_irq_regoffset[18] -> IT[Source|Latch|Mask]23 */
 +#define AB8505_INT_COLL                       144
 +#define AB8505_INT_RESERR             145
 +#define AB8505_INT_FRAERR             146
 +#define AB8505_INT_COMERR             147
 +#define AB8505_INT_SPDSET             148
 +#define AB8505_INT_DSENT              149
 +#define AB8505_INT_DREC                       150
 +#define AB8505_INT_ACC_INT            151
 +/* ab8500_irq_regoffset[19] -> IT[Source|Latch|Mask]24 */
 +#define AB8505_INT_NOPINT             152
 +/* ab8540_irq_regoffset[20] -> IT[Source|Latch|Mask]26 */
 +#define AB8540_INT_IDPLUGDETCOMPF     160
 +#define AB8540_INT_IDPLUGDETCOMPR     161
 +#define AB8540_INT_FMDETCOMPLOF               162
 +#define AB8540_INT_FMDETCOMPLOR               163
 +#define AB8540_INT_FMDETCOMPHIF               164
 +#define AB8540_INT_FMDETCOMPHIR               165
 +#define AB8540_INT_ID5VDETCOMPF               166
 +#define AB8540_INT_ID5VDETCOMPR               167
 +/* ab8540_irq_regoffset[21] -> IT[Source|Latch|Mask]27 */
 +#define AB8540_INT_GPIO43F            168
 +#define AB8540_INT_GPIO43R            169
 +#define AB8540_INT_GPIO44F            170
 +#define AB8540_INT_GPIO44R            171
 +#define AB8540_INT_KEYPOSDETCOMPF     172
 +#define AB8540_INT_KEYPOSDETCOMPR     173
 +#define AB8540_INT_KEYNEGDETCOMPF     174
 +#define AB8540_INT_KEYNEGDETCOMPR     175
 +/* ab8540_irq_regoffset[22] -> IT[Source|Latch|Mask]28 */
 +#define AB8540_INT_GPIO1VBATF         176
 +#define AB8540_INT_GPIO1VBATR         177
 +#define AB8540_INT_GPIO2VBATF         178
 +#define AB8540_INT_GPIO2VBATR         179
 +#define AB8540_INT_GPIO3VBATF         180
 +#define AB8540_INT_GPIO3VBATR         181
 +#define AB8540_INT_GPIO4VBATF         182
 +#define AB8540_INT_GPIO4VBATR         183
 +/* ab8540_irq_regoffset[23] -> IT[Source|Latch|Mask]29 */
 +#define AB8540_INT_SYSCLKREQ2F                184
 +#define AB8540_INT_SYSCLKREQ2R                185
 +#define AB8540_INT_SYSCLKREQ3F                186
 +#define AB8540_INT_SYSCLKREQ3R                187
 +#define AB8540_INT_SYSCLKREQ4F                188
 +#define AB8540_INT_SYSCLKREQ4R                189
 +#define AB8540_INT_SYSCLKREQ5F                190
 +#define AB8540_INT_SYSCLKREQ5R                191
 +/* ab8540_irq_regoffset[24] -> IT[Source|Latch|Mask]30 */
 +#define AB8540_INT_PWMOUT1F           192
 +#define AB8540_INT_PWMOUT1R           193
 +#define AB8540_INT_PWMCTRL0F          194
 +#define AB8540_INT_PWMCTRL0R          195
 +#define AB8540_INT_PWMCTRL1F          196
 +#define AB8540_INT_PWMCTRL1R          197
 +#define AB8540_INT_SYSCLKREQ6F                198
 +#define AB8540_INT_SYSCLKREQ6R                199
 +/* ab8540_irq_regoffset[25] -> IT[Source|Latch|Mask]31 */
 +#define AB8540_INT_PWMEXTVIBRA1F      200
 +#define AB8540_INT_PWMEXTVIBRA1R      201
 +#define AB8540_INT_PWMEXTVIBRA2F      202
 +#define AB8540_INT_PWMEXTVIBRA2R      203
 +#define AB8540_INT_PWMOUT2F           204
 +#define AB8540_INT_PWMOUT2R           205
 +#define AB8540_INT_PWMOUT3F           206
 +#define AB8540_INT_PWMOUT3R           207
 +/* ab8540_irq_regoffset[26] -> IT[Source|Latch|Mask]32 */
 +#define AB8540_INT_ADDATA2F           208
 +#define AB8540_INT_ADDATA2R           209
 +#define AB8540_INT_DADATA2F           210
 +#define AB8540_INT_DADATA2R           211
 +#define AB8540_INT_FSYNC2F            212
 +#define AB8540_INT_FSYNC2R            213
 +#define AB8540_INT_BITCLK2F           214
 +#define AB8540_INT_BITCLK2R           215
  
  /*
   * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the
   * which is larger.
   */
  #define AB8500_NR_IRQS                        112
 -#define AB8505_NR_IRQS                        136
 -#define AB9540_NR_IRQS                        136
 +#define AB8505_NR_IRQS                        153
 +#define AB9540_NR_IRQS                        153
 +#define AB8540_NR_IRQS                        216
  /* This is set to the roof of any AB8500 chip variant IRQ counts */
 -#define AB8500_MAX_NR_IRQS            AB9540_NR_IRQS
 +#define AB8500_MAX_NR_IRQS            AB8540_NR_IRQS
  
  #define AB8500_NUM_IRQ_REGS           14
 -#define AB9540_NUM_IRQ_REGS           17
 +#define AB9540_NUM_IRQ_REGS           20
 +#define AB8540_NUM_IRQ_REGS           27
 +
 +/* Turn On Status Event */
 +#define AB8500_POR_ON_VBAT            0x01
 +#define AB8500_POW_KEY_1_ON           0x02
 +#define AB8500_POW_KEY_2_ON           0x04
 +#define AB8500_RTC_ALARM              0x08
 +#define AB8500_MAIN_CH_DET            0x10
 +#define AB8500_VBUS_DET                       0x20
 +#define AB8500_USB_ID_DET             0x40
  
  /**
   * struct ab8500 - ab8500 internal structure
@@@ -368,10 -270,12 +368,12 @@@ struct regulator_reg_init
  struct regulator_init_data;
  struct ab8500_gpio_platform_data;
  struct ab8500_codec_platform_data;
+ struct ab8500_sysctrl_platform_data;
  
  /**
   * struct ab8500_platform_data - AB8500 platform data
   * @irq_base: start of AB8500 IRQs, AB8500_NR_IRQS will be used
+  * @pm_power_off: Should machine pm power off hook be registered or not
   * @init: board-specific initialization after detection of ab8500
   * @num_regulator_reg_init: number of regulator init registers
   * @regulator_reg_init: regulator init registers
   */
  struct ab8500_platform_data {
        int irq_base;
+       bool pm_power_off;
        void (*init) (struct ab8500 *);
        int num_regulator_reg_init;
        struct ab8500_regulator_reg_init *regulator_reg_init;
        int num_regulator;
        struct regulator_init_data *regulator;
 -      struct ab8500_gpio_platform_data *gpio;
 +      struct abx500_gpio_platform_data *gpio;
        struct ab8500_codec_platform_data *codec;
+       struct ab8500_sysctrl_platform_data *sysctrl;
  };
  
  extern int ab8500_init(struct ab8500 *ab8500,
@@@ -433,79 -339,18 +437,87 @@@ static inline int is_ab8500_2p0_or_earl
        return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0));
  }
  
 +static inline int is_ab8500_3p3_or_earlier(struct ab8500 *ab)
 +{
 +      return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT3P3));
 +}
 +
  /* exclude also ab8505, ab9540... */
  static inline int is_ab8500_2p0(struct ab8500 *ab)
  {
        return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0));
  }
  
 +static inline int is_ab8505_1p0_or_earlier(struct ab8500 *ab)
 +{
 +      return (is_ab8505(ab) && (ab->chip_id <= AB8500_CUT1P0));
 +}
 +
 +static inline int is_ab8505_2p0(struct ab8500 *ab)
 +{
 +      return (is_ab8505(ab) && (ab->chip_id == AB8500_CUT2P0));
 +}
 +
 +static inline int is_ab9540_1p0_or_earlier(struct ab8500 *ab)
 +{
 +      return (is_ab9540(ab) && (ab->chip_id <= AB8500_CUT1P0));
 +}
 +
 +static inline int is_ab9540_2p0(struct ab8500 *ab)
 +{
 +      return (is_ab9540(ab) && (ab->chip_id == AB8500_CUT2P0));
 +}
 +
 +/*
 + * Be careful, the marketing name for this chip is 2.1
 + * but the value read from the chip is 3.0 (0x30)
 + */
 +static inline int is_ab9540_3p0(struct ab8500 *ab)
 +{
 +      return (is_ab9540(ab) && (ab->chip_id == AB8500_CUT3P0));
 +}
 +
 +static inline int is_ab8540_1p0_or_earlier(struct ab8500 *ab)
 +{
 +      return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P0);
 +}
 +
 +static inline int is_ab8540_1p1_or_earlier(struct ab8500 *ab)
 +{
 +      return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P1);
 +}
 +
 +static inline int is_ab8540_1p2_or_earlier(struct ab8500 *ab)
 +{
 +      return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P2);
 +}
 +
 +static inline int is_ab8540_2p0_or_earlier(struct ab8500 *ab)
 +{
 +      return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT2P0);
 +}
 +
 +static inline int is_ab8540_2p0(struct ab8500 *ab)
 +{
 +      return is_ab8540(ab) && (ab->chip_id == AB8500_CUT2P0);
 +}
 +
 +static inline int is_ab8505_2p0_earlier(struct ab8500 *ab)
 +{
 +      return (is_ab8505(ab) && (ab->chip_id < AB8500_CUT2P0));
 +}
 +
 +static inline int is_ab9540_2p0_or_earlier(struct ab8500 *ab)
 +{
 +      return (is_ab9540(ab) && (ab->chip_id < AB8500_CUT2P0));
 +}
 +
+ #ifdef CONFIG_AB8500_DEBUG
+ void ab8500_dump_all_banks(struct device *dev);
+ void ab8500_debug_register_interrupt(int line);
+ #else
+ static inline void ab8500_dump_all_banks(struct device *dev) {}
+ static inline void ab8500_debug_register_interrupt(int line) {}
+ #endif
  #endif /* MFD_AB8500_H */
index 96d64f2b8d781393b5566bf1bacf2a6a6b669e09,37894d6a4f6f28b45749968b332eaa65677c444b..455c51d22d6b43e5dd4ccb932021dfcea36182a0
  #define ARIZONA_DMIC_MICBIAS2 2
  #define ARIZONA_DMIC_MICBIAS3 3
  
+ #define ARIZONA_MAX_MICBIAS 3
  #define ARIZONA_INMODE_DIFF 0
  #define ARIZONA_INMODE_SE   1
  #define ARIZONA_INMODE_DMIC 2
  
  #define ARIZONA_MAX_OUTPUT 6
  
 +#define ARIZONA_MAX_AIF 3
 +
  #define ARIZONA_HAP_ACT_ERM 0
  #define ARIZONA_HAP_ACT_LRA 2
  
  
  struct regulator_init_data;
  
+ struct arizona_micbias {
+       int mV;                    /** Regulated voltage */
+       unsigned int ext_cap:1;    /** External capacitor fitted */
+       unsigned int discharge:1;  /** Actively discharge */
+       unsigned int fast_start:1; /** Enable aggressive startup ramp rate */
+ };
  struct arizona_micd_config {
        unsigned int src;
        unsigned int bias;
@@@ -98,37 -105,9 +107,37 @@@ struct arizona_pdata 
        /** Pin state for GPIO pins */
        int gpio_defaults[ARIZONA_MAX_GPIO];
  
 +      /**
 +       * Maximum number of channels clocks will be generated for,
 +       * useful for systems where and I2S bus with multiple data
 +       * lines is mastered.
 +       */
 +      int max_channels_clocked[ARIZONA_MAX_AIF];
 +
 +      /** GPIO5 is used for jack detection */
 +      bool jd_gpio5;
 +
 +      /** Use the headphone detect circuit to identify the accessory */
 +      bool hpdet_acc_id;
 +
 +      /** GPIO used for mic isolation with HPDET */
 +      int hpdet_id_gpio;
 +
        /** GPIO for mic detection polarity */
        int micd_pol_gpio;
  
 +      /** Mic detect ramp rate */
 +      int micd_bias_start_time;
 +
 +      /** Mic detect sample rate */
 +      int micd_rate;
 +
 +      /** Mic detect debounce level */
 +      int micd_dbtime;
 +
 +      /** Force MICBIAS on for mic detect */
 +      bool micd_force_micbias;
 +
        /** Headset polarity configurations */
        struct arizona_micd_config *micd_configs;
        int num_micd_configs;
        /** Reference voltage for DMIC inputs */
        int dmic_ref[ARIZONA_MAX_INPUT];
  
+       /** MICBIAS configurations */
+       struct arizona_micbias micbias[ARIZONA_MAX_MICBIAS];
        /** Mode of input structures */
        int inmode[ARIZONA_MAX_INPUT];
  
index 188d89abd9637c64e39234183e501e7c2bb22f99,718126084ad1653a27fba4644470a432073f1eec..3403551360696b3f9900a8a4b1e5bc59bd17a672
  #define ARIZONA_ACCESSORY_DETECT_MODE_1          0x293
  #define ARIZONA_HEADPHONE_DETECT_1               0x29B
  #define ARIZONA_HEADPHONE_DETECT_2               0x29C
 +#define ARIZONA_HP_DACVAL                      0x29F
 +#define ARIZONA_MICD_CLAMP_CONTROL               0x2A2
  #define ARIZONA_MIC_DETECT_1                     0x2A3
  #define ARIZONA_MIC_DETECT_2                     0x2A4
  #define ARIZONA_MIC_DETECT_3                     0x2A5
  #define ARIZONA_DSP1_STATUS_1                    0x1104
  #define ARIZONA_DSP1_STATUS_2                    0x1105
  #define ARIZONA_DSP1_STATUS_3                    0x1106
+ #define ARIZONA_DSP1_SCRATCH_0                   0x1140
+ #define ARIZONA_DSP1_SCRATCH_1                   0x1141
+ #define ARIZONA_DSP1_SCRATCH_2                   0x1142
+ #define ARIZONA_DSP1_SCRATCH_3                   0x1143
  #define ARIZONA_DSP2_CONTROL_1                   0x1200
  #define ARIZONA_DSP2_CLOCKING_1                  0x1201
  #define ARIZONA_DSP2_STATUS_1                    0x1204
  #define ARIZONA_DSP2_STATUS_2                    0x1205
+ #define ARIZONA_DSP2_SCRATCH_0                   0x1240
+ #define ARIZONA_DSP2_SCRATCH_1                   0x1241
+ #define ARIZONA_DSP2_SCRATCH_2                   0x1242
+ #define ARIZONA_DSP2_SCRATCH_3                   0x1243
  #define ARIZONA_DSP3_CONTROL_1                   0x1300
  #define ARIZONA_DSP3_CLOCKING_1                  0x1301
  #define ARIZONA_DSP3_STATUS_1                    0x1304
  #define ARIZONA_DSP3_STATUS_2                    0x1305
+ #define ARIZONA_DSP3_SCRATCH_0                   0x1340
+ #define ARIZONA_DSP3_SCRATCH_1                   0x1341
+ #define ARIZONA_DSP3_SCRATCH_2                   0x1342
+ #define ARIZONA_DSP3_SCRATCH_3                   0x1343
  #define ARIZONA_DSP4_CONTROL_1                   0x1400
  #define ARIZONA_DSP4_CLOCKING_1                  0x1401
  #define ARIZONA_DSP4_STATUS_1                    0x1404
  #define ARIZONA_DSP4_STATUS_2                    0x1405
+ #define ARIZONA_DSP4_SCRATCH_0                   0x1440
+ #define ARIZONA_DSP4_SCRATCH_1                   0x1441
+ #define ARIZONA_DSP4_SCRATCH_2                   0x1442
+ #define ARIZONA_DSP4_SCRATCH_3                   0x1443
  
  /*
   * Field Definitions.
  /*
   * R64 (0x40) - Wake control
   */
 +#define ARIZONA_WKUP_MICD_CLAMP_FALL             0x0080  /* WKUP_MICD_CLAMP_FALL */
 +#define ARIZONA_WKUP_MICD_CLAMP_FALL_MASK        0x0080  /* WKUP_MICD_CLAMP_FALL */
 +#define ARIZONA_WKUP_MICD_CLAMP_FALL_SHIFT            7  /* WKUP_MICD_CLAMP_FALL */
 +#define ARIZONA_WKUP_MICD_CLAMP_FALL_WIDTH            1  /* WKUP_MICD_CLAMP_FALL */
 +#define ARIZONA_WKUP_MICD_CLAMP_RISE             0x0040  /* WKUP_MICD_CLAMP_RISE */
 +#define ARIZONA_WKUP_MICD_CLAMP_RISE_MASK        0x0040  /* WKUP_MICD_CLAMP_RISE */
 +#define ARIZONA_WKUP_MICD_CLAMP_RISE_SHIFT            6  /* WKUP_MICD_CLAMP_RISE */
 +#define ARIZONA_WKUP_MICD_CLAMP_RISE_WIDTH            1  /* WKUP_MICD_CLAMP_RISE */
  #define ARIZONA_WKUP_GP5_FALL                    0x0020  /* WKUP_GP5_FALL */
  #define ARIZONA_WKUP_GP5_FALL_MASK               0x0020  /* WKUP_GP5_FALL */
  #define ARIZONA_WKUP_GP5_FALL_SHIFT                   5  /* WKUP_GP5_FALL */
  /*
   * R667 (0x29B) - Headphone Detect 1
   */
 +#define ARIZONA_HP_IMPEDANCE_RANGE_MASK          0x0600  /* HP_IMPEDANCE_RANGE - [10:9] */
 +#define ARIZONA_HP_IMPEDANCE_RANGE_SHIFT              9  /* HP_IMPEDANCE_RANGE - [10:9] */
 +#define ARIZONA_HP_IMPEDANCE_RANGE_WIDTH              2  /* HP_IMPEDANCE_RANGE - [10:9] */
  #define ARIZONA_HP_STEP_SIZE                     0x0100  /* HP_STEP_SIZE */
  #define ARIZONA_HP_STEP_SIZE_MASK                0x0100  /* HP_STEP_SIZE */
  #define ARIZONA_HP_STEP_SIZE_SHIFT                    8  /* HP_STEP_SIZE */
  #define ARIZONA_HP_LVL_SHIFT                          0  /* HP_LVL - [6:0] */
  #define ARIZONA_HP_LVL_WIDTH                          7  /* HP_LVL - [6:0] */
  
 +#define ARIZONA_HP_DONE_B                        0x8000  /* HP_DONE */
 +#define ARIZONA_HP_DONE_B_MASK                   0x8000  /* HP_DONE */
 +#define ARIZONA_HP_DONE_B_SHIFT                      15  /* HP_DONE */
 +#define ARIZONA_HP_DONE_B_WIDTH                       1  /* HP_DONE */
 +#define ARIZONA_HP_LVL_B_MASK                    0x7FFF  /* HP_LVL - [14:0] */
 +#define ARIZONA_HP_LVL_B_SHIFT                        0  /* HP_LVL - [14:0] */
 +#define ARIZONA_HP_LVL_B_WIDTH                       15  /* HP_LVL - [14:0] */
 +
 +/*
 + * R674 (0x2A2) - MICD clamp control
 + */
 +#define ARIZONA_MICD_CLAMP_MODE_MASK             0x000F  /* MICD_CLAMP_MODE - [3:0] */
 +#define ARIZONA_MICD_CLAMP_MODE_SHIFT                 0  /* MICD_CLAMP_MODE - [3:0] */
 +#define ARIZONA_MICD_CLAMP_MODE_WIDTH                 4  /* MICD_CLAMP_MODE - [3:0] */
 +
  /*
   * R675 (0x2A3) - Mic Detect 1
   */
  /*
   * R3408 (0xD50) - AOD wkup and trig
   */
 +#define ARIZONA_MICD_CLAMP_FALL_TRIG_STS         0x0080  /* MICD_CLAMP_FALL_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_FALL_TRIG_STS_MASK    0x0080  /* MICD_CLAMP_FALL_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_FALL_TRIG_STS_SHIFT        7  /* MICD_CLAMP_FALL_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_FALL_TRIG_STS_WIDTH        1  /* MICD_CLAMP_FALL_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_RISE_TRIG_STS         0x0040  /* MICD_CLAMP_RISE_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_RISE_TRIG_STS_MASK    0x0040  /* MICD_CLAMP_RISE_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_RISE_TRIG_STS_SHIFT        6  /* MICD_CLAMP_RISE_TRIG_STS */
 +#define ARIZONA_MICD_CLAMP_RISE_TRIG_STS_WIDTH        1  /* MICD_CLAMP_RISE_TRIG_STS */
  #define ARIZONA_GP5_FALL_TRIG_STS                0x0020  /* GP5_FALL_TRIG_STS */
  #define ARIZONA_GP5_FALL_TRIG_STS_MASK           0x0020  /* GP5_FALL_TRIG_STS */
  #define ARIZONA_GP5_FALL_TRIG_STS_SHIFT               5  /* GP5_FALL_TRIG_STS */
  /*
   * R3409 (0xD51) - AOD IRQ1
   */
 +#define ARIZONA_MICD_CLAMP_FALL_EINT1            0x0080  /* MICD_CLAMP_FALL_EINT1 */
 +#define ARIZONA_MICD_CLAMP_FALL_EINT1_MASK       0x0080  /* MICD_CLAMP_FALL_EINT1 */
 +#define ARIZONA_MICD_CLAMP_FALL_EINT1_SHIFT           7  /* MICD_CLAMP_FALL_EINT1 */
 +#define ARIZONA_MICD_CLAMP_RISE_EINT1            0x0040  /* MICD_CLAMP_RISE_EINT1 */
 +#define ARIZONA_MICD_CLAMP_RISE_EINT1_MASK       0x0040  /* MICD_CLAMP_RISE_EINT1 */
 +#define ARIZONA_MICD_CLAMP_RISE_EINT1_SHIFT           6  /* MICD_CLAMP_RISE_EINT1 */
  #define ARIZONA_GP5_FALL_EINT1                   0x0020  /* GP5_FALL_EINT1 */
  #define ARIZONA_GP5_FALL_EINT1_MASK              0x0020  /* GP5_FALL_EINT1 */
  #define ARIZONA_GP5_FALL_EINT1_SHIFT                  5  /* GP5_FALL_EINT1 */
  /*
   * R3410 (0xD52) - AOD IRQ2
   */
 +#define ARIZONA_MICD_CLAMP_FALL_EINT2            0x0080  /* MICD_CLAMP_FALL_EINT2 */
 +#define ARIZONA_MICD_CLAMP_FALL_EINT2_MASK       0x0080  /* MICD_CLAMP_FALL_EINT2 */
 +#define ARIZONA_MICD_CLAMP_FALL_EINT2_SHIFT           7  /* MICD_CLAMP_FALL_EINT2 */
 +#define ARIZONA_MICD_CLAMP_RISE_EINT2            0x0040  /* MICD_CLAMP_RISE_EINT2 */
 +#define ARIZONA_MICD_CLAMP_RISE_EINT2_MASK       0x0040  /* MICD_CLAMP_RISE_EINT2 */
 +#define ARIZONA_MICD_CLAMP_RISE_EINT2_SHIFT           6  /* MICD_CLAMP_RISE_EINT2 */
  #define ARIZONA_GP5_FALL_EINT2                   0x0020  /* GP5_FALL_EINT2 */
  #define ARIZONA_GP5_FALL_EINT2_MASK              0x0020  /* GP5_FALL_EINT2 */
  #define ARIZONA_GP5_FALL_EINT2_SHIFT                  5  /* GP5_FALL_EINT2 */
  /*
   * R3413 (0xD55) - AOD IRQ Raw Status
   */
 +#define ARIZONA_MICD_CLAMP_STS                   0x0008  /* MICD_CLAMP_STS */
 +#define ARIZONA_MICD_CLAMP_STS_MASK              0x0008  /* MICD_CLAMP_STS */
 +#define ARIZONA_MICD_CLAMP_STS_SHIFT                  3  /* MICD_CLAMP_STS */
 +#define ARIZONA_MICD_CLAMP_STS_WIDTH                  1  /* MICD_CLAMP_STS */
  #define ARIZONA_GP5_STS                          0x0004  /* GP5_STS */
  #define ARIZONA_GP5_STS_MASK                     0x0004  /* GP5_STS */
  #define ARIZONA_GP5_STS_SHIFT                         2  /* GP5_STS */
  /*
   * R3414 (0xD56) - Jack detect debounce
   */
 +#define ARIZONA_MICD_CLAMP_DB                    0x0008  /* MICD_CLAMP_DB */
 +#define ARIZONA_MICD_CLAMP_DB_MASK               0x0008  /* MICD_CLAMP_DB */
 +#define ARIZONA_MICD_CLAMP_DB_SHIFT                   3  /* MICD_CLAMP_DB */
 +#define ARIZONA_MICD_CLAMP_DB_WIDTH                   1  /* MICD_CLAMP_DB */
  #define ARIZONA_JD2_DB                           0x0002  /* JD2_DB */
  #define ARIZONA_JD2_DB_MASK                      0x0002  /* JD2_DB */
  #define ARIZONA_JD2_DB_SHIFT                          1  /* JD2_DB */
index f8bac7cfc25fea58be8a3a47d05fffc4da22f8e4,c6e0608a21b5880a75231848f887cac512f7abb7..3abcca91eecdbe86dd3f98f8dc21f3989a88260e
  #include <linux/notifier.h>
  #include <linux/err.h>
  
 +/* Offset for the firmware version within the TCPM */
 +#define DB8500_PRCMU_FW_VERSION_OFFSET 0xA4
 +#define DBX540_PRCMU_FW_VERSION_OFFSET 0xA8
 +
  /* PRCMU Wakeup defines */
  enum prcmu_wakeup_index {
        PRCMU_WAKEUP_INDEX_RTC,
@@@ -150,6 -146,18 +150,18 @@@ enum prcmu_clock 
        PRCMU_DSI2ESCCLK,
  };
  
+ /**
+  * enum prcmu_wdog_id - PRCMU watchdog IDs
+  * @PRCMU_WDOG_ALL: use all timers
+  * @PRCMU_WDOG_CPU1: use first CPU timer only
+  * @PRCMU_WDOG_CPU2: use second CPU timer conly
+  */
+ enum prcmu_wdog_id {
+       PRCMU_WDOG_ALL = 0x00,
+       PRCMU_WDOG_CPU1 = 0x01,
+       PRCMU_WDOG_CPU2 = 0x02,
+ };
  /**
   * enum ape_opp - APE OPP states definition
   * @APE_OPP_INIT:
@@@ -218,52 -226,12 +230,52 @@@ enum ddr_pwrst 
        DDR_PWR_STATE_OFFHIGHLAT    = 0x03
  };
  
 +#define DB8500_PRCMU_LEGACY_OFFSET            0xDD4
 +
 +struct prcmu_pdata
 +{
 +      bool enable_set_ddr_opp;
 +      bool enable_ape_opp_100_voltage;
 +      struct ab8500_platform_data *ab_platdata;
 +      u32 version_offset;
 +      u32 legacy_offset;
 +      u32 adt_offset;
 +};
 +
 +#define PRCMU_FW_PROJECT_U8500                2
 +#define PRCMU_FW_PROJECT_U8400                3
 +#define PRCMU_FW_PROJECT_U9500                4 /* Customer specific */
 +#define PRCMU_FW_PROJECT_U8500_MBB    5
 +#define PRCMU_FW_PROJECT_U8500_C1     6
 +#define PRCMU_FW_PROJECT_U8500_C2     7
 +#define PRCMU_FW_PROJECT_U8500_C3     8
 +#define PRCMU_FW_PROJECT_U8500_C4     9
 +#define PRCMU_FW_PROJECT_U9500_MBL    10
 +#define PRCMU_FW_PROJECT_U8500_MBL    11 /* Customer specific */
 +#define PRCMU_FW_PROJECT_U8500_MBL2   12 /* Customer specific */
 +#define PRCMU_FW_PROJECT_U8520                13
 +#define PRCMU_FW_PROJECT_U8420                14
 +#define PRCMU_FW_PROJECT_A9420                20
 +/* [32..63] 9540 and derivatives */
 +#define PRCMU_FW_PROJECT_U9540                32
 +/* [64..95] 8540 and derivatives */
 +#define PRCMU_FW_PROJECT_L8540                64
 +/* [96..126] 8580 and derivatives */
 +#define PRCMU_FW_PROJECT_L8580                96
 +
 +#define PRCMU_FW_PROJECT_NAME_LEN     20
 +struct prcmu_fw_version {
 +      u32 project; /* Notice, project shifted with 8 on ux540 */
 +      u8 api_version;
 +      u8 func_version;
 +      u8 errata;
 +      char project_name[PRCMU_FW_PROJECT_NAME_LEN];
 +};
 +
  #include <linux/mfd/db8500-prcmu.h>
  
  #if defined(CONFIG_UX500_SOC_DB8500)
  
 -#include <mach/id.h>
 -
  static inline void __init prcmu_early_init(void)
  {
        return db8500_prcmu_early_init();
@@@ -670,6 -638,85 +682,6 @@@ static inline void prcmu_clear(unsigne
        prcmu_write_masked(reg, bits, 0);
  }
  
 -#if defined(CONFIG_UX500_SOC_DB8500)
 -
 -/**
 - * prcmu_enable_spi2 - Enables pin muxing for SPI2 on OtherAlternateC1.
 - */
 -static inline void prcmu_enable_spi2(void)
 -{
 -      if (cpu_is_u8500())
 -              prcmu_set(DB8500_PRCM_GPIOCR, DB8500_PRCM_GPIOCR_SPI2_SELECT);
 -}
 -
 -/**
 - * prcmu_disable_spi2 - Disables pin muxing for SPI2 on OtherAlternateC1.
 - */
 -static inline void prcmu_disable_spi2(void)
 -{
 -      if (cpu_is_u8500())
 -              prcmu_clear(DB8500_PRCM_GPIOCR, DB8500_PRCM_GPIOCR_SPI2_SELECT);
 -}
 -
 -/**
 - * prcmu_enable_stm_mod_uart - Enables pin muxing for STMMOD
 - * and UARTMOD on OtherAlternateC3.
 - */
 -static inline void prcmu_enable_stm_mod_uart(void)
 -{
 -      if (cpu_is_u8500()) {
 -              prcmu_set(DB8500_PRCM_GPIOCR,
 -                      (DB8500_PRCM_GPIOCR_DBG_STM_MOD_CMD1 |
 -                       DB8500_PRCM_GPIOCR_DBG_UARTMOD_CMD0));
 -      }
 -}
 -
 -/**
 - * prcmu_disable_stm_mod_uart - Disables pin muxing for STMMOD
 - * and UARTMOD on OtherAlternateC3.
 - */
 -static inline void prcmu_disable_stm_mod_uart(void)
 -{
 -      if (cpu_is_u8500()) {
 -              prcmu_clear(DB8500_PRCM_GPIOCR,
 -                      (DB8500_PRCM_GPIOCR_DBG_STM_MOD_CMD1 |
 -                       DB8500_PRCM_GPIOCR_DBG_UARTMOD_CMD0));
 -      }
 -}
 -
 -/**
 - * prcmu_enable_stm_ape - Enables pin muxing for STM APE on OtherAlternateC1.
 - */
 -static inline void prcmu_enable_stm_ape(void)
 -{
 -      if (cpu_is_u8500()) {
 -              prcmu_set(DB8500_PRCM_GPIOCR,
 -                      DB8500_PRCM_GPIOCR_DBG_STM_APE_CMD);
 -      }
 -}
 -
 -/**
 - * prcmu_disable_stm_ape - Disables pin muxing for STM APE on OtherAlternateC1.
 - */
 -static inline void prcmu_disable_stm_ape(void)
 -{
 -      if (cpu_is_u8500()) {
 -              prcmu_clear(DB8500_PRCM_GPIOCR,
 -                      DB8500_PRCM_GPIOCR_DBG_STM_APE_CMD);
 -      }
 -}
 -
 -#else
 -
 -static inline void prcmu_enable_spi2(void) {}
 -static inline void prcmu_disable_spi2(void) {}
 -static inline void prcmu_enable_stm_mod_uart(void) {}
 -static inline void prcmu_disable_stm_mod_uart(void) {}
 -static inline void prcmu_enable_stm_ape(void) {}
 -static inline void prcmu_disable_stm_ape(void) {}
 -
 -#endif
 -
  /* PRCMU QoS APE OPP class */
  #define PRCMU_QOS_APE_OPP 1
  #define PRCMU_QOS_DDR_OPP 2