]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
sr_vendor: support Beurer GL50 evo CD-on-a-chip devices.
authorDiego Elio Pettenò <flameeyes@flameeyes.com>
Tue, 19 Nov 2019 21:37:09 +0000 (21:37 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 Nov 2019 20:02:26 +0000 (13:02 -0700)
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>
drivers/scsi/sr_vendor.c

index e3b0ce25162baa10ff1447f5f488376720f4249e..17a56c87d383a2797bb4f33973138e18e3fdd41c 100644 (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
 }