usb: musb: gadget: add ep capabilities support
[firefly-linux-kernel-4.4.55.git] / drivers / usb / musb / musb_gadget.c
index 9e18178f1d45e2d94fc3550f93cd7a833d8592d6..4150bafe6bf5d2f2f3611ecb9c600413357a128a 100644 (file)
@@ -1729,6 +1729,7 @@ init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in)
        INIT_LIST_HEAD(&ep->end_point.ep_list);
        if (!epnum) {
                usb_ep_set_maxpacket_limit(&ep->end_point, 64);
+               ep->end_point.caps.type_control = true;
                ep->end_point.ops = &musb_g_ep0_ops;
                musb->g.ep0 = &ep->end_point;
        } else {
@@ -1736,9 +1737,20 @@ init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in)
                        usb_ep_set_maxpacket_limit(&ep->end_point, hw_ep->max_packet_sz_tx);
                else
                        usb_ep_set_maxpacket_limit(&ep->end_point, hw_ep->max_packet_sz_rx);
+               ep->end_point.caps.type_iso = true;
+               ep->end_point.caps.type_bulk = true;
+               ep->end_point.caps.type_int = true;
                ep->end_point.ops = &musb_ep_ops;
                list_add_tail(&ep->end_point.ep_list, &musb->g.ep_list);
        }
+
+       if (!epnum || hw_ep->is_shared_fifo) {
+               ep->end_point.caps.dir_in = true;
+               ep->end_point.caps.dir_out = true;
+       } else if (is_in)
+               ep->end_point.caps.dir_in = true;
+       else
+               ep->end_point.caps.dir_out = true;
 }
 
 /*