debug_log("Enter %s - interrupt handler\n", __func__);
 
        if (pc->flags & PC_FLAG_TIMEDOUT) {
-               pc->callback(drive);
+               if (drive->media == ide_floppy)
+                       drive->pc_callback(drive);
+               else
+                       pc->callback(drive);
                return ide_stopped;
        }
 
                        return ide_stopped;
                }
                /* Command finished - Call the callback function */
-               pc->callback(drive);
+               if (drive->media == ide_floppy)
+                       drive->pc_callback(drive);
+               else
+                       pc->callback(drive);
                return ide_stopped;
        }
 
 
        memset(pc, 0, sizeof(*pc));
        pc->buf = pc->pc_buf;
        pc->buf_size = IDEFLOPPY_PC_BUFFER_SIZE;
-       pc->callback = ide_floppy_callback;
 }
 
 static void idefloppy_create_request_sense_cmd(struct ide_atapi_pc *pc)
                pc->error = IDEFLOPPY_ERROR_GENERAL;
 
                floppy->failed_pc = NULL;
-               pc->callback(drive);
+               drive->pc_callback(drive);
                return ide_stopped;
        }
 
 
        *((u16 *) &gcw) = drive->id->config;
        floppy->pc = floppy->pc_stack;
+       drive->pc_callback = ide_floppy_callback;
 
        if (((gcw[0] & 0x60) >> 5) == 1)
                floppy->flags |= IDEFLOPPY_FLAG_DRQ_INTERRUPT;