setbits_le32(®s->control, CDNS_I2C_CONTROL_CLR_FIFO);
clrbits_le32(®s->control, CDNS_I2C_CONTROL_RW);
- /* Check message size against FIFO depth, and set hold bus bit
- * if it is greater than FIFO depth
+ /*
+ * For sequential data load hold the bus.
*/
- if (len > CDNS_I2C_FIFO_DEPTH)
+ if (len > 1)
setbits_le32(®s->control, CDNS_I2C_CONTROL_HOLD);
/* Clear the interrupts in status register */
writel(CDNS_I2C_INTERRUPTS_MASK, ®s->interrupt_status);
- writel(addr, ®s->address);
+ /* In case of Probe (i.e no data), start the transfer */
+ if (!len)
+ writel(addr, ®s->address);
while (len-- && !is_arbitration_lost(regs)) {
writel(*(cur_data++), ®s->data);