unsigned long flags;
        ide_hwgroup_t *hwgroup = HWGROUP(drive);
        ide_hwif_t *hwif = HWIF(drive);
-       
+
        spin_lock_irqsave(&ide_lock, flags);
-       
        BUG_ON(hwgroup->handler);
-       hwgroup->handler        = handler;
-       hwgroup->expiry         = expiry;
-       hwgroup->timer.expires  = jiffies + timeout;
-       hwgroup->req_gen_timer = hwgroup->req_gen;
-       add_timer(&hwgroup->timer);
+       __ide_set_handler(drive, handler, timeout, expiry);
        hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG);
-       /* Drive takes 400nS to respond, we must avoid the IRQ being
-          serviced before that. 
-          
-          FIXME: we could skip this delay with care on non shared
-          devices 
-       */
+       /*
+        * Drive takes 400nS to respond, we must avoid the IRQ being
+        * serviced before that.
+        *
+        * FIXME: we could skip this delay with care on non shared devices
+        */
        ndelay(400);
        spin_unlock_irqrestore(&ide_lock, flags);
 }