]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
i2c: rcar: fix resume by always initializing registers before transfer
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Tue, 18 Apr 2017 18:38:35 +0000 (20:38 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Jul 2018 14:03:47 +0000 (16:03 +0200)
commit ae481cc139658e89eb3ea671dd00b67bd87f01a3 upstream.

Resume failed because of uninitialized registers. Instead of adding a
resume callback, we simply initialize registers before every transfer.
This lightweight change is more robust and will keep us safe if we ever
need support for power domains or dynamic frequency changes.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/i2c/busses/i2c-rcar.c

index 6f89484765e3077bcfff261cefd2b162fadf4bf2..dfe1a53ce4ad35cfb787fa3d190b71f5e20df8ba 100644 (file)
@@ -484,6 +484,8 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
 
        pm_runtime_get_sync(dev);
 
+       rcar_i2c_init(priv);
+
        ret = rcar_i2c_bus_barrier(priv);
        if (ret < 0)
                goto out;
@@ -624,7 +626,6 @@ static int rcar_i2c_probe(struct platform_device *pdev)
        if (ret < 0)
                goto out_pm_put;
 
-       rcar_i2c_init(priv);
        pm_runtime_put(dev);
 
        irq = platform_get_irq(pdev, 0);