]> git.kernelconcepts.de Git - karo-tx-linux.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)
committerWolfram Sang <wsa@the-dreams.de>
Fri, 21 Apr 2017 12:08:52 +0000 (14:08 +0200)
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>
drivers/i2c/busses/i2c-rcar.c

index 26f2ff22e97e55cadd20e696e6cd0bfeefeecc30..66b84bf51bbfd06350d9187c5c17b6632af417b7 100644 (file)
@@ -700,6 +700,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;
@@ -860,8 +862,6 @@ static int rcar_i2c_probe(struct platform_device *pdev)
        if (ret < 0)
                goto out_pm_put;
 
-       rcar_i2c_init(priv);
-
        /* Don't suspend when multi-master to keep arbitration working */
        if (of_property_read_bool(dev->of_node, "multi-master"))
                priv->flags |= ID_P_PM_BLOCKED;