Commit 396bbe14 authored by Diego Elio Pettenò's avatar Diego Elio Pettenò Committed by Jens Axboe
Browse files

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: default avatarDiego Elio Pettenò <flameeyes@flameeyes.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 366ba7c7
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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
}