|
@@ -521,10 +521,16 @@ static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
|
|
irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
|
|
irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
|
|
{
|
|
{
|
|
struct dw_i2c_dev *dev = dev_id;
|
|
struct dw_i2c_dev *dev = dev_id;
|
|
- u32 stat;
|
|
|
|
|
|
+ u32 stat, enabled;
|
|
|
|
+
|
|
|
|
+ enabled = dw_readl(dev, DW_IC_ENABLE);
|
|
|
|
+ stat = dw_readl(dev, DW_IC_RAW_INTR_STAT);
|
|
|
|
+ dev_dbg(dev->dev, "%s: %s enabled= 0x%x stat=0x%x\n", __func__,
|
|
|
|
+ dev->adapter.name, enabled, stat);
|
|
|
|
+ if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY))
|
|
|
|
+ return IRQ_NONE;
|
|
|
|
|
|
stat = i2c_dw_read_clear_intrbits(dev);
|
|
stat = i2c_dw_read_clear_intrbits(dev);
|
|
- dev_dbg(dev->dev, "%s: stat=0x%x\n", __func__, stat);
|
|
|
|
|
|
|
|
if (stat & DW_IC_INTR_TX_ABRT) {
|
|
if (stat & DW_IC_INTR_TX_ABRT) {
|
|
dev->cmd_err |= DW_IC_ERR_TX_ABRT;
|
|
dev->cmd_err |= DW_IC_ERR_TX_ABRT;
|