|
|
@@ -256,11 +256,16 @@ static u32 i2c_dw_scl_lcnt(u32 ic_clk, u32 tLOW, u32 tf, int offset)
|
|
|
}
|
|
|
|
|
|
static void __i2c_dw_enable(struct dw_i2c_dev *dev, bool enable)
|
|
|
+{
|
|
|
+ dw_writel(dev, enable, DW_IC_ENABLE);
|
|
|
+}
|
|
|
+
|
|
|
+static void __i2c_dw_enable_and_wait(struct dw_i2c_dev *dev, bool enable)
|
|
|
{
|
|
|
int timeout = 100;
|
|
|
|
|
|
do {
|
|
|
- dw_writel(dev, enable, DW_IC_ENABLE);
|
|
|
+ __i2c_dw_enable(dev, enable);
|
|
|
if ((dw_readl(dev, DW_IC_ENABLE_STATUS) & 1) == enable)
|
|
|
return;
|
|
|
|
|
|
@@ -328,7 +333,7 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
|
|
|
comp_param1 = dw_readl(dev, DW_IC_COMP_PARAM_1);
|
|
|
|
|
|
/* Disable the adapter */
|
|
|
- __i2c_dw_enable(dev, false);
|
|
|
+ __i2c_dw_enable_and_wait(dev, false);
|
|
|
|
|
|
/* set standard and fast speed deviders for high/low periods */
|
|
|
|
|
|
@@ -441,7 +446,7 @@ static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
|
|
|
u32 ic_con, ic_tar = 0;
|
|
|
|
|
|
/* Disable the adapter */
|
|
|
- __i2c_dw_enable(dev, false);
|
|
|
+ __i2c_dw_enable_and_wait(dev, false);
|
|
|
|
|
|
/* if the slave address is ten bit address, enable 10BITADDR */
|
|
|
ic_con = dw_readl(dev, DW_IC_CON);
|
|
|
@@ -860,7 +865,7 @@ tx_aborted:
|
|
|
void i2c_dw_disable(struct dw_i2c_dev *dev)
|
|
|
{
|
|
|
/* Disable controller */
|
|
|
- __i2c_dw_enable(dev, false);
|
|
|
+ __i2c_dw_enable_and_wait(dev, false);
|
|
|
|
|
|
/* Disable all interupts */
|
|
|
dw_writel(dev, 0, DW_IC_INTR_MASK);
|