<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/drivers/mfd, branch v3.3-rc5</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>Merge branch 'omap-fixes-warnings' of git://git.linaro.org/people/rmk/linux-arm</title>
<updated>2012-02-13T22:16:07+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2012-02-13T22:16:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=b14a29982ad90853cd71370af41adfd0009d7aa0'/>
<id>b14a29982ad90853cd71370af41adfd0009d7aa0</id>
<content type='text'>
This set of changes are fixing various section mismatch warnings which
look to be completely valid.  Primerily, those which are fixed are those
which can cause oopses by manipulation of driver binding via sysfs.  For
example: calling code marked __init from driver probe __devinit
functions.

Some of these changes will be reworked at the next merge window when the
underlying reasons are sorted out.  In the mean time, I think it's
important to have this fixed for correctness.

Also included in this set are fixes to various error messages in OMAP -
including making them gramatically correct, fixing a few spelling
errors, and more importantly, making them greppable by unwrapping them.

Tony Lindgren has acked all these patches, put them out for testing a
week ago, and I've tested them on the platforms I have.

* 'omap-fixes-warnings' of git://git.linaro.org/people/rmk/linux-arm:
  ARM: omap: resolve nebulous 'Error setting wl12xx data'
  ARM: omap: fix wrapped error messages in omap_hwmod.c
  ARM: omap: fix section mismatch warnings in mux.c caused by hsmmc.c
  ARM: omap: fix section mismatch warning for sdp3430_twl_gpio_setup()
  ARM: omap: fix section mismatch error for omap_4430sdp_display_init()
  ARM: omap: fix section mismatch warning for omap_secondary_startup()
  ARM: omap: preemptively fix section mismatch in omap4_sdp4430_wifi_mux_init()
  ARM: omap: fix section mismatch warning in mux.c
  ARM: omap: fix section mismatch errors in TWL PMIC driver
  ARM: omap: fix uninformative vc/i2c configuration error message
  ARM: omap: fix vc.c PMIC error message
  ARM: omap: fix prm44xx.c OMAP44XX_IRQ_PRCM build error
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This set of changes are fixing various section mismatch warnings which
look to be completely valid.  Primerily, those which are fixed are those
which can cause oopses by manipulation of driver binding via sysfs.  For
example: calling code marked __init from driver probe __devinit
functions.

Some of these changes will be reworked at the next merge window when the
underlying reasons are sorted out.  In the mean time, I think it's
important to have this fixed for correctness.

Also included in this set are fixes to various error messages in OMAP -
including making them gramatically correct, fixing a few spelling
errors, and more importantly, making them greppable by unwrapping them.

Tony Lindgren has acked all these patches, put them out for testing a
week ago, and I've tested them on the platforms I have.

* 'omap-fixes-warnings' of git://git.linaro.org/people/rmk/linux-arm:
  ARM: omap: resolve nebulous 'Error setting wl12xx data'
  ARM: omap: fix wrapped error messages in omap_hwmod.c
  ARM: omap: fix section mismatch warnings in mux.c caused by hsmmc.c
  ARM: omap: fix section mismatch warning for sdp3430_twl_gpio_setup()
  ARM: omap: fix section mismatch error for omap_4430sdp_display_init()
  ARM: omap: fix section mismatch warning for omap_secondary_startup()
  ARM: omap: preemptively fix section mismatch in omap4_sdp4430_wifi_mux_init()
  ARM: omap: fix section mismatch warning in mux.c
  ARM: omap: fix section mismatch errors in TWL PMIC driver
  ARM: omap: fix uninformative vc/i2c configuration error message
  ARM: omap: fix vc.c PMIC error message
  ARM: omap: fix prm44xx.c OMAP44XX_IRQ_PRCM build error
</pre>
</div>
</content>
</entry>
<entry>
<title>ARM: omap: fix section mismatch errors in TWL PMIC driver</title>
<updated>2012-02-13T10:00:35+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-02-07T10:00:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=a0bb10e86642064f6cec9e23f523127e5cfbe609'/>
<id>a0bb10e86642064f6cec9e23f523127e5cfbe609</id>
<content type='text'>
WARNING: drivers/mfd/built-in.o(.devinit.text+0x258): Section mismatch in reference from the function twl_probe() to the function .init.text:twl4030_power_init()
The function __devinit twl_probe() references
a function __init twl4030_power_init().
If twl4030_power_init is only used by twl_probe then
annotate twl4030_power_init with a matching annotation.

twl4030_power_init() references other __init marked functions, so
these too must become __devinit.

Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
WARNING: drivers/mfd/built-in.o(.devinit.text+0x258): Section mismatch in reference from the function twl_probe() to the function .init.text:twl4030_power_init()
The function __devinit twl_probe() references
a function __init twl4030_power_init().
If twl4030_power_init is only used by twl_probe then
annotate twl4030_power_init with a matching annotation.

twl4030_power_init() references other __init marked functions, so
these too must become __devinit.

Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ARM: omap: fix broken twl-core dependencies and ifdefs</title>
<updated>2012-02-09T17:56:53+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-02-07T09:47:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=6252547b8a7acced581b649af4ebf6d65f63a34b'/>
<id>6252547b8a7acced581b649af4ebf6d65f63a34b</id>
<content type='text'>
In commit aeb5032b3f, a dependency on IRQ_DOMAIN was added, which causes
regressions on previously working setups: a previously working non-DT
kernel configuration now loses its PMIC support.  The lack of PMIC
support in turn causes the loss of other functionality the kernel had.

This dependency was added because the driver now registers its
interrupts with the IRQ domain code, presumably to prevent a build error.

The result is that OMAP3 oopses in the vp.c code (fixed by a previous
commit) due to the lack of PMIC support.

However, even with IRQ_DOMAIN enabled, the driver oopses:

Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1] SMP
Modules linked in:
CPU: 1    Not tainted  (3.3.0-rc2+ #271)
PC is at irq_domain_add+0x1c/0x134
LR is at twl_probe+0xd0/0x370
pc : [&lt;c007bad0&gt;]    lr : [&lt;c029baac&gt;]    psr: 00000113
sp : df843c48  ip : df843c68  fp : df843c64
r10: c02b93e4  r9 : 00000000  r8 : c029b9dc
r7 : df9d8a00  r6 : c03bef90  r5 : 00000000  r4 : c03f5240
r3 : 00000000  r2 : c03f5240  r1 : 00000015  r0 : c03f5240
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c5387d  Table: 8000404a  DAC: 00000015
Process swapper/0 (pid: 1, stack limit = 0xdf8422f0)
Stack: (0xdf843c48 to 0xdf844000)
3c40:                   00000014 00000170 00000014 c03bef90 df843c9c df843c68
3c60: c029baac c007bac0 00000000 df9d8a20 00000001 c03cd238 c02b93e4 df9d8a20
3c80: df9d8a04 df9d8a00 c029b9dc df8cae08 df843cc4 df843ca0 c01eee70 c029b9e8
...
Backtrace:
[&lt;c007bab4&gt;] (irq_domain_add+0x0/0x134) from [&lt;c029baac&gt;] (twl_probe+0xd0/0x370)
 r6:c03bef90 r5:00000014 r4:00000170
[&lt;c029b9dc&gt;] (twl_probe+0x0/0x370) from [&lt;c01eee70&gt;] (i2c_device_probe+0xb0/0xe4)
[&lt;c01eedc0&gt;] (i2c_device_probe+0x0/0xe4) from [&lt;c01d1f34&gt;] (really_probe+0xa0/0x178)
 r8:df8f0070 r7:c03cd238 r6:df9d8a20 r5:df9d8a20 r4:df9d8a20
[&lt;c01d1e94&gt;] (really_probe+0x0/0x178) from [&lt;c01d205c&gt;] (driver_probe_device+0x50/0x68)
 r7:df843d18 r6:df9d8a20 r5:c03cd238 r4:df9d8a20
[&lt;c01d200c&gt;] (driver_probe_device+0x0/0x68) from [&lt;c01d2148&gt;] (__device_attach+0x44/0x48)
 r5:df9d8a20 r4:c03cd238
[&lt;c01d2104&gt;] (__device_attach+0x0/0x48) from [&lt;c01d0840&gt;] (bus_for_each_drv+0x58/0x98)
 r5:c01d2104 r4:00000000
[&lt;c01d07e8&gt;] (bus_for_each_drv+0x0/0x98) from [&lt;c01d21f8&gt;] (device_attach+0x80/0xac)
 r7:df9d8a28 r6:df9d8a54 r5:c03cd978 r4:df9d8a20
[&lt;c01d2178&gt;] (device_attach+0x0/0xac) from [&lt;c01d1430&gt;] (bus_probe_device+0x34/0xa4)
 r6:df9d8a20 r5:c03cd978 r4:df9d8a20
[&lt;c01d13fc&gt;] (bus_probe_device+0x0/0xa4) from [&lt;c01cffb0&gt;] (device_add+0x2a0/0x420)
 r6:00000000 r5:df9d8a20 r4:df9d8a20
[&lt;c01cfd10&gt;] (device_add+0x0/0x420) from [&lt;c01d0150&gt;] (device_register+0x20/0x24)
 r8:df9d8a00 r7:df9d8a04 r6:df8f0048 r5:df9d8a00 r4:df9d8a20
[&lt;c01d0130&gt;] (device_register+0x0/0x24) from [&lt;c01ef8d4&gt;] (i2c_new_device+0x118/0x180)
 r4:df9d8a20
[&lt;c01ef7bc&gt;] (i2c_new_device+0x0/0x180) from [&lt;c01efc88&gt;] (i2c_register_adapter+0x140/0x204)
 r8:c03cd970 r7:00000000 r6:df8f0070 r5:df8a6300 r4:df8f0048
[&lt;c01efb48&gt;] (i2c_register_adapter+0x0/0x204) from [&lt;c01efe9c&gt;] (i2c_add_numbered_adapter+0xb4/0xcc)
 r8:df8a4c54 r7:df8cae00 r6:df843e2c r5:df8f0048 r4:00000000
[&lt;c01efde8&gt;] (i2c_add_numbered_adapter+0x0/0xcc) from [&lt;c029ce1c&gt;] (omap_i2c_probe+0x2f8/0x3b4)
 r6:00000000 r5:df8f0000 r4:df8f0070
[&lt;c029cb24&gt;] (omap_i2c_probe+0x0/0x3b4) from [&lt;c01d3484&gt;] (platform_drv_probe+0x20/0x24)
[&lt;c01d3464&gt;] (platform_drv_probe+0x0/0x24) from [&lt;c01d1f34&gt;] (really_probe+0xa0/0x178)
[&lt;c01d1e94&gt;] (really_probe+0x0/0x178) from [&lt;c01d205c&gt;] (driver_probe_device+0x50/0x68)
 r7:df843ef0 r6:c03cdb2c r5:c03cdb2c r4:df8cae08
[&lt;c01d200c&gt;] (driver_probe_device+0x0/0x68) from [&lt;c01d20e0&gt;] (__driver_attach+0x6c/0x90)
 r5:df8cae3c r4:df8cae08
[&lt;c01d2074&gt;] (__driver_attach+0x0/0x90) from [&lt;c01d08d8&gt;] (bus_for_each_dev+0x58/0x98)
 r6:c03cdb2c r5:c01d2074 r4:00000000
[&lt;c01d0880&gt;] (bus_for_each_dev+0x0/0x98) from [&lt;c01d1d80&gt;] (driver_attach+0x20/0x28)
 r7:df880b80 r6:c03cdb2c r5:c03cdb2c r4:c0394f28
[&lt;c01d1d60&gt;] (driver_attach+0x0/0x28) from [&lt;c01d115c&gt;] (bus_add_driver+0xb4/0x230)
[&lt;c01d10a8&gt;] (bus_add_driver+0x0/0x230) from [&lt;c01d278c&gt;] (driver_register+0xc8/0x154)
[&lt;c01d26c4&gt;] (driver_register+0x0/0x154) from [&lt;c01d37e4&gt;] (platform_driver_register+0x4c/0x60)
 r8:00000000 r7:00000013 r6:c00384c8 r5:c0395180 r4:c0394f28
[&lt;c01d3798&gt;] (platform_driver_register+0x0/0x60) from [&lt;c038626c&gt;] (omap_i2c_init_driver+0x14/0x1c)
[&lt;c0386258&gt;] (omap_i2c_init_driver+0x0/0x1c) from [&lt;c00087b8&gt;] (do_one_initcall+0x9c/0x164)
[&lt;c000871c&gt;] (do_one_initcall+0x0/0x164) from [&lt;c036c2f4&gt;] (kernel_init+0x90/0x138)
[&lt;c036c264&gt;] (kernel_init+0x0/0x138) from [&lt;c00384c8&gt;] (do_exit+0x0/0x2ec)
 r5:c036c264 r4:00000000
&lt;0&gt;Code: e24dd004 e5903014 e1a04000 e5905010 (e5933000)
&lt;4&gt;---[ end trace 1b75b31a2719ed1c ]---

This happens because we try to register an IRQ domain with a NULL ops
structure, and the first thing irq_domain_add() does is try to
dereference this ops structure.

So, fix the problem by getting rid of the incorrect OF_IRQ ifdef and
wrapping the IRQ domain bits of the driver with an IRQ_DOMAIN ifdef
instead.

Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In commit aeb5032b3f, a dependency on IRQ_DOMAIN was added, which causes
regressions on previously working setups: a previously working non-DT
kernel configuration now loses its PMIC support.  The lack of PMIC
support in turn causes the loss of other functionality the kernel had.

This dependency was added because the driver now registers its
interrupts with the IRQ domain code, presumably to prevent a build error.

The result is that OMAP3 oopses in the vp.c code (fixed by a previous
commit) due to the lack of PMIC support.

However, even with IRQ_DOMAIN enabled, the driver oopses:

Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1] SMP
Modules linked in:
CPU: 1    Not tainted  (3.3.0-rc2+ #271)
PC is at irq_domain_add+0x1c/0x134
LR is at twl_probe+0xd0/0x370
pc : [&lt;c007bad0&gt;]    lr : [&lt;c029baac&gt;]    psr: 00000113
sp : df843c48  ip : df843c68  fp : df843c64
r10: c02b93e4  r9 : 00000000  r8 : c029b9dc
r7 : df9d8a00  r6 : c03bef90  r5 : 00000000  r4 : c03f5240
r3 : 00000000  r2 : c03f5240  r1 : 00000015  r0 : c03f5240
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c5387d  Table: 8000404a  DAC: 00000015
Process swapper/0 (pid: 1, stack limit = 0xdf8422f0)
Stack: (0xdf843c48 to 0xdf844000)
3c40:                   00000014 00000170 00000014 c03bef90 df843c9c df843c68
3c60: c029baac c007bac0 00000000 df9d8a20 00000001 c03cd238 c02b93e4 df9d8a20
3c80: df9d8a04 df9d8a00 c029b9dc df8cae08 df843cc4 df843ca0 c01eee70 c029b9e8
...
Backtrace:
[&lt;c007bab4&gt;] (irq_domain_add+0x0/0x134) from [&lt;c029baac&gt;] (twl_probe+0xd0/0x370)
 r6:c03bef90 r5:00000014 r4:00000170
[&lt;c029b9dc&gt;] (twl_probe+0x0/0x370) from [&lt;c01eee70&gt;] (i2c_device_probe+0xb0/0xe4)
[&lt;c01eedc0&gt;] (i2c_device_probe+0x0/0xe4) from [&lt;c01d1f34&gt;] (really_probe+0xa0/0x178)
 r8:df8f0070 r7:c03cd238 r6:df9d8a20 r5:df9d8a20 r4:df9d8a20
[&lt;c01d1e94&gt;] (really_probe+0x0/0x178) from [&lt;c01d205c&gt;] (driver_probe_device+0x50/0x68)
 r7:df843d18 r6:df9d8a20 r5:c03cd238 r4:df9d8a20
[&lt;c01d200c&gt;] (driver_probe_device+0x0/0x68) from [&lt;c01d2148&gt;] (__device_attach+0x44/0x48)
 r5:df9d8a20 r4:c03cd238
[&lt;c01d2104&gt;] (__device_attach+0x0/0x48) from [&lt;c01d0840&gt;] (bus_for_each_drv+0x58/0x98)
 r5:c01d2104 r4:00000000
[&lt;c01d07e8&gt;] (bus_for_each_drv+0x0/0x98) from [&lt;c01d21f8&gt;] (device_attach+0x80/0xac)
 r7:df9d8a28 r6:df9d8a54 r5:c03cd978 r4:df9d8a20
[&lt;c01d2178&gt;] (device_attach+0x0/0xac) from [&lt;c01d1430&gt;] (bus_probe_device+0x34/0xa4)
 r6:df9d8a20 r5:c03cd978 r4:df9d8a20
[&lt;c01d13fc&gt;] (bus_probe_device+0x0/0xa4) from [&lt;c01cffb0&gt;] (device_add+0x2a0/0x420)
 r6:00000000 r5:df9d8a20 r4:df9d8a20
[&lt;c01cfd10&gt;] (device_add+0x0/0x420) from [&lt;c01d0150&gt;] (device_register+0x20/0x24)
 r8:df9d8a00 r7:df9d8a04 r6:df8f0048 r5:df9d8a00 r4:df9d8a20
[&lt;c01d0130&gt;] (device_register+0x0/0x24) from [&lt;c01ef8d4&gt;] (i2c_new_device+0x118/0x180)
 r4:df9d8a20
[&lt;c01ef7bc&gt;] (i2c_new_device+0x0/0x180) from [&lt;c01efc88&gt;] (i2c_register_adapter+0x140/0x204)
 r8:c03cd970 r7:00000000 r6:df8f0070 r5:df8a6300 r4:df8f0048
[&lt;c01efb48&gt;] (i2c_register_adapter+0x0/0x204) from [&lt;c01efe9c&gt;] (i2c_add_numbered_adapter+0xb4/0xcc)
 r8:df8a4c54 r7:df8cae00 r6:df843e2c r5:df8f0048 r4:00000000
[&lt;c01efde8&gt;] (i2c_add_numbered_adapter+0x0/0xcc) from [&lt;c029ce1c&gt;] (omap_i2c_probe+0x2f8/0x3b4)
 r6:00000000 r5:df8f0000 r4:df8f0070
[&lt;c029cb24&gt;] (omap_i2c_probe+0x0/0x3b4) from [&lt;c01d3484&gt;] (platform_drv_probe+0x20/0x24)
[&lt;c01d3464&gt;] (platform_drv_probe+0x0/0x24) from [&lt;c01d1f34&gt;] (really_probe+0xa0/0x178)
[&lt;c01d1e94&gt;] (really_probe+0x0/0x178) from [&lt;c01d205c&gt;] (driver_probe_device+0x50/0x68)
 r7:df843ef0 r6:c03cdb2c r5:c03cdb2c r4:df8cae08
[&lt;c01d200c&gt;] (driver_probe_device+0x0/0x68) from [&lt;c01d20e0&gt;] (__driver_attach+0x6c/0x90)
 r5:df8cae3c r4:df8cae08
[&lt;c01d2074&gt;] (__driver_attach+0x0/0x90) from [&lt;c01d08d8&gt;] (bus_for_each_dev+0x58/0x98)
 r6:c03cdb2c r5:c01d2074 r4:00000000
[&lt;c01d0880&gt;] (bus_for_each_dev+0x0/0x98) from [&lt;c01d1d80&gt;] (driver_attach+0x20/0x28)
 r7:df880b80 r6:c03cdb2c r5:c03cdb2c r4:c0394f28
[&lt;c01d1d60&gt;] (driver_attach+0x0/0x28) from [&lt;c01d115c&gt;] (bus_add_driver+0xb4/0x230)
[&lt;c01d10a8&gt;] (bus_add_driver+0x0/0x230) from [&lt;c01d278c&gt;] (driver_register+0xc8/0x154)
[&lt;c01d26c4&gt;] (driver_register+0x0/0x154) from [&lt;c01d37e4&gt;] (platform_driver_register+0x4c/0x60)
 r8:00000000 r7:00000013 r6:c00384c8 r5:c0395180 r4:c0394f28
[&lt;c01d3798&gt;] (platform_driver_register+0x0/0x60) from [&lt;c038626c&gt;] (omap_i2c_init_driver+0x14/0x1c)
[&lt;c0386258&gt;] (omap_i2c_init_driver+0x0/0x1c) from [&lt;c00087b8&gt;] (do_one_initcall+0x9c/0x164)
[&lt;c000871c&gt;] (do_one_initcall+0x0/0x164) from [&lt;c036c2f4&gt;] (kernel_init+0x90/0x138)
[&lt;c036c264&gt;] (kernel_init+0x0/0x138) from [&lt;c00384c8&gt;] (do_exit+0x0/0x2ec)
 r5:c036c264 r4:00000000
&lt;0&gt;Code: e24dd004 e5903014 e1a04000 e5905010 (e5933000)
&lt;4&gt;---[ end trace 1b75b31a2719ed1c ]---

This happens because we try to register an IRQ domain with a NULL ops
structure, and the first thing irq_domain_add() does is try to
dereference this ops structure.

So, fix the problem by getting rid of the incorrect OF_IRQ ifdef and
wrapping the IRQ domain bits of the driver with an IRQ_DOMAIN ifdef
instead.

Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mfd: Avoid twl6040-codec PLL reconfiguration when not needed</title>
<updated>2012-02-03T18:03:50+00:00</updated>
<author>
<name>Peter Ujfalusi</name>
<email>peter.ujfalusi@ti.com</email>
</author>
<published>2012-01-14T19:58:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=2bd05db718cf452fe235c7c08083b2e60f787f3a'/>
<id>2bd05db718cf452fe235c7c08083b2e60f787f3a</id>
<content type='text'>
Do not reconfigure the PLL in case it has been configured already
with the requested parameters.
In case of different PLL configuration do only the needed changes.
This can save considerable amount of time since we can avoid the
defined protocol (with delays) for the PLL configuration.

Signed-off-by: Peter Ujfalusi &lt;peter.ujfalusi@ti.com&gt;
Signed-off-by: Samuel Ortiz &lt;sameo@linux.intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Do not reconfigure the PLL in case it has been configured already
with the requested parameters.
In case of different PLL configuration do only the needed changes.
This can save considerable amount of time since we can avoid the
defined protocol (with delays) for the PLL configuration.

Signed-off-by: Peter Ujfalusi &lt;peter.ujfalusi@ti.com&gt;
Signed-off-by: Samuel Ortiz &lt;sameo@linux.intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mfd: Store twl6040-codec mclk configuration</title>
<updated>2012-02-03T18:03:44+00:00</updated>
<author>
<name>Peter Ujfalusi</name>
<email>peter.ujfalusi@ti.com</email>
</author>
<published>2012-01-14T19:58:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=f8447d6c213273b444c81eaa2449f55510229d4f'/>
<id>f8447d6c213273b444c81eaa2449f55510229d4f</id>
<content type='text'>
Store the last used mclk configuration for the PLL.

Signed-off-by: Peter Ujfalusi &lt;peter.ujfalusi@ti.com&gt;
Signed-off-by: Samuel Ortiz &lt;sameo@linux.intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Store the last used mclk configuration for the PLL.

Signed-off-by: Peter Ujfalusi &lt;peter.ujfalusi@ti.com&gt;
Signed-off-by: Samuel Ortiz &lt;sameo@linux.intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>MFD: ucb1x00-ts: fix resume failure</title>
<updated>2012-01-22T21:10:40+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-01-22T20:58:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=0af5e4c36e70cfd4ae96d3704a425c414f530f2a'/>
<id>0af5e4c36e70cfd4ae96d3704a425c414f530f2a</id>
<content type='text'>
If the ucb1x00 touchscreen is resumed while the touchscreen is being
touched, the main thread stops responding.  This occurs because two
things happen:

1. When we suspended, we were woken up, and executed the loop.
   Finding that the touchscreen was not pressed, we prepare to
   schedule for a maximum timeout, before being stopped in
   try_to_freeze().

2. an irq occurs, we disable the irq, and mark it as disabled,
   and wake the thread.  This wake occurs while the thread is
   still within __refrigerator()

3. The thread is unfrozen, and __refrigerator() sets the threads
   state back to INTERRUPTIBLE.

We then drop into schedule_timeout() with an infinite timeout and the
IRQ disabled.  This prevents any further screen touches activating
the thread.

Fix this by using kthread_freezable_should_stop() which handles the
freezing issues for us outside of the hotspot where the task state
matters.  Include a flag to ignore the touchscreen until it is
released to avoid sending unintended data to the application.

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the ucb1x00 touchscreen is resumed while the touchscreen is being
touched, the main thread stops responding.  This occurs because two
things happen:

1. When we suspended, we were woken up, and executed the loop.
   Finding that the touchscreen was not pressed, we prepare to
   schedule for a maximum timeout, before being stopped in
   try_to_freeze().

2. an irq occurs, we disable the irq, and mark it as disabled,
   and wake the thread.  This wake occurs while the thread is
   still within __refrigerator()

3. The thread is unfrozen, and __refrigerator() sets the threads
   state back to INTERRUPTIBLE.

We then drop into schedule_timeout() with an infinite timeout and the
IRQ disabled.  This prevents any further screen touches activating
the thread.

Fix this by using kthread_freezable_should_stop() which handles the
freezing issues for us outside of the hotspot where the task state
matters.  Include a flag to ignore the touchscreen until it is
released to avoid sending unintended data to the application.

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>MFD: ucb1x00-core: fix gpiolib direction_output handling</title>
<updated>2012-01-21T18:34:46+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-01-21T18:21:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c23bb602af24a635d0894aa7091e184385bf8a9f'/>
<id>c23bb602af24a635d0894aa7091e184385bf8a9f</id>
<content type='text'>
gpiolib drivers should first set the output data before setting the
direction to avoid putting glitches on an output signal.  As an
additional bonus, we tweak the code to avoid unnecessary register
writes to the output and direction registers if they have no need
to be updated.

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
gpiolib drivers should first set the output data before setting the
direction to avoid putting glitches on an output signal.  As an
additional bonus, we tweak the code to avoid unnecessary register
writes to the output and direction registers if they have no need
to be updated.

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>MFD: ucb1x00-core: fix missing restore of io output data on resume</title>
<updated>2012-01-21T18:32:24+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-01-21T18:15:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=2e95e51e184bd107380881502ea0f483c4500706'/>
<id>2e95e51e184bd107380881502ea0f483c4500706</id>
<content type='text'>
We were not restoring the UCB1x00 gpio output data on resume, resulting
in incorrect GPIO output data after a resume.  Add the missing register
write.

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We were not restoring the UCB1x00 gpio output data on resume, resulting
in incorrect GPIO output data after a resume.  Add the missing register
write.

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>MFD: mcp-core: fix complaints from the genirq layer</title>
<updated>2012-01-20T17:57:35+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-01-14T08:49:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=98250221691f728b7cad6deed98866f8847e683f'/>
<id>98250221691f728b7cad6deed98866f8847e683f</id>
<content type='text'>
The genirq layer complains if an interrupt handler returns with
interrupts enabled.  The UCB1x00 handler does just this, because
ucb1x00_enable() calls mcp_enable(), which uses spin_lock_irq()
rather than spin_lock_irqsave().  Convert this, and the divisor
setting functions to use spin_lock_irqsave().

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The genirq layer complains if an interrupt handler returns with
interrupts enabled.  The UCB1x00 handler does just this, because
ucb1x00_enable() calls mcp_enable(), which uses spin_lock_irq()
rather than spin_lock_irqsave().  Convert this, and the divisor
setting functions to use spin_lock_irqsave().

Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "ARM: sa11x0: Implement autoloading of codec and codec pdata for mcp bus."</title>
<updated>2012-01-20T17:38:58+00:00</updated>
<author>
<name>Russell King</name>
<email>rmk+kernel@arm.linux.org.uk</email>
</author>
<published>2012-01-20T17:38:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=65f2e753f1eb09d3a7e2a0d16408a5433b4097b2'/>
<id>65f2e753f1eb09d3a7e2a0d16408a5433b4097b2</id>
<content type='text'>
This reverts commit 5dd7bf59e0e8563265b3e5b33276099ef628fcc7.

Conflicts:

	scripts/mod/file2alias.c

This change is wrong on many levels.  First and foremost, it causes a
regression.  On boot on Assabet, which this patch gives a codec id of
'ucb1x00', it gives:

	ucb1x00 ID not found: 1005

0x1005 is a valid ID for the UCB1300 device.

Secondly, this patch is way over the top in terms of complexity.  The
only device which has been seen to be connected with this MCP code is
the UCB1x00 (UCB1200, UCB1300 etc) devices, and they all use the same
driver.  Adding a match table, requiring the codec string to match the
hardware ID read out of the ID register, etc is completely over the top
when we can just read the hardware ID register.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit 5dd7bf59e0e8563265b3e5b33276099ef628fcc7.

Conflicts:

	scripts/mod/file2alias.c

This change is wrong on many levels.  First and foremost, it causes a
regression.  On boot on Assabet, which this patch gives a codec id of
'ucb1x00', it gives:

	ucb1x00 ID not found: 1005

0x1005 is a valid ID for the UCB1300 device.

Secondly, this patch is way over the top in terms of complexity.  The
only device which has been seen to be connected with this MCP code is
the UCB1x00 (UCB1200, UCB1300 etc) devices, and they all use the same
driver.  Adding a match table, requiring the codec string to match the
hardware ID read out of the ID register, etc is completely over the top
when we can just read the hardware ID register.
</pre>
</div>
</content>
</entry>
</feed>
