*
  *     Some control dlci can stay in ADM mode with other dlci working just
  *     fine. In that case we can just keep the control dlci open after the
- *     DLCI_OPENING retries time out.
+ *     DLCI_OPENING receives DM.
  */
 
 static void gsm_dlci_t1(struct timer_list *t)
                }
                break;
        case DLCI_OPENING:
-               if (dlci->retries) {
+               if (!dlci->addr && gsm->control == (DM | PF)) {
+                       if (debug & DBG_ERRORS)
+                               pr_info("DLCI 0 opening in ADM mode.\n");
+                       dlci->mode = DLCI_MODE_ADM;
+                       gsm_dlci_open(dlci);
+               } else if (dlci->retries) {
                        if (!dlci->addr || !gsm->dlci[0] ||
                            gsm->dlci[0]->state != DLCI_OPENING) {
                                dlci->retries--;
                        }
 
                        mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
-               } else if (!dlci->addr && gsm->control == (DM | PF)) {
-                       if (debug & DBG_ERRORS)
-                               pr_info("DLCI 0 opening in ADM mode.\n");
-                       dlci->mode = DLCI_MODE_ADM;
-                       gsm_dlci_open(dlci);
                } else {
                        gsm->open_error++;
                        gsm_dlci_begin_close(dlci); /* prevent half open link */