From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: [PATCH 1/2] USB: dwc3: get extcon device by OF graph bindings Date: Wed, 31 Jan 2018 16:57:17 +0100 Message-ID: <20180131155718.5237-2-a.hajda@samsung.com> References: <20180131155718.5237-1-a.hajda@samsung.com> Return-path: In-reply-to: <20180131155718.5237-1-a.hajda-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: "open list:DESIGNWARE USB3 DRD IP DRIVER" Cc: Andrzej Hajda , Bartlomiej Zolnierkiewicz , Marek Szyprowski , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Felipe Balbi , Greg Kroah-Hartman , Inki Dae , Rob Herring , Mark Rutland , Krzysztof Kozlowski , Chanwoo Choi , Laurent Pinchart , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-samsung-soc@vger.kernel.org extcon device is used to detect host/device connection. Since extcon OF property is deprecated, alternative method should be added. This method uses OF graph bindings to locate extcon. Signed-off-by: Andrzej Hajda --- Hi all, This patch implements alternative method to get extcon from DWC3. The code works but is hacky, as DWC3 must traverse different DT nodes to get extcon, in case of TM2 it is USB-PHY and MUIC, but other platforms can have different paths. I would be glad if it can be merged as is for now, but additional work must be done to make it generic. I guess on DT binding side it is OK. So the problem should be addressed in the code. My rough idea is to implement kind of extcon aliases/forwarder mechanism, ie. USB-PHY will expect on its output remote port extcon, and it should register extcon-forwarder pointing to this extcon. This way DWC3 can look for the extcon on its PHY phandle, and it will receive via forwarding mechanism extcon exposed by MUIC. As I said this is rough idea for discussion, other propositions are welcome. Regards Andrzej --- drivers/usb/dwc3/drd.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c index cc8ab9a8e9d2..eee2eca3d513 100644 --- a/drivers/usb/dwc3/drd.c +++ b/drivers/usb/dwc3/drd.c @@ -8,6 +8,7 @@ */ #include +#include #include "debug.h" #include "core.h" @@ -38,24 +39,38 @@ static int dwc3_drd_notifier(struct notifier_block *nb, return NOTIFY_DONE; } +struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc) +{ + struct device *dev = dwc->dev; + struct device_node *np_phy, *np_conn; + struct extcon_dev *edev; + + if (of_property_read_bool(dev->of_node, "extcon")) + return extcon_get_edev_by_phandle(dwc->dev, 0); + + np_phy = of_parse_phandle(dev->of_node, "phys", 0); + np_conn = of_graph_get_remote_node(np_phy, -1, -1); + edev = extcon_get_edev_by_of_node(np_conn); + of_node_put(np_conn); + of_node_put(np_phy); + + return edev; +} + int dwc3_drd_init(struct dwc3 *dwc) { int ret; - if (dwc->dev->of_node) { - if (of_property_read_bool(dwc->dev->of_node, "extcon")) - dwc->edev = extcon_get_edev_by_phandle(dwc->dev, 0); - - if (IS_ERR(dwc->edev)) - return PTR_ERR(dwc->edev); + dwc->edev = dwc3_get_extcon(dwc); + if (IS_ERR(dwc->edev)) + return PTR_ERR(dwc->edev); - dwc->edev_nb.notifier_call = dwc3_drd_notifier; - ret = extcon_register_notifier(dwc->edev, EXTCON_USB_HOST, - &dwc->edev_nb); - if (ret < 0) { - dev_err(dwc->dev, "couldn't register cable notifier\n"); - return ret; - } + dwc->edev_nb.notifier_call = dwc3_drd_notifier; + ret = extcon_register_notifier(dwc->edev, EXTCON_USB_HOST, + &dwc->edev_nb); + if (ret < 0) { + dev_err(dwc->dev, "couldn't register cable notifier\n"); + return ret; } dwc3_drd_update(dwc); -- 2.15.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/2] USB: dwc3: get extcon device by OF graph bindings From: Andrzej Hajda Message-Id: <20180131155718.5237-2-a.hajda@samsung.com> Date: Wed, 31 Jan 2018 16:57:17 +0100 To: "open list:DESIGNWARE USB3 DRD IP DRIVER" Cc: Andrzej Hajda , Bartlomiej Zolnierkiewicz , Marek Szyprowski , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Felipe Balbi , Greg Kroah-Hartman , Inki Dae , Rob Herring , Mark Rutland , Krzysztof Kozlowski , Chanwoo Choi , Laurent Pinchart , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org List-ID: ZXh0Y29uIGRldmljZSBpcyB1c2VkIHRvIGRldGVjdCBob3N0L2RldmljZSBjb25uZWN0aW9uLiBT aW5jZSBleHRjb24KT0YgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCwgYWx0ZXJuYXRpdmUgbWV0aG9k IHNob3VsZCBiZSBhZGRlZC4KVGhpcyBtZXRob2QgdXNlcyBPRiBncmFwaCBiaW5kaW5ncyB0byBs b2NhdGUgZXh0Y29uLgoKU2lnbmVkLW9mZi1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1z dW5nLmNvbT4KLS0tCkhpIGFsbCwKClRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhbHRlcm5hdGl2ZSBt ZXRob2QgdG8gZ2V0IGV4dGNvbiBmcm9tIERXQzMuClRoZSBjb2RlIHdvcmtzIGJ1dCBpcyBoYWNr eSwgYXMgRFdDMyBtdXN0IHRyYXZlcnNlIGRpZmZlcmVudCBEVCBub2Rlcwp0byBnZXQgZXh0Y29u LCBpbiBjYXNlIG9mIFRNMiBpdCBpcyBVU0ItUEhZIGFuZCBNVUlDLCBidXQgb3RoZXIKcGxhdGZv cm1zIGNhbiBoYXZlIGRpZmZlcmVudCBwYXRocy4KSSB3b3VsZCBiZSBnbGFkIGlmIGl0IGNhbiBi ZSBtZXJnZWQgYXMgaXMgZm9yIG5vdywgYnV0IGFkZGl0aW9uYWwgd29yawptdXN0IGJlIGRvbmUg dG8gbWFrZSBpdCBnZW5lcmljLgpJIGd1ZXNzIG9uIERUIGJpbmRpbmcgc2lkZSBpdCBpcyBPSy4g U28gdGhlIHByb2JsZW0gc2hvdWxkIGJlIGFkZHJlc3NlZAppbiB0aGUgY29kZS4KTXkgcm91Z2gg aWRlYSBpcyB0byBpbXBsZW1lbnQga2luZCBvZiBleHRjb24gYWxpYXNlcy9mb3J3YXJkZXIgbWVj aGFuaXNtLAppZS4gVVNCLVBIWSB3aWxsIGV4cGVjdCBvbiBpdHMgb3V0cHV0IHJlbW90ZSBwb3J0 IGV4dGNvbiwgYW5kIGl0IHNob3VsZCByZWdpc3RlcgpleHRjb24tZm9yd2FyZGVyIHBvaW50aW5n IHRvIHRoaXMgZXh0Y29uLiBUaGlzIHdheSBEV0MzIGNhbiBsb29rIGZvciB0aGUgZXh0Y29uCm9u IGl0cyBQSFkgcGhhbmRsZSwgYW5kIGl0IHdpbGwgcmVjZWl2ZSB2aWEgZm9yd2FyZGluZyBtZWNo YW5pc20gZXh0Y29uCmV4cG9zZWQgYnkgTVVJQy4KQXMgSSBzYWlkIHRoaXMgaXMgcm91Z2ggaWRl YSBmb3IgZGlzY3Vzc2lvbiwgb3RoZXIgcHJvcG9zaXRpb25zIGFyZSB3ZWxjb21lLgoKUmVnYXJk cwpBbmRyemVqCi0tLQogZHJpdmVycy91c2IvZHdjMy9kcmQuYyB8IDQxICsrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9u cygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9kcmQu YyBiL2RyaXZlcnMvdXNiL2R3YzMvZHJkLmMKaW5kZXggY2M4YWI5YThlOWQyLi5lZWUyZWNhM2Q1 MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvZHJkLmMKKysrIGIvZHJpdmVycy91c2Iv ZHdjMy9kcmQuYwpAQCAtOCw2ICs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXh0Y29u Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KIAogI2luY2x1ZGUgImRlYnVnLmgiCiAj aW5jbHVkZSAiY29yZS5oIgpAQCAtMzgsMjQgKzM5LDM4IEBAIHN0YXRpYyBpbnQgZHdjM19kcmRf bm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAlyZXR1cm4gTk9USUZZX0RPTkU7 CiB9CiAKK3N0cnVjdCBleHRjb25fZGV2ICpkd2MzX2dldF9leHRjb24oc3RydWN0IGR3YzMgKmR3 YykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkd2MtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wX3BoeSwgKm5wX2Nvbm47CisJc3RydWN0IGV4dGNvbl9kZXYgKmVkZXY7CisKKwlpZiAo b2ZfcHJvcGVydHlfcmVhZF9ib29sKGRldi0+b2Zfbm9kZSwgImV4dGNvbiIpKQorCQlyZXR1cm4g ZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZHdjLT5kZXYsIDApOworCisJbnBfcGh5ID0gb2Zf cGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwaHlzIiwgMCk7CisJbnBfY29ubiA9IG9mX2dy YXBoX2dldF9yZW1vdGVfbm9kZShucF9waHksIC0xLCAtMSk7CisJZWRldiA9IGV4dGNvbl9nZXRf ZWRldl9ieV9vZl9ub2RlKG5wX2Nvbm4pOworCW9mX25vZGVfcHV0KG5wX2Nvbm4pOworCW9mX25v ZGVfcHV0KG5wX3BoeSk7CisKKwlyZXR1cm4gZWRldjsKK30KKwogaW50IGR3YzNfZHJkX2luaXQo c3RydWN0IGR3YzMgKmR3YykKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGR3Yy0+ZGV2LT5vZl9ub2Rl KSB7Ci0JCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZHdjLT5kZXYtPm9mX25vZGUsICJleHRj b24iKSkKLQkJCWR3Yy0+ZWRldiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGR3Yy0+ZGV2 LCAwKTsKLQotCQlpZiAoSVNfRVJSKGR3Yy0+ZWRldikpCi0JCQlyZXR1cm4gUFRSX0VSUihkd2Mt PmVkZXYpOworCWR3Yy0+ZWRldiA9IGR3YzNfZ2V0X2V4dGNvbihkd2MpOworCWlmIChJU19FUlIo ZHdjLT5lZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZHdjLT5lZGV2KTsKIAotCQlkd2MtPmVkZXZf bmIubm90aWZpZXJfY2FsbCA9IGR3YzNfZHJkX25vdGlmaWVyOwotCQlyZXQgPSBleHRjb25fcmVn aXN0ZXJfbm90aWZpZXIoZHdjLT5lZGV2LCBFWFRDT05fVVNCX0hPU1QsCi0JCQkJCSAgICAgICAm ZHdjLT5lZGV2X25iKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoZHdjLT5kZXYsICJj b3VsZG4ndCByZWdpc3RlciBjYWJsZSBub3RpZmllclxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9 CisJZHdjLT5lZGV2X25iLm5vdGlmaWVyX2NhbGwgPSBkd2MzX2RyZF9ub3RpZmllcjsKKwlyZXQg PSBleHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoZHdjLT5lZGV2LCBFWFRDT05fVVNCX0hPU1QsCisJ CQkJICAgICAgICZkd2MtPmVkZXZfbmIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHdj LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciBjYWJsZSBub3RpZmllclxuIik7CisJCXJldHVybiBy ZXQ7CiAJfQogCiAJZHdjM19kcmRfdXBkYXRlKGR3Yyk7Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-1029251-1517414343-2-17953921046372573229 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no ("Email failed DMARC policy for domain") X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org' X-Spam-charsets: X-IgnoreVacation: yes ("Email failed DMARC policy for domain") X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1517414342; b=LLKyVl6J9LcE6W3YcEd1DOrVoqZoHcqV+f56ZZgjymK15A2 QK0I8KrYqxCqg9EyJvusvpDFHS72yOesY4CYYhOL1YOkggZIsBhD3Q+4ufYrtcyW +hzpo3AiU8L9qtRcShjSlLfjFawnfDLWLqQqL+BRERt63ve3S7Lh3qbtLrfxUOkx 3p/ifUdWJSQWiKy28haXG2ein1erzwHQbf6aN9appboY1RqPkDknUDOieMvhd2ky MRF++4GXObfpfxua0bwIXkPwWppT3Rl/B50PNq3MXUcPhto3g1oByqh69m4+YH+P GTbiwEbOlSqrt3bziYnxFqYkO0R7/oRjXA4OWSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :in-reply-to:references:sender:list-id; s=arctest; t=1517414342; bh=ZfPa6bzoDSJECu3ItFTXWBRlxmQXZithv8nx3Nwu8ik=; b=rOQ3bduSJ3lq tmQcrowLPxwIf4WceD8ZwZPBkPh6RfZ9XwYuHMRDsO+oCE8ZyvDiQ8t+vGphI5j7 emRKwy9U1mSqOrh8EKBgMDsH/7mxP3uIoA3ouGKRBisbJV01IEHRNGxWz/yRPBss ZRvF/l17BPJGisI60WF6LOrHnvZiEaWfdbIdFuBh7yVO8PcKyEqcal+vAMskUBvj Mlurk5AyBc2KDIZJely8vS7KrmVWMjSNb3/ZuBH/PU/6rCR6ERZr8ENliGAcdp7+ P/FY2/SiCn+eoCF1SE05dP2cNN9Oc7IirksWfPGLJsZz1sZXgV9KaCjWWuudc8IJ iEK0MJBkgA== ARC-Authentication-Results: i=1; mx3.messagingengine.com; arc=none (no signatures found); dkim=fail (body has been altered; 1024-bit rsa key sha256) header.d=samsung.com header.i=@samsung.com header.b=GTvVWKfC x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=mail20170921; dmarc=fail (p=none,has-list-id=yes,d=none) header.from=samsung.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=samsung.com header.result=pass header_is_org_domain=yes Authentication-Results: mx3.messagingengine.com; arc=none (no signatures found); dkim=fail (body has been altered; 1024-bit rsa key sha256) header.d=samsung.com header.i=@samsung.com header.b=GTvVWKfC x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=mail20170921; dmarc=fail (p=none,has-list-id=yes,d=none) header.from=samsung.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=samsung.com header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753493AbeAaP5o (ORCPT ); Wed, 31 Jan 2018 10:57:44 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:41197 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752265AbeAaP5i (ORCPT ); Wed, 31 Jan 2018 10:57:38 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180131155735euoutp02736f126991becd175918e4545d890111~O8DnmDrY81003310033euoutp02K X-AuditID: cbfec7f1-f793a6d00000326b-a9-5a71e76e2802 From: Andrzej Hajda To: linux-usb@vger.kernel.org (open list:DESIGNWARE USB3 DRD IP DRIVER) Cc: Andrzej Hajda , Bartlomiej Zolnierkiewicz , Marek Szyprowski , devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS), Felipe Balbi , Greg Kroah-Hartman , Inki Dae , Rob Herring , Mark Rutland , Krzysztof Kozlowski , Chanwoo Choi , Laurent Pinchart , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org Subject: [PATCH 1/2] USB: dwc3: get extcon device by OF graph bindings Date: Wed, 31 Jan 2018 16:57:17 +0100 Message-id: <20180131155718.5237-2-a.hajda@samsung.com> X-Mailer: git-send-email 2.15.1 In-reply-to: <20180131155718.5237-1-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrFIsWRmVeSWpSXmKPExsWy7djPc7p5zwujDFa9NrS4te4cq8XGGetZ LY61PWG3uP7lOavF/CNAsebF69ksJt2fwGJx/vwGdovOiUvYLS7vmsNmMeP8PiaLRctamS3W HrnLbrH0+kUmi9a9R9gd+D3WzFvD6DG7Yyarx6ZVnWwe++euYffo27KK0ePzJrkAtigum5TU nMyy1CJ9uwSujB8nL7AXvBSv+HpvAnsD4x7hLkYODgkBE4nG13xdjJxAppjEhXvr2boYuTiE BJYySuw8cZgJwvnMKNG84A8jRJWJxKyX86ESyxgltu+4zQrh/GeUuH3rOxNIFZuApsTfzTfZ QGwRAXeJZcuvgRUxC3xkkWjp+giWEBZwk+h8dIgV5A4WAVWJc3fNQcK8AuYSk/fMZIbYJi8x YUsTC4jNKWAhsbKnHew+CYHLbBKTv/9jgvjBReJRTxJEvbDEq+Nb2CFsGYnOjoNMEPXdjBKf +k+wQzhTGCX+fZgBtcFa4vDxi6wgNrMAn8SkbdOZIYbySnS0CUGYHhJ3d1dAVDtK/J++lR3i YaCZbduOsU5glF7AyLCKUSS1tDg3PbXYSK84Mbe4NC9dLzk/dxMjMAWc/nf84w7G9yesDjEK cDAq8fC+uFQYJcSaWFZcmXuIUYKDWUmEd89FoBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXFe26i2 SCGB9MSS1OzU1ILUIpgsEwenVAOj/XPp1FMbl11kTmYo3hBlaLNuXkdoSdG5st/a3/QannFE B1j4Z6/JSLnlt8rB6VzTO6+8wszAXX/s2DX27I3uednhvohrzY84mTMrFcxeikvtvWB1ZKrV sy+nlDsurY+yDVORSJfbwcx5amLiZNX0MF0vtwPnZtXz8dqays25fOU5+5Ut2q+VWIozEg21 mIuKEwF0acRX/QIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrALMWRmVeSWpSXmKPExsVy+t/xa7p5zwujDLbtFrG4te4cq8XGGetZ LY61PWG3uP7lOavF/CNAsebF69ksJt2fwGJx/vwGdovOiUvYLS7vmsNmMeP8PiaLRctamS3W HrnLbrH0+kUmi9a9R9gd+D3WzFvD6DG7Yyarx6ZVnWwe++euYffo27KK0ePzJrkAtigum5TU nMyy1CJ9uwSujB8nL7AXvBSv+HpvAnsD4x7hLkZODgkBE4lZL+czQdhiEhfurWfrYuTiEBJY wiixeNMcVginkUni2ol2VpAqNgFNib+bb7KB2CIC7hLLll8DK2IW+MoiMen7S3aQhLCAm0Tn o0NACQ4OFgFViXN3zUHCvALmEpP3zGSG2CYvMWFLEwuIzSlgIbGypx1sphBQzZ7NV5kmMPIu YGRYxSiSWlqcm55bbKhXnJhbXJqXrpecn7uJERiu24793LyD8dLG4EOMAhyMSjy8Ly4VRgmx JpYVV+YeYpTgYFYS4d1zESjEm5JYWZValB9fVJqTWnyIUZqDRUmct3fP6kghgfTEktTs1NSC 1CKYLBMHp1QDY1tbw7kHpduXfApjuittJrLDOU71hqQa233jP1uaQ7T9r9hKtnz/InU//PzS J5xdf3Zeic2Rn1Y0vXf+qnCXJLse5h9Od3wDCk4cP27UUDa7XDn2TFW17PprDvv+rO0OM9if c+scs0yM/PLP274LqH+YLll0auaOhMY/+bW9UvlCn5x0vKM3K7EUZyQaajEXFScCAFCobP9T AgAA X-CMS-MailID: 20180131155734eucas1p2b55ad1aab1d5086566dad7a79b25ccf3 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180131155734eucas1p2b55ad1aab1d5086566dad7a79b25ccf3 X-RootMTR: 20180131155734eucas1p2b55ad1aab1d5086566dad7a79b25ccf3 References: <20180131155718.5237-1-a.hajda@samsung.com> Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: extcon device is used to detect host/device connection. Since extcon OF property is deprecated, alternative method should be added. This method uses OF graph bindings to locate extcon. Signed-off-by: Andrzej Hajda --- Hi all, This patch implements alternative method to get extcon from DWC3. The code works but is hacky, as DWC3 must traverse different DT nodes to get extcon, in case of TM2 it is USB-PHY and MUIC, but other platforms can have different paths. I would be glad if it can be merged as is for now, but additional work must be done to make it generic. I guess on DT binding side it is OK. So the problem should be addressed in the code. My rough idea is to implement kind of extcon aliases/forwarder mechanism, ie. USB-PHY will expect on its output remote port extcon, and it should register extcon-forwarder pointing to this extcon. This way DWC3 can look for the extcon on its PHY phandle, and it will receive via forwarding mechanism extcon exposed by MUIC. As I said this is rough idea for discussion, other propositions are welcome. Regards Andrzej --- drivers/usb/dwc3/drd.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c index cc8ab9a8e9d2..eee2eca3d513 100644 --- a/drivers/usb/dwc3/drd.c +++ b/drivers/usb/dwc3/drd.c @@ -8,6 +8,7 @@ */ #include +#include #include "debug.h" #include "core.h" @@ -38,24 +39,38 @@ static int dwc3_drd_notifier(struct notifier_block *nb, return NOTIFY_DONE; } +struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc) +{ + struct device *dev = dwc->dev; + struct device_node *np_phy, *np_conn; + struct extcon_dev *edev; + + if (of_property_read_bool(dev->of_node, "extcon")) + return extcon_get_edev_by_phandle(dwc->dev, 0); + + np_phy = of_parse_phandle(dev->of_node, "phys", 0); + np_conn = of_graph_get_remote_node(np_phy, -1, -1); + edev = extcon_get_edev_by_of_node(np_conn); + of_node_put(np_conn); + of_node_put(np_phy); + + return edev; +} + int dwc3_drd_init(struct dwc3 *dwc) { int ret; - if (dwc->dev->of_node) { - if (of_property_read_bool(dwc->dev->of_node, "extcon")) - dwc->edev = extcon_get_edev_by_phandle(dwc->dev, 0); - - if (IS_ERR(dwc->edev)) - return PTR_ERR(dwc->edev); + dwc->edev = dwc3_get_extcon(dwc); + if (IS_ERR(dwc->edev)) + return PTR_ERR(dwc->edev); - dwc->edev_nb.notifier_call = dwc3_drd_notifier; - ret = extcon_register_notifier(dwc->edev, EXTCON_USB_HOST, - &dwc->edev_nb); - if (ret < 0) { - dev_err(dwc->dev, "couldn't register cable notifier\n"); - return ret; - } + dwc->edev_nb.notifier_call = dwc3_drd_notifier; + ret = extcon_register_notifier(dwc->edev, EXTCON_USB_HOST, + &dwc->edev_nb); + if (ret < 0) { + dev_err(dwc->dev, "couldn't register cable notifier\n"); + return ret; } dwc3_drd_update(dwc); -- 2.15.1