• Bryan O'Donoghue's avatar
    usb: dwc3: refactor gadget endpoint count calculation · 47d3946e
    Bryan O'Donoghue authored
    - DWC_USB3_NUM indicates the number of Device mode single directional
      endpoints, including OUT and IN endpoint 0.
    
    - DWC_USB3_NUM_IN_EPS indicates the maximum number of Device mode IN
      endpoints active at any time, including control endpoint 0.
    
    It's possible to configure RTL such that DWC_USB3_NUM_EPS is equal to
    DWC_USB3_NUM_IN_EPS.
    
    dwc3-core calculates the number of OUT endpoints as DWC_USB3_NUM minus
    DWC_USB3_NUM_IN_EPS. If RTL has been configured with DWC_USB3_NUM_IN_EPS
    equal to DWC_USB3_NUM then dwc3-core will calculate the number of OUT
    endpoints as zero.
    
    For example a from dwc3_core_num_eps() shows:
    [    1.565000]  /usb0@f01d0000: found 8 IN and 0 OUT endpoints
    
    This patch refactors the endpoint calculation down to one variable
    dwc->num_eps taking care to maintain the current mapping of endpoints for
    fixed FPGA configurations as described in Table 4-7 of version 2.60a of the
    DWC USB3 databook.
    
    The endpoint mapping will then be EP-OUT, EP-IN etc, up to DWC_USB3_NUM.
    If DWC_USB3_NUM is odd then OUT will take the extra endpoint.
    Suggested-by: default avatarFelipe Balbi <balbi@kernel.org>
    Signed-off-by: default avatarBryan O'Donoghue <pure.logic@nexus-software.ie>
    Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
    47d3946e
gadget.c 81.6 KB