
From: Stas Sergeev <stsp@aknet.ru>

The attached patch fixes the CD-ROM autoclose.  It is broken in recent
kernels for CD-ROMs that do not properly report that the tray is opened. 
Now on such a drives the kernel will do one close attempt and check for the
disc again.  This is how it used to work in the past.

Acked-by: Alexander Kern <alex.kern@gmx.de>
Signed-off-by: Stas Sergeev <stsp@aknet.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/cdrom/cdrom.c |    2 ++
 25-akpm/drivers/ide/ide-cd.c  |    4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff -puN drivers/cdrom/cdrom.c~fix-cdrom-autoclose drivers/cdrom/cdrom.c
--- 25/drivers/cdrom/cdrom.c~fix-cdrom-autoclose	2005-01-05 16:15:56.169312928 -0800
+++ 25-akpm/drivers/cdrom/cdrom.c	2005-01-05 16:15:56.177311712 -0800
@@ -1076,6 +1076,8 @@ int open_for_data(struct cdrom_device_in
 			}
 			cdinfo(CD_OPEN, "the tray is now closed.\n"); 
 		}
+		/* the door should be closed now, check for the disc */
+		ret = cdo->drive_status(cdi, CDSL_CURRENT);
 		if (ret!=CDS_DISC_OK) {
 			ret = -ENOMEDIUM;
 			goto clean_up_and_return;
diff -puN drivers/ide/ide-cd.c~fix-cdrom-autoclose drivers/ide/ide-cd.c
--- 25/drivers/ide/ide-cd.c~fix-cdrom-autoclose	2005-01-05 16:15:56.171312624 -0800
+++ 25-akpm/drivers/ide/ide-cd.c	2005-01-05 16:15:56.179311408 -0800
@@ -2744,9 +2744,9 @@ int ide_cdrom_drive_status (struct cdrom
 	 */
 	if (sense.sense_key == NOT_READY) {
 		if (sense.asc == 0x3a) {
-			if (sense.ascq == 0 || sense.ascq == 1)
+			if (sense.ascq == 1)
 				return CDS_NO_DISC;
-			else if (sense.ascq == 2)
+			else if (sense.ascq == 0 || sense.ascq == 2)
 				return CDS_TRAY_OPEN;
 		}
 	}
_
