|
@@ -144,9 +144,10 @@ static void rcar_i2c_init(struct rcar_i2c_priv *priv)
|
|
|
{
|
|
|
/* reset master mode */
|
|
|
rcar_i2c_write(priv, ICMIER, 0);
|
|
|
- rcar_i2c_write(priv, ICMCR, 0);
|
|
|
+ rcar_i2c_write(priv, ICMCR, MDBS);
|
|
|
rcar_i2c_write(priv, ICMSR, 0);
|
|
|
- rcar_i2c_write(priv, ICMAR, 0);
|
|
|
+ /* start clock */
|
|
|
+ rcar_i2c_write(priv, ICCCR, priv->icccr);
|
|
|
}
|
|
|
|
|
|
static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv)
|
|
@@ -496,16 +497,6 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
|
|
|
|
|
|
pm_runtime_get_sync(dev);
|
|
|
|
|
|
- /*-------------- spin lock -----------------*/
|
|
|
- spin_lock_irqsave(&priv->lock, flags);
|
|
|
-
|
|
|
- rcar_i2c_init(priv);
|
|
|
- /* start clock */
|
|
|
- rcar_i2c_write(priv, ICCCR, priv->icccr);
|
|
|
-
|
|
|
- spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
- /*-------------- spin unlock -----------------*/
|
|
|
-
|
|
|
ret = rcar_i2c_bus_barrier(priv);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
@@ -666,6 +657,7 @@ 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);
|