From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH 1/2] USB: dwc3: get extcon device by OF graph bindings Date: Mon, 14 May 2018 10:38:55 +0200 Message-ID: <1080506a-adaa-193b-24d5-a779486dacc8@samsung.com> References: <20180131155718.5237-1-a.hajda@samsung.com> <20180131155718.5237-2-a.hajda@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20180131155718.5237-2-a.hajda@samsung.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: "open list:DESIGNWARE USB3 DRD IP DRIVER" Cc: 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: devicetree@vger.kernel.org On 31.01.2018 16:57, Andrzej Hajda wrote: > 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 Ping, 3.5 months passed. Regards Andrzej > --- > 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);