linux/drivers/mfd
Viresh Kumar 1a41741fd6 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>
2016-11-25 11:10:55 +00:00
..
88pm80x.c mfd: Use to_i2c_client() instead of open-coding it 2016-01-14 08:43:50 +00:00
88pm800.c
88pm805.c
88pm860x-core.c mfd: 88pm860x-core: Fix commenting and declaration spacing 2016-01-14 08:43:51 +00:00
88pm860x-i2c.c
Kconfig - Core Frameworks 2016-10-07 08:35:35 -07:00
Makefile - Core Frameworks 2016-10-07 08:35:35 -07:00
aat2870-core.c mfd: aat2870-core: Remove unnecessary 'out of memory' message 2016-01-14 08:43:52 +00:00
ab3100-core.c mfd: ab3100-core.c: Fix multiple warnings reported by Checkpatch 2016-01-14 08:43:53 +00:00
ab3100-otp.c mfd: ab2100-otp: Remove pointless 'out of memory' error message 2016-01-14 08:43:53 +00:00
ab8500-core.c mfd: db8500 stop passing around platform data 2016-07-12 11:23:58 +02:00
ab8500-debugfs.c mfd: ab8500-debugfs: Remove 'weak' function suspend_test_wake_cause_interrupt_is_mine() 2016-10-04 15:48:05 +01:00
ab8500-gpadc.c mfd: ab8500-gpadc: Squash a whole bunch of Checkpatch warnings and one error 2016-01-14 08:43:56 +00:00
ab8500-sysctrl.c mfd: db8500 stop passing around platform data 2016-07-12 11:23:58 +02:00
abx500-core.c
ac100.c mfd: ac100: Add driver for X-Powers AC100 audio codec / RTC combo IC 2016-08-08 12:53:26 +01:00
act8945a.c mfd: act8945a: Add .of_compatible for act8945a-charger 2016-10-04 15:48:03 +01:00
adp5520.c mfd: adp5520: Some trivial 'no space before tab' fixes 2016-01-14 08:43:57 +00:00
altera-a10sr.c mfd: altera-a10sr: Make it explicitly non-modular 2016-10-04 15:48:03 +01:00
arizona-core.c mfd: arizona: Handle probe deferral for reset GPIO 2016-10-04 15:48:05 +01:00
arizona-i2c.c mfd: arizona-i2c: Add blank line formatting after declaration 2016-01-14 08:43:58 +00:00
arizona-irq.c mfd: arizona: Check if AOD interrupts are pending before dispatching 2016-06-29 10:14:40 +01:00
arizona-spi.c mfd: arizona: Support Cirrus Logic CS47L24 and WM1831 2015-12-04 08:46:39 +00:00
arizona.h mfd: arizona: Support Cirrus Logic CS47L24 and WM1831 2015-12-04 08:46:39 +00:00
as3711.c mfd: as3711: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:54:50 +01:00
as3722.c mfd: as3722: Use devm_mfd_add_devices and devm_regmap_add_irq_chip 2016-05-09 08:24:46 +01:00
asic3.c mfd: asic3: Use gpiochip data pointer 2016-04-19 07:58:06 +01:00
atmel-flexcom.c mfd: atmel-flexcom: Add a driver for Atmel Flexible Serial Communication Unit 2015-10-30 17:19:49 +00:00
atmel-hlcdc.c mfd: atmel-hlcdc: Do not sleep in atomic context 2016-10-04 15:48:04 +01:00
axp20x-i2c.c mfd: axp20x: Split the driver into core and i2c bits 2016-02-12 08:53:03 +00:00
axp20x-rsb.c mfd: axp20x: Add support for AXP806 PMIC 2016-09-13 14:10:04 +01:00
axp20x.c mfd: axp20x: Add AXP209 GPIO support 2016-10-04 15:48:01 +01:00
bcm590xx.c mfd: bcm590xx: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:55:05 +01:00
cros_ec.c mfd: cros_ec: Add MKBP event support 2016-08-31 10:50:59 +01:00
cros_ec_i2c.c mfd: cros_ec_i2c: Fix trivial 'tabs before spaces' whitespace issue. 2016-01-14 08:44:01 +00:00
cros_ec_spi.c mfd: cros_ec_spi: Remove unused variable 'request' 2016-10-04 15:48:05 +01:00
cs47l24-tables.c mfd: cs47l24: Fix defaults array based on testing 2016-03-16 08:50:22 +00:00
cs5535-mfd.c mfd: cs5535-mfd: Add missing line spacing and make local array static 2016-01-14 08:44:02 +00:00
da903x.c mfd: da903x: Fix white space and split string issues 2016-01-14 08:44:03 +00:00
da9052-core.c mfd: da9053: Ensure the FAULT_LOG is cleared during MFD driver probe 2016-10-04 15:48:02 +01:00
da9052-i2c.c mfd: da9052-i2c: Fix tabbing/whitespace issue 2016-01-14 08:44:03 +00:00
da9052-irq.c mfd: da9052-irq: Fix trivial 'space before comma' error 2016-01-14 08:44:04 +00:00
da9052-spi.c - New Device Support 2015-11-06 10:23:50 -08:00
da9055-core.c
da9055-i2c.c
da9062-core.c mfd: da9062: Fix missing volatile registers in the core regmap_range volatile lists 2016-03-16 08:50:27 +00:00
da9063-core.c mfd: da9063: Update author information to remove incorrect e-mail addresses 2016-10-04 15:48:01 +01:00
da9063-i2c.c mfd: da9063: Update author information to remove incorrect e-mail addresses 2016-10-04 15:48:01 +01:00
da9063-irq.c mfd: da9063: Update author information to remove incorrect e-mail addresses 2016-10-04 15:48:01 +01:00
da9150-core.c mfd: da9150: Use DEFINE_RES_IRQ_NAMED() help macro for IRQ resource 2015-10-13 11:28:36 +01:00
davinci_voicecodec.c mfd: davinci_voicecodec: Remove pointless 'out of memory' error message 2016-01-14 08:44:05 +00:00
db8500-prcmu.c mfd: db8500-prcmu: Remove unused *prcmu_set_ddr_opp() calls 2016-10-04 15:48:05 +01:00
dbx500-prcmu-regs.h
dln2.c
dm355evm_msp.c mfd: dm355evm_msp: Refactoring for add_child() 2016-10-04 15:48:02 +01:00
exynos-lpass.c mfd: exynos-lpass: Mark PM functions as __maybe_unused 2016-10-04 15:48:04 +01:00
ezx-pcap.c Merge remote-tracking branches 'spi/topic/omap-100k', 'spi/topic/omap-uwire', 'spi/topic/owner', 'spi/topic/pxa' and 'spi/topic/pxa2xx' into spi-next 2015-11-04 11:02:12 +00:00
fsl-imx25-tsadc.c mfd: fsl-imx25-tsadc: Register touchscreen ADC driver 2016-02-11 15:40:41 +00:00
hi655x-pmic.c mfd: hi655x: Fix return value check in hi655x_pmic_probe() 2016-06-29 10:16:32 +01:00
hi6421-pmic-core.c mfd: hi6421-pmic: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:55:15 +01:00
htc-i2cpld.c mfd: htc-i2cpld: Use gpiochip data pointer 2016-04-19 07:58:30 +01:00
htc-pasic3.c
intel-lpss-acpi.c mfd: intel-lpss: Add default I2C device properties for Apollo Lake 2016-10-04 15:48:04 +01:00
intel-lpss-pci.c mfd: lpss: Fix Intel Kaby Lake PCH-H properties 2016-11-16 09:50:18 +00:00
intel-lpss.c mfd: intel-lpss: Do not put device in reset state on suspend 2016-11-16 09:50:25 +00:00
intel-lpss.h device property: don't bother the drivers with struct property_set 2016-04-09 03:10:50 +02:00
intel_msic.c mfd: intel_msic: Make it explicitly non-modular 2016-10-04 15:48:03 +01:00
intel_quark_i2c_gpio.c - New Drivers 2016-05-20 11:10:24 -07:00
intel_soc_pmic_bxtwc.c mfd: intel_soc_pmic_bxtwc: Fix usbc interrupt 2016-11-16 09:50:29 +00:00
intel_soc_pmic_core.c mfd: intel_soc_pmic_core: Terminate panel control GPIO lookup table correctly 2016-05-09 13:27:40 +01:00
intel_soc_pmic_core.h
intel_soc_pmic_crc.c
ipaq-micro.c mfd: ipaq-micro: Use __maybe_unused to hide pm functions 2016-03-16 08:50:41 +00:00
janz-cmodio.c
jz4740-adc.c
kempld-core.c mfd: Add support for COMe-cSL6 and COMe-mAL10 to Kontron PLD driver 2016-06-29 10:16:36 +01:00
lm3533-core.c mfd: lm3533: Fix unused variable build warning 2015-10-30 17:19:52 +00:00
lm3533-ctrlbank.c
lp873x.c mfd: lp873x: Remove unused mutex lock from struct lp873x 2016-10-04 15:48:04 +01:00
lp3943.c mfd: lp3943: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:55:23 +01:00
lp8788-irq.c mfd: lp8788-irq: Uninitialized variable in irq handler 2016-04-11 13:31:40 +01:00
lp8788.c
lpc_ich.c mfd: lpc_ich: Do not create iTCO watchdog when WDAT table exists 2016-09-28 23:07:20 +02:00
lpc_sch.c
max8907.c
max8925-core.c
max8925-i2c.c mfd: max8925-i2c: Make it explicitly non-modular 2016-06-29 10:14:30 +01:00
max8997-irq.c mfd: max8997-irq: 'inline' should be at the beginning of the declaration 2016-10-04 15:48:05 +01:00
max8997.c mfd: max8997: Make it explicitly non-modular 2016-06-29 10:14:30 +01:00
max8998-irq.c
max8998.c mfd: max8998: Make it explicitly non-modular 2016-06-29 10:14:29 +01:00
max14577.c mfd: max14577: Change Krzysztof Kozlowski's email to kernel.org 2016-10-04 15:48:02 +01:00
max77620.c - Core Frameworks 2016-08-01 07:28:14 -04:00
max77686.c mfd: max77686: Use devm_mfd_add_devices and devm_regmap_add_irq_chip 2016-05-09 13:27:20 +01:00
max77693.c mfd: max77686/max77693: Fix misspelled Samsung address 2016-04-19 07:59:14 +01:00
max77843.c mfd: max77843: Make it explicitly non-modular 2016-06-29 10:14:28 +01:00
mc13xxx-core.c mfd: mc13xxx-core: Use of_property_read_bool() 2015-12-04 08:45:54 +00:00
mc13xxx-i2c.c
mc13xxx-spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
mc13xxx.h
mcp-core.c
mcp-sa11x0.c
menelaus.c gpio: Include linux/gpio.h instead of asm/gpio.h 2016-02-16 00:20:03 +01:00
menf21bmc.c mfd: menf21bmc: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:55:30 +01:00
mfd-core.c mfd: core: Fix device reference leak in mfd_clone_cell 2016-11-16 09:50:41 +00:00
mt6397-core.c mfd: mt6397: IRQ domain should initialize before mfd_add_devices() 2016-05-09 08:20:22 +01:00
omap-usb-host.c mfd: omap-usb-host: Return value is not 'const int' 2016-10-04 15:48:05 +01:00
omap-usb-tll.c mfd: omap-usb-tll: Include omap-usb.h 2016-06-29 10:14:33 +01:00
omap-usb.h
palmas.c
pcf50633-adc.c
pcf50633-core.c
pcf50633-gpio.c
pcf50633-irq.c mfd: pcf50633: Remove unneded ret variable 2015-10-30 17:19:42 +00:00
pm8921-core.c mfd: pm8921: Add support for pm8018 2016-08-31 09:33:11 +01:00
qcom-spmi-pmic.c mfd: qcom-spmi-pmic: Don't access non-existing registers 2016-01-11 06:23:32 +00:00
qcom_rpm.c mfd: qcom_rpm: Handle message RAM clock 2016-10-04 15:48:02 +01:00
rc5t583-irq.c mfd: rc5t583: Use devm_mfd_add_devices and devm_request_threaded_irq 2016-05-09 13:27:38 +01:00
rc5t583.c mfd: rc5t583: Use devm_mfd_add_devices and devm_request_threaded_irq 2016-05-09 13:27:38 +01:00
rdc321x-southbridge.c mfd: rdc321x: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:55:52 +01:00
retu-mfd.c
rk808.c mfd: rk808: Add RK818 support 2016-08-31 13:48:25 +01:00
rn5t618.c mfd: rn5t618: Register restart handler 2016-06-29 10:11:35 +01:00
rt5033.c mfd: rt5033: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:56:17 +01:00
rtl8411.c
rts5209.c mfd: rtsx: Simplify function return logic 2015-10-30 17:19:44 +00:00
rts5227.c mfd: rtsx: Add support for rts522A 2015-10-30 17:19:51 +00:00
rts5229.c mfd: rtsx: Simplify function return logic 2015-10-30 17:19:44 +00:00
rts5249.c mfd: rtsx: Simplify function return logic 2015-10-30 17:19:44 +00:00
rtsx_pcr.c mfd: avoid newly introduced compiler warning 2015-11-06 10:47:12 -08:00
rtsx_pcr.h mfd: rtsx: Add support for rts522A 2015-10-30 17:19:51 +00:00
rtsx_usb.c mfd: rtsx_usb: Avoid setting ucr->current_sg.status 2016-10-04 15:48:02 +01:00
sec-core.c mfd: sec: Use devm_mfd_add_devices and devm_regmap_add_irq_chip 2016-05-09 13:27:38 +01:00
sec-irq.c mfd: sec: Use devm_mfd_add_devices and devm_regmap_add_irq_chip 2016-05-09 13:27:38 +01:00
si476x-cmd.c
si476x-i2c.c mfd: si476x-i2c: Fix spelling mistake "comptible" -> "compatible" 2016-06-29 10:14:31 +01:00
si476x-prop.c
sky81452.c mfd: sky81452: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:56:28 +01:00
sm501.c mfd: sm501: Constify gpio_chip structures 2016-10-04 15:48:03 +01:00
smsc-ece1099.c mfd: smsc-ece1099: Make it explicitly non-modular 2016-10-04 15:48:04 +01:00
ssbi.c
sta2x11-mfd.c mfd: sta2x11: Use platform_register/unregister_drivers() 2016-01-11 06:23:38 +00:00
stmpe-i2c.c mfd: Add STMPE1600 support 2016-08-10 09:25:18 +01:00
stmpe-spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
stmpe.c mfd: stmpe: Fix RESET regression on STMPE2401 2016-11-16 09:50:33 +00:00
stmpe.h mfd: Add STMPE1600 support 2016-08-10 09:25:18 +01:00
stw481x.c mfd: stw481x: Use devm_mfd_add_devices() for mfd_device registration 2016-04-19 07:56:35 +01:00
sun6i-prcm.c mfd: sun6i-prcm: Make it explicitly non-modular 2016-10-04 15:48:04 +01:00
syscon.c mfd: syscon: Support native-endian regmaps 2016-11-25 10:04:31 +00:00
t7l66xb.c
tc3589x.c
tc6387xb.c
tc6393xb.c mfd: tc6393xb: Use gpiochip data pointer 2016-04-19 07:58:44 +01:00
ti_am335x_tscadc.c mfd: ti_am335x_tscadc: Rename regmap_tscadc to regmap 2016-06-29 10:14:39 +01:00
timberdale.c [media] include/media: move platform_data to linux/platform_data/media 2015-11-17 06:58:42 -02:00
timberdale.h
tmio_core.c
tps6105x.c mfd: tps6105x: Remove linux/regulator/driver.h include 2016-05-09 08:21:11 +01:00
tps6507x.c mfd: tps6507: Fix white space warnings reported by checkpatch 2016-06-29 10:14:35 +01:00
tps6586x.c
tps65010.c mfd: tps65010: Use gpiochip data pointer 2016-04-19 07:58:51 +01:00
tps65086.c mfd: tps65086: Add driver for the TPS65086 PMIC 2016-03-16 08:50:15 +00:00
tps65090.c mfd: tps65090: Set regmap config reg counts properly 2016-03-16 08:50:36 +00:00
tps65217.c mfd: tps65217: Fix nonstandard declaration 2016-10-04 15:48:05 +01:00
tps65218.c mfd: tps65218: add version check to the PMIC probe 2016-08-10 18:21:55 +01:00
tps65910.c mfd: tps65910: Use devm_mfd_add_devices and devm_regmap_add_irq_chip 2016-05-09 13:27:39 +01:00
tps65911-comparator.c
tps65912-core.c mfd: tps65912: Add driver for the TPS65912 PMIC 2016-02-11 16:30:59 +00:00
tps65912-i2c.c mfd: tps65912: Add driver for the TPS65912 PMIC 2016-02-11 16:30:59 +00:00
tps65912-spi.c mfd: tps65912: Add driver for the TPS65912 PMIC 2016-02-11 16:30:59 +00:00
tps80031.c
twl-core.c mfd: twl-core: Make it explicitly non-modular 2016-10-04 15:48:04 +01:00
twl-core.h
twl4030-audio.c
twl4030-irq.c remove lots of IS_ERR_VALUE abuses 2016-05-27 15:26:11 -07:00
twl4030-power.c mfd: twl4030-power: Remove driver path in file comment 2016-05-09 08:24:41 +01:00
twl6030-irq.c
twl6040.c mfd: twl6040: Register child device for twl6040-pdmclk 2016-10-04 15:48:05 +01:00
ucb1x00-assabet.c
ucb1x00-core.c mfd: ucb1x00: Remove NO_IRQ check 2016-10-04 15:48:03 +01:00
ucb1x00-ts.c
ucb1400_core.c
vexpress-sysreg.c mfd: vexpress-sysreg: Switch to gpiochip_add_data() 2016-04-19 07:59:06 +01:00
viperboard.c
vx855.c
wl1273-core.c mfd: wl1273-core: Use devm_mfd_add_devices() for mfd_device registration 2016-05-09 13:27:39 +01:00
wm831x-auxadc.c
wm831x-core.c mfd: wm831x: Fix possible NULL pointer dereference 2015-10-26 14:49:04 +00:00
wm831x-i2c.c
wm831x-irq.c
wm831x-otp.c mfd: wm831x: Fix broken wm831x_unique_id_show 2016-01-11 06:23:21 +00:00
wm831x-spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
wm5102-tables.c mfd: wm5102: Fix defaults array based on testing 2016-03-16 08:50:21 +00:00
wm5110-tables.c mfd: wm5110: ARIZONA_CLOCK_CONTROL should be volatile 2016-05-09 15:41:35 +01:00
wm8350-core.c
wm8350-gpio.c
wm8350-i2c.c
wm8350-irq.c
wm8350-regmap.c
wm8400-core.c mfd: Use IS_ENABLED(CONFIG_FOO) instead of checking FOO || FOO_MODULE 2016-05-09 08:23:56 +01:00
wm8994-core.c mfd: wm8994-core: Don't use managed regulator bulk get API 2016-11-25 11:10:55 +00:00
wm8994-irq.c
wm8994-regmap.c
wm8994.h
wm8997-tables.c
wm8998-tables.c mfd: wm8998: Fix defaults array based on testing 2016-03-16 08:50:22 +00:00