• Pawel Laszczak's avatar
    usb: gadget: config_ep_by_speed_and_alt instead of config_ep_by_speed · 864bc7e7
    Pawel Laszczak authored
    This patch replace config_ep_by_speed with config_ep_by_speed_and_alt.
    This change allows to select proper usb_ss_ep_comp_descriptor for each
    stream capable endpoints.
    
    f_tcm function for SS use array of headers for both BOT/UAS alternate
    setting:
    
    static struct usb_descriptor_header *uasp_ss_function_desc[] = {
            (struct usb_descriptor_header *) &bot_intf_desc,
            (struct usb_descriptor_header *) &uasp_ss_bi_desc,
            (struct usb_descriptor_header *) &bot_bi_ep_comp_desc,
            (struct usb_descriptor_header *) &uasp_ss_bo_desc,
            (struct usb_descriptor_header *) &bot_bo_ep_comp_desc,
    
            (struct usb_descriptor_header *) &uasp_intf_desc,
            (struct usb_descriptor_header *) &uasp_ss_bi_desc,
            (struct usb_descriptor_header *) &uasp_bi_ep_comp_desc,
            (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
            (struct usb_descriptor_header *) &uasp_ss_bo_desc,
            (struct usb_descriptor_header *) &uasp_bo_ep_comp_desc,
            (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
            (struct usb_descriptor_header *) &uasp_ss_status_desc,
            (struct usb_descriptor_header *) &uasp_status_in_ep_comp_desc,
            (struct usb_descriptor_header *) &uasp_status_pipe_desc,
            (struct usb_descriptor_header *) &uasp_ss_cmd_desc,
            (struct usb_descriptor_header *) &uasp_cmd_comp_desc,
            (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
            NULL,
    };
    
    The first 5 descriptors are associated with BOT alternate setting,
    and others are associated with UAS.
    
    During handling UAS alternate setting f_tcm driver invokes
    config_ep_by_speed and this function sets incorrect companion endpoint
    descriptor in usb_ep object.
    
    Instead setting ep->comp_desc to uasp_bi_ep_comp_desc function in this
    case set ep->comp_desc to bot_uasp_ss_bi_desc.
    
    And in result it uses the descriptor from BOT alternate setting
    instead UAS.
    
    Finally, it causes that controller driver during enabling endpoints
    detect that just enabled endpoint for bot.
    Signed-off-by: default avatarJayshri Pawar <jpawar@cadence.com>
    Signed-off-by: default avatarPawel Laszczak <pawell@cadence.com>
    Reviewed-by: default avatarPeter Chen <peter.chen@nxp.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
    864bc7e7
f_tcm.c 56.1 KB