]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] cdrom event notification fixes
authorJens Axboe <axboe@suse.de>
Mon, 23 Aug 2004 06:03:04 +0000 (23:03 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 23 Aug 2004 06:03:04 +0000 (23:03 -0700)
A few fixes related to cdrom media event notification.  These are from
Alexander Kern <alex.kern@gmx.de>

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/cdrom/cdrom.c
drivers/ide/ide-cd.c

index 44e51afd8112b6b963e22d3eaf7a17844e6f7559..e0e8153b89546bef1474da19af8eaa8b517a0d62 100644 (file)
@@ -472,6 +472,9 @@ int cdrom_get_media_event(struct cdrom_device_info *cdi,
        if (be16_to_cpu(eh->data_len) < sizeof(*med))
                return 1;
 
+       if (eh->nea || eh->notification_class != 0x4)
+               return 1;
+
        memcpy(med, &buffer[sizeof(*eh)], sizeof(*med));
        return 0;
 }
index c3d6286eb87c1f99092b9c5d99571f0b8691f65a..cc6b66e34e37cfac5c6663d1b49070638a42cdfc 100644 (file)
@@ -2719,8 +2719,10 @@ int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
        if (!cdrom_get_media_event(cdi, &med)) {
                if (med.media_present)
                        return CDS_DISC_OK;
-               if (med.door_open)
+               else if (med.door_open)
                        return CDS_TRAY_OPEN;
+               else
+                       return CDS_NO_DISC;
        }
 
        if (sense.sense_key == NOT_READY && sense.asc == 0x04 && sense.ascq == 0x04)
@@ -2732,10 +2734,12 @@ int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
         * any other way to detect this...
         */
        if (sense.sense_key == NOT_READY) {
-               if (sense.asc == 0x3a && sense.ascq == 1)
-                       return CDS_NO_DISC;
-               else
-                       return CDS_TRAY_OPEN;
+               if (sense.asc == 0x3a) {
+                       if (sense.ascq == 0 || sense.ascq == 1)
+                               return CDS_NO_DISC;
+                       else if (sense.ascq == 2)
+                               return CDS_TRAY_OPEN;
+               }
        }
 
        return CDS_DRIVE_NOT_READY;