aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWolfram Sang <wsa+renesas@sang-engineering.com>2017-04-18 14:38:35 -0400
committerWolfram Sang <wsa@the-dreams.de>2017-04-21 08:08:52 -0400
commitae481cc139658e89eb3ea671dd00b67bd87f01a3 (patch)
tree7b02e744bba9385b1beb55ee2346ce45a4720d37
parent8c91fd5ee64241d96c9cad97669389bacd10f4ea (diff)
i2c: rcar: fix resume by always initializing registers before transfer
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>
-rw-r--r--drivers/i2c/busses/i2c-rcar.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index 26f2ff22e97e..66b84bf51bbf 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -700,6 +700,8 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
700 700
701 pm_runtime_get_sync(dev); 701 pm_runtime_get_sync(dev);
702 702
703 rcar_i2c_init(priv);
704
703 ret = rcar_i2c_bus_barrier(priv); 705 ret = rcar_i2c_bus_barrier(priv);
704 if (ret < 0) 706 if (ret < 0)
705 goto out; 707 goto out;
@@ -860,8 +862,6 @@ static int rcar_i2c_probe(struct platform_device *pdev)
860 if (ret < 0) 862 if (ret < 0)
861 goto out_pm_put; 863 goto out_pm_put;
862 864
863 rcar_i2c_init(priv);
864
865 /* Don't suspend when multi-master to keep arbitration working */ 865 /* Don't suspend when multi-master to keep arbitration working */
866 if (of_property_read_bool(dev->of_node, "multi-master")) 866 if (of_property_read_bool(dev->of_node, "multi-master"))
867 priv->flags |= ID_P_PM_BLOCKED; 867 priv->flags |= ID_P_PM_BLOCKED;