Hi, thanks for the submission! > --- a/drivers/i2c/busses/i2c-ibm_iic.c > +++ b/drivers/i2c/busses/i2c-ibm_iic.c > @@ -58,6 +58,8 @@ static bool iic_force_fast; > module_param(iic_force_fast, bool, 0); > MODULE_PARM_DESC(iic_force_fast, "Force fast mode (400 kHz)"); > > +#define FIFO_FLUSH_TIMEOUT 100 100 what? The unit is missing. > @@ -167,8 +170,8 @@ static void iic_dev_init(struct ibm_iic_private* dev) > /* Clear control register */ > out_8(&iic->cntl, 0); > > - /* Enable interrupts if possible */ > - iic_interrupt_mode(dev, dev->irq >= 0); > + /* Start with each individual interrupt masked*/ Space at the end of comment missing > static irqreturn_t iic_handler(int irq, void *dev_id) > { > - struct ibm_iic_private* dev = (struct ibm_iic_private*)dev_id; > - struct iic_regs __iomem *iic = dev->vaddr; > - > - DBG2(dev, "irq handler, STS = 0x%02x, EXTSTS = 0x%02x\n", > - in_8(&iic->sts), in_8(&iic->extsts)); > - > - /* Acknowledge IRQ and wakeup iic_wait_for_tc */ > - out_8(&iic->sts, STS_IRQA | STS_SCMP); > - wake_up_interruptible(&dev->wq); > - > + struct ibm_iic_private *dev = (struct ibm_iic_private *) dev_id; > + iic_xfer_bytes(dev); Is iic_xfer_bytes later used when polling, too? Otherwise it could be simply inserted here. > + if ((status & STS_ERR) || > + (ext_status & (EXTSTS_LA | EXTSTS_ICT | EXTSTS_XFRA))) { > + DBG(dev, "status 0x%x\n", status); > + DBG(dev, "extended status 0x%x\n", ext_status); > + if (status & STS_ERR) > + ERR(dev, "Error detected\n"); > + if (ext_status & EXTSTS_LA) > + DBG(dev, "Lost arbitration\n"); > + if (ext_status & EXTSTS_ICT) > + ERR(dev, "Incomplete transfer\n"); > + if (ext_status & EXTSTS_XFRA) > + ERR(dev, "Transfer aborted\n"); > + > + dev->status = -EIO; You could consider returning different fault codes for the different states. See Documentation/i2c/fault-codes for a guide. > + if (dev->msgs == NULL) { > + DBG(dev, "spurious !!!!!\n"); > + dev->status = -EINVAL; > + return dev->status; > + } Does that really happen? And it introduces a build warning: drivers/i2c/busses/i2c-ibm_iic.c:410:12: warning: 'iic_wait_for_tc' defined but not used [-Wunused-function]
Attachment:
signature.asc
Description: Digital signature