Merge branch ‘i2c/for-current-fixed’ of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/wsa/linux [Linux 5.1]

Merge branch ‘i2c/for-current-fixed’ of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/wsa/linux [Linux 5.1]

This Linux kernel change "Merge branch ‘i2c/for-current-fixed’ of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/wsa/linux" is included in the Linux 5.1 release. This change is authored by Linus Torvalds <torvalds [at] linux-foundation.org> on Fri May 3 11:42:01 2019 -0700. The commit for this change in Linux stable tree is 8246343 (patch). Other info about this change: Merge: a4ccb5f 72bfcee

Merge branch 'i2c/for-current-fixed' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull i2c fixes from Wolfram Sang:
 "I2C driver bugfixes and a MAINTAINERS update for you"

* 'i2c/for-current-fixed' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: Prevent runtime suspend of adapter when Host Notify is required
  i2c: synquacer: fix enumeration of slave devices
  MAINTAINERS: friendly takeover of i2c-gpio driver
  i2c: designware: ratelimit 'transfer when suspended' errors
  i2c: imx: correct the method of getting private data in notifier_call

There is no are 0 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/i2c/i2c-core-base.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 38af186..8149c9e 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -327,6 +327,8 @@ static int i2c_device_probe(struct device *dev)

        if (client->flags & I2C_CLIENT_HOST_NOTIFY) {
            dev_dbg(dev, "Using Host Notify IRQ\n");
+           /* Keep adapter active when Host Notify is required */
+           pm_runtime_get_sync(&client->adapter->dev);
            irq = i2c_smbus_host_notify_to_irq(client);
        } else if (dev->of_node) {
            irq = of_irq_get_byname(dev->of_node, "irq");
@@ -431,6 +433,8 @@ static int i2c_device_remove(struct device *dev)
    device_init_wakeup(&client->dev, false);

    client->irq = client->init_irq;
+   if (client->flags & I2C_CLIENT_HOST_NOTIFY)
+       pm_runtime_put(&client->adapter->dev);

    return status;
 }

Leave a Reply

Your email address will not be published. Required fields are marked *