git: 31e076d70b5f - main - Add devices and quirks for some Olympus cameras.

From: Greg Lehey <grog_at_FreeBSD.org>
Date: Wed, 23 Mar 2022 02:06:34 UTC
The branch main has been updated by grog:

URL: https://cgit.FreeBSD.org/src/commit/?id=31e076d70b5fc06e9cd9ecfe19296d4fe6a8a5a5

commit 31e076d70b5fc06e9cd9ecfe19296d4fe6a8a5a5
Author:     Greg Lehey <grog@FreeBSD.org>
AuthorDate: 2022-03-23 01:40:28 +0000
Commit:     Greg Lehey <grog@FreeBSD.org>
CommitDate: 2022-03-23 01:40:28 +0000

    Add devices and quirks for some Olympus cameras.
    
    Reviewed by:    hps@
    Fixes:          Problems attaching Olympus cameras.
    MFC after:      2 weeks
---
 sys/dev/usb/quirk/usb_quirk.c | 35 ++++++++++++++++++++++++++++++++++-
 sys/dev/usb/usbdevs           | 14 ++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/sys/dev/usb/quirk/usb_quirk.c b/sys/dev/usb/quirk/usb_quirk.c
index cab6f1b7c074..d86ca5643515 100644
--- a/sys/dev/usb/quirk/usb_quirk.c
+++ b/sys/dev/usb/quirk/usb_quirk.c
@@ -353,6 +353,39 @@ static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRKS_MAX] = {
 	USB_QUIRK(OLYMPUS, C1, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
 	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_WRONG_CSWSIG),
 	USB_QUIRK(OLYMPUS, C700, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN),
+        /* Selected Olympus DSLR and EVIL models.  See ../usbdevs for more
+	 * details.
+	 *
+	 * Not all quirks apply to all models.  The commented-out entries are
+	 * correct for that model.
+	 */
+	USB_QUIRK(OLYMPUS, E_1, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	    UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+            UQ_MSC_NO_SYNC_CACHE),
+	/*
+	 * Product code 0x118.
+	 * USB_QUIRK(OLYMPUS, E_300, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	 *     UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+         *     UQ_MSC_NO_SYNC_CACHE),
+	 * USB_QUIRK(OLYMPUS, E_30, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	 *     UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+         *     UQ_MSC_NO_SYNC_CACHE), */
+	USB_QUIRK(OLYMPUS, E_330, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	    UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+            UQ_MSC_NO_SYNC_CACHE, UQ_MSC_NO_START_STOP),
+	USB_QUIRK(OLYMPUS, E_PM1, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	    UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+            UQ_MSC_NO_SYNC_CACHE, UQ_MSC_NO_START_STOP),
+        /* Product code 0x12e.
+	 * USB_QUIRK(OLYMPUS, E_PM2, 0x0000, 0xffff, 0),
+	 * USB_QUIRK(OLYMPUS, E_M1MarkII, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	 *     UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+	 *     UQ_MSC_NO_SYNC_CACHE),
+	 * USB_QUIRK(OLYMPUS, E_M5MarkIII, 0x0000, 0xffff, 0),
+	 */
+	USB_QUIRK(OLYMPUS, E_M1, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	    UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_PREVENT_ALLOW,
+            UQ_MSC_NO_SYNC_CACHE, UQ_MSC_NO_START_STOP),
 	USB_QUIRK(ONSPEC, SDS_HOTFIND_D, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
 	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN, UQ_MSC_NO_SYNC_CACHE),
 	USB_QUIRK(ONSPEC, CFMS_RW, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
@@ -1042,7 +1075,7 @@ usb_quirk_init(void *arg)
 {
 	char envkey[sizeof(USB_QUIRK_ENVROOT) + 2];	/* 2 digits max, 0 to 99 */
 	int i;
-  
+
 	/* initialize mutex */
 	mtx_init(&usb_quirk_mtx, "USB quirk", NULL, MTX_DEF);
 
diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs
index 01c25d7c0962..3b7ea2b9c1b4 100644
--- a/sys/dev/usb/usbdevs
+++ b/sys/dev/usb/usbdevs
@@ -3535,6 +3535,20 @@ product OLIMEX ARM_USB_OCD_H		0x002b	FTDI compatible adapter
 /* Olympus products */
 product OLYMPUS C1		0x0102	C-1 Digital Camera
 product OLYMPUS C700		0x0105	C-700 Ultra Zoom
+/* Current Olympus DSLRs and EVIL cameras reuse the same product code and
+ * bcdDevice for multiple models.  This may result in problems with newer
+ * cameras. */
+/* Olympus DSLRs */
+product OLYMPUS E_1		0x0102
+product OLYMPUS E_300		0x0118
+product OLYMPUS E_330		0x0118
+product OLYMPUS E_30		0x0118
+/* Olympus EVIL cameras */
+product OLYMPUS E_PM1		0x012c
+product OLYMPUS E_PM2		0x012e
+product OLYMPUS E_M1		0x012e
+product OLYMPUS E_M1MarkII	0x012e
+product OLYMPUS E_M5MarkIII	0x012e
 
 /* OmniVision Technologies, Inc. products */
 product OMNIVISION OV511	0x0511	OV511 Camera