kern/69006: [patch] Apple Cinema Display hangs USB ports

Mark Derbyshire mark at taom.com
Tue Jul 13 09:40:24 PDT 2004


>Number:         69006
>Category:       kern
>Synopsis:       [patch] Apple Cinema Display hangs USB ports
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jul 13 16:40:23 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Mark Derbyshire
>Release:        FreeBSD 5.2.1-RELEASE-p9
>Organization:
>Environment:
FreeBSD freebsd.taom.com 5.2.1-RELEASE-p9 FreeBSD 5.2.1-RELEASE-p9 #0: Tue Jul 13 02:20:06 MDT 2004     mark at freebsd.taom.com:/usr/obj/usr/src/sys/TAOM  i386

Kernel is GENERIC built from RELENG_5_2 with:
setenv DEBUG -DUSB_DEBUG

Apple 23 inch Cinema Display through a CompuCable ADC/DVI KVM (provides a DVI & USB breakout)
USB plugged into MB USB (VIA 83C572 USB controller)
>Description:
      [Resubmittal of original sent 2004/03/17 with minor updates - I found no record that original was ever received - sorry]

Plugging the USB breakout from an Apple Cinema Display into a USB port seems to
either hang the USB controller and/or cause an endless loop in the kernel USB
code.

The Cinema Display has an internal USB hub and an internal USB device for 
controlling the display. When FreeBSD is probing internal USB device, there
are several second delays and apparently problems reading descriptors (I
am not a USB expert). Eventually the device fails attempts by uhid and ugen
to discover it. After that nothing plugged into the USB controller works,
including any devices plugged into the Cinema hub. If the Cinema is unplugged,
nothing subsequently plugged into the USB controller is recognized until after
a reboot.

In the annotated logs shown below I have included the dmesg USB entries from a
system boot without anything plugged into the USB ports. I then list the 
messages generated when I plug just the Cinema Display (nothing connected to
its hub) into a port. I've also attached some kernel debug with hw.usb.debug=5
plugging in the display, unplugging the display and replugging the display. The
debug output seems to show that FreeBSD gets caught in some endless loop after
the display is plugged in, in spite of giving up on attaching the device.

I made a hack shown in the the fix section to workaround this problem, although
I don't see this as a realistic solution. It may help to identify the underlying
problems, however. The first thing I noticed was that when uhid.c or ugen.c calls
usbd_devinfo, the subsequent call to usbd_devinfo_vp tries to query the Cinema
device for vendor/product strings. Once this occurs, the USB controller never will
work again. I short-circuited these queries in the hack by adding a new type of
usb_quirk to avoid making these queries for the Cinema. However this wasn't
enough because when uhid.c & ugen.c would try to read descriptors from the device,
the USB controller would still hang. In the end I lacked the time to understand
what was causing the endless looping that resulted in either case and just used
the quirk to ignore the device before usbd_probe_and_attach gets called. Since I
doubt FreeBSD/XFree86 knows how to control the display anyway, this is good enough
for me. Nevertheless a recalcitrant device like the Cinema probably shouldn't
cause the USB controller/FreeBSD to stop using other devices on the port. Mac OS X,
Windows XP and PowerPC Linux all handle this device without issue.

--- annotated logs begin here ---
[USB dmesg from system boot]

uhci0: <VIA 83C572 USB controller> port 0xd800-0xd81f irq 11 at device 17.2 on pci0
usb0: <VIA 83C572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
uhci1: <VIA 83C572 USB controller> port 0xdc00-0xdc1f irq 11 at device 17.3 on pci0
usb1: <VIA 83C572 USB controller> on uhci1
usb1: USB revision 1.0
uhub1: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub1: 2 ports with 2 removable, self powered
uhci2: <VIA 83C572 USB controller> port 0xe000-0xe01f irq 11 at device 17.4 on pci0
usb2: <VIA 83C572 USB controller> on uhci2
usb2: USB revision 1.0
uhub2: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub2: 2 ports with 2 removable, self powered

[plug in Cinema USB]

Mar 17 11:09:35 freebsd kernel: uhub0: port error, restarting port 2
Mar 17 11:09:36 freebsd kernel: uhub3: Apple Computer product 0x9118, class 9/0, rev 1.10/1.10, addr 2
Mar 17 11:09:36 freebsd kernel: uhub3: 3 ports with 3 removable, self powered
Mar 17 11:09:42 freebsd kernel: uhid0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3, iclass 3/0
Mar 17 11:09:47 freebsd kernel: uhid0: no report descriptor
Mar 17 11:09:47 freebsd kernel: device_probe_and_attach: uhid0 attach returned 6
Mar 17 11:09:52 freebsd kernel: ugen0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3
Mar 17 11:09:57 freebsd kernel: ugen0: setting configuration index 0 failed
Mar 17 11:09:57 freebsd kernel: device_probe_and_attach: ugen0 attach returned 6
Mar 17 11:17:08 freebsd kernel: uhub3: at uhub0 port 2 (addr 2) disconnected
Mar 17 11:17:08 freebsd kernel: uhub3: detached

[reboot & setup debugging messages]

freebsd# sysctl hw.usb.debug=5
hw.usb.debug: 0 -> 5

[plug in Cinema USB]

Mar 17 10:52:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:52:11 freebsd kernel: usb_discover
Mar 17 10:52:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:52:11 freebsd kernel: usb_discover
Mar 17 10:52:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:52:11 freebsd kernel: usb_discover
Mar 17 10:52:23 freebsd kernel: usb_needs_explore
Mar 17 10:52:23 freebsd kernel: usb_event_thread: woke up
Mar 17 10:52:23 freebsd kernel: usb_discover
Mar 17 10:52:23 freebsd kernel: uhub0: port error, restarting port 2
Mar 17 10:52:24 freebsd kernel: usb_needs_explore
Mar 17 10:52:24 freebsd kernel: usb_needs_explore
Mar 17 10:52:24 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION
Mar 17 10:52:25 freebsd kernel: usbd_new_device bus=0xc47e7000 port=2 depth=1 speed=2
Mar 17 10:52:25 freebsd kernel: usbd_setup_pipe: dev=0xc4c5ad00 iface=0 ep=0xc4c5ad24 pipe=0xc4c5ad04
Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:52:25 freebsd kernel: usbd_new_device: adding unit addr=2, rev=110, class=9, subclass=0, protocol=0, maxpacket=64, len=18, speed=2
Mar 17 10:52:25 freebsd kernel: usbd_get_device_desc:
Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=1, index=0, len=18
Mar 17 10:52:25 freebsd kernel: usbd_new_device: new dev (addr 2), dev=0xc4c5ad00, parent=0xc47d2500
Mar 17 10:52:25 freebsd kernel: usbd_probe_and_attach: trying device specific drivers
Mar 17 10:52:25 freebsd kernel: uhub3: Apple Computer product 0x9118, class 9/0, rev 1.10/1.10, addr 2
Mar 17 10:52:25 freebsd kernel: usbd_get_config_desc: confidx=0
Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=2, index=0, len=9
Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=2, index=0, len=25
Mar 17 10:52:25 freebsd kernel: usbd_set_config_index: status=0x0001, error=NORMAL_COMPLETION
Mar 17 10:52:25 freebsd kernel: usbd_set_config_index: (addr 1) cno=2 attr=0xe0, selfpowered=1, power=500
Mar 17 10:52:25 freebsd kernel: usbd_set_config_index: set config 1
Mar 17 10:52:25 freebsd kernel: usbd_fill_iface_data: ifaceidx=0 altidx=0
Mar 17 10:52:25 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=2
Mar 17 10:52:25 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=4
Mar 17 10:52:25 freebsd kernel: usbd_fill_iface_data: found idesc nendpt=1
Mar 17 10:52:25 freebsd kernel: uhub3: 3 ports with 3 removable, self powered
Mar 17 10:52:25 freebsd kernel: usbd_open_pipe_intr: address=0x81 flags=0x4 len=1
Mar 17 10:52:25 freebsd kernel: usbd_open_pipe: iface=0xc47efb80 address=0x81 flags=0x1
Mar 17 10:52:25 freebsd kernel: usbd_setup_pipe: dev=0xc4c5ad00 iface=0xc47efb80 ep=0xc48185d0 pipe=0xd8a46700
Mar 17 10:52:25 freebsd kernel: usb_needs_explore
Mar 17 10:52:26 freebsd kernel: usbd_reset_port: port 3 reset done, error=NORMAL_COMPLETION
Mar 17 10:52:26 freebsd kernel: usbd_new_device bus=0xc47e7000 port=3 depth=2 speed=1
Mar 17 10:52:26 freebsd kernel: usbd_setup_pipe: dev=0xc4c5a900 iface=0 ep=0xc4c5a924 pipe=0xc4c5a904
Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:52:26 freebsd kernel: usbd_new_device: adding unit addr=3, rev=100, class=0, subclass=0, protocol=0, maxpacket=8, len=18, speed=1
Mar 17 10:52:26 freebsd kernel: usbd_get_device_desc:
Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=1, index=0, len=18
Mar 17 10:52:26 freebsd kernel: usbd_new_device: new dev (addr 3), dev=0xc4c5a900, parent=0xc4c5ab80
Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: trying device specific drivers
Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: no device specific driver found
Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: looping over 1 configurations
Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: trying config idx=0
Mar 17 10:52:26 freebsd kernel: usbd_get_config_desc: confidx=0
Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=2, index=0, len=9
Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=2, index=0, len=34
Mar 17 10:52:26 freebsd kernel: usbd_set_config_index: (addr 1) cno=3 attr=0x40, selfpowered=1, power=2
Mar 17 10:52:26 freebsd kernel: usbd_set_config_index: set config 1
Mar 17 10:52:26 freebsd kernel: usbd_fill_iface_data: ifaceidx=0 altidx=0
Mar 17 10:52:26 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=2
Mar 17 10:52:26 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=4
Mar 17 10:52:26 freebsd kernel: usbd_fill_iface_data: found idesc nendpt=1
Mar 17 10:52:26 freebsd kernel: usb_allocmem: large alloc 65
Mar 17 10:52:26 freebsd kernel: usb_freemem: large free
Mar 17 10:52:31 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:52:31 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:52:31 freebsd kernel: uhid0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3, iclass 3/0
Mar 17 10:52:31 freebsd kernel: usb_allocmem: large alloc 65
Mar 17 10:52:36 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:52:36 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:52:36 freebsd kernel: usb_freemem: large free
Mar 17 10:52:36 freebsd kernel: uhid0: no report descriptor
Mar 17 10:52:36 freebsd kernel: device_probe_and_attach: uhid0 attach returned 6
Mar 17 10:52:36 freebsd kernel: usbd_probe_and_attach: no interface drivers found
Mar 17 10:52:41 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:52:41 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:52:41 freebsd kernel: ugen0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3
Mar 17 10:52:41 freebsd kernel: usbd_set_config_index: free old config
Mar 17 10:52:41 freebsd kernel: usbd_get_config_desc: confidx=0
Mar 17 10:52:41 freebsd kernel: usbd_get_desc: type=2, index=0, len=9
Mar 17 10:52:46 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:52:46 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:52:46 freebsd kernel: ugen0: setting configuration index 0 failed
Mar 17 10:52:46 freebsd kernel: device_probe_and_attach: ugen0 attach returned 6
Mar 17 10:52:46 freebsd kernel: usbd_probe_and_attach: generic attach failed
Mar 17 10:52:51 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:52:51 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:52:56 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:52:56 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:53:01 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:53:01 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:53:06 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:53:06 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:53:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:53:11 freebsd kernel: usb_discover
Mar 17 10:53:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:53:11 freebsd kernel: usb_discover
Mar 17 10:54:06 freebsd kernel: usb_event_thread: woke up
Mar 17 10:54:06 freebsd kernel: usb_discover
Mar 17 10:54:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:54:11 freebsd kernel: usb_discover
Mar 17 10:54:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:54:11 freebsd kernel: usb_discover

[unplug Cinema USB]

Mar 17 10:54:19 freebsd kernel: usb_needs_explore
Mar 17 10:54:19 freebsd kernel: usb_event_thread: woke up
Mar 17 10:54:19 freebsd kernel: usb_discover
Mar 17 10:54:19 freebsd kernel: uhub_disconnect: up=0xc47d24c0 dev=0xc4c5ad00 port=2
Mar 17 10:54:19 freebsd kernel: usb_disconnect_port: disconnect subdevs
Mar 17 10:54:19 freebsd kernel: uhub3: at uhub0 port 2 (addr 2) disconnected
Mar 17 10:54:19 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5a980
Mar 17 10:54:19 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5a980 xfer=0xc47cd100 (methods=0xc0894db0)
Mar 17 10:54:20 freebsd kernel: uhub_disconnect: up=0xc4c5aa50 dev=0xc4c5a900 port=3
Mar 17 10:54:20 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5a780
Mar 17 10:54:20 freebsd kernel: uhub3: detached
Mar 17 10:54:20 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5ac80

[replug Cinema USB]

Mar 17 10:55:05 freebsd kernel: usb_needs_explore
Mar 17 10:55:05 freebsd kernel: usb_event_thread: woke up
Mar 17 10:55:05 freebsd kernel: usb_discover
Mar 17 10:55:05 freebsd kernel: uhub0: port error, restarting port 2
Mar 17 10:55:05 freebsd kernel: usb_needs_explore
Mar 17 10:55:05 freebsd kernel: usb_needs_explore
Mar 17 10:55:05 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION
Mar 17 10:55:06 freebsd kernel: usbd_new_device bus=0xc47e7000 port=2 depth=1 speed=2
Mar 17 10:55:06 freebsd kernel: usbd_setup_pipe: dev=0xc4c5a480 iface=0 ep=0xc4c5a4a4 pipe=0xc4c5a484
Mar 17 10:55:06 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:11 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:11 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:55:11 freebsd kernel: usb_discover
Mar 17 10:55:11 freebsd kernel: usb_event_thread: woke up
Mar 17 10:55:11 freebsd kernel: usb_discover
Mar 17 10:55:11 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:16 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:16 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:16 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:21 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:21 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:21 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:26 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:26 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:27 freebsd kernel: usb_needs_explore
Mar 17 10:55:27 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION
Mar 17 10:55:27 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:32 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:32 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:33 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:38 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:38 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:38 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:43 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:43 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:43 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:48 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:48 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:49 freebsd kernel: usb_needs_explore
Mar 17 10:55:49 freebsd kernel: usb_needs_explore
Mar 17 10:55:49 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION
Mar 17 10:55:49 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:54 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:54 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:55:54 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
Mar 17 10:55:59 freebsd kernel: usb_add_task: task=0xc4c10384
Mar 17 10:55:59 freebsd kernel: usb_task_thread: woke up task=0xc4c10384
Mar 17 10:56:00 freebsd kernel: usbd_get_desc: type=1, index=0, len=8
--- annotated logs end here ---
>How-To-Repeat:
      Either boot the system with the Cinema USB breakout plugged in, or plug it in
after the boot is done. Whether or not there are other USB devices plugged into
the USB controller and whether or not there are USB devices plugged into the
Cinema hub, no USB devices will subsequently work or be recognized, regardless
of any further plugging/unplugging, until a reboot is done.
>Fix:
      The hack shown below is sufficient to ignore the Cinema device and allows any
other USB devices plugged into the system ports and/or the Cinema hub to work
properly. As outlined in the description, it does not address the potential
underlying problem of why FreeBSD seems to be caught in endless loops and/or the
controller getting locked up. In limited testing I have seen XFree86 freeze into a CPU loop with this patch applied.

--- patch-cinema begins here ---
--- usb_quirks.c.orig	Sun Aug 24 11:55:55 2003
+++ usb_quirks.c	Wed Mar 17 11:11:31 2004
@@ -93,6 +93,7 @@
  { USB_VENDOR_HP, USB_PRODUCT_HP_810C,		    ANY,   { UQ_BROKEN_BIDIR }},
  { USB_VENDOR_HP, USB_PRODUCT_HP_830C,		    ANY,   { UQ_BROKEN_BIDIR }},
  { USB_VENDOR_HP, USB_PRODUCT_HP_1220C,		    ANY,   { UQ_BROKEN_BIDIR }},
+ { USB_VENDOR_APPLE, USB_PRODUCT_APPLE_CINEMA_23,   ANY,   { UQ_IGNORE }},
  /* YAMAHA router's ucdDevice is the version of farmware and often changes. */
  { USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I,
 	ANY, { UQ_ASSUME_CM_OVER_DATA }},
--- usb_quirks.h.orig	Tue Mar 16 15:37:24 2004
+++ usb_quirks.h	Wed Mar 17 11:11:39 2004
@@ -54,6 +54,7 @@
 #define UQ_AU_INP_ASYNC	0x0800	/* input is async despite claim of adaptive */
 #define UQ_ASSUME_CM_OVER_DATA 0x1000 /* modem device breaks on cm over data */
 #define UQ_BROKEN_BIDIR	0x2000	/* printer has broken bidir mode */
+#define UQ_IGNORE	0x4000  /* ignore this screwed-up device */
 };
 
 extern const struct usbd_quirks usbd_no_quirk;
--- usb_subr.c.orig	Mon Sep  1 01:47:42 2003
+++ usb_subr.c	Wed Mar 17 11:12:00 2004
@@ -304,7 +304,7 @@
 	char product[USB_MAX_STRING_LEN];
 	int bcdDevice, bcdUSB;
 
-	usbd_devinfo_vp(dev, vendor, product, 1);
+	usbd_devinfo_vp(dev, vendor, product, !(dev->quirks->uq_flags & UQ_IGNORE));
 	cp += sprintf(cp, "%s %s", vendor, product);
 	if (showclass)
 		cp += sprintf(cp, ", class %d/%d",
@@ -1106,6 +1106,13 @@
 
 	DPRINTF(("usbd_new_device: new dev (addr %d), dev=%p, parent=%p\n",
 		 addr, dev, parent));
+
+	if (dev->quirks->uq_flags & UQ_IGNORE) {
+		char info[1024];
+		usbd_devinfo(dev, 0, info);
+		printf("usb: %s, device ignored\n", info);
+		return (USBD_NORMAL_COMPLETION);
+	}
 
 	err = usbd_probe_and_attach(parent, dev, port, addr);
 	if (err) {
--- usbdevs.orig	Sun Nov 16 05:05:11 2003
+++ usbdevs	Wed Mar 17 11:12:09 2004
@@ -466,6 +466,7 @@
 /* Apple Computer products */
 product APPLE OPTMOUSE		0x0302	Optical mouse
 product APPLE SPEAKERS		0x1101	Speakers
+product APPLE CINEMA_23		0x9218	Cinema Display 23 inch
 
 /* Asahi Optical products */
 product ASAHIOPTICAL OPTIO230	0x0004	Digital camera
--- patch-cinema ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list