Michal Suchanek 913b04
From 396bbe1427828be1025fb052b7e04b42f421352d Mon Sep 17 00:00:00 2001
Michal Suchanek 913b04
From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= <flameeyes@flameeyes.com>
Michal Suchanek 913b04
Date: Tue, 19 Nov 2019 21:37:09 +0000
Michal Suchanek 913b04
Subject: [PATCH] sr_vendor: support Beurer GL50 evo CD-on-a-chip devices.
Michal Suchanek 913b04
MIME-Version: 1.0
Michal Suchanek 913b04
Content-Type: text/plain; charset=UTF-8
Michal Suchanek 913b04
Content-Transfer-Encoding: 8bit
Michal Suchanek 913b04
Michal Suchanek 913b04
References: boo#1164632
Michal Suchanek 913b04
Patch-mainline: v5.5-rc1
Michal Suchanek 913b04
Git-commit: 396bbe1427828be1025fb052b7e04b42f421352d
Michal Suchanek 913b04
Michal Suchanek 913b04
The Beurer GL50 evo uses a Cygnal-manufactured CD-on-a-chip that only
Michal Suchanek 913b04
accepts a subset of SCSI commands, and supports neither audio commands
Michal Suchanek 913b04
nor generic packet commands.
Michal Suchanek 913b04
Michal Suchanek 913b04
Actually sending those commands bring the device to an unrecoverable
Michal Suchanek 913b04
state that causes the device to hang and reset.
Michal Suchanek 913b04
Michal Suchanek 913b04
To: Jens Axboe <axboe@kernel.dk>
Michal Suchanek 913b04
Cc: linux-kernel@vger.kernel.org
Michal Suchanek 913b04
Cc: linux-scsi@vger.kernel.org
Michal Suchanek 913b04
Signed-off-by: Diego Elio Pettenò <flameeyes@flameeyes.com>
Michal Suchanek 913b04
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Michal Suchanek 913b04
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek 913b04
---
Michal Suchanek 913b04
 drivers/scsi/sr_vendor.c | 18 ++++++++++++++++++
Michal Suchanek 913b04
 1 file changed, 18 insertions(+)
Michal Suchanek 913b04
Michal Suchanek 913b04
diff --git a/drivers/scsi/sr_vendor.c b/drivers/scsi/sr_vendor.c
Michal Suchanek 913b04
index e3b0ce25162b..17a56c87d383 100644
Michal Suchanek 913b04
--- a/drivers/scsi/sr_vendor.c
Michal Suchanek 913b04
+++ b/drivers/scsi/sr_vendor.c
Michal Suchanek 913b04
@@ -61,6 +61,7 @@
Michal Suchanek 913b04
 #define VENDOR_NEC             2
Michal Suchanek 913b04
 #define VENDOR_TOSHIBA         3
Michal Suchanek 913b04
 #define VENDOR_WRITER          4	/* pre-scsi3 writers */
Michal Suchanek 913b04
+#define VENDOR_CYGNAL_85ED     5	/* CD-on-a-chip */
Michal Suchanek 913b04
 
Michal Suchanek 913b04
 #define VENDOR_TIMEOUT	30*HZ
Michal Suchanek 913b04
 
Michal Suchanek 913b04
@@ -99,6 +100,23 @@ void sr_vendor_init(Scsi_CD *cd)
Michal Suchanek 913b04
 	} else if (!strncmp(vendor, "TOSHIBA", 7)) {
Michal Suchanek 913b04
 		cd->vendor = VENDOR_TOSHIBA;
Michal Suchanek 913b04
 
Michal Suchanek 913b04
+	} else if (!strncmp(vendor, "Beurer", 6) &&
Michal Suchanek 913b04
+		   !strncmp(model, "Gluco Memory", 12)) {
Michal Suchanek 913b04
+		/* The Beurer GL50 evo uses a Cygnal-manufactured CD-on-a-chip
Michal Suchanek 913b04
+		   that only accepts a subset of SCSI commands.  Most of the
Michal Suchanek 913b04
+		   not-implemented commands are fine to fail, but a few,
Michal Suchanek 913b04
+		   particularly around the MMC or Audio commands, will put the
Michal Suchanek 913b04
+		   device into an unrecoverable state, so they need to be
Michal Suchanek 913b04
+		   avoided at all costs.
Michal Suchanek 913b04
+		*/
Michal Suchanek 913b04
+		cd->vendor = VENDOR_CYGNAL_85ED;
Michal Suchanek 913b04
+		cd->cdi.mask |= (
Michal Suchanek 913b04
+			CDC_MULTI_SESSION |
Michal Suchanek 913b04
+			CDC_CLOSE_TRAY | CDC_OPEN_TRAY |
Michal Suchanek 913b04
+			CDC_LOCK |
Michal Suchanek 913b04
+			CDC_GENERIC_PACKET |
Michal Suchanek 913b04
+			CDC_PLAY_AUDIO
Michal Suchanek 913b04
+			);
Michal Suchanek 913b04
 	}
Michal Suchanek 913b04
 #endif
Michal Suchanek 913b04
 }
Michal Suchanek 913b04
-- 
Michal Suchanek 913b04
2.23.0
Michal Suchanek 913b04