sr_vendor: support Beurer GL50 evo CD-on-a-chip devices.

The Beurer GL50 evo uses a Cygnal-manufactured CD-on-a-chip that only
accepts a subset of SCSI commands, and supports neither audio commands
nor generic packet commands.

Actually sending those commands bring the device to an unrecoverable
state that causes the device to hang and reset.

To: Jens Axboe <axboe@kernel.dk>
Cc: linux-kernel@vger.kernel.org
Cc: linux-scsi@vger.kernel.org
Signed-off-by: Diego Elio Pettenò <flameeyes@flameeyes.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Diego Elio Pettenò 2019-11-19 21:37:09 +00:00 committed by Jens Axboe
parent 366ba7c71e
commit 396bbe1427

View file

@ -61,6 +61,7 @@
#define VENDOR_NEC 2
#define VENDOR_TOSHIBA 3
#define VENDOR_WRITER 4 /* pre-scsi3 writers */
#define VENDOR_CYGNAL_85ED 5 /* CD-on-a-chip */
#define VENDOR_TIMEOUT 30*HZ
@ -99,6 +100,23 @@ void sr_vendor_init(Scsi_CD *cd)
} else if (!strncmp(vendor, "TOSHIBA", 7)) {
cd->vendor = VENDOR_TOSHIBA;
} else if (!strncmp(vendor, "Beurer", 6) &&
!strncmp(model, "Gluco Memory", 12)) {
/* The Beurer GL50 evo uses a Cygnal-manufactured CD-on-a-chip
that only accepts a subset of SCSI commands. Most of the
not-implemented commands are fine to fail, but a few,
particularly around the MMC or Audio commands, will put the
device into an unrecoverable state, so they need to be
avoided at all costs.
*/
cd->vendor = VENDOR_CYGNAL_85ED;
cd->cdi.mask |= (
CDC_MULTI_SESSION |
CDC_CLOSE_TRAY | CDC_OPEN_TRAY |
CDC_LOCK |
CDC_GENERIC_PACKET |
CDC_PLAY_AUDIO
);
}
#endif
}