<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/drivers/mfd, branch v4.9</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
</subtitle>
<id>https://git.shady.money/linux/atom?h=v4.9</id>
<link rel='self' href='https://git.shady.money/linux/atom?h=v4.9'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/'/>
<updated>2016-11-25T11:10:55Z</updated>
<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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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.shady.money/linux/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>
<entry>
<title>Merge tag 'gpio-v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio</title>
<updated>2016-10-05T18:49:09Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2016-10-05T18:49:09Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=6a497e9d5828120cf55c2aea508176d94cf7f5ba'/>
<id>urn:sha1:6a497e9d5828120cf55c2aea508176d94cf7f5ba</id>
<content type='text'>
Pull GPIO updates from Linus Walleij:
 "This is the bulk of GPIO changes for the v4.9 series:

  Subsystem improvements:

   - do away with the last users of the obsolete Kconfig options
     ARCH_REQUIRE_GPIOLIB and ARCH_WANT_OPTIONAL_GPIOLIB (the latter
     always sounded like an item on a wishlist to Santa Claus to me). We
     can now select GPIOLIB and be done with it, for all archs. After
     some struggle it even work on UM. Not that it has GPIO, but if it
     wants to, it can select the library.

   - continued efforts to make drivers properly either tristate or bool.

   - introduce a warning for drivers assigning default triggers to their
     irqchip lines when probed from device tree, so we find and fix
     these ambigous drivers. It is agreed that in the OF config path,
     the device tree defines trigger characteristics.

   - the same warning, mutatis mutandis, for ACPI-probed GPIO irqchips.

   - we introduce the ability to mark certain IRQ lines as "unusable" as
     they can be taken by BIOS/firmware, unrouted in silicon and
     generally nasty if you use them, and such things. This is put to
     good use in the STMPE driver and also in the Cherryview pin control
     driver.

   - a new "mockup" virtual GPIO device that can be used for testing.
     The plan is to add unit tests under tools/* for exercising this
     device and verify that the kernel code paths are working as they
     should.

   - make memory-mapped I/O-drivers depend on HAS_IOMEM. This was
     implicit all the time, but when people started building UM with
     allyesconfig or allmodconfig it exploded in their face.

   - move some stray bits of device tree and ACPI HW description
     callbacks down into their respective implementation silo. These
     were causing issues when compiling on !HAS_IOMEM as well, so now
     eventually UM compiles the GPIOLIB library if it wants to.

  New drivers:

   - new driver for the Aspeed GPIO front-end companion to the pin
     controller merged through the pin control tree.

   - new driver for the LP873x PMIC GPIO portions.

   - new driver for Technologic Systems' I2C FPGA GPIO such as TS4900,
     TS-7970, TS-7990 and TS-4100.

   - new driver for the Broadcom BCM63xx series including BCM6338 and
     BCM6345.

   - new driver for the Intel WhiskeyCove PMIC GPIO.

   - new driver for the Allwinner AXP209 PMIC GPIO portions.

   - new driver for Diamond Systems 48 line GPIO-MM, another of these
     port-mapped I/O expansion cards.

   - support the STMicroelectronics STMPE1600 variant in the STMPE
     driver.

  Driver improvements:

   - the STMPE driver now supports rising/falling edge detection
     properly for IRQs.

   - the PCA954x will now fetch and enable its VCC regulator properly.

   - major rework of the PCA953x driver with the goal of eventually
     switching it over to use regmap and thus modernize it even more.

   - switch the IOP driver to use the generic MMIO GPIO library.

   - move the ages old HTC EGPIO (extended GPIO) GPIO expander driver
     over to this subsystem from MFD, achieveing some separation of
     concerns"

* tag 'gpio-v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (81 commits)
  gpio: add missing static inline
  gpio: OF: localize some gpiochip init functions
  gpio: acpi: separation of concerns
  gpio: OF: separation of concerns
  gpio: make memory-mapped drivers depend on HAS_IOMEM
  gpio: stmpe: use BIT() macro
  gpio: stmpe: forbid unused lines to be mapped as IRQs
  mfd/gpio: Move HTC GPIO driver to GPIO subsystem
  gpio: MAINTAINERS: Add an entry for GPIO mockup driver
  gpio/mockup: add virtual gpio device
  gpio: Added zynq specific check for special pins on bank zero
  gpio: axp209: Implement get_direction
  gpio: aspeed: remove redundant return value check
  gpio: loongson1: remove redundant return value check
  ARM: omap2: fix missing include
  gpio: tc3589x: fix up complaints on unsigned
  gpio: tc3589x: add .get_direction() and small cleanup
  gpio: f7188x: use gpiochip_get_data instead of container_of
  gpio: tps65218: use devm_gpiochip_add_data() for gpio registration
  gpio: aspeed: fix return value check in aspeed_gpio_probe()
  ...
</content>
</entry>
</feed>
