On 07-12-2010 19:28, Richard RÃjfors wrote:
This patch fixes an issue where the driver does not handle out data in setup transactions.
The per endpoint cached status register is cleared in the pch_udc_svc_control_out function. When there is out data available the function pch_udc_svc_data_out is called which tries to pick it up the
s/it//
status, which now is cleared to 0. When the status is 0, the function doesn't start reading the data from the FIFO.
There is a second bug in all this, pch_udc_svc_data_out takes the endpoint number (0 for EP0), while pch_udc_svc_control_out passes the endpoint index (1 for EP0). Effectively pch_udc_svc_data_out picks up the wrong internal ep structure.
This patch makes sure to put back the cached status and pass the endpoint number rather than index when calling pch_udc_svc_data_out.
Signed-off-by: Richard RÃjfors <richard.rojfors@xxxxxxxxxxxxxx> --- diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c index 216f648..070e7c5 100644 --- a/drivers/usb/gadget/pch_udc.c +++ b/drivers/usb/gadget/pch_udc.c @@ -2150,7 +2150,10 @@ static void pch_udc_svc_control_out(struct pch_udc_dev *dev) pch_udc_set_dma(dev, DMA_DIR_RX); } else { /* control write */ - pch_udc_svc_data_out(dev, UDC_EP0OUT_IDX); + /* next function will pickuo an clear the status */
s/pickuo an/pickup and/ WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html