From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756995AbcBCMkt (ORCPT ); Wed, 3 Feb 2016 07:40:49 -0500 Received: from mailout2.samsung.com ([203.254.224.25]:60660 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756828AbcBCMkp (ORCPT ); Wed, 3 Feb 2016 07:40:45 -0500 X-AuditID: cbfee61b-f793c6d00000236c-05-56b1f5476ec6 From: Robert Baldyga To: balbi@ti.com Cc: gregkh@linuxfoundation.org, andrzej.p@samsung.com, m.szyprowski@samsung.com, b.zolnierkie@samsung.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Robert Baldyga Subject: [PATCH v4 10/43] usb: gadget: composite: handle vendor descs Date: Wed, 03 Feb 2016 13:39:18 +0100 Message-id: <1454503191-11796-11-git-send-email-r.baldyga@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1454503191-11796-1-git-send-email-r.baldyga@samsung.com> References: <1454503191-11796-1-git-send-email-r.baldyga@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprKLMWRmVeSWpSXmKPExsVy+t9jQV33rxvDDLa9kbWY9bKdxWLjjPWs Fgfv11s0L17PZnF51xw2i0XLWpkt1h65y27x4PBOdgcOj/1z17B79G1Zxehx/MZ2Jo/Pm+QC WKK4bFJSczLLUov07RK4Ms42/mcv+CpY8XqdZQNjC38XIyeHhICJxJ79+5khbDGJC/fWs3Ux cnEICcxilDi/fTEjhPOTUeJIN0iGk4NNQEdiy/cJjCC2iICAxPoXl9hBipgFzjFKPLzTBpYQ FnCV+PlyDthYFgFViWcfT7GD2LwCbhKPDk1lhVgnJ3Hy2GQgm4ODEyj+8JgDSFgIqHVX63fG CYy8CxgZVjFKpBYkFxQnpeca5aWW6xUn5haX5qXrJefnbmIEB9Yz6R2Mh3e5H2IU4GBU4uGN +LUhTIg1say4MvcQowQHs5IIr9HnjWFCvCmJlVWpRfnxRaU5qcWHGKU5WJTEeR//XxcmJJCe WJKanZpakFoEk2Xi4JRqYJTvNT0aOt0j//iOHc/3abl5Tawwl8k/rsbg0HjTtMnIhctVO23J R5vv1eWPD7Z+2lnXbTuleNa9zZuPrLJm6HDq3C9ywDjNjvHQrsXaConT3qyvXPq6xKuZ5X7q l6zTc4wSq2cw+LK9b7Rc4HjB6ucOedNvqk1zzqWu+ykWLunGkefKtqmGSYmlOCPRUIu5qDgR AL/vJ10oAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org After binding all configurations in gadget, call prep_vendor_descs() for each function which uses new API and implements this callback. Signed-off-by: Robert Baldyga --- drivers/usb/gadget/composite.c | 31 +++++++++++++++++++++++++++++++ include/linux/usb/composite.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index f196bb6..4f5556b 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -2565,6 +2565,33 @@ int usb_config_do_bind(struct usb_configuration *c) } EXPORT_SYMBOL_GPL(usb_config_do_bind); +/** + * composite_prep_vendor_descs - for each function in each configuration call + * prep_vendor_descs() callback. + * @cdev: composite device + */ +int composite_prep_vendor_descs(struct usb_composite_dev *cdev) +{ + struct usb_configuration *c; + struct usb_function *f; + int ret; + + list_for_each_entry(c, &cdev->configs, list) + list_for_each_entry(f, &c->functions, list) { + if (!usb_function_is_new_api(f)) + continue; + if (f->prep_vendor_descs) { + ret = f->prep_vendor_descs(f); + if (ret) + return ret; + } + + } + + return 0; +} +EXPORT_SYMBOL_GPL(composite_prep_vendor_descs); + static int composite_bind(struct usb_gadget *gadget, struct usb_gadget_driver *gdriver) { @@ -2595,6 +2622,10 @@ static int composite_bind(struct usb_gadget *gadget, if (status < 0) goto fail; + status = composite_prep_vendor_descs(cdev); + if (status < 0) + goto fail; + if (cdev->use_os_string) { status = composite_os_desc_req_prepare(cdev, gadget->ep0); if (status) diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 0a0ff4c..0db473f 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h @@ -599,6 +599,8 @@ extern int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, struct usb_ep *ep0); void composite_dev_cleanup(struct usb_composite_dev *cdev); +int composite_prep_vendor_descs(struct usb_composite_dev *cdev); + void composite_free_descs(struct usb_composite_dev *cdev); void composite_free_vendor_descs(struct usb_composite_dev *cdev); -- 1.9.1