{
        unsigned long start;
        u32 stat;
+       int err;
 
        if (FW_VERSION(av7110->arm_app) <= 0x261c) {
                /* not supported by old firmware */
        /* new firmware */
        start = jiffies;
        for (;;) {
+               err = time_after(jiffies, start + ARM_WAIT_FREE);
                if (down_interruptible(&av7110->dcomlock))
                        return -ERESTARTSYS;
                stat = rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2);
                up(&av7110->dcomlock);
-               if ((stat & flags) == 0) {
+               if ((stat & flags) == 0)
                        break;
-               }
-               if (time_after(jiffies, start + ARM_WAIT_FREE)) {
+               if (err) {
                        printk(KERN_ERR "%s: timeout waiting for MSGSTATE %04x\n",
                                __FUNCTION__, stat & flags);
                        return -ETIMEDOUT;
        char *type = NULL;
        u16 flags[2] = {0, 0};
        u32 stat;
+       int err;
 
 //     dprintk(4, "%p\n", av7110);
 
        }
 
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2 )) {
-               if (time_after(jiffies, start + ARM_WAIT_FREE)) {
+       while (1) {
+               err = time_after(jiffies, start + ARM_WAIT_FREE);
+               if (rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2) == 0)
+                       break;
+               if (err) {
                        printk(KERN_ERR "dvb-ttpci: %s(): timeout waiting for COMMAND idle\n", __FUNCTION__);
                        return -ETIMEDOUT;
                }
 
 #ifndef _NOHANDSHAKE
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 )) {
-               if (time_after(jiffies, start + ARM_WAIT_SHAKE)) {
+       while (1) {
+               err = time_after(jiffies, start + ARM_WAIT_SHAKE);
+               if (rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2) == 0)
+                       break;
+               if (err) {
                        printk(KERN_ERR "dvb-ttpci: %s(): timeout waiting for HANDSHAKE_REG\n", __FUNCTION__);
                        return -ETIMEDOUT;
                }
                /* non-immediate COMMAND type */
                start = jiffies;
                for (;;) {
+                       err = time_after(jiffies, start + ARM_WAIT_FREE);
                        stat = rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2);
                        if (stat & flags[0]) {
                                printk(KERN_ERR "%s: %s QUEUE overflow\n",
                        }
                        if ((stat & flags[1]) == 0)
                                break;
-                       if (time_after(jiffies, start + ARM_WAIT_FREE)) {
+                       if (err) {
                                printk(KERN_ERR "%s: timeout waiting on busy %s QUEUE\n",
                                        __FUNCTION__, type);
                                return -ETIMEDOUT;
 
 #ifdef COM_DEBUG
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2 )) {
-               if (time_after(jiffies, start + ARM_WAIT_FREE)) {
+       while (1) {
+               err = time_after(jiffies, start + ARM_WAIT_FREE);
+               if (rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2) == 0)
+                       break;
+               if (err) {
                        printk(KERN_ERR "dvb-ttpci: %s(): timeout waiting for COMMAND %d to complete\n",
-                              __FUNCTION__,
-                               (buf[0] >> 8) & 0xff
-                              );
+                              __FUNCTION__, (buf[0] >> 8) & 0xff);
                        return -ETIMEDOUT;
                }
                msleep(1);
        }
 
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2)) {
-               if (time_after(jiffies, start + ARM_WAIT_FREE)) {
+       while (1) {
+               err = time_after(jiffies, start + ARM_WAIT_FREE);
+               if (rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2) == 0)
+                       break;
+               if (err) {
                        printk(KERN_ERR "%s: timeout waiting for COMMAND to complete\n", __FUNCTION__);
                        up(&av7110->dcomlock);
                        return -ETIMEDOUT;
 
 #ifndef _NOHANDSHAKE
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 )) {
-               if (time_after(jiffies, start + ARM_WAIT_SHAKE)) {
+       while (1) {
+               err = time_after(jiffies, start + ARM_WAIT_SHAKE);
+               if (rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2) == 0)
+                       break;
+               if (err) {
                        printk(KERN_ERR "%s: timeout waiting for HANDSHAKE_REG\n", __FUNCTION__);
                        up(&av7110->dcomlock);
                        return -ETIMEDOUT;
 static int FlushText(struct av7110 *av7110)
 {
        unsigned long start;
+       int err;
 
        if (down_interruptible(&av7110->dcomlock))
                return -ERESTARTSYS;
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2)) {
-               if (time_after(jiffies, start + ARM_WAIT_OSD)) {
+       while (1) {
+               err = time_after(jiffies, start + ARM_WAIT_OSD);
+               if (rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2) == 0)
+                       break;
+               if (err) {
                        printk(KERN_ERR "dvb-ttpci: %s(): timeout waiting for BUFF1_BASE == 0\n",
                               __FUNCTION__);
                        up(&av7110->dcomlock);
                return -ERESTARTSYS;
 
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2)) {
-               if (time_after(jiffies, start + ARM_WAIT_OSD)) {
+       while (1) {
+               ret = time_after(jiffies, start + ARM_WAIT_OSD);
+               if (rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2) == 0)
+                       break;
+               if (ret) {
                        printk(KERN_ERR "dvb-ttpci: %s: timeout waiting for BUFF1_BASE == 0\n",
                               __FUNCTION__);
                        up(&av7110->dcomlock);
        }
 #ifndef _NOHANDSHAKE
        start = jiffies;
-       while (rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2)) {
-               if (time_after(jiffies, start + ARM_WAIT_SHAKE)) {
+       while (1) {
+               ret = time_after(jiffies, start + ARM_WAIT_SHAKE);
+               if (rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2) == 0)
+                       break;
+               if (ret) {
                        printk(KERN_ERR "dvb-ttpci: %s: timeout waiting for HANDSHAKE_REG\n",
                               __FUNCTION__);
                        up(&av7110->dcomlock);