<feed xmlns='http://www.w3.org/2005/Atom'>
<title>user/sven/linux.git/drivers/mfd, branch v4.9.16</title>
<subtitle>Linux Kernel
</subtitle>
<id>https://git.stealer.net/cgit.cgi/user/sven/linux.git/atom?h=v4.9.16</id>
<link rel='self' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/atom?h=v4.9.16'/>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/'/>
<updated>2017-01-12T10:39:23Z</updated>
<entry>
<title>mfd: tps65217: Fix page fault on unloading modules</title>
<updated>2017-01-12T10:39:23Z</updated>
<author>
<name>Milo Kim</name>
<email>woogyom.kim@gmail.com</email>
</author>
<published>2016-11-15T13:02:11Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=ac86312e0870ad6d35b97cc79964acbf58e99424'/>
<id>urn:sha1:ac86312e0870ad6d35b97cc79964acbf58e99424</id>
<content type='text'>
commit 40a50f8b307de8d08f3fa37c312fc16a7dd233e5 upstream.

TPS65217 IRQ domain should be removed and initialised as NULL when the
module is unloaded for the next use. When tps65217.ko is loaded again,
it causes the page fault. This patch fixes the error below.

root@arm:~# lsmod | grep "tps"
tps65217_charger        3538  0
tps65218_pwrbutton      2974  0
tps65217                6710  1 tps65217_charger

root@arm:~# modprobe -r tps65217_charger

root@arm:~# modprobe tps65217.ko
[   71.990277] Unable to handle kernel paging request at virtual address bf055944
[   71.998063] pgd = dd3a4000
[   72.000904] [bf055944] *pgd=9e6f7811, *pte=00000000, *ppte=00000000
[   72.007567] Internal error: Oops: 7 [#1] SMP ARM
[   72.012404] Modules linked in: tps65217(+) evdev musb_dsps musb_hdrc udc_core tps65218_pwrbutton usbcore phy_am335]
[   72.055700] CPU: 0 PID: 243 Comm: modprobe Not tainted 4.9.0-rc5-next-20161114 #3
[   72.063531] Hardware name: Generic AM33XX (Flattened Device Tree)
[   72.069899] task: de714380 task.stack: de7e6000
[   72.074655] PC is at irq_find_matching_fwspec+0x88/0x100
[   72.080211] LR is at 0xde7e79d8
[   72.083496] pc : [&lt;c01a5d88&gt;]    lr : [&lt;de7e79d8&gt;]    psr: 200e0013
[   72.083496] sp : de7e7a78  ip : 00000000  fp : dd138a68
[   72.095506] r10: c0ca04f8  r9 : 00000018  r8 : de7e7ab8
[   72.100973] r7 : 00000001  r6 : c0c4517c  r5 : df963f68  r4 : de321980
[   72.107797] r3 : bf055940  r2 : de714380  r1 : 00000000  r0 : 00000000
[   72.114633] Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[   72.122084] Control: 10c5387d  Table: 9d3a4019  DAC: 00000051
[   72.128097] Process modprobe (pid: 243, stack limit = 0xde7e6218)
[   72.134489] Stack: (0xde7e7a78 to 0xde7e8000)
[   72.139060] 7a60:                                                       df963f68 de7e7ab8
[   72.147643] 7a80: 00000000 dd0e1000 dd491e20 c01a6ea0 600e0013 c01a5dc0 dd138a68 c0c45138
[   72.156216] 7aa0: df963f68 00000000 df963f68 dd0e1010 00000000 c01a71a4 df963f68 00000001
[   72.164800] 7ac0: 00000002 de7e7ac0 c80048b8 dd0adf00 df963f68 c0c4517c 00000000 de7e7b50
[   72.173369] 7ae0: 00000018 c0ca04f8 dd138a68 c01a5dc0 df963f68 dd0e1010 00000000 dd0e1000
[   72.181942] 7b00: dd491e20 c0653a70 df963f58 00000001 00000002 00000000 00000000 00000000
[   72.190522] 7b20: 600e0093 c0cbf8f0 c0c0512c c0193674 00000001 00000080 00000000 c0554984
[   72.199096] 7b40: 00000000 00000000 800e0013 c0553858 df963f68 00000000 00000000 00000000
[   72.207674] 7b60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   72.216239] 7b80: 00000000 00000000 00000000 00000000 00000000 00000000 dd0e1000 c0544d24
[   72.224816] 7ba0: dd491e10 dd0e1010 dd16e800 bf1d517c bf1d5620 dd0e1010 c1497ed4 bf1d5620
[   72.233398] 7bc0: dd0e1010 fffffdfb bf1d5620 bf1d5620 00000000 c054537c c0545330 dd0e1010
[   72.241967] 7be0: c1497ed4 00000000 bf1d5620 c05433ac 00000000 00000000 de7e7c28 c0543570
[   72.250537] 7c00: 00000001 c1497e90 00000000 c0541884 de080cd4 dd44b7d4 dd0e1010 dd0e1010
[   72.259109] 7c20: dd0e1044 c05430c8 dd0e1010 00000001 dd0e1010 dd0e1018 dd0e1010 c0c9e328
[   72.267676] 7c40: de5d4020 c0542760 dd0e1018 dd0e1010 00000000 c0540ba8 dd138a40 c048dec4
[   72.276253] 7c60: 00000000 dd0e1000 00000001 dd0e1000 dd0e1010 dd0e1000 bf233de0 dd138a40
[   72.284829] 7c80: dd0e1010 c05450a0 000000bf 00000000 dd138a60 00000001 dd0e1000 c0571240
[   72.293398] 7ca0: 00000000 dd1ce9c0 00000040 dd1ce9cc bf233de0 00000003 de5d4020 ffffffff
[   72.301969] 7cc0: 00000004 dd0adf00 00000000 c0571408 00000000 00000000 dd0adf00 de5d4020
[   72.310543] 7ce0: c057146c dd1ce9c0 bf233d14 de5d4020 de7fb3d0 00000004 bf233d14 ffffffff
[   72.319120] 7d00: 00000018 dd49bf30 c01cedc0 c05714d0 00000000 00000000 dd0adf00 de322810
[   72.327692] 7d20: de322810 00000000 dd033000 000000f0 00000001 bf2333fc 00000000 00000000
[   72.336269] 7d40: dd0adf00 de5d4020 000000b6 bf233e40 de5d4020 bf233968 de5d4004 de5d4000
[   72.344848] 7d60: bf233314 c06148ac de5d4020 c1497ed4 00000000 bf233e40 00000000 c05433ac
[   72.353422] 7d80: 00000000 de5d4020 bf233e40 de5d4054 00000000 bf236000 00000000 c0543538
[   72.362002] 7da0: 00000000 bf233e40 c0543484 c05417e4 de1442a4 de5d04d0 bf233e40 de321300
[   72.370582] 7dc0: c0caa5a4 c05429fc bf233be0 bf233e40 c0cbfa44 bf233e40 c0cbfa44 dd2f7740
[   72.379148] 7de0: bf233f00 c05442f0 bf233e8c bf233e24 c0cbfa44 c0615ae0 00000000 bf233f00
[   72.387718] 7e00: c0cbfa44 c010186c 200f0013 c0191650 de714380 00000000 600f0013 00000040
[   72.396286] 7e20: dd2f7740 c018f1ac 00000001 c0c8356c 024000c0 c01a8854 c0c56e0e c028225c
[   72.404863] 7e40: dd2f7740 c0191984 de714380 dd2f7740 00000001 bf233f00 bf233f00 c0cbfa44
[   72.413440] 7e60: dd2f7740 bf233f00 00000001 dd49bf08 dd49bf30 c0230998 00000001 c0c8356c
[   72.421997] 7e80: c0c4c536 c0cbfa44 c0c0512c c01d2070 bf233f0c 00007fff bf233f00 c01cf5b8
[   72.430570] 7ea0: 00000000 c1475134 c01cee34 bf23411c bf233f48 bf234054 bf234150 00000000
[   72.439144] 7ec0: 024002c2 de7fbf40 0009bc20 c02776ac ff800000 00000000 00000000 bf233670
[   72.447723] 7ee0: 00000004 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   72.456298] 7f00: 00000000 00000000 00000000 00000000 c01d2590 0000aa41 00000000 00000000
[   72.464862] 7f20: 000b2549 e12c3a41 00000051 de7e6000 0009bc20 c01d2630 00000530 e12b9000
[   72.473438] 7f40: 0000aa41 e12c1434 e12c1211 e12c336c 00001150 00001620 00000000 00000000
[   72.482003] 7f60: 00000000 000010fc 00000035 00000036 0000001d 0000001a 00000017 00000000
[   72.490564] 7f80: de7e6000 3ba39a00 0009b008 0009b718 00000080 c0107704 de7e6000 00000000
[   72.499141] 7fa0: 0009f609 c0107560 3ba39a00 0009b008 000a7b08 0000aa41 0009bc20 0000aa41
[   72.507717] 7fc0: 3ba39a00 0009b008 0009b718 00000080 00000001 00000008 0009ab14 0009f609
[   72.516290] 7fe0: bea31ab8 bea31aa8 0001e5eb b6e83b42 800f0030 000a7b08 0000ffff 0840ffff
[   72.524883] [&lt;c01a5d88&gt;] (irq_find_matching_fwspec) from [&lt;c01a6ea0&gt;] (irq_create_fwspec_mapping+0x28/0x2e0)
[   72.535174] [&lt;c01a6ea0&gt;] (irq_create_fwspec_mapping) from [&lt;c01a71a4&gt;] (irq_create_of_mapping+0x4c/0x54)
[   72.545115] [&lt;c01a71a4&gt;] (irq_create_of_mapping) from [&lt;c0653a70&gt;] (of_irq_get+0x58/0x68)
[   72.553699] [&lt;c0653a70&gt;] (of_irq_get) from [&lt;c0544d24&gt;] (platform_get_irq+0x1c/0xec)
[   72.561828] [&lt;c0544d24&gt;] (platform_get_irq) from [&lt;bf1d517c&gt;] (tps6521x_pb_probe+0xd0/0x1a8 [tps65218_pwrbutton])
[   72.572581] [&lt;bf1d517c&gt;] (tps6521x_pb_probe [tps65218_pwrbutton]) from [&lt;c054537c&gt;] (platform_drv_probe+0x4c/0xac)
[   72.583426] [&lt;c054537c&gt;] (platform_drv_probe) from [&lt;c05433ac&gt;] (driver_probe_device+0x204/0x2dc)
[   72.592729] [&lt;c05433ac&gt;] (driver_probe_device) from [&lt;c0541884&gt;] (bus_for_each_drv+0x58/0x8c)
[   72.601657] [&lt;c0541884&gt;] (bus_for_each_drv) from [&lt;c05430c8&gt;] (__device_attach+0xb0/0x114)
[   72.610324] [&lt;c05430c8&gt;] (__device_attach) from [&lt;c0542760&gt;] (bus_probe_device+0x88/0x90)
[   72.618898] [&lt;c0542760&gt;] (bus_probe_device) from [&lt;c0540ba8&gt;] (device_add+0x3b8/0x560)
[   72.627203] [&lt;c0540ba8&gt;] (device_add) from [&lt;c05450a0&gt;] (platform_device_add+0xa8/0x208)
[   72.635693] [&lt;c05450a0&gt;] (platform_device_add) from [&lt;c0571240&gt;] (mfd_add_device+0x240/0x338)
[   72.644634] [&lt;c0571240&gt;] (mfd_add_device) from [&lt;c0571408&gt;] (mfd_add_devices+0xa0/0x104)
[   72.653120] [&lt;c0571408&gt;] (mfd_add_devices) from [&lt;c05714d0&gt;] (devm_mfd_add_devices+0x60/0xa8)
[   72.662077] [&lt;c05714d0&gt;] (devm_mfd_add_devices) from [&lt;bf2333fc&gt;] (tps65217_probe+0xe8/0x2ec [tps65217])
[   72.672026] [&lt;bf2333fc&gt;] (tps65217_probe [tps65217]) from [&lt;c06148ac&gt;] (i2c_device_probe+0x168/0x1f4)
[   72.681695] [&lt;c06148ac&gt;] (i2c_device_probe) from [&lt;c05433ac&gt;] (driver_probe_device+0x204/0x2dc)
[   72.690816] [&lt;c05433ac&gt;] (driver_probe_device) from [&lt;c0543538&gt;] (__driver_attach+0xb4/0xb8)
[   72.699657] [&lt;c0543538&gt;] (__driver_attach) from [&lt;c05417e4&gt;] (bus_for_each_dev+0x60/0x94)
[   72.708224] [&lt;c05417e4&gt;] (bus_for_each_dev) from [&lt;c05429fc&gt;] (bus_add_driver+0x18c/0x214)
[   72.716892] [&lt;c05429fc&gt;] (bus_add_driver) from [&lt;c05442f0&gt;] (driver_register+0x78/0xf8)
[   72.725280] [&lt;c05442f0&gt;] (driver_register) from [&lt;c0615ae0&gt;] (i2c_register_driver+0x38/0x80)
[   72.734120] [&lt;c0615ae0&gt;] (i2c_register_driver) from [&lt;c010186c&gt;] (do_one_initcall+0x3c/0x178)
[   72.743055] [&lt;c010186c&gt;] (do_one_initcall) from [&lt;c0230998&gt;] (do_init_module+0x5c/0x1d0)
[   72.751537] [&lt;c0230998&gt;] (do_init_module) from [&lt;c01d2070&gt;] (load_module+0x1d10/0x21c0)
[   72.759933] [&lt;c01d2070&gt;] (load_module) from [&lt;c01d2630&gt;] (SyS_init_module+0x110/0x154)
[   72.768242] [&lt;c01d2630&gt;] (SyS_init_module) from [&lt;c0107560&gt;] (ret_fast_syscall+0x0/0x1c)
[   72.776725] Code: e5944000 e1540006 0a00001b e594300c (e593c004)
[   72.783181] ---[ end trace 0278ec325f4689b8 ]---

Fixes: 6556bdacf646 ("mfd: tps65217: Add support for IRQs")
Signed-off-by: Milo Kim &lt;woogyom.kim@gmail.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>mfd: wm8994-core: Don't use managed regulator bulk get API</title>
<updated>2016-11-25T11:10:55Z</updated>
<author>
<name>Viresh Kumar</name>
<email>viresh.kumar@linaro.org</email>
</author>
<published>2016-10-27T10:20:18Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=1a41741fd60b0a2d1102c3d1ff9d58cb324a8d29'/>
<id>urn:sha1:1a41741fd60b0a2d1102c3d1ff9d58cb324a8d29</id>
<content type='text'>
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-&gt;dev.  Whereas,
devm_regulator_bulk_get() receives wm8994-&gt;dev as the device, though it
gets the same regulators which were added as children of wm8994-&gt;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-&gt;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)
 [&lt;c010e24c&gt;] (unwind_backtrace) from [&lt;c010af38&gt;] (show_stack+0x10/0x14)
 [&lt;c010af38&gt;] (show_stack) from [&lt;c032a1c4&gt;] (dump_stack+0x88/0x9c)
 [&lt;c032a1c4&gt;] (dump_stack) from [&lt;c011a98c&gt;] (__warn+0xe8/0x100)
 [&lt;c011a98c&gt;] (__warn) from [&lt;c011aa54&gt;] (warn_slowpath_null+0x20/0x28)
 [&lt;c011aa54&gt;] (warn_slowpath_null) from [&lt;c0384a0c&gt;] (regulator_unregister+0xc8/0xd0)
 [&lt;c0384a0c&gt;] (regulator_unregister) from [&lt;c0406434&gt;] (release_nodes+0x16c/0x1dc)
 [&lt;c0406434&gt;] (release_nodes) from [&lt;c04039c4&gt;] (__device_release_driver+0x8c/0x110)
 [&lt;c04039c4&gt;] (__device_release_driver) from [&lt;c0403a64&gt;] (device_release_driver+0x1c/0x28)
 [&lt;c0403a64&gt;] (device_release_driver) from [&lt;c0402b24&gt;] (bus_remove_device+0xd8/0x104)
 [&lt;c0402b24&gt;] (bus_remove_device) from [&lt;c03ffcd8&gt;] (device_del+0x10c/0x218)
 [&lt;c03ffcd8&gt;] (device_del) from [&lt;c0404e4c&gt;] (platform_device_del+0x1c/0x88)
 [&lt;c0404e4c&gt;] (platform_device_del) from [&lt;c0404ec4&gt;] (platform_device_unregister+0xc/0x20)
 [&lt;c0404ec4&gt;] (platform_device_unregister) from [&lt;c0428bc0&gt;] (mfd_remove_devices_fn+0x5c/0x64)
 [&lt;c0428bc0&gt;] (mfd_remove_devices_fn) from [&lt;c03ff9d8&gt;] (device_for_each_child_reverse+0x4c/0x78)
 [&lt;c03ff9d8&gt;] (device_for_each_child_reverse) from [&lt;c04288c4&gt;] (mfd_remove_devices+0x20/0x30)
 [&lt;c04288c4&gt;] (mfd_remove_devices) from [&lt;c042758c&gt;] (wm8994_device_init+0x2ac/0x7f0)
 [&lt;c042758c&gt;] (wm8994_device_init) from [&lt;c04f14a8&gt;] (i2c_device_probe+0x178/0x1fc)
 [&lt;c04f14a8&gt;] (i2c_device_probe) from [&lt;c04036fc&gt;] (driver_probe_device+0x214/0x2c0)
 [&lt;c04036fc&gt;] (driver_probe_device) from [&lt;c0403854&gt;] (__driver_attach+0xac/0xb0)
 [&lt;c0403854&gt;] (__driver_attach) from [&lt;c0401a74&gt;] (bus_for_each_dev+0x68/0x9c)
 [&lt;c0401a74&gt;] (bus_for_each_dev) from [&lt;c0402cf0&gt;] (bus_add_driver+0x1a0/0x218)
 [&lt;c0402cf0&gt;] (bus_add_driver) from [&lt;c040406c&gt;] (driver_register+0x78/0xf8)
 [&lt;c040406c&gt;] (driver_register) from [&lt;c04f20a0&gt;] (i2c_register_driver+0x34/0x84)
 [&lt;c04f20a0&gt;] (i2c_register_driver) from [&lt;c01017d0&gt;] (do_one_initcall+0x40/0x170)
 [&lt;c01017d0&gt;] (do_one_initcall) from [&lt;c0a00dbc&gt;] (kernel_init_freeable+0x15c/0x1fc)
 [&lt;c0a00dbc&gt;] (kernel_init_freeable) from [&lt;c06e07b0&gt;] (kernel_init+0x8/0x114)
 [&lt;c06e07b0&gt;] (kernel_init) from [&lt;c0107978&gt;] (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..]

 [&lt;c06e489c&gt;] (down_write) from [&lt;c02e9954&gt;] (debugfs_remove_recursive+0x30/0x150)
 [&lt;c02e9954&gt;] (debugfs_remove_recursive) from [&lt;c0382b78&gt;] (_regulator_put+0x24/0xac)
 [&lt;c0382b78&gt;] (_regulator_put) from [&lt;c0382c1c&gt;] (regulator_put+0x1c/0x2c)
 [&lt;c0382c1c&gt;] (regulator_put) from [&lt;c0406434&gt;] (release_nodes+0x16c/0x1dc)
 [&lt;c0406434&gt;] (release_nodes) from [&lt;c04035d4&gt;] (driver_probe_device+0xec/0x2c0)
 [&lt;c04035d4&gt;] (driver_probe_device) from [&lt;c0403854&gt;] (__driver_attach+0xac/0xb0)
 [&lt;c0403854&gt;] (__driver_attach) from [&lt;c0401a74&gt;] (bus_for_each_dev+0x68/0x9c)
 [&lt;c0401a74&gt;] (bus_for_each_dev) from [&lt;c0402cf0&gt;] (bus_add_driver+0x1a0/0x218)
 [&lt;c0402cf0&gt;] (bus_add_driver) from [&lt;c040406c&gt;] (driver_register+0x78/0xf8)
 [&lt;c040406c&gt;] (driver_register) from [&lt;c04f20a0&gt;] (i2c_register_driver+0x34/0x84)
 [&lt;c04f20a0&gt;] (i2c_register_driver) from [&lt;c01017d0&gt;] (do_one_initcall+0x40/0x170)
 [&lt;c01017d0&gt;] (do_one_initcall) from [&lt;c0a00dbc&gt;] (kernel_init_freeable+0x15c/0x1fc)
 [&lt;c0a00dbc&gt;] (kernel_init_freeable) from [&lt;c06e07b0&gt;] (kernel_init+0x8/0x114)
 [&lt;c06e07b0&gt;] (kernel_init) from [&lt;c0107978&gt;] (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 &lt;viresh.kumar@linaro.org&gt;
Acked-by: Charles Keepax &lt;ckeepax@opensource.wolfsonmicro.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: wm8994-core: Disable regulators before removing them</title>
<updated>2016-11-25T11:09:05Z</updated>
<author>
<name>Viresh Kumar</name>
<email>viresh.kumar@linaro.org</email>
</author>
<published>2016-09-16T03:26:59Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=3cfc43df7af0533b39b97bb03980e02e9716fc52'/>
<id>urn:sha1:3cfc43df7af0533b39b97bb03980e02e9716fc52</id>
<content type='text'>
The order in which resources were freed in wm8994_device_exit() isn't
correct. The regulators are removed before they are disabled.

Fix it by reordering code a bit, which makes it exact opposite of
wm8994_device_init() as well.

Signed-off-by: Viresh Kumar &lt;viresh.kumar@linaro.org&gt;
Acked-by: Charles Keepax &lt;ckeepax@opensource.wolfsonmicro.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: syscon: Support native-endian regmaps</title>
<updated>2016-11-25T10:04:31Z</updated>
<author>
<name>Paul Burton</name>
<email>paul.burton@imgtec.com</email>
</author>
<published>2016-10-14T09:17:31Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=d29ccdb3f0e5dccb170200c9f3d573eaa5af261b'/>
<id>urn:sha1:d29ccdb3f0e5dccb170200c9f3d573eaa5af261b</id>
<content type='text'>
The regmap devicetree binding documentation states that a native-endian
property should be supported as well as big-endian &amp; little-endian,
however syscon in its duplication of the parsing of these properties
omits support for native-endian. Fix this by setting
REGMAP_ENDIAN_NATIVE when a native-endian property is found.

Signed-off-by: Paul Burton &lt;paul.burton@imgtec.com&gt;
Cc: Lee Jones &lt;lee.jones@linaro.org&gt;
Cc: Arnd Bergmann &lt;arnd@arndb.de&gt;
Cc: Guenter Roeck &lt;linux@roeck-us.net&gt;
Cc: Ralf Baechle &lt;ralf@linux-mips.org&gt;
Cc: linux-mips@linux-mips.org
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: core: Fix device reference leak in mfd_clone_cell</title>
<updated>2016-11-16T09:50:41Z</updated>
<author>
<name>Johan Hovold</name>
<email>johan@kernel.org</email>
</author>
<published>2016-11-01T10:38:18Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=722f191080de641f023feaa7d5648caf377844f5'/>
<id>urn:sha1:722f191080de641f023feaa7d5648caf377844f5</id>
<content type='text'>
Make sure to drop the reference taken by bus_find_device_by_name()
before returning from mfd_clone_cell().

Fixes: a9bbba996302 ("mfd: add platform_device sharing support for mfd")
Signed-off-by: Johan Hovold &lt;johan@kernel.org&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: stmpe: Fix RESET regression on STMPE2401</title>
<updated>2016-11-16T09:50:33Z</updated>
<author>
<name>Linus Walleij</name>
<email>linus.walleij@linaro.org</email>
</author>
<published>2016-11-01T09:22:53Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=f40584200bc4af7aa4399635b9ac213c62a13ae7'/>
<id>urn:sha1:f40584200bc4af7aa4399635b9ac213c62a13ae7</id>
<content type='text'>
Since commit c4dd1ba355aae2bc3d1213da6c66c53e3c31e028
("mfd: stmpe: Add reset support for all STMPE variant")
we're resetting the STMPE expanders before use.

This caused a regression on the STMP2401 on the Nomadik
NHK8815:

stmpe-i2c 0-0043: stmpe2401 detected, chip id: 0x101
nmk-i2c 101f8000.i2c0: write to slave 0x43 timed out
nmk-i2c 101f8000.i2c0: no ack received after address transmission
stmpe-i2c 0-0044: stmpe2401 detected, chip id: 0x101
nmk-i2c 101f8000.i2c0: write to slave 0x44 timed out
nmk-i2c 101f8000.i2c0: no ack received after address transmission

It turns out that we start to poll for the reset bit to
go low again too quickly: the STMPE2401 is not yet online and
ready to be asked for the status of the RESET bit.

By introducing a 10ms delay before starting to hammer
the register for information, we get back to normal:

stmpe-i2c 0-0043: stmpe2401 detected, chip id: 0x101
stmpe-i2c 0-0044: stmpe2401 detected, chip id: 0x101

Cc: stable@vger.kernel.org
Cc: Amelie Delaunay &lt;amelie.delaunay@st.com&gt;
Fixes: c4dd1ba355aa ("mfd: stmpe: Add reset support for all STMPE variant")
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
Acked-by: Patrice Chotard &lt;patrice.chotard@st.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: intel_soc_pmic_bxtwc: Fix usbc interrupt</title>
<updated>2016-11-16T09:50:29Z</updated>
<author>
<name>Heikki Krogerus</name>
<email>heikki.krogerus@linux.intel.com</email>
</author>
<published>2016-10-17T07:32:13Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=9600702082b29fd3f8a6d744df74ad4c48d4a432'/>
<id>urn:sha1:9600702082b29fd3f8a6d744df74ad4c48d4a432</id>
<content type='text'>
The wcove USB Type-C driver is currently being flooded with
interrupts that are not targeted to it. The reason for that
is because all CHRG first level interrupts are mapped to it.
This fixes the issue by introducing separate irq for the
usbc device, and mapping only USB Type-C PHY interrupts to
it.

Fixes: 9c6235c86332 ("mfd: intel_soc_pmic_bxtwc: Add bxt_wcove_usbc device")
Signed-off-by: Heikki Krogerus &lt;heikki.krogerus@linux.intel.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: intel-lpss: Do not put device in reset state on suspend</title>
<updated>2016-11-16T09:50:25Z</updated>
<author>
<name>Azhar Shaikh</name>
<email>azhar.shaikh@intel.com</email>
</author>
<published>2016-10-12T17:12:20Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=274e43edcda6f709aa67e436b3123e45a6270923'/>
<id>urn:sha1:274e43edcda6f709aa67e436b3123e45a6270923</id>
<content type='text'>
Commit 41a3da2b8e163 ("mfd: intel-lpss: Save register context on
suspend") saved the register context while going to suspend and
also put the device in reset state.

Due to the resetting of device, system cannot enter S3/S0ix
states when no_console_suspend flag is enabled. The system
and serial console both hang. The resetting of device is not
needed while going to suspend. Hence remove this code.

Cc: stable@vger.kernel.org
Fixes: 41a3da2b8e163 ("mfd: intel-lpss: Save register context on suspend")
Signed-off-by: Azhar Shaikh &lt;azhar.shaikh@intel.com&gt;
Acked-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
Reviewed-by: Andy Shevchenko &lt;andriy.shevchenko@linux.intel.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>mfd: lpss: Fix Intel Kaby Lake PCH-H properties</title>
<updated>2016-11-16T09:50:18Z</updated>
<author>
<name>Jarkko Nikula</name>
<email>jarkko.nikula@linux.intel.com</email>
</author>
<published>2016-09-29T09:59:39Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=2c8c34167c987e463d62a55384fcec7fa8d03a54'/>
<id>urn:sha1:2c8c34167c987e463d62a55384fcec7fa8d03a54</id>
<content type='text'>
There are a few issues on Intel Kaby Lake PCH-H properties added by
commit a6a576b78e09 ("mfd: lpss: Add Intel Kaby Lake PCH-H PCI IDs"):

- Input clock of I2C controller on Intel Kaby Lake PCH-H is 120 MHz not
  133 MHz. This was probably copy-paste error from Intel Broxton I2C
  properties.
- There is no default I2C SDA hold time specified which is used when
  ACPI doesn't provide it. I got information from Windows driver team
  that Kaby Lake PCH-H can use the same configuration than Intel
  Sunrisepoint PCH.
- Common HS-UART properties are not used.

Fix these by reusing the Sunrisepoint properties on Kaby Lake PCH-H.

Fixes: a6a576b78e09 ("mfd: lpss: Add Intel Kaby Lake PCH-H PCI IDs")
Reported-by: Xiang A Wang &lt;xiang.a.wang@intel.com&gt;
Signed-off-by: Jarkko Nikula &lt;jarkko.nikula@linux.intel.com&gt;
Acked-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
Signed-off-by: Lee Jones &lt;lee.jones@linaro.org&gt;
</content>
</entry>
<entry>
<title>Merge tag 'mfd-for-linus-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd</title>
<updated>2016-10-07T15:35:35Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2016-10-07T15:35:35Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=d042380886fb2fc6c4b0fcfe1214ba473769a8e9'/>
<id>urn:sha1:d042380886fb2fc6c4b0fcfe1214ba473769a8e9</id>
<content type='text'>
Pull MFD updates from Lee Jones:
 "Core framework:
   - Add the MFD bindings doc to MAINTAINERS

  New drivers:
   - X-Powers AC100 Audio CODEC and RTC
   - TI LP873x PMIC
   - Rockchip RK808 PMIC
   - Samsung Exynos Low Power Audio

  New device support:
   - Add support for STMPE1600 variant to stmpe
   - Add support for PM8018 PMIC to pm8921-core
   - Add support for AXP806 PMIC in axp20x
   - Add support for AXP209 GPIO in axp20x

  New functionality:
   - Add support for Reset to all STMPE variants
   - Add support for MKBP event support to cros_ec
   - Add support for USB to intel_soc_pmic_bxtwc
   - Add support for IRQs and Power Button to tps65217

  Fix-ups:
   - Clean-up defunct author emails (da9063, max14577)
   - Kconfig fixups (wm8350-i2c, as37220
   - Constify (altera-a10sr, sm501)
   - Supply PCI IDs (intel-lpss-pci)
   - Improve clocking (qcom_rpm)
   - Fix IRQ probing (ucb1x00-core)
   - Ensure fault log is cleared (da9052)
   - Remove NO_IRQ check (ucb1x00-core)
   - Supply I2C properties (intel-lpss-acpi, intel-lpss-pci)
   - Non standard declaration (tps65217, max8997-irq)
   - Remove unused code (lp873x, db8500-prcmu, ab8500-debugfs,
     cros_ec_spi)
   - Make non-modular (altera-a10sr, intel_msic, smsc-ece1099,
     sun6i-prcm, twl-core)
   - OF bindings (ac100, stmpe, qcom-pm8xxx, qcom-rpm, rk808, axp20x,
     lp873x, exynos5433-lpass, act8945a, aspeed-scu, twl6040, arizona)

  Bugfixes:
   - Release OF pointer (qcom_rpm)
   - Avoid double shifting in suspend/resume (88pm80x)
   - Fix 'defined but not used' error (exynos-lpass)
   - Fix 'sleeping whilst attomic' (atmel-hlcdc)"

* tag 'mfd-for-linus-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (69 commits)
  mfd: arizona: Handle probe deferral for reset GPIO
  mfd: arizona: Remove arizona_of_get_named_gpio helper function
  mfd: arizona: Add DT options for max_channels_clocked and PDM speaker config
  mfd: twl6040: Register child device for twl6040-pdmclk
  mfd: cros_ec_spi: Remove unused variable 'request'
  mfd: omap-usb-host: Return value is not 'const int'
  mfd: ab8500-debugfs: Remove 'weak' function suspend_test_wake_cause_interrupt_is_mine()
  mfd: ab8500-debugfs: Remove ab8500_dump_all_banks_to_mem()
  mfd: db8500-prcmu: Remove unused *prcmu_set_ddr_opp() calls
  mfd: ab8500-debugfs: Prevent initialised field from being over-written
  mfd: max8997-irq: 'inline' should be at the beginning of the declaration
  mfd: rk808: Fix RK818_IRQ_DISCHG_ILIM initializer
  mfd: tps65217: Fix nonstandard declaration
  mfd: lp873x: Remove unused mutex lock from struct lp873x
  mfd: atmel-hlcdc: Do not sleep in atomic context
  mfd: exynos-lpass: Mark PM functions as __maybe_unused
  mfd: intel-lpss: Add default I2C device properties for Apollo Lake
  mfd: twl-core: Make it explicitly non-modular
  mfd: sun6i-prcm: Make it explicitly non-modular
  mfd: smsc-ece1099: Make it explicitly non-modular
  ...
</content>
</entry>
</feed>
