Hi Steve, Your patch looks good to me, so I just checked it in. It turns out my full-speed changes were in the gadget driver, but I had missed this part.
thanks, Mike On Wed, Jun 10, 2009 at 7:50 PM, Mike Lockwood<lockw...@android.com> wrote: > Hi Steve, > > This sounds very familiar - I think I fixed this in the > drivers/usb/function/msm_hsusb.c driver already, but the change must > not have made it to the gadget driver yet. > > Thanks for that patch! I'll take a look and compare with the fixes I > made in the function driver and make sure this gets fixed in the > gadget driver. > > Mike > > On Wed, Jun 10, 2009 at 7:36 PM, stevel<ste...@sklembedded.com> wrote: >> We've been using the G1 phone connected to a full-speed only usb host, >> and the host is reporting babble errors. >> >> We investigated further and discovered the msm72k udc driver is not >> updating the hardware maxpacket size for an endpoint from the default >> of 512 bytes, which is valid for high-speed but not full-speed. When >> the gadget layer issues ep->enable(), msm72k_enable() copies >> wMaxPacketSize from the endpoint descriptor to ep->maxpacket but >> doesn't update the maxpacket in hardware. So in hardware MPS is still >> set to 512, but should be 64, and hence the babble errors. >> >> Attached is a patch that fixes this. Is this the proper way to fix, or >> is there more that needs to be done to support USB 1.1 hosts? >> >> Thanks, >> Steve >> >> >> diff --git a/drivers/usb/gadget/msm72k_udc.c b/drivers/usb/gadget/ >> msm72k_udc.c >> index 9ae42d5..7127bee 100644 >> --- a/drivers/usb/gadget/msm72k_udc.c >> +++ b/drivers/usb/gadget/msm72k_udc.c >> @@ -278,29 +278,29 @@ static void init_endpoints(struct usb_info *ui) >> } >> } >> >> -static void configure_endpoints(struct usb_info *ui) >> +static void config_ept(struct msm_endpoint *ept) >> { >> - unsigned n; >> - unsigned cfg; >> + unsigned cfg = CONFIG_MAX_PKT(ept->ep.maxpacket) | CONFIG_ZLT; >> >> - for (n = 0; n < 32; n++) { >> - struct msm_endpoint *ept = ui->ept + n; >> + if (ept->bit == 0) >> + /* ep0 out needs interrupt-on-setup */ >> + cfg |= CONFIG_IOS; >> >> - cfg = CONFIG_MAX_PKT(ept->ep.maxpacket) | CONFIG_ZLT; >> + ept->head->config = cfg; >> + ept->head->next = TERMINATE; >> >> - if (ept->bit == 0) >> - /* ep0 out needs interrupt-on-setup */ >> - cfg |= CONFIG_IOS; >> + if (ept->ep.maxpacket) >> + INFO("ept #%d %s max:%d head:%p bit:%d\n", >> + ept->num, (ept->flags & EPT_FLAG_IN) ? "in" : >> "out", >> + ept->ep.maxpacket, ept->head, ept->bit); >> +} >> >> - ept->head->config = cfg; >> - ept->head->next = TERMINATE; >> +static void configure_endpoints(struct usb_info *ui) >> +{ >> + unsigned n; >> >> - if (ept->ep.maxpacket) >> - INFO("ept #%d %s max:%d head:%p bit:%d\n", >> - ept->num, >> - (ept->flags & EPT_FLAG_IN) ? "in" : >> "out", >> - ept->ep.maxpacket, ept->head, ept- >>>bit); >> - } >> + for (n = 0; n < 32; n++) >> + config_ept(ui->ept + n); >> } >> >> struct usb_request *usb_ept_alloc_req(struct msm_endpoint *ept, >> @@ -1298,6 +1298,7 @@ msm72k_enable(struct usb_ep *_ep, const struct >> usb_endpoint_descriptor *desc) >> desc->bmAttributes & >> USB_ENDPOINT_XFERTYPE_MASK; >> >> _ep->maxpacket = le16_to_cpu(desc->wMaxPacketSize); >> + config_ept(ept); >> usb_ept_enable(ept, 1, ep_type); >> return 0; >> } >> > > > > -- > Mike Lockwood > Google android team > -- Mike Lockwood Google android team --~--~---------~--~----~------------~-------~--~----~ unsubscribe: android-kernel+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-kernel -~----------~----~----~----~------~----~------~--~---