]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge tag 'mfd-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 17 Dec 2012 02:55:20 +0000 (18:55 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 17 Dec 2012 02:55:20 +0000 (18:55 -0800)
Pull MFS update from Samuel Ortiz:
 "This is the MFD patch set for the 3.8 merge window.

  We have several new drivers, most of the time coming with their sub
  devices drivers:

   - Austria Microsystem's AS3711
   - Nano River's viperboard
   - TI's TPS80031, AM335x TS/ADC,
   - Realtek's MMC/memstick card reader
   - Nokia's retu

  We also got some notable cleanups and improvements:

   - tps6586x got converted to IRQ domains.
   - tps65910 and tps65090 moved to the regmap IRQ API.
   - STMPE is now Device Tree aware.
   - A general twl6040 and twl-core cleanup, with moves to the regmap
     I/O and IRQ APIs and a conversion to the recently added PWM
     framework.
   - sta2x11 gained regmap support.

  Then the rest is mostly tiny cleanups and fixes, among which we have
  Mark's wm5xxx and wm8xxx patchset."

Far amount of annoying but largely trivial conflicts.  Many due to
__devinit/exit removal, others due to one or two of the new drivers also
having come in through another tree.

* tag 'mfd-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: (119 commits)
  mfd: tps6507x: Convert to devm_kzalloc
  mfd: stmpe: Update DT support for stmpe driver
  mfd: wm5102: Add readback of DSP status 3 register
  mfd: arizona: Log if we fail to create the primary IRQ domain
  mfd: tps80031: MFD_TPS80031 needs to select REGMAP_IRQ
  mfd: tps80031: Add terminating entry for tps80031_id_table
  mfd: sta2x11: Fix potential NULL pointer dereference in __sta2x11_mfd_mask()
  mfd: wm5102: Add tuning for revision B
  mfd: arizona: Defer patch initialistation until after first device boot
  mfd: tps65910: Fix wrong ack_base register
  mfd: tps65910: Remove unused data
  mfd: stmpe: Get rid of irq_invert_polarity
  mfd: ab8500-core: Fix invalid free of devm_ allocated data
  mfd: wm5102: Mark DSP memory regions as volatile
  mfd: wm5102: Correct default for LDO1_CONTROL_2
  mfd: arizona: Register haptics devices
  mfd: wm8994: Make current device behaviour the default
  mfd: tps65090: MFD_TPS65090 needs to select REGMAP_IRQ
  mfd: Fix stmpe.c build when OF is not enabled
  mfd: jz4740-adc: Use devm_kzalloc
  ...

37 files changed:
1  2 
drivers/gpio/Kconfig
drivers/gpio/Makefile
drivers/gpio/gpio-da9052.c
drivers/gpio/gpio-tps6586x.c
drivers/gpio/gpio-twl4030.c
drivers/iio/adc/Kconfig
drivers/iio/adc/Makefile
drivers/mfd/Kconfig
drivers/mfd/Makefile
drivers/mfd/ab8500-core.c
drivers/mfd/arizona-core.c
drivers/mfd/arizona-irq.c
drivers/mfd/da9052-core.c
drivers/mfd/db8500-prcmu.c
drivers/mfd/jz4740-adc.c
drivers/mfd/lpc_ich.c
drivers/mfd/mc13xxx-i2c.c
drivers/mfd/mc13xxx-spi.c
drivers/mfd/sta2x11-mfd.c
drivers/mfd/stmpe-i2c.c
drivers/mfd/stmpe.c
drivers/mfd/tps65090.c
drivers/mfd/tps65217.c
drivers/mfd/tps6586x.c
drivers/mfd/tps65910.c
drivers/mfd/twl-core.c
drivers/mfd/twl4030-irq.c
drivers/mfd/twl4030-madc.c
drivers/mfd/twl4030-power.c
drivers/mfd/wm5102-tables.c
drivers/mfd/wm8994-core.c
drivers/mmc/host/Makefile
drivers/power/da9052-battery.c
include/linux/mfd/arizona/registers.h
include/linux/mfd/da9055/pdata.h
include/linux/mfd/tps65090.h
include/linux/mfd/tps6586x.h

Simple merge
Simple merge
index a05aacd2777aaa92564f520885896b6d3d6c2c99,63f9f5bbc75cd03464ceb46e104b38afb1c37846..29b11e9b6a78600b2d14d61a178d5e1de3fdc2bc
@@@ -185,10 -185,14 +185,14 @@@ static int da9052_gpio_to_irq(struct gp
        struct da9052_gpio *gpio = to_da9052_gpio(gc);
        struct da9052 *da9052 = gpio->da9052;
  
-       return da9052->irq_base + DA9052_IRQ_GPI0 + offset;
+       int irq;
+       irq = regmap_irq_get_virq(da9052->irq_data, DA9052_IRQ_GPI0 + offset);
+       return irq;
  }
  
 -static struct gpio_chip reference_gp __devinitdata = {
 +static struct gpio_chip reference_gp = {
        .label = "da9052-gpio",
        .owner = THIS_MODULE,
        .get = da9052_gpio_get,
index c1b82da56504b1676b1a730007cca934dacc68bf,62e9e1cb3bc12f0f131bc0f621428251e80183f0..29e8e750bd49580acd38f36f748187d8c60566f7
@@@ -80,7 -80,15 +80,15 @@@ static int tps6586x_gpio_output(struct 
                                val, mask);
  }
  
 -static int __devinit tps6586x_gpio_probe(struct platform_device *pdev)
+ static int tps6586x_gpio_to_irq(struct gpio_chip *gc, unsigned offset)
+ {
+       struct tps6586x_gpio *tps6586x_gpio = to_tps6586x_gpio(gc);
+       return tps6586x_irq_get_virq(tps6586x_gpio->parent,
+                               TPS6586X_INT_PLDO_0 + offset);
+ }
 +static int tps6586x_gpio_probe(struct platform_device *pdev)
  {
        struct tps6586x_platform_data *pdata;
        struct tps6586x_gpio *tps6586x_gpio;
index 00329f2fc05beceedb7a4620a41a3a62f5e7267b,88829c3337bfe12f34afb3401c8ee66b9e15c8a1..9572aa137e6f48b49e3ecef578147308fc014159
@@@ -353,9 -352,9 +353,9 @@@ static struct gpio_chip twl_gpiochip = 
  
  /*----------------------------------------------------------------------*/
  
 -static int __devinit gpio_twl4030_pulls(u32 ups, u32 downs)
 +static int gpio_twl4030_pulls(u32 ups, u32 downs)
  {
-       u8              message[6];
+       u8              message[5];
        unsigned        i, gpio_bit;
  
        /* For most pins, a pulldown was enabled by default.
                                REG_GPIOPUPDCTR1, 5);
  }
  
 -static int __devinit gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)
 +static int gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)
  {
-       u8              message[4];
+       u8              message[3];
  
        /* 30 msec of debouncing is always used for MMC card detect,
         * and is optional for everything else.
index 961b8d0a4bacbc3c986d9bdeeb2fc6347632fc22,bb3053739c806c41464a22cb782a36db460152fd..fe822a14d13073917f102a0d6bc82764e7e51d92
@@@ -97,32 -60,18 +97,46 @@@ config LP8788_AD
        help
          Say yes here to build support for TI LP8788 ADC.
  
 +config MAX1363
 +      tristate "Maxim max1363 ADC driver"
 +      depends on I2C
 +      select IIO_TRIGGER
 +      select MAX1363_RING_BUFFER
 +      select IIO_BUFFER
 +      select IIO_KFIFO_BUF
 +      help
 +        Say yes here to build support for many Maxim i2c analog to digital
 +        converters (ADC). (max1361, max1362, max1363, max1364, max1036,
 +        max1037, max1038, max1039, max1136, max1136, max1137, max1138,
 +        max1139, max1236, max1237, max11238, max1239, max11600, max11601,
 +        max11602, max11603, max11604, max11605, max11606, max11607,
 +        max11608, max11609, max11610, max11611, max11612, max11613,
 +        max11614, max11615, max11616, max11617, max11644, max11645,
 +        max11646, max11647) Provides direct access via sysfs and buffered
 +        data via the iio dev interface.
 +
 +config TI_ADC081C
 +      tristate "Texas Instruments ADC081C021/027"
 +      depends on I2C
 +      help
 +        If you say yes here you get support for Texas Instruments ADC081C021
 +        and ADC081C027 ADC chips.
 +
 +        This driver can also be built as a module. If so, the module will be
 +        called ti-adc081c.
 +
+ config TI_AM335X_ADC
+       tristate "TI's ADC driver"
+       depends on MFD_TI_AM335X_TSCADC
+       help
+         Say yes here to build support for Texas Instruments ADC
+         driver which is also a MFD client.
+ config VIPERBOARD_ADC
+       tristate "Viperboard ADC support"
+       depends on MFD_VIPERBOARD && USB
+       help
+         Say yes here to access the ADC part of the Nano River
+         Technologies Viperboard.
  endmenu
index 472fd7cd24174c5e056bd7bcb6907825a923e7f7,4268fa987fe672f35b57bdb5ff30f08e87baab9d..2d5f10080d8d5ca6b4c86b14e85375e6ef0759f6
@@@ -4,13 -4,9 +4,14 @@@
  
  obj-$(CONFIG_AD_SIGMA_DELTA) += ad_sigma_delta.o
  obj-$(CONFIG_AD7266) += ad7266.o
 +obj-$(CONFIG_AD7298) += ad7298.o
  obj-$(CONFIG_AD7476) += ad7476.o
  obj-$(CONFIG_AD7791) += ad7791.o
 +obj-$(CONFIG_AD7793) += ad7793.o
 +obj-$(CONFIG_AD7887) += ad7887.o
  obj-$(CONFIG_AT91_ADC) += at91_adc.o
  obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o
 +obj-$(CONFIG_MAX1363) += max1363.o
 +obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o
 -obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o
+ obj-$(CONFIG_TI_AM335X_ADC) += ti_am335x_adc.o
++obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o
Simple merge
index 69f260ae022507c178a3e205b411b73602285429,f2216dfd963c677cc586aaf80b4bb0df0fa0aa40..8b977f8045ae8f52cbc283838fa1cbfe375809f9
@@@ -141,4 -145,5 +145,6 @@@ obj-$(CONFIG_MFD_RC5T583)  += rc5t583.o 
  obj-$(CONFIG_MFD_SEC_CORE)    += sec-core.o sec-irq.o
  obj-$(CONFIG_MFD_SYSCON)      += syscon.o
  obj-$(CONFIG_MFD_LM3533)      += lm3533-core.o lm3533-ctrlbank.o
 +obj-$(CONFIG_VEXPRESS_CONFIG) += vexpress-config.o vexpress-sysreg.o
+ obj-$(CONFIG_MFD_RETU)                += retu-mfd.o
+ obj-$(CONFIG_MFD_AS3711)      += as3711.o
index 59da1650fb814ea5c688f2c83051734d6bc2e8a7,660a09bf456401cf7f748e5c25c236ad022284bf..e1650badd106da6e3992b219e77fdc35e20ad1c8
@@@ -586,39 -591,7 +586,7 @@@ int ab8500_suspend(struct ab8500 *ab850
                return 0;
  }
  
- /* AB8500 GPIO Resources */
- static struct resource __devinitdata ab8500_gpio_resources[] = {
-       {
-               .name   = "GPIO_INT6",
-               .start  = AB8500_INT_GPIO6R,
-               .end    = AB8500_INT_GPIO41F,
-               .flags  = IORESOURCE_IRQ,
-       }
- };
- /* AB9540 GPIO Resources */
- static struct resource __devinitdata ab9540_gpio_resources[] = {
-       {
-               .name   = "GPIO_INT6",
-               .start  = AB8500_INT_GPIO6R,
-               .end    = AB8500_INT_GPIO41F,
-               .flags  = IORESOURCE_IRQ,
-       },
-       {
-               .name   = "GPIO_INT14",
-               .start  = AB9540_INT_GPIO50R,
-               .end    = AB9540_INT_GPIO54R,
-               .flags  = IORESOURCE_IRQ,
-       },
-       {
-               .name   = "GPIO_INT15",
-               .start  = AB9540_INT_GPIO50F,
-               .end    = AB9540_INT_GPIO54F,
-               .flags  = IORESOURCE_IRQ,
-       }
- };
 -static struct resource __devinitdata ab8500_gpadc_resources[] = {
 +static struct resource ab8500_gpadc_resources[] = {
        {
                .name   = "HW_CONV_END",
                .start  = AB8500_INT_GP_HW_ADC_CONV_END,
@@@ -1095,11 -1050,9 +1065,9 @@@ static struct mfd_cell ab8500_devs[] = 
        },
  };
  
 -static struct mfd_cell __devinitdata ab9540_devs[] = {
 +static struct mfd_cell ab9540_devs[] = {
        {
                .name = "ab8500-gpio",
-               .num_resources = ARRAY_SIZE(ab9540_gpio_resources),
-               .resources = ab9540_gpio_resources,
        },
        {
                .name = "ab9540-usb",
@@@ -1475,20 -1425,9 +1440,9 @@@ static int ab8500_probe(struct platform
                dev_err(ab8500->dev, "error creating sysfs entries\n");
  
        return ret;
- out_freeirq:
-       free_irq(ab8500->irq, ab8500);
- out_freeoldmask:
-       kfree(ab8500->oldmask);
- out_freemask:
-       kfree(ab8500->mask);
- out_free_ab8500:
-       kfree(ab8500);
-       return ret;
  }
  
 -static int __devexit ab8500_remove(struct platform_device *pdev)
 +static int ab8500_remove(struct platform_device *pdev)
  {
        struct ab8500 *ab8500 = platform_get_drvdata(pdev);
  
index c784f4602a746c8d4eec1d8c4383ed4cae0a8df6,f59773da8adfee7292de01e61d007b14e39ee226..bc8a3edb6bbf2b2fdc9c3f15a425eafb0bcb23af
@@@ -412,13 -413,8 +413,10 @@@ int arizona_dev_init(struct arizona *ar
  
        dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A');
  
-       if (ret != 0)
-               dev_err(arizona->dev, "Failed to apply patch: %d\n", ret);
        /* If we have a /RESET GPIO we'll already be reset */
        if (!arizona->pdata.reset) {
 +              regcache_mark_dirty(arizona->regmap);
 +
                ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0);
                if (ret != 0) {
                        dev_err(dev, "Failed to reset device: %d\n", ret);
Simple merge
index 689b747416af7cd92933e4fe261e7f20a398d5db,2153f9bba9ef43177f830c4d6152f490a7b328de..a3c9613f91664e87ae03f4496c3360df74c755ef
@@@ -447,75 -427,7 +427,7 @@@ int da9052_adc_read_temp(struct da9052 
  }
  EXPORT_SYMBOL_GPL(da9052_adc_read_temp);
  
- static struct resource da9052_rtc_resource = {
-       .name = "ALM",
-       .start = DA9052_IRQ_ALARM,
-       .end   = DA9052_IRQ_ALARM,
-       .flags = IORESOURCE_IRQ,
- };
- static struct resource da9052_onkey_resource = {
-       .name = "ONKEY",
-       .start = DA9052_IRQ_NONKEY,
-       .end   = DA9052_IRQ_NONKEY,
-       .flags = IORESOURCE_IRQ,
- };
- static struct resource da9052_bat_resources[] = {
-       {
-               .name = "BATT TEMP",
-               .start = DA9052_IRQ_TBAT,
-               .end   = DA9052_IRQ_TBAT,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name = "DCIN DET",
-               .start = DA9052_IRQ_DCIN,
-               .end   = DA9052_IRQ_DCIN,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name = "DCIN REM",
-               .start = DA9052_IRQ_DCINREM,
-               .end   = DA9052_IRQ_DCINREM,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name = "VBUS DET",
-               .start = DA9052_IRQ_VBUS,
-               .end   = DA9052_IRQ_VBUS,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name = "VBUS REM",
-               .start = DA9052_IRQ_VBUSREM,
-               .end   = DA9052_IRQ_VBUSREM,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name = "CHG END",
-               .start = DA9052_IRQ_CHGEND,
-               .end   = DA9052_IRQ_CHGEND,
-               .flags = IORESOURCE_IRQ,
-       },
- };
- static struct resource da9052_tsi_resources[] = {
-       {
-               .name = "PENDWN",
-               .start = DA9052_IRQ_PENDOWN,
-               .end   = DA9052_IRQ_PENDOWN,
-               .flags = IORESOURCE_IRQ,
-       },
-       {
-               .name = "TSIRDY",
-               .start = DA9052_IRQ_TSIREADY,
-               .end   = DA9052_IRQ_TSIREADY,
-               .flags = IORESOURCE_IRQ,
-       },
- };
 -static struct mfd_cell __devinitdata da9052_subdev_info[] = {
 +static struct mfd_cell da9052_subdev_info[] = {
        {
                .name = "da9052-regulator",
                .id = 1,
Simple merge
Simple merge
Simple merge
Simple merge
index cb32f69d80ba46cb6decc7b72ed506d1f8eba224,afca4f92f0cfd547c439736822f5d95369c24ddb..3032bae20b62ce4460413194d140956ec38be587
@@@ -144,22 -148,21 +148,21 @@@ static int mc13xxx_spi_probe(struct spi
                return ret;
        }
  
-       ret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);
+       if (spi->dev.of_node) {
+               const struct of_device_id *of_id =
+                       of_match_device(mc13xxx_dt_ids, &spi->dev);
  
-       if (ret) {
-               dev_set_drvdata(&spi->dev, NULL);
+               mc13xxx->variant = of_id->data;
        } else {
-               const struct spi_device_id *devid =
-                       spi_get_device_id(spi);
-               if (!devid || devid->driver_data != mc13xxx->ictype)
-                       dev_warn(mc13xxx->dev,
-                               "device id doesn't match auto detection!\n");
+               const struct spi_device_id *id_entry = spi_get_device_id(spi);
+               mc13xxx->variant = (void *)id_entry->driver_data;
        }
  
-       return ret;
+       return mc13xxx_common_init(mc13xxx, pdata, spi->irq);
  }
  
 -static int __devexit mc13xxx_spi_remove(struct spi_device *spi)
 +static int mc13xxx_spi_remove(struct spi_device *spi)
  {
        struct mc13xxx *mc13xxx = dev_get_drvdata(&spi->dev);
  
index d6284cacd27a30e2174bc21ff77e7bef7592423b,009b4b7721eb87ff13125c4205ae4fc476ef20c2..1225dcbcfcfcc6fa9db396e1ea47c43b6a9a85b0
@@@ -69,8 -76,9 +76,9 @@@ static struct sta2x11_mfd *sta2x11_mfd_
        return NULL;
  }
  
 -static int __devinit sta2x11_mfd_add(struct pci_dev *pdev, gfp_t flags)
 +static int sta2x11_mfd_add(struct pci_dev *pdev, gfp_t flags)
  {
+       int i;
        struct sta2x11_mfd *mfd = sta2x11_mfd_find(pdev);
        struct sta2x11_instance *instance;
  
@@@ -305,42 -460,73 +460,73 @@@ enum mfd0_bar1_cells 
                .flags = IORESOURCE_MEM, \
                }
  
 -static const __devinitconst struct resource gpio_resources[] = {
 +static const struct resource gpio_resources[] = {
        {
-               .name = "sta2x11_gpio", /* 4 consecutive cells, 1 driver */
+               /* 4 consecutive cells, 1 driver */
+               .name = STA2X11_MFD_GPIO_NAME,
                .start = 0,
                .end = (4 * 4096) - 1,
                .flags = IORESOURCE_MEM,
        }
  };
 -static const __devinitconst struct resource sctl_resources[] = {
 +static const struct resource sctl_resources[] = {
-       CELL_4K("sta2x11-sctl", STA2X11_SCTL),
+       CELL_4K(STA2X11_MFD_SCTL_NAME, STA2X11_SCTL),
  };
 -static const __devinitconst struct resource scr_resources[] = {
 +static const struct resource scr_resources[] = {
-       CELL_4K("sta2x11-scr", STA2X11_SCR),
+       CELL_4K(STA2X11_MFD_SCR_NAME, STA2X11_SCR),
  };
 -static const __devinitconst struct resource time_resources[] = {
 +static const struct resource time_resources[] = {
-       CELL_4K("sta2x11-time", STA2X11_TIME),
+       CELL_4K(STA2X11_MFD_TIME_NAME, STA2X11_TIME),
  };
  
 -static const __devinitconst struct resource apbreg_resources[] = {
 +static const struct resource apbreg_resources[] = {
-       CELL_4K("sta2x11-apbreg", STA2X11_APBREG),
+       CELL_4K(STA2X11_MFD_APBREG_NAME, STA2X11_APBREG),
  };
  
  #define DEV(_name, _r) \
        { .name = _name, .num_resources = ARRAY_SIZE(_r), .resources = _r, }
  
- static struct mfd_cell sta2x11_mfd_bar0[] = {
-       DEV("sta2x11-gpio", gpio_resources), /* offset 0: we add pdata later */
-       DEV("sta2x11-sctl", sctl_resources),
-       DEV("sta2x11-scr", scr_resources),
-       DEV("sta2x11-time", time_resources),
 -static __devinitdata struct mfd_cell sta2x11_mfd0_bar0[] = {
++static struct mfd_cell sta2x11_mfd0_bar0[] = {
+       /* offset 0: we add pdata later */
+       DEV(STA2X11_MFD_GPIO_NAME, gpio_resources),
+       DEV(STA2X11_MFD_SCTL_NAME, sctl_resources),
+       DEV(STA2X11_MFD_SCR_NAME,  scr_resources),
+       DEV(STA2X11_MFD_TIME_NAME, time_resources),
  };
  
- static struct mfd_cell sta2x11_mfd_bar1[] = {
-       DEV("sta2x11-apbreg", apbreg_resources),
 -static __devinitdata struct mfd_cell sta2x11_mfd0_bar1[] = {
++static struct mfd_cell sta2x11_mfd0_bar1[] = {
+       DEV(STA2X11_MFD_APBREG_NAME, apbreg_resources),
  };
  
+ /* Mfd 1 devices */
+ /* Mfd 1, Bar 0 */
+ enum mfd1_bar0_cells {
+       STA2X11_VIC = 0,
+ };
+ /* Mfd 1, Bar 1 */
+ enum mfd1_bar1_cells {
+       STA2X11_APB_SOC_REGS = 0,
+ };
+ static const __devinitconst struct resource vic_resources[] = {
+       CELL_4K(STA2X11_MFD_VIC_NAME, STA2X11_VIC),
+ };
+ static const __devinitconst struct resource apb_soc_regs_resources[] = {
+       CELL_4K(STA2X11_MFD_APB_SOC_REGS_NAME, STA2X11_APB_SOC_REGS),
+ };
+ static __devinitdata struct mfd_cell sta2x11_mfd1_bar0[] = {
+       DEV(STA2X11_MFD_VIC_NAME, vic_resources),
+ };
+ static __devinitdata struct mfd_cell sta2x11_mfd1_bar1[] = {
+       DEV(STA2X11_MFD_APB_SOC_REGS_NAME, apb_soc_regs_resources),
+ };
  static int sta2x11_mfd_suspend(struct pci_dev *pdev, pm_message_t state)
  {
        pci_save_state(pdev);
@@@ -363,11 -549,63 +549,63 @@@ static int sta2x11_mfd_resume(struct pc
        return 0;
  }
  
 -static void __devinit sta2x11_mfd_setup(struct pci_dev *pdev,
 -                                      struct sta2x11_mfd_setup_data *sd)
+ struct sta2x11_mfd_bar_setup_data {
+       struct mfd_cell *cells;
+       int ncells;
+ };
+ struct sta2x11_mfd_setup_data {
+       struct sta2x11_mfd_bar_setup_data bars[2];
+ };
+ #define STA2X11_MFD0 0
+ #define STA2X11_MFD1 1
+ static struct sta2x11_mfd_setup_data mfd_setup_data[] = {
+       /* Mfd 0: gpio, sctl, scr, timers / apbregs */
+       [STA2X11_MFD0] = {
+               .bars = {
+                       [0] = {
+                               .cells = sta2x11_mfd0_bar0,
+                               .ncells = ARRAY_SIZE(sta2x11_mfd0_bar0),
+                       },
+                       [1] = {
+                               .cells = sta2x11_mfd0_bar1,
+                               .ncells = ARRAY_SIZE(sta2x11_mfd0_bar1),
+                       },
+               },
+       },
+       /* Mfd 1: vic / apb-soc-regs */
+       [STA2X11_MFD1] = {
+               .bars = {
+                       [0] = {
+                               .cells = sta2x11_mfd1_bar0,
+                               .ncells = ARRAY_SIZE(sta2x11_mfd1_bar0),
+                       },
+                       [1] = {
+                               .cells = sta2x11_mfd1_bar1,
+                               .ncells = ARRAY_SIZE(sta2x11_mfd1_bar1),
+                       },
+               },
+       },
+ };
 -static int __devinit sta2x11_mfd_probe(struct pci_dev *pdev,
 -                                     const struct pci_device_id *pci_id)
++static void sta2x11_mfd_setup(struct pci_dev *pdev,
++                            struct sta2x11_mfd_setup_data *sd)
+ {
+       int i, j;
+       for (i = 0; i < ARRAY_SIZE(sd->bars); i++)
+               for (j = 0; j < sd->bars[i].ncells; j++) {
+                       sd->bars[i].cells[j].pdata_size = sizeof(pdev);
+                       sd->bars[i].cells[j].platform_data = &pdev;
+               }
+ }
-                                      const struct pci_device_id *pci_id)
 +static int sta2x11_mfd_probe(struct pci_dev *pdev,
++                           const struct pci_device_id *pci_id)
  {
        int err, i;
-       struct sta2x11_gpio_pdata *gpio_data;
+       struct sta2x11_mfd_setup_data *setup_data;
  
        dev_info(&pdev->dev, "%s\n", __func__);
  
index 36df187780294191469a486019f0a1178469d3f8,c734dc33fbfd160536a041d79a5ef99b52108a73..fd5fcb63068548d57c44ed3cd0d777228fdbcaec
@@@ -82,13 -82,15 +82,15 @@@ static const struct i2c_device_id stmpe
  MODULE_DEVICE_TABLE(i2c, stmpe_id);
  
  static struct i2c_driver stmpe_i2c_driver = {
-       .driver.name    = "stmpe-i2c",
-       .driver.owner   = THIS_MODULE,
+       .driver = {
+               .name = "stmpe-i2c",
+               .owner = THIS_MODULE,
  #ifdef CONFIG_PM
-       .driver.pm      = &stmpe_dev_pm_ops,
+               .pm = &stmpe_dev_pm_ops,
  #endif
+       },
        .probe          = stmpe_i2c_probe,
 -      .remove         = __devexit_p(stmpe_i2c_remove),
 +      .remove         = stmpe_i2c_remove,
        .id_table       = stmpe_i2c_id,
  };
  
Simple merge
Simple merge
Simple merge
index 87ba7ada3bbc8a72392745cdc3400fb541e8056c,c11539a80fc589736a02539d5ab9d468e6a1d513..721b9186a5d1cdeb3679bbd34ba786d5d9e996e8
  #include <linux/slab.h>
  #include <linux/err.h>
  #include <linux/i2c.h>
+ #include <linux/platform_device.h>
  #include <linux/regmap.h>
 -#include <linux/regulator/of_regulator.h>
 -#include <linux/regulator/machine.h>
  
  #include <linux/mfd/core.h>
  #include <linux/mfd/tps6586x.h>
@@@ -96,11 -108,10 +106,13 @@@ static struct mfd_cell tps6586x_cell[] 
        {
                .name = "tps6586x-gpio",
        },
 +      {
 +              .name = "tps6586x-pmic",
 +      },
        {
                .name = "tps6586x-rtc",
+               .num_resources = ARRAY_SIZE(tps6586x_rtc_resources),
+               .resources = &tps6586x_rtc_resources[0],
        },
        {
                .name = "tps6586x-onkey",
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index b648058d718234e7b69dbceabd57df6bf90489fd,8aa592d14c4eac95e18ef61729ca949ad4a02799..e4e218c930bda626b6d9b62a30bcb5792817c458
@@@ -45,10 -45,9 +45,12 @@@ obj-$(CONFIG_MMC_SH_MMCIF)  += sh_mmcif.
  obj-$(CONFIG_MMC_JZ4740)      += jz4740_mmc.o
  obj-$(CONFIG_MMC_VUB300)      += vub300.o
  obj-$(CONFIG_MMC_USHC)                += ushc.o
 +obj-$(CONFIG_MMC_WMT)         += wmt-sdmmc.o
 +
 +obj-$(CONFIG_MMC_REALTEK_PCI) += rtsx_pci_sdmmc.o
  
+ obj-$(CONFIG_MMC_REALTEK_PCI) += rtsx_pci_sdmmc.o
  obj-$(CONFIG_MMC_SDHCI_PLTFM)         += sdhci-pltfm.o
  obj-$(CONFIG_MMC_SDHCI_CNS3XXX)               += sdhci-cns3xxx.o
  obj-$(CONFIG_MMC_SDHCI_ESDHC_IMX)     += sdhci-esdhc-imx.o
index bb0df8917adcc92b70ec40c77700f141e737ba2a,3972dc0fc879b9bda3c66a812352d26d1cba8c4c..3c5c2e459d73c73b5f41493da8d383c74d606b3a
@@@ -576,7 -578,16 +578,16 @@@ static char *da9052_bat_irqs[] = 
        "CHG END",
  };
  
 -static s32 __devinit da9052_bat_probe(struct platform_device *pdev)
+ static int da9052_bat_irq_bits[] = {
+       DA9052_IRQ_TBAT,
+       DA9052_IRQ_DCIN,
+       DA9052_IRQ_DCINREM,
+       DA9052_IRQ_VBUS,
+       DA9052_IRQ_VBUSREM,
+       DA9052_IRQ_CHGEND,
+ };
 +static s32 da9052_bat_probe(struct platform_device *pdev)
  {
        struct da9052_pdata *pdata;
        struct da9052_battery *bat;
@@@ -630,16 -638,14 +638,14 @@@ err
        kfree(bat);
        return ret;
  }
 -static int __devexit da9052_bat_remove(struct platform_device *pdev)
 +static int da9052_bat_remove(struct platform_device *pdev)
  {
        int i;
-       int irq;
        struct da9052_battery *bat = platform_get_drvdata(pdev);
  
-       for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++) {
-               irq = platform_get_irq_byname(pdev, da9052_bat_irqs[i]);
-               free_irq(bat->da9052->irq_base + irq, bat);
-       }
+       for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++)
+               da9052_free_irq(bat->da9052, da9052_bat_irq_bits[i], bat);
        power_supply_unregister(&bat->psy);
        kfree(bat);
  
Simple merge
Simple merge
index 804e280c1e1d9a2a18157b377bfef9f622834cc7,4bbbb1350b91f8fd0f84e775a38a75c5b2328cf9..6694cf43e8b8998d1dce53712472c0eeba5b24b0
  #define __LINUX_MFD_TPS65090_H
  
  #include <linux/irq.h>
+ #include <linux/regmap.h>
+ /* TPS65090 IRQs */
+ enum {
+       TPS65090_IRQ_VAC_STATUS_CHANGE,
+       TPS65090_IRQ_VSYS_STATUS_CHANGE,
+       TPS65090_IRQ_BAT_STATUS_CHANGE,
+       TPS65090_IRQ_CHARGING_STATUS_CHANGE,
+       TPS65090_IRQ_CHARGING_COMPLETE,
+       TPS65090_IRQ_OVERLOAD_DCDC1,
+       TPS65090_IRQ_OVERLOAD_DCDC2,
+       TPS65090_IRQ_OVERLOAD_DCDC3,
+       TPS65090_IRQ_OVERLOAD_FET1,
+       TPS65090_IRQ_OVERLOAD_FET2,
+       TPS65090_IRQ_OVERLOAD_FET3,
+       TPS65090_IRQ_OVERLOAD_FET4,
+       TPS65090_IRQ_OVERLOAD_FET5,
+       TPS65090_IRQ_OVERLOAD_FET6,
+       TPS65090_IRQ_OVERLOAD_FET7,
+ };
  
 +/* TPS65090 Regulator ID */
 +enum {
 +      TPS65090_REGULATOR_DCDC1,
 +      TPS65090_REGULATOR_DCDC2,
 +      TPS65090_REGULATOR_DCDC3,
 +      TPS65090_REGULATOR_FET1,
 +      TPS65090_REGULATOR_FET2,
 +      TPS65090_REGULATOR_FET3,
 +      TPS65090_REGULATOR_FET4,
 +      TPS65090_REGULATOR_FET5,
 +      TPS65090_REGULATOR_FET6,
 +      TPS65090_REGULATOR_FET7,
 +      TPS65090_REGULATOR_LDO1,
 +      TPS65090_REGULATOR_LDO2,
 +
 +      /* Last entry for maximum ID */
 +      TPS65090_REGULATOR_MAX,
 +};
 +
  struct tps65090 {
-       struct mutex            lock;
        struct device           *dev;
-       struct i2c_client       *client;
        struct regmap           *rmap;
-       struct irq_chip         irq_chip;
-       struct mutex            irq_lock;
-       int                     irq_base;
-       unsigned int            id;
- };
- struct tps65090_subdev_info {
-       int             id;
-       const char      *name;
-       void            *platform_data;
+       struct regmap_irq_chip_data *irq_data;
  };
  
 +/*
 + * struct tps65090_regulator_plat_data
 + *
 + * @reg_init_data: The regulator init data.
 + * @enable_ext_control: Enable extrenal control or not. Only available for
 + *     DCDC1, DCDC2 and DCDC3.
 + * @gpio: Gpio number if external control is enabled and controlled through
 + *     gpio.
 + */
 +struct tps65090_regulator_plat_data {
 +      struct regulator_init_data *reg_init_data;
 +      bool enable_ext_control;
 +      int gpio;
 +};
 +
  struct tps65090_platform_data {
        int irq_base;
-       int num_subdevs;
-       struct tps65090_subdev_info *subdevs;
 +      struct tps65090_regulator_plat_data *reg_pdata[TPS65090_REGULATOR_MAX];
  };
  
  /*
Simple merge