Latest working kernel version: Earliest failing kernel version: Distribution: Debian Hardware Environment: Clevo D410J + Optiarc DVD RW AD-7543A Software Environment: Problem Description: The "Optiarc DVD RW AD-7543A" DVD-ROM drive is a slim drive and cannot close the tray automatically once it was opened. I applied a debug patch to drivers/ide/ide-cd.c to 2.6.27-rc6 which prints out that the drive reports correctly that it cannot colose the tray: [ 12.133887] drivers/ide/ide-cd.c:1664: mechtype=1 [ 12.133892] drivers/ide/ide-cd.c:1669: cdrom CANNOT close the tray [ 12.133895] hdc: ATAPI 24X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache [ 12.134224] drivers/ide/ide-cd.c:1922: cdi->mask=0x40010, (cdi->mask & CDC_CLOSE_TRAY)=FALSE [ 12.134229] drivers/cdrom/cdrom.c:396: cdi->mask=0x40010, (cdi->mask & CDC_CLOSE_TRAY)=FALSE [ 12.134232] Uniform CD-ROM driver Revision: 3.20 [ 12.134288] drivers/cdrom/cdrom.c:410: cdi->mask=0x40010, (cdi->mask & CDC_CLOSE_TRAY)=FALSE [ 12.134291] drivers/cdrom/cdrom.c:413: cdi->mask=0x40010, (cdi->mask & CDC_CLOSE_TRAY)=FALSE [ 12.134296] drivers/cdrom/cdrom.c:447: cdi->mask=0x40010, (cdi->mask & CDC_CLOSE_TRAY)=FALSE However, when the "/proc/sys/dev/cdrom/info" is examined from the userspace, the "Can close tray" field becomes "1" (expected: "0"). $ cat /proc/sys/dev/cdrom/info CD-ROM information, Id: cdrom.c 3.20 2003/12/17 drive name: hdc drive speed: 24 drive # of slots: 1 Can close tray: 1 Can open tray: 1 Can lock tray: 1 Can change speed: 1 Can select disk: 0 Can read multisession: 1 Can read MCN: 1 Reports media changed: 1 Can play audio: 1 Can write CD-R: 1 Can write CD-RW: 1 Can read DVD: 1 Can write DVD-R: 1 Can write DVD-RAM: 1 Can read MRW: 1 Can write MRW: 1 Can write RAM: 1 $ cat /proc/ide/hdc/model Optiarc DVD RW AD-7543A Steps to reproduce: 1. Boot the system 2. cat /proc/sys/dev/cdrom/info
Created attachment 17912 [details] cdrom tray close debug patch
Created attachment 17913 [details] dmesg 2.6.27-rc6 + debug patch from comment #1
On a first look, your check is wrong: cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name); + printk(KERN_DEBUG "%s:%u: cdi->mask=0x%X, (cdi->mask & CDC_CLOSE_TRAY)=%s\n", + __FILE__, __LINE__, cdi->mask, (cdi->mask & CDC_CLOSE_TRAY) ? "TRUE" : "FALSE"); you're checking against cdi->mask but if you see how CDROM_CAN is defined: #define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type)) you see that the mask is negated and also cdi->ops->capability comes into play. However, the problem is that the CDC_CLOSE_TRAY is turned on (i.e. is going to be off in the final check and yes, it _IS_ confusing :)) in the cdi->mask only for devices with caddy and popup loading mechanisms. I don't think we can reliably detect whether the drive can close its tray now on a drive-by-drive basis - from what i see in your dmesg output, your drive is mechtype_tray and such drives normally can close the tray. Alternatively, we could make another list :( of drive model names which cannot close its mechanism but this is kinda overkill imho. Jens, Bart?
I agree that my analysis in comment #0 was wrong. I understand that the cdrom drive itself reports the mechtype wrongly, so this seems to be a firmware problem of the "Optiarc DVD RW AD-7543A". Currently I cannot find any firmware updates for this device. http://sonynec-optiarc.eu/en/support-service/downloads/fw_dvd-writer-ad-series.html Should I ask the Optirac to provide one? If yes, what is the name of the standard which they should to fulfill?
I don't think that the drive is reporting a wrong mechtype - it still _is_ equipped with a tray loading mechanism, it simply cannot close its tray by itself and needs user help :). Also, there's AFAIK no bit in the cdrom capabilities page returned by the drive which will tell you whether the drive can close itself - there's only a bit saying that the drive can eject the media via an ATAPI command. The only solution, AFAICT, would be an artificial one: either a list of drive model names which cannot close their tray (ugly :( and generally frowned upon) or trying to lock the door and read sense data (hm, unreliable, overkill?). The wrongly reported "Can close tray" is based on the assumption that if the drive isn't caddy or popup loader then it can close its tray automatically as is the case with the gazillion drives out there with a tray loading mechanism.
In case of a list of devices which reports "tray" and cannot close the door I could imagine a list which is marked with __initdata and only in the memory when the module is loading. (This is not the case for the current ide_cd_quirks_list[] in drivers/ide/ide-cd.c .) I don't know if similar structure to Desktop Management Interface (DMI, http://www.dmtf.org/standards/dmi/ ) already exists for IDE. The interface ( linux/dmi.h ) is used several points of the kernel when the task is to identify a motherboard or BIOS version. In case you close the door and try to lock and read sense data there could be a problem when there is no media in the drive. In this case I'm not sure that you can lock the door at all.
Hi, can you please try the following quick'n'dirty fix to see whether it fixes the problem for you? Thanks.
Created attachment 17971 [details] Optiarc DVD RW AD-7543A no close tray patch
Created attachment 18051 [details] show mechtype, cdrom model and firmware version I applied the attached debug patch to 2.6.27-rc6 on one computer and to 2.6.27-rc7 on the second one. The two computers has different slim cdroms, so they both cannot close the tray, but reported this wrongly in /proc/sys/dev/cdrom/info: The first one is: [ 12.633674] drivers/ide/ide-cd.c:1664: mechtype=1, drive->id->model=[Optiarc DVD RW AD-7543A], drive->id->fw_rev=[1-00] The second one: [ 2868.003398] drivers/ide/ide-cd.c:1664: mechtype=1, drive->id->model=[TEAC CD-ROM CD-224E], drive->id->fw_rev=[3.7C]
Hi, you can try the first drive with the attached patch.
Created attachment 18052 [details] Autoclose fix v2
The patch from comment #11 works for me. Thanks for your work! $ cat /proc/sys/dev/cdrom/info CD-ROM information, Id: cdrom.c 3.20 2003/12/17 drive name: hdc drive speed: 24 drive # of slots: 1 Can close tray: 0 Can open tray: 1 Can lock tray: 1 Can change speed: 1 Can select disk: 0 Can read multisession: 1 Can read MCN: 1 Reports media changed: 1 Can play audio: 1 Can write CD-R: 1 Can write CD-RW: 1 Can read DVD: 1 Can write DVD-R: 1 Can write DVD-RAM: 1 Can read MRW: 1 Can write MRW: 1 Can write RAM: 1 $ cat /proc/ide/hdc/model Optiarc DVD RW AD-7543A