until I found this page I was trying night and day to get the f...... AVR-USB working...
After I applied the "Kernel-Patch" the AVR-USB-Thing is working perfect and I have a lot of fun playing around with it.
Right now I'm using the Vanilla Kernel 2.6.27.
Here's a little Overview of the two steps i did to get it running:
Code: Select all
1. in /usr/src/linux/drivers/usb/host/uhci-q.c:
[Column ~1050]
static int uhci_submit_bulk(struct uhci_hcd *uhci, struct urb *urb, struct uhci_qh *qh)
{
int ret;
/* Can't have low-speed bulk transfers */
// if (urb->dev->speed == USB_SPEED_LOW)
// return -EINVAL;
if (qh->state != QH_STATE_ACTIVE)
// qh->skel = SKEL_BULK;
qh->skel = (urb->dev->speed == USB_SPEED_LOW ? SKEL_LS_CONTROL : SKEL_BULK);
ret = uhci_submit_common(uhci, urb, qh);
// if (ret == 0)
if (ret == 0 && urb->dev->speed != USB_SPEED_LOW)
uhci_add_fsbr(uhci, urb);
return ret;
}
2. in /usr/src/linux/drivers/usb/core/config.c in der Funktion usb_parse_endpoint(...):
[Column ~140]
/* Some buggy low-speed devices have Bulk endpoints, which is
* explicitly forbidden by the USB spec. In an attempt to make
* them usable, we will try treating them as Interrupt endpoints.
*/
if (to_usb_device(ddev)->speed == USB_SPEED_LOW &&
usb_endpoint_xfer_bulk(d)) {
dev_warn(ddev, "config %d interface %d altsetting %d "
"endpoint 0x%X is Bulk; this violates USB spec for "
"low speed devices.\n",
cfgno, inum, asnum, d->bEndpointAddress);
// dev_warn(ddev, "config %d interface %d altsetting %d "
// "endpoint 0x%X is Bulk; changing to Interrupt\n",
// cfgno, inum, asnum, d->bEndpointAddress);
// endpoint->desc.bmAttributes = USB_ENDPOINT_XFER_INT;
// endpoint->desc.bInterval = 1;
// if (le16_to_cpu(endpoint->desc.wMaxPacketSize) > 8)
// endpoint->desc.wMaxPacketSize = cpu_to_le16(8);
}