modified the code to keep the logic same but removed some indention. Signed-off-by: Sudip Mukherjee <sudip@xxxxxxxxxxxxxxx> --- this patch will generate checkpatch warning about line more than 80char, and too many use of tab. but unless the total function is rewrtten it will be difficult to fix that. drivers/staging/ft1000/ft1000-usb/ft1000_debug.c | 44 +++++++++++------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c b/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c index 86dd699..584c59a 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c @@ -587,32 +587,30 @@ static long ft1000_ioctl(struct file *file, unsigned int command, if (qtype) { } else { /* Put message into Slow Queue */ - /* Only put a message into the DPRAM if msg doorbell is available */ - ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); - /* pr_debug("READ REGISTER tempword=%x\n", tempword); */ - if (tempword & FT1000_DB_DPRAM_TX) { - /* Suspend for 2ms and try again due to DSP doorbell busy */ - mdelay(2); + u8 cnt = 0; + + do { + /* Only put a message into the DPRAM if msg doorbell is available */ ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); + /* pr_debug("READ REGISTER tempword=%x\n", tempword); */ if (tempword & FT1000_DB_DPRAM_TX) { + /* Suspend for 2ms and try again due to DSP doorbell busy */ + if (cnt == 0) + mdelay(2); /* Suspend for 1ms and try again due to DSP doorbell busy */ - mdelay(1); - ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); - if (tempword & FT1000_DB_DPRAM_TX) { - ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); - if (tempword & FT1000_DB_DPRAM_TX) { - /* Suspend for 3ms and try again due to DSP doorbell busy */ - mdelay(3); - ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); - if (tempword & FT1000_DB_DPRAM_TX) { - pr_debug("Doorbell not available\n"); - result = -ENOTTY; - kfree(dpram_data); - break; - } - } - } - } + else if (cnt == 1) + mdelay(1); + /* Suspend for 3ms and try again due to DSP doorbell busy */ + else + mdelay(3); + } else + break; + } while (++cnt < 3); + if (tempword & FT1000_DB_DPRAM_TX) { + pr_debug("Doorbell not available\n"); + result = -ENOTTY; + kfree(dpram_data); + break; } /*pr_debug("finished reading register\n"); */ -- 1.8.1.2 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel