Latest commit 1a41741 Oct 27, 2016 @vireshk vireshk committed with lag-linaro mfd: wm8994-core: Don't use managed regulator bulk get API
The kernel WARNs and then crashes today if wm8994_device_init() fails
after calling devm_regulator_bulk_get().

That happens because there are multiple devices involved here and the
order in which managed resources are freed isn't correct.

The regulators are added as children of wm8994->dev.  Whereas,
devm_regulator_bulk_get() receives wm8994->dev as the device, though it
gets the same regulators which were added as children of wm8994->dev
earlier.

During failures, the children are removed first and the core eventually
calls regulator_unregister() for them. As regulator_put() was never done
for them (opposite of devm_regulator_bulk_get()), the kernel WARNs at

	WARN_ON(rdev->open_count);

And eventually it crashes from debugfs_remove_recursive().

--------x------------------x----------------

 wm8994 3-001a: Device is not a WM8994, ID is 0
 ------------[ cut here ]------------
 WARNING: CPU: 0 PID: 1 at /mnt/ssd/all/work/repos/devel/linux/drivers/regulator/core.c:4072 regulator_unregister+0xc8/0xd0
 Modules linked in:
 CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.8.0-rc6-00154-g54fe84cbd50b #41
 Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
 [<c010e24c>] (unwind_backtrace) from [<c010af38>] (show_stack+0x10/0x14)
 [<c010af38>] (show_stack) from [<c032a1c4>] (dump_stack+0x88/0x9c)
 [<c032a1c4>] (dump_stack) from [<c011a98c>] (__warn+0xe8/0x100)
 [<c011a98c>] (__warn) from [<c011aa54>] (warn_slowpath_null+0x20/0x28)
 [<c011aa54>] (warn_slowpath_null) from [<c0384a0c>] (regulator_unregister+0xc8/0xd0)
 [<c0384a0c>] (regulator_unregister) from [<c0406434>] (release_nodes+0x16c/0x1dc)
 [<c0406434>] (release_nodes) from [<c04039c4>] (__device_release_driver+0x8c/0x110)
 [<c04039c4>] (__device_release_driver) from [<c0403a64>] (device_release_driver+0x1c/0x28)
 [<c0403a64>] (device_release_driver) from [<c0402b24>] (bus_remove_device+0xd8/0x104)
 [<c0402b24>] (bus_remove_device) from [<c03ffcd8>] (device_del+0x10c/0x218)
 [<c03ffcd8>] (device_del) from [<c0404e4c>] (platform_device_del+0x1c/0x88)
 [<c0404e4c>] (platform_device_del) from [<c0404ec4>] (platform_device_unregister+0xc/0x20)
 [<c0404ec4>] (platform_device_unregister) from [<c0428bc0>] (mfd_remove_devices_fn+0x5c/0x64)
 [<c0428bc0>] (mfd_remove_devices_fn) from [<c03ff9d8>] (device_for_each_child_reverse+0x4c/0x78)
 [<c03ff9d8>] (device_for_each_child_reverse) from [<c04288c4>] (mfd_remove_devices+0x20/0x30)
 [<c04288c4>] (mfd_remove_devices) from [<c042758c>] (wm8994_device_init+0x2ac/0x7f0)
 [<c042758c>] (wm8994_device_init) from [<c04f14a8>] (i2c_device_probe+0x178/0x1fc)
 [<c04f14a8>] (i2c_device_probe) from [<c04036fc>] (driver_probe_device+0x214/0x2c0)
 [<c04036fc>] (driver_probe_device) from [<c0403854>] (__driver_attach+0xac/0xb0)
 [<c0403854>] (__driver_attach) from [<c0401a74>] (bus_for_each_dev+0x68/0x9c)
 [<c0401a74>] (bus_for_each_dev) from [<c0402cf0>] (bus_add_driver+0x1a0/0x218)
 [<c0402cf0>] (bus_add_driver) from [<c040406c>] (driver_register+0x78/0xf8)
 [<c040406c>] (driver_register) from [<c04f20a0>] (i2c_register_driver+0x34/0x84)
 [<c04f20a0>] (i2c_register_driver) from [<c01017d0>] (do_one_initcall+0x40/0x170)
 [<c01017d0>] (do_one_initcall) from [<c0a00dbc>] (kernel_init_freeable+0x15c/0x1fc)
 [<c0a00dbc>] (kernel_init_freeable) from [<c06e07b0>] (kernel_init+0x8/0x114)
 [<c06e07b0>] (kernel_init) from [<c0107978>] (ret_from_fork+0x14/0x3c)
 ---[ end trace 0919d3d0bc998260 ]---

 [snip..]

 Unable to handle kernel NULL pointer dereference at virtual address 00000078
 pgd = c0004000
 [00000078] *pgd=00000000
 Internal error: Oops: 5 [#1] PREEMPT SMP ARM
 Modules linked in:
 CPU: 0 PID: 1 Comm: swapper/0 Tainted: G        W       4.8.0-rc6-00154-g54fe84cbd50b #41
 Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
 task: ee874000 task.stack: ee878000
 PC is at down_write+0x14/0x54
 LR is at debugfs_remove_recursive+0x30/0x150

 [snip..]

 [<c06e489c>] (down_write) from [<c02e9954>] (debugfs_remove_recursive+0x30/0x150)
 [<c02e9954>] (debugfs_remove_recursive) from [<c0382b78>] (_regulator_put+0x24/0xac)
 [<c0382b78>] (_regulator_put) from [<c0382c1c>] (regulator_put+0x1c/0x2c)
 [<c0382c1c>] (regulator_put) from [<c0406434>] (release_nodes+0x16c/0x1dc)
 [<c0406434>] (release_nodes) from [<c04035d4>] (driver_probe_device+0xec/0x2c0)
 [<c04035d4>] (driver_probe_device) from [<c0403854>] (__driver_attach+0xac/0xb0)
 [<c0403854>] (__driver_attach) from [<c0401a74>] (bus_for_each_dev+0x68/0x9c)
 [<c0401a74>] (bus_for_each_dev) from [<c0402cf0>] (bus_add_driver+0x1a0/0x218)
 [<c0402cf0>] (bus_add_driver) from [<c040406c>] (driver_register+0x78/0xf8)
 [<c040406c>] (driver_register) from [<c04f20a0>] (i2c_register_driver+0x34/0x84)
 [<c04f20a0>] (i2c_register_driver) from [<c01017d0>] (do_one_initcall+0x40/0x170)
 [<c01017d0>] (do_one_initcall) from [<c0a00dbc>] (kernel_init_freeable+0x15c/0x1fc)
 [<c0a00dbc>] (kernel_init_freeable) from [<c06e07b0>] (kernel_init+0x8/0x114)
 [<c06e07b0>] (kernel_init) from [<c0107978>] (ret_from_fork+0x14/0x3c)
 Code: e1a04000 f590f000 e3a03001 e34f3fff (e1902f9f)
 ---[ end trace 0919d3d0bc998262 ]---

--------x------------------x----------------

Fix the kernel warnings and crashes by using regulator_bulk_get()
instead of devm_regulator_bulk_get() and explicitly freeing the supplies
in exit paths.

Tested on Exynos 5250, dual core ARM A15 machine.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Permalink
..
Failed to load latest commit information.
88pm800.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
88pm805.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
88pm80x.c mfd: Use to_i2c_client() instead of open-coding it Jan 14, 2016
88pm860x-core.c mfd: 88pm860x-core: Fix commenting and declaration spacing Jan 14, 2016
88pm860x-i2c.c mfd: 88pm860x-i2c: Fix variable length array Sparse warning Sep 26, 2014
Kconfig Merge tag 'mfd-for-linus-4.9' of git://git.kernel.org/pub/scm/linux/k… Oct 7, 2016
Makefile Merge tag 'mfd-for-linus-4.9' of git://git.kernel.org/pub/scm/linux/k… Oct 7, 2016
aat2870-core.c mfd: aat2870-core: Remove unnecessary 'out of memory' message Jan 14, 2016
ab3100-core.c mfd: ab3100-core.c: Fix multiple warnings reported by Checkpatch Jan 14, 2016
ab3100-otp.c mfd: ab2100-otp: Remove pointless 'out of memory' error message Jan 14, 2016
ab8500-core.c mfd: db8500 stop passing around platform data Jul 12, 2016
ab8500-debugfs.c mfd: ab8500-debugfs: Remove 'weak' function suspend_test_wake_cause_i… Oct 4, 2016
ab8500-gpadc.c mfd: ab8500-gpadc: Squash a whole bunch of Checkpatch warnings and on… Jan 14, 2016
ab8500-sysctrl.c mfd: db8500 stop passing around platform data Jul 12, 2016
abx500-core.c mfd: abx500-core: Remove unused function abx500_dump_all_banks() Jun 3, 2014
ac100.c mfd: ac100: Add driver for X-Powers AC100 audio codec / RTC combo IC Aug 8, 2016
act8945a.c mfd: act8945a: Add .of_compatible for act8945a-charger Oct 4, 2016
adp5520.c mfd: adp5520: Some trivial 'no space before tab' fixes Jan 14, 2016
altera-a10sr.c mfd: altera-a10sr: Make it explicitly non-modular Oct 4, 2016
arizona-core.c mfd: arizona: Handle probe deferral for reset GPIO Oct 4, 2016
arizona-i2c.c mfd: arizona-i2c: Add blank line formatting after declaration Jan 14, 2016
arizona-irq.c mfd: arizona: Check if AOD interrupts are pending before dispatching Jun 29, 2016
arizona-spi.c mfd: arizona: Support Cirrus Logic CS47L24 and WM1831 Dec 4, 2015
arizona.h mfd: arizona: Support Cirrus Logic CS47L24 and WM1831 Dec 4, 2015
as3711.c mfd: as3711: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
as3722.c mfd: as3722: Use devm_mfd_add_devices and devm_regmap_add_irq_chip May 9, 2016
asic3.c mfd: asic3: Use gpiochip data pointer Apr 19, 2016
atmel-flexcom.c mfd: atmel-flexcom: Add a driver for Atmel Flexible Serial Communicat… Oct 30, 2015
atmel-hlcdc.c mfd: atmel-hlcdc: Do not sleep in atomic context Oct 4, 2016
axp20x-i2c.c mfd: axp20x: Split the driver into core and i2c bits Feb 12, 2016
axp20x-rsb.c mfd: axp20x: Add support for AXP806 PMIC Sep 13, 2016
axp20x.c mfd: axp20x: Add AXP209 GPIO support Oct 4, 2016
bcm590xx.c mfd: bcm590xx: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
cros_ec.c mfd: cros_ec: Add MKBP event support Aug 31, 2016
cros_ec_i2c.c mfd: cros_ec_i2c: Fix trivial 'tabs before spaces' whitespace issue. Jan 14, 2016
cros_ec_spi.c mfd: cros_ec_spi: Remove unused variable 'request' Oct 4, 2016
cs47l24-tables.c mfd: cs47l24: Fix defaults array based on testing Mar 16, 2016
cs5535-mfd.c mfd: cs5535-mfd: Add missing line spacing and make local array static Jan 14, 2016
da903x.c mfd: da903x: Fix white space and split string issues Jan 14, 2016
da9052-core.c mfd: da9053: Ensure the FAULT_LOG is cleared during MFD driver probe Oct 4, 2016
da9052-i2c.c mfd: da9052-i2c: Fix tabbing/whitespace issue Jan 14, 2016
da9052-irq.c mfd: da9052-irq: Fix trivial 'space before comma' error Jan 14, 2016
da9052-spi.c Merge tag 'mfd-for-linus-4.4' of git://git.kernel.org/pub/scm/linux/k… Nov 6, 2015
da9055-core.c mfd: Constify regmap and irq configuration data Jun 22, 2015
da9055-i2c.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
da9062-core.c mfd: da9062: Fix missing volatile registers in the core regmap_range … Mar 16, 2016
da9063-core.c mfd: da9063: Update author information to remove incorrect e-mail add… Oct 4, 2016
da9063-i2c.c mfd: da9063: Update author information to remove incorrect e-mail add… Oct 4, 2016
da9063-irq.c mfd: da9063: Update author information to remove incorrect e-mail add… Oct 4, 2016
da9150-core.c mfd: da9150: Use DEFINE_RES_IRQ_NAMED() help macro for IRQ resource Oct 13, 2015
davinci_voicecodec.c mfd: davinci_voicecodec: Remove pointless 'out of memory' error message Jan 14, 2016
db8500-prcmu.c mfd: db8500-prcmu: Remove unused *prcmu_set_ddr_opp() calls Oct 4, 2016
dbx500-prcmu-regs.h mfd: dbx500: Remove any mention of the BML8580CLK Sep 26, 2013
dln2.c mfd: dln2: Use msecs_to_jiffies for time conversion Mar 26, 2015
dm355evm_msp.c mfd: dm355evm_msp: Refactoring for add_child() Oct 4, 2016
exynos-lpass.c mfd: exynos-lpass: Mark PM functions as __maybe_unused Oct 4, 2016
ezx-pcap.c Merge remote-tracking branches 'spi/topic/omap-100k', 'spi/topic/omap… Nov 4, 2015
fsl-imx25-tsadc.c mfd: fsl-imx25-tsadc: Register touchscreen ADC driver Feb 11, 2016
hi6421-pmic-core.c mfd: hi6421-pmic: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
hi655x-pmic.c mfd: hi655x: Fix return value check in hi655x_pmic_probe() Jun 29, 2016
htc-i2cpld.c mfd: htc-i2cpld: Use gpiochip data pointer Apr 19, 2016
htc-pasic3.c mfd: Constify struct mfd_cell where possible Jan 6, 2014
intel-lpss-acpi.c mfd: intel-lpss: Add default I2C device properties for Apollo Lake Oct 4, 2016
intel-lpss-pci.c mfd: lpss: Fix Intel Kaby Lake PCH-H properties Nov 16, 2016
intel-lpss.c mfd: intel-lpss: Do not put device in reset state on suspend Nov 16, 2016
intel-lpss.h device property: don't bother the drivers with struct property_set Apr 9, 2016
intel_msic.c mfd: intel_msic: Make it explicitly non-modular Oct 4, 2016
intel_quark_i2c_gpio.c Merge tag 'mfd-for-linus-4.7' of git://git.kernel.org/pub/scm/linux/k… May 20, 2016
intel_soc_pmic_bxtwc.c mfd: intel_soc_pmic_bxtwc: Fix usbc interrupt Nov 16, 2016
intel_soc_pmic_core.c mfd: intel_soc_pmic_core: Terminate panel control GPIO lookup table c… May 9, 2016
intel_soc_pmic_core.h mfd: Constify regmap and irq configuration data Jun 22, 2015
intel_soc_pmic_crc.c mfd: intel_soc_pmic_crc: Add PWM cell device for Crystalcove PMIC Jul 21, 2015
ipaq-micro.c mfd: ipaq-micro: Use __maybe_unused to hide pm functions Mar 16, 2016
janz-cmodio.c can: janz-ican3: add support for CAL/CANopen firmware May 6, 2015
jz4740-adc.c genirq: Remove irq argument from irq flow handlers Sep 16, 2015
kempld-core.c mfd: Add support for COMe-cSL6 and COMe-mAL10 to Kontron PLD driver Jun 29, 2016
lm3533-core.c mfd: lm3533: Fix unused variable build warning Oct 30, 2015
lm3533-ctrlbank.c mfd: Use SI-units for the lm3533 max-current interface May 20, 2012
lp3943.c mfd: lp3943: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
lp873x.c mfd: lp873x: Remove unused mutex lock from struct lp873x Oct 4, 2016
lp8788-irq.c mfd: lp8788-irq: Uninitialized variable in irq handler Apr 11, 2016
lp8788.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
lpc_ich.c mfd: lpc_ich: Do not create iTCO watchdog when WDAT table exists Sep 28, 2016
lpc_sch.c mfd: lpc_sch: Enable WDT for Intel Quark X1000 Jan 22, 2015
max14577.c mfd: max14577: Change Krzysztof Kozlowski's email to kernel.org Oct 4, 2016
max77620.c Merge tag 'mfd-for-linus-4.8' of git://git.kernel.org/pub/scm/linux/k… Aug 1, 2016
max77686.c mfd: max77686: Use devm_mfd_add_devices and devm_regmap_add_irq_chip May 9, 2016
max77693.c mfd: max77686/max77693: Fix misspelled Samsung address Apr 19, 2016
max77843.c mfd: max77843: Make it explicitly non-modular Jun 29, 2016
max8907.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
max8925-core.c mfd: Kill off set_irq_flags usage Aug 11, 2015
max8925-i2c.c mfd: max8925-i2c: Make it explicitly non-modular Jun 29, 2016
max8997-irq.c mfd: max8997-irq: 'inline' should be at the beginning of the declaration Oct 4, 2016
max8997.c mfd: max8997: Make it explicitly non-modular Jun 29, 2016
max8998-irq.c mfd: max899x: Avoid redundant irq_data lookup Aug 11, 2015
max8998.c mfd: max8998: Make it explicitly non-modular Jun 29, 2016
mc13xxx-core.c mfd: mc13xxx-core: Use of_property_read_bool() Dec 4, 2015
mc13xxx-i2c.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
mc13xxx-spi.c spi: Drop owner assignment from spi_drivers Oct 28, 2015
mc13xxx.h mfd: mc13xxx: Use regmap irq framework for interrupts Jul 9, 2014
mcp-core.c mfd: mcp-core: Fix 'blank line after declarations' warning Jul 22, 2014
mcp-sa11x0.c mfd: drop owner assignment from platform_drivers Oct 20, 2014
menelaus.c gpio: Include linux/gpio.h instead of asm/gpio.h Feb 15, 2016
menf21bmc.c mfd: menf21bmc: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
mfd-core.c mfd: core: Fix device reference leak in mfd_clone_cell Nov 16, 2016
mt6397-core.c mfd: mt6397: IRQ domain should initialize before mfd_add_devices() May 9, 2016
omap-usb-host.c mfd: omap-usb-host: Return value is not 'const int' Oct 4, 2016
omap-usb-tll.c mfd: omap-usb-tll: Include omap-usb.h Jun 29, 2016
omap-usb.h mfd: omap-usb-tll: Move configuration code to omap_tll_init() Apr 9, 2013
palmas.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
pcf50633-adc.c mfd: Delete non-required instances of include <linux/init.h> Mar 19, 2014
pcf50633-core.c mfd: pcf50633: Constify struct regmap_config Jan 22, 2015
pcf50633-gpio.c mfd: Include linux/mfd/pcf50633/pmic.h in pcf50633-gpio.c Mar 6, 2012
pcf50633-irq.c mfd: pcf50633: Remove unneded ret variable Oct 30, 2015
pm8921-core.c mfd: pm8921: Add support for pm8018 Aug 31, 2016
qcom-spmi-pmic.c mfd: qcom-spmi-pmic: Don't access non-existing registers Jan 11, 2016
qcom_rpm.c mfd: qcom_rpm: Handle message RAM clock Oct 4, 2016
rc5t583-irq.c mfd: rc5t583: Use devm_mfd_add_devices and devm_request_threaded_irq May 9, 2016
rc5t583.c mfd: rc5t583: Use devm_mfd_add_devices and devm_request_threaded_irq May 9, 2016
rdc321x-southbridge.c mfd: rdc321x: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
retu-mfd.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
rk808.c mfd: rk808: Add RK818 support Aug 31, 2016
rn5t618.c mfd: rn5t618: Register restart handler Jun 29, 2016
rt5033.c mfd: rt5033: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
rtl8411.c mfd: rtsx: Using pcr_dbg replace dev_dbg Mar 3, 2015
rts5209.c mfd: rtsx: Simplify function return logic Oct 30, 2015
rts5227.c mfd: rtsx: Add support for rts522A Oct 30, 2015
rts5229.c mfd: rtsx: Simplify function return logic Oct 30, 2015
rts5249.c mfd: rtsx: Simplify function return logic Oct 30, 2015
rtsx_pcr.c mfd: avoid newly introduced compiler warning Nov 6, 2015
rtsx_pcr.h mfd: rtsx: Add support for rts522A Oct 30, 2015
rtsx_usb.c mfd: rtsx_usb: Avoid setting ucr->current_sg.status Oct 4, 2016
sec-core.c mfd: sec: Use devm_mfd_add_devices and devm_regmap_add_irq_chip May 9, 2016
sec-irq.c mfd: sec: Use devm_mfd_add_devices and devm_regmap_add_irq_chip May 9, 2016
si476x-cmd.c mfd: si476x-cmd: Remedy checkpatch style complains Jul 25, 2014
si476x-i2c.c mfd: si476x-i2c: Fix spelling mistake "comptible" -> "compatible" Jun 29, 2016
si476x-prop.c mfd: si476x: Add chip properties handling code Apr 19, 2013
sky81452.c mfd: sky81452: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
sm501.c mfd: sm501: Constify gpio_chip structures Oct 4, 2016
smsc-ece1099.c mfd: smsc-ece1099: Make it explicitly non-modular Oct 4, 2016
ssbi.c mfd: drop owner assignment from platform_drivers Oct 20, 2014
sta2x11-mfd.c mfd: sta2x11: Use platform_register/unregister_drivers() Jan 11, 2016
stmpe-i2c.c mfd: Add STMPE1600 support Aug 10, 2016
stmpe-spi.c spi: Drop owner assignment from spi_drivers Oct 28, 2015
stmpe.c mfd: stmpe: Fix RESET regression on STMPE2401 Nov 16, 2016
stmpe.h mfd: Add STMPE1600 support Aug 10, 2016
stw481x.c mfd: stw481x: Use devm_mfd_add_devices() for mfd_device registration Apr 19, 2016
sun6i-prcm.c mfd: sun6i-prcm: Make it explicitly non-modular Oct 4, 2016
syscon.c mfd: syscon: Support native-endian regmaps Nov 25, 2016
t7l66xb.c genirq: Remove irq argument from irq flow handlers Sep 16, 2015
tc3589x.c mfd: Kill off set_irq_flags usage Aug 11, 2015
tc6387xb.c mfd: tc6387xb: prepare/unprepare clocks Nov 25, 2014
tc6393xb.c mfd: tc6393xb: Use gpiochip data pointer Apr 19, 2016
ti_am335x_tscadc.c mfd: ti_am335x_tscadc: Rename regmap_tscadc to regmap Jun 29, 2016
timberdale.c [media] include/media: move platform_data to linux/platform_data/media Nov 17, 2015
timberdale.h [media] mfd: Add timberdale video-in driver to timberdale Dec 29, 2010
tmio_core.c mfd: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required Oct 31, 2011
tps6105x.c mfd: tps6105x: Remove linux/regulator/driver.h include May 9, 2016
tps65010.c mfd: tps65010: Use gpiochip data pointer Apr 19, 2016
tps6507x.c mfd: tps6507: Fix white space warnings reported by checkpatch Jun 29, 2016
tps65086.c mfd: tps65086: Add driver for the TPS65086 PMIC Mar 16, 2016
tps65090.c mfd: tps65090: Set regmap config reg counts properly Mar 16, 2016
tps65217.c mfd: tps65217: Fix nonstandard declaration Oct 4, 2016
tps65218.c mfd: tps65218: add version check to the PMIC probe Aug 10, 2016
tps6586x.c mfd: Kill off set_irq_flags usage Aug 11, 2015
tps65910.c mfd: tps65910: Use devm_mfd_add_devices and devm_regmap_add_irq_chip May 9, 2016
tps65911-comparator.c mfd: drop owner assignment from platform_drivers Oct 20, 2014
tps65912-core.c mfd: tps65912: Add driver for the TPS65912 PMIC Feb 11, 2016
tps65912-i2c.c mfd: tps65912: Add driver for the TPS65912 PMIC Feb 11, 2016
tps65912-spi.c mfd: tps65912: Add driver for the TPS65912 PMIC Feb 11, 2016
tps80031.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
twl-core.c mfd: twl-core: Make it explicitly non-modular Oct 4, 2016
twl-core.h mfd: Move twl-core IRQ allocation into twl[4030|6030]-irq files Mar 22, 2012
twl4030-audio.c mfd: drop owner assignment from platform_drivers Oct 20, 2014
twl4030-irq.c remove lots of IS_ERR_VALUE abuses May 27, 2016
twl4030-power.c mfd: twl4030-power: Remove driver path in file comment May 9, 2016
twl6030-irq.c mfd: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc Aug 11, 2015
twl6040.c mfd: twl6040: Register child device for twl6040-pdmclk Oct 4, 2016
ucb1400_core.c mfd: Use dev_get_platdata() Jul 31, 2013
ucb1x00-assabet.c MFD: ucb1x00-assabet: add support for UCB1x00 GPIO switches Feb 18, 2012
ucb1x00-core.c mfd: ucb1x00: Remove NO_IRQ check Oct 4, 2016
ucb1x00-ts.c MFD: ucb1x00: convert to use genirq Feb 18, 2012
vexpress-sysreg.c mfd: vexpress-sysreg: Switch to gpiochip_add_data() Apr 19, 2016
viperboard.c mfd: Use mfd_add_hotplug_devices() helper Nov 25, 2014
vx855.c mfd: Remove DEFINE_PCI_DEVICE_TABLE macro Jan 21, 2014
wl1273-core.c mfd: wl1273-core: Use devm_mfd_add_devices() for mfd_device registration May 9, 2016
wm5102-tables.c mfd: wm5102: Fix defaults array based on testing Mar 16, 2016
wm5110-tables.c mfd: wm5110: ARIZONA_CLOCK_CONTROL should be volatile May 9, 2016
wm831x-auxadc.c mfd: wm831x-auxadc: Pass the IRQF_ONESHOT flag Jun 22, 2015
wm831x-core.c mfd: wm831x: Fix possible NULL pointer dereference Oct 26, 2015
wm831x-i2c.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
wm831x-irq.c mfd: Kill off set_irq_flags usage Aug 11, 2015
wm831x-otp.c mfd: wm831x: Fix broken wm831x_unique_id_show Jan 11, 2016
wm831x-spi.c spi: Drop owner assignment from spi_drivers Oct 28, 2015
wm8350-core.c mfd: wm8350-core: Pass the IRQF_ONESHOT flag Jun 22, 2015
wm8350-gpio.c mfd: Rename wm8350 static gpio_set_debounce() Sep 6, 2011
wm8350-i2c.c mfd: Drop owner assignment from i2c_drivers Aug 11, 2015
wm8350-irq.c mfd: Kill off set_irq_flags usage Aug 11, 2015
wm8350-regmap.c mfd: Remove custom wm8350 cache implementation Jul 8, 2012
wm8400-core.c mfd: Use IS_ENABLED(CONFIG_FOO) instead of checking FOO || FOO_MODULE May 9, 2016
wm8994-core.c mfd: wm8994-core: Don't use managed regulator bulk get API Nov 25, 2016
wm8994-irq.c mfd: wm8994: Fix NULL pointer exception on missing pdata Aug 11, 2015
wm8994-regmap.c mfd: wm8994-regmap: Constify reg_default tables Aug 11, 2015
wm8994.h mfd: Initialise WM8994 register cache after reading chip ID registers Dec 12, 2011
wm8997-tables.c Merge tag 'sound-4.3-rc1' of git://git.kernel.org/pub/scm/linux/kerne… Sep 4, 2015
wm8998-tables.c mfd: wm8998: Fix defaults array based on testing Mar 16, 2016