Thanks to
this PR, I've gotten FreeBSD to mount my iPod Photo 30GB. The diff supplied in the PR doesn't match my version of usb_subr.c, so here's my diff:
Code:
--- usb_subr.bak Fri Oct 14 02:02:37 2005
+++ usb_subr.c Fri Oct 14 02:03:20 2005
@@ -775,20 +775,6 @@
free(p, M_USB);
return (err);
}
- /* Clear any stall and make sure DATA0 toggle will be used next. */
- if (UE_GET_ADDR(ep->edesc->bEndpointAddress) != USB_CONTROL_ENDPOINT) {
- err = usbd_clear_endpoint_stall(p);
- /*
- * Some devices reject this command, so ignore a STALL.
- * Some device just time out on this command, so ignore
- * that too.
- */
- if (err && err != USBD_STALLED && err != USBD_TIMEOUT) {
- printf("usbd_setup_pipe: failed to start "
- "endpoint, %s\n", usbd_errstr(err));
- return (err);
- }
- }
*pipe = p;
return (USBD_NORMAL_COMPLETION);
}
Applying that diff and recompiling the kernel (with EHCI support) works flawlessly. Yippee!
I wonder why the diff didn't match... maybe when I copied/pasted from Firefox the blank lines screwed it up. Anyway, this worked for me!