Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754048AbbKWI4o (ORCPT ); Mon, 23 Nov 2015 03:56:44 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:57291 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754005AbbKWI4l (ORCPT ); Mon, 23 Nov 2015 03:56:41 -0500 X-AuditID: cbfec7f4-f79026d00000418a-22-5652d4c721a3 From: Marek Szyprowski To: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Marek Szyprowski , Ruslan Bilovol , Bartlomiej Zolnierkiewicz Subject: [PATCH v7 1/4] usb: gadget: bind UDC by name passed via usb_gadget_driver structure Date: Mon, 23 Nov 2015 09:56:35 +0100 Message-id: <1448268998-4682-2-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.2 In-reply-to: <1448268998-4682-1-git-send-email-m.szyprowski@samsung.com> References: <1448268998-4682-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPJMWRmVeSWpSXmKPExsVy+t/xK7rHrwSFGUzczG2xccZ6VovLu+aw WSxa1spssfbIXXaLnp0nGB1YPXbOusvu0bdlFaPH501yAcxRXDYpqTmZZalF+nYJXBlNV/sY Cy6JVtw8lNrAeECwi5GTQ0LARGLf0fXsELaYxIV769m6GLk4hASWMkrc/j0Lymliklj4bxlY FZuAoUTX2y6gBAeHiIC1RN/BIJAaZoEpjBI/bz9jAqkRFoiTmPqlBcxmEVCVWHvtNDOIzSvg LjHh7XtGiG1yEv9frgCr4RTwkFh44gsLiC0EVNP7/D7rBEbeBYwMqxhFU0uTC4qT0nMN9YoT c4tL89L1kvNzNzFCguXLDsbFx6wOMQpwMCrx8GroB4UJsSaWFVfmHmKU4GBWEuE9shUoxJuS WFmVWpQfX1Sak1p8iFGag0VJnHfurvchQgLpiSWp2ampBalFMFkmDk6pBsacAzZrDsha9Hzv WXwj88glloPXPcSFSmMCVesLF90WfCrzzWy+cKvhtryUCueW/TX3ql9LvGSTY1Bo+LUxJPwN 5/FVT/Vdvq3utzCuLM4Mmz9lc9mdxa//9MZt7Vjp8JS5zmy798vNe/R7+Kc+tnwvG96refTR Ij5evSmrLm7jOlfYfJnL74ISS3FGoqEWc1FxIgDwDt4yEgIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2929 Lines: 91 From: Ruslan Bilovol Introduce new 'udc_name' member to usb_gadget_driver structure. The 'udc_name' is a name of UDC that usb_gadget_driver should be bound to. If udc_name is NULL, it will be bound to any available UDC. Tested-by: Maxime Ripard Signed-off-by: Ruslan Bilovol Signed-off-by: Marek Szyprowski Tested-by: Peter Chen --- drivers/usb/gadget/udc/udc-core.c | 24 +++++++++++++++++++----- include/linux/usb/gadget.h | 4 ++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index f660afb..429d64e 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -549,21 +549,35 @@ EXPORT_SYMBOL_GPL(usb_udc_attach_driver); int usb_gadget_probe_driver(struct usb_gadget_driver *driver) { struct usb_udc *udc = NULL; - int ret; + int ret = -ENODEV; if (!driver || !driver->bind || !driver->setup) return -EINVAL; mutex_lock(&udc_lock); - list_for_each_entry(udc, &udc_list, list) { - /* For now we take the first one */ - if (!udc->driver) + if (driver->udc_name) { + list_for_each_entry(udc, &udc_list, list) { + ret = strcmp(driver->udc_name, dev_name(&udc->dev)); + if (!ret) + break; + } + if (ret) + ret = -ENODEV; + else if (udc->driver) + ret = -EBUSY; + else goto found; + } else { + list_for_each_entry(udc, &udc_list, list) { + /* For now we take the first one */ + if (!udc->driver) + goto found; + } } pr_debug("couldn't find an available UDC\n"); mutex_unlock(&udc_lock); - return -ENODEV; + return ret; found: ret = udc_bind_to_driver(udc, driver); mutex_unlock(&udc_lock); diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 3d583a1..63963c2 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -1012,6 +1012,8 @@ static inline int usb_gadget_activate(struct usb_gadget *gadget) * @reset: Invoked on USB bus reset. It is mandatory for all gadget drivers * and should be called in_interrupt. * @driver: Driver model state for this driver. + * @udc_name: A name of UDC this driver should be bound to. If udc_name is NULL, + * this driver will be bound to any available UDC. * * Devices are disabled till a gadget driver successfully bind()s, which * means the driver will handle setup() requests needed to enumerate (and @@ -1072,6 +1074,8 @@ struct usb_gadget_driver { /* FIXME support safe rmmod */ struct device_driver driver; + + char *udc_name; }; -- 1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/