--- initial
+++ final
@@ -1,91 +1,85 @@
 static int icn_loadproto(u_char __user *buffer, icn_card *card) {
   register u_char __user *p = buffer;
   u_char codebuf[256];
   uint left = ICN_CODE_STAGE2;
   uint cnt;
   int timer;
   unsigned long flags;
 #ifdef BOOT_DEBUG
   printk(KERN_DEBUG "icn_loadproto called\n");
 #endif
   if (!access_ok(VERIFY_READ, buffer, ICN_CODE_STAGE2)) return -EFAULT;
   timer = 0;
   spin_lock_irqsave(&dev.devlock, flags);
   if (card->secondhalf) {
     icn_map_channel(card, 2);
     icn_lock_channel(card, 2);
   } else {
     icn_map_channel(card, 0);
     icn_lock_channel(card, 0);
   }
   spin_unlock_irqrestore(&dev.devlock, flags);
   while (left) {
     if (sbfree) { /* If there is a free buffer...  */
       cnt = left;
       if (cnt > 256) cnt = 256;
       if (copy_from_user(codebuf, p, cnt)) {
         icn_maprelease_channel(card, 0);
         return -EFAULT;
       }
       memcpy_toio(&sbuf_l, codebuf, cnt); /* copy data                     */
       sbnext;                             /* switch to next buffer         */
       p += cnt;
       left -= cnt;
       timer = 0;
     } else {
 #ifdef BOOT_DEBUG
       printk(KERN_DEBUG "boot 2 !sbfree\n");
 #endif
       if (timer++ > 5) {
         icn_maprelease_channel(card, 0);
         return -EIO;
       }
       schedule_timeout_interruptible(10);
     }
   }
   writeb(0x20, &sbuf_n);
   timer = 0;
   while (1) {
     if (readb(&cmd_o) || readb(&cmd_i)) {
 #ifdef BOOT_DEBUG
       printk(KERN_DEBUG "Proto?\n");
 #endif
       if (timer++ > 5) {
         printk(KERN_WARNING "icn: (%s) Protocol timed out.\n", CID);
 #ifdef BOOT_DEBUG
         printk(KERN_DEBUG "Proto TO!\n");
 #endif
         icn_maprelease_channel(card, 0);
         return -EIO;
       }
 #ifdef BOOT_DEBUG
       printk(KERN_DEBUG "Proto TO?\n");
 #endif
       msleep_interruptible(ICN_BOOT_TIMEOUT1);
     } else {
       if ((card->secondhalf) || (!card->doubleS0)) {
 #ifdef BOOT_DEBUG
         printk(KERN_DEBUG "Proto loaded, install poll-timer %d\n", card->secondhalf);
 #endif
         spin_lock_irqsave(&card->lock, flags);
-        init_timer(&card->st_timer);
-        card->st_timer.expires = jiffies + ICN_TIMER_DCREAD;
-        card->st_timer.function = icn_polldchan;
-        card->st_timer.data = (unsigned long)card;
-        add_timer(&card->st_timer);
+        setup_timer(&card->st_timer, icn_polldchan, (unsigned long)card);
+        mod_timer(&card->st_timer, jiffies + ICN_TIMER_DCREAD);
         card->flags |= ICN_FLAGS_RUNNING;
         if (card->doubleS0) {
-          init_timer(&card->other->st_timer);
-          card->other->st_timer.expires = jiffies + ICN_TIMER_DCREAD;
-          card->other->st_timer.function = icn_polldchan;
-          card->other->st_timer.data = (unsigned long)card->other;
-          add_timer(&card->other->st_timer);
+          setup_timer(&card->other->st_timer, icn_polldchan, (unsigned long)card->other);
+          mod_timer(&card->other->st_timer, jiffies + ICN_TIMER_DCREAD);
           card->other->flags |= ICN_FLAGS_RUNNING;
         }
         spin_unlock_irqrestore(&card->lock, flags);
       }
       icn_maprelease_channel(card, 0);
       return 0;
     }
   }
 }<sep>@@
expression E0;
expression E1;
expression E2,e2;
@@
- init_timer(&E0);
+ setup_timer(&E0, E1, E2);
  ... when != E0.data = e2;
- E0.function = E1;
  ... when != init_timer(&E0);
- E0.data = E2;



@@
expression E0,v;
@@

-	E0.expires = v;
	...
-	add_timer(&E0);
+	mod_timer(&E0, v);