Hi, fugang.duan@xxxxxxxxxxxxx wrote: > From: Yuan Yao-B46683 Data: Thursday, August 07, 2014 4:05 PM > >To: Duan Fugang-B38611; wsa@xxxxxxxxxxxxx; marex@xxxxxxx > >Cc: LW@xxxxxxxxxxxxxxxxxxx; mark.rutland@xxxxxxx; shawn.guo@xxxxxxxxxx; > >linux-kernel@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux- > >i2c@xxxxxxxxxxxxxxx; Li Frank-B20596 > >Subject: RE: [PATCH v6 1/2] i2c: imx: add DMA support for freescale i2c > >driver > > > >Hi Fugang, > > > >> >> >+ /* Waiting for Transfer complete. */ > >> >> >+ while (timeout--) { > >> >> >+ temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); > >> >> >+ if (temp & I2SR_ICF) > >> >> >+ break; > >> >> >+ udelay(10); > >> >> >+ } > >> >> Whether there have better method like interrupt to avoid dead wait > >> >> here until timeout ? > >> > > >> >Can you give me more suggestion? We have discussed it with our team, > >> >It seems the short query wait is necessary. > >> > > >> At least, you can use schdule_timeout() instead of udelay() ? > > > >In fact, the waiting time normally is less than 10-50us, but the minimum > >time interval for schdule_timeout() is 1 jiffies. > >So maybe schdule_timeout() is not very necessary? > > > Oh, if the waiting time is 10 ~ 50us, you can use usleep_range(10, 50). > The loop is not meant to generate a certain delay, but to wait for some HW flag to change within a certain time frame. So usleep_range() is rather inadequate here! But looking a little closer at the function, the timeout value seems to be rather bogus to me. The loop counter 'timeout' is initialized from the constant IMX_I2C_DMA_TIMEOUT which is also used in |wait_for_completion_interruptible_timeout( | &i2c_imx->dma->cmd_complete, | msecs_to_jiffies(IMX_I2C_DMA_TIMEOUT)); ^^^^^^^^^^^^^^^^^^^ as a number of milliseconds to wait for DMA completion. Lothar Waßmann -- ___________________________________________________________ Ka-Ro electronics GmbH | Pascalstraße 22 | D - 52076 Aachen Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10 Geschäftsführer: Matthias Kaussen Handelsregistereintrag: Amtsgericht Aachen, HRB 4996 www.karo-electronics.de | info@xxxxxxxxxxxxxxxxxxx ___________________________________________________________ -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html