• Peter Chen's avatar
    usb: chipidea: udc: using the correct stall implementation · 56ffa1d1
    Peter Chen authored
    According to spec, there are functional and protocol stalls.
    
    For functional stall, it is for bulk and interrupt endpoints,
    below are cases for it:
    - Host sends SET_FEATURE request for Set-Halt, the udc driver
    needs to set stall, and return true unconditionally.
    - The gadget driver may call usb_ep_set_halt to stall certain
    endpoints, if there is a transfer in pending, the udc driver
    should not set stall, and return -EAGAIN accordingly.
    These two kinds of stall need to be cleared by host using CLEAR_FEATURE
    request (Clear-Halt).
    
    For protocol stall, it is for control endpoint, this stall will
    be set if the control request has failed. This stall will be
    cleared by next setup request (hardware will do it).
    
    It fixed usbtest (drivers/usb/misc/usbtest.c) Test 13 "set/clear halt"
    test failure, meanwhile, this change has been verified by
    USB2 CV Compliance Test and MSC Tests.
    
    Cc: <stable@vger.kernel.org> #3.10+
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Felipe Balbi <balbi@ti.com>
    Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
    56ffa1d1
udc.c 46.9 KB