usb: gadget: f_tcm: Provide support to get alternate setting in tcm function
authorJayshri Pawar <jpawar@cadence.com>
Mon, 21 Oct 2019 06:35:00 +0000 (07:35 +0100)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 22 Oct 2019 07:37:29 +0000 (10:37 +0300)
Providing tcm_get_alt in tcm function to support Bulk only protocol and
USB Attached SCSI protocol

Signed-off-by: Jayshri Pawar <jpawar@cadence.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/gadget/function/f_tcm.c

index 7f01f78..3650493 100644 (file)
@@ -846,7 +846,7 @@ static void uasp_set_alt(struct f_uas *fu)
 
        fu->flags = USBG_IS_UAS;
 
-       if (gadget->speed == USB_SPEED_SUPER)
+       if (gadget->speed >= USB_SPEED_SUPER)
                fu->flags |= USBG_USE_STREAMS;
 
        config_ep_by_speed(gadget, f, fu->ep_in);
@@ -2093,6 +2093,16 @@ static void tcm_delayed_set_alt(struct work_struct *wq)
        usb_composite_setup_continue(fu->function.config->cdev);
 }
 
+static int tcm_get_alt(struct usb_function *f, unsigned intf)
+{
+       if (intf == bot_intf_desc.bInterfaceNumber)
+               return USB_G_ALT_INT_BBB;
+       if (intf == uasp_intf_desc.bInterfaceNumber)
+               return USB_G_ALT_INT_UAS;
+
+       return -EOPNOTSUPP;
+}
+
 static int tcm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 {
        struct f_uas *fu = to_f_uas(f);
@@ -2300,6 +2310,7 @@ static struct usb_function *tcm_alloc(struct usb_function_instance *fi)
        fu->function.bind = tcm_bind;
        fu->function.unbind = tcm_unbind;
        fu->function.set_alt = tcm_set_alt;
+       fu->function.get_alt = tcm_get_alt;
        fu->function.setup = tcm_setup;
        fu->function.disable = tcm_disable;
        fu->function.free_func = tcm_free;