diff options
| author | Alexandre Belloni <[email protected]> | 2018-08-31 17:11:10 +0200 |
|---|---|---|
| committer | Wolfram Sang <[email protected]> | 2018-09-02 23:51:15 +0200 |
| commit | c7fa7aeff85cbd71c724e7a7b167c24356de9c5f (patch) | |
| tree | 83f095e0bbc6cfbb2b5693dd46b178497c6798ed | |
| parent | 96742775a3c0649b88140803737ffa1915eb4509 (diff) | |
i2c: designware: allow IP specific sda_hold_time
Because some old designware IPs were not supporting setting an SDA hold
time, vendors developed their own solution. Add a way for the final driver
to provide its own SDA hold time handling.
Reviewed-by: Andy Shevchenko <[email protected]>
Tested-by: Jarkko Nikula <[email protected]>
Acked-by: Jarkko Nikula <[email protected]>
Signed-off-by: Alexandre Belloni <[email protected]>
Signed-off-by: Wolfram Sang <[email protected]>
| -rw-r--r-- | drivers/i2c/busses/i2c-designware-common.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-designware-core.h | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c index 69ec4a791f23..36271cd75342 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -201,6 +201,8 @@ int i2c_dw_set_sda_hold(struct dw_i2c_dev *dev) dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n", dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK, dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT); + } else if (dev->set_sda_hold_time) { + dev->set_sda_hold_time(dev); } else if (dev->sda_hold_time) { dev_warn(dev->dev, "Hardware too old to adjust SDA hold time.\n"); diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h index e367b1af4ab2..f6cad20a86ff 100644 --- a/drivers/i2c/busses/i2c-designware-core.h +++ b/drivers/i2c/busses/i2c-designware-core.h @@ -269,6 +269,7 @@ struct dw_i2c_dev { void (*disable)(struct dw_i2c_dev *dev); void (*disable_int)(struct dw_i2c_dev *dev); int (*init)(struct dw_i2c_dev *dev); + int (*set_sda_hold_time)(struct dw_i2c_dev *dev); int mode; struct i2c_bus_recovery_info rinfo; }; |