diff options
| -rw-r--r-- | drivers/i2c/busses/i2c-designware-core.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-nomadik.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-qup.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-rcar.c | 9 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-s3c2410.c | 2 |
5 files changed, 14 insertions, 4 deletions
diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c index 22e92c3d3d07..3c20e4bd6dd1 100644 --- a/drivers/i2c/busses/i2c-designware-core.c +++ b/drivers/i2c/busses/i2c-designware-core.c | |||
| @@ -422,6 +422,9 @@ static void i2c_dw_xfer_init(struct dw_i2c_dev *dev) | |||
| 422 | */ | 422 | */ |
| 423 | dw_writel(dev, msgs[dev->msg_write_idx].addr | ic_tar, DW_IC_TAR); | 423 | dw_writel(dev, msgs[dev->msg_write_idx].addr | ic_tar, DW_IC_TAR); |
| 424 | 424 | ||
| 425 | /* enforce disabled interrupts (due to HW issues) */ | ||
| 426 | i2c_dw_disable_int(dev); | ||
| 427 | |||
| 425 | /* Enable the adapter */ | 428 | /* Enable the adapter */ |
| 426 | __i2c_dw_enable(dev, true); | 429 | __i2c_dw_enable(dev, true); |
| 427 | 430 | ||
diff --git a/drivers/i2c/busses/i2c-nomadik.c b/drivers/i2c/busses/i2c-nomadik.c index 28cbe1b2a2ec..32c85e9ecdae 100644 --- a/drivers/i2c/busses/i2c-nomadik.c +++ b/drivers/i2c/busses/i2c-nomadik.c | |||
| @@ -999,7 +999,7 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) | |||
| 999 | 999 | ||
| 1000 | dev->virtbase = devm_ioremap(&adev->dev, adev->res.start, | 1000 | dev->virtbase = devm_ioremap(&adev->dev, adev->res.start, |
| 1001 | resource_size(&adev->res)); | 1001 | resource_size(&adev->res)); |
| 1002 | if (IS_ERR(dev->virtbase)) { | 1002 | if (!dev->virtbase) { |
| 1003 | ret = -ENOMEM; | 1003 | ret = -ENOMEM; |
| 1004 | goto err_no_mem; | 1004 | goto err_no_mem; |
| 1005 | } | 1005 | } |
diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c index 1b4cf14f1106..2a5efb5b487c 100644 --- a/drivers/i2c/busses/i2c-qup.c +++ b/drivers/i2c/busses/i2c-qup.c | |||
| @@ -479,7 +479,7 @@ static int qup_i2c_xfer(struct i2c_adapter *adap, | |||
| 479 | int ret, idx; | 479 | int ret, idx; |
| 480 | 480 | ||
| 481 | ret = pm_runtime_get_sync(qup->dev); | 481 | ret = pm_runtime_get_sync(qup->dev); |
| 482 | if (ret) | 482 | if (ret < 0) |
| 483 | goto out; | 483 | goto out; |
| 484 | 484 | ||
| 485 | writel(1, qup->base + QUP_SW_RESET); | 485 | writel(1, qup->base + QUP_SW_RESET); |
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c index d4fa8eba6e9d..06d47aafbb79 100644 --- a/drivers/i2c/busses/i2c-rcar.c +++ b/drivers/i2c/busses/i2c-rcar.c | |||
| @@ -561,6 +561,12 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap, | |||
| 561 | 561 | ||
| 562 | ret = -EINVAL; | 562 | ret = -EINVAL; |
| 563 | for (i = 0; i < num; i++) { | 563 | for (i = 0; i < num; i++) { |
| 564 | /* This HW can't send STOP after address phase */ | ||
| 565 | if (msgs[i].len == 0) { | ||
| 566 | ret = -EOPNOTSUPP; | ||
| 567 | break; | ||
| 568 | } | ||
| 569 | |||
| 564 | /*-------------- spin lock -----------------*/ | 570 | /*-------------- spin lock -----------------*/ |
| 565 | spin_lock_irqsave(&priv->lock, flags); | 571 | spin_lock_irqsave(&priv->lock, flags); |
| 566 | 572 | ||
| @@ -625,7 +631,8 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap, | |||
| 625 | 631 | ||
| 626 | static u32 rcar_i2c_func(struct i2c_adapter *adap) | 632 | static u32 rcar_i2c_func(struct i2c_adapter *adap) |
| 627 | { | 633 | { |
| 628 | return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; | 634 | /* This HW can't do SMBUS_QUICK and NOSTART */ |
| 635 | return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK); | ||
| 629 | } | 636 | } |
| 630 | 637 | ||
| 631 | static const struct i2c_algorithm rcar_i2c_algo = { | 638 | static const struct i2c_algorithm rcar_i2c_algo = { |
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index ae4491062e41..bb3a9964f7e0 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
| @@ -1276,10 +1276,10 @@ static int s3c24xx_i2c_resume(struct device *dev) | |||
| 1276 | struct platform_device *pdev = to_platform_device(dev); | 1276 | struct platform_device *pdev = to_platform_device(dev); |
| 1277 | struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev); | 1277 | struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev); |
| 1278 | 1278 | ||
| 1279 | i2c->suspended = 0; | ||
| 1280 | clk_prepare_enable(i2c->clk); | 1279 | clk_prepare_enable(i2c->clk); |
| 1281 | s3c24xx_i2c_init(i2c); | 1280 | s3c24xx_i2c_init(i2c); |
| 1282 | clk_disable_unprepare(i2c->clk); | 1281 | clk_disable_unprepare(i2c->clk); |
| 1282 | i2c->suspended = 0; | ||
| 1283 | 1283 | ||
| 1284 | return 0; | 1284 | return 0; |
| 1285 | } | 1285 | } |
