From: Jack Pham <jackp@codeaurora.org>
To: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Cc: linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org,
gregkh@linuxfoundation.org, balbi@kernel.org,
bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org,
Andy Gross <agross@kernel.org>, Lee Jones <lee.jones@linaro.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Manu Gautam <mgautam@codeaurora.org>
Subject: Re: [PATCH v4 09/18] usb: dwc3: qcom: Override VBUS when using gpio_usb_connector
Date: Fri, 7 Feb 2020 00:07:29 -0800 [thread overview]
Message-ID: <20200207080729.GA30341@jackp-linux.qualcomm.com> (raw)
In-Reply-To: <20200207015907.242991-10-bryan.odonoghue@linaro.org>
Hi Bryan,
On Fri, Feb 07, 2020 at 01:58:58AM +0000, Bryan O'Donoghue wrote:
> Using the gpio_usb_connector driver also means that we are not supplying
> VBUS via the SoC but by an external PMIC directly.
>
> This patch searches for a gpio_usb_connector as a child node of the core
> DWC3 block and if found switches on the VBUS over-ride, leaving it up to
> the role-switching code in gpio-usb-connector to switch off and on VBUS.
<snip>
> static int dwc3_qcom_probe(struct platform_device *pdev)
> {
> struct device_node *np = pdev->dev.of_node;
> @@ -557,7 +572,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
> struct dwc3_qcom *qcom;
> struct resource *res, *parent_res = NULL;
> int ret, i;
> - bool ignore_pipe_clk;
> + bool ignore_pipe_clk, gpio_usb_conn;
>
> qcom = devm_kzalloc(&pdev->dev, sizeof(*qcom), GFP_KERNEL);
> if (!qcom)
> @@ -649,9 +664,10 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
> }
>
> qcom->mode = usb_get_dr_mode(&qcom->dwc3->dev);
> + gpio_usb_conn = dwc3_qcom_find_gpio_usb_connector(qcom->dwc3);
>
> - /* enable vbus override for device mode */
> - if (qcom->mode == USB_DR_MODE_PERIPHERAL)
> + /* enable vbus override for device mode or GPIO USB connector mode */
> + if (qcom->mode == USB_DR_MODE_PERIPHERAL || gpio_usb_conn)
> dwc3_qcom_vbus_overrride_enable(qcom, true);
This doesn't seem right. It looks like you are doing the vbus_override
only once on probe() and keeping it that way regardless of the dynamic
state of the connector, i.e. even after VBUS is physically removed
and/or ID pin is low.
> /* register extcon to override sw_vbus on Vbus change later */
As suggested by this comment, if you look at the extcon handling, it
intercepts the VBUS state toggling in dwc3_qcom_vbus_notifier() and
calls vbus_override() accordingly. That way it should only be true when
the role==USB_ROLE_DEVICE and disabled otherwise (USB_ROLE_HOST/NONE).
To me the gpio-b connector + usb-role-switch is attempting to be an
alternative to extcon. But to correctly mimic the vbus_override()
behavior I think we need a way to intercept when the connector child
driver calls usb_role_switch_set_role() to the dwc3 device, but somehow
be able to do it from up here in the parent/glue layer. Unfortunately I
don't have a good idea of how to do that, short of shoehorning an
"upcall" notification from drd.c to the glue, something I don't think
Felipe would be a fan of.
Could the usb_role_switch class somehow be enhanced to support chaining
multiple "consumers" to support this case? Such that when the gpio-b
driver calls set_role() it could get handled both by drd.c and
dwc3-qcom.c?
Jack
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2020-02-07 8:07 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-07 1:58 [PATCH v4 00/18] Enable Qualcomm QCS 404 HS/SS USB Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 01/18] dt-bindings: phy: remove qcom-dwc3-usb-phy Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 02/18] dt-bindings: phy: Add Qualcomm Synopsys Hi-Speed USB PHY binding Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 03/18] phy: qualcomm: Add Synopsys 28nm Hi-Speed USB PHY driver Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 04/18] dt-bindings: Add Qualcomm USB SuperSpeed PHY bindings Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 05/18] phy: qualcomm: usb: Add SuperSpeed PHY driver Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 06/18] usb: dwc3: Registering a role switch in the DRD code Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 07/18] dt-bindings: usb: dwc3: Add a gpio-usb-connector example Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 08/18] dt-bindings: usb: dwc3: Add a usb-role-switch to the example Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 09/18] usb: dwc3: qcom: Override VBUS when using gpio_usb_connector Bryan O'Donoghue
2020-02-07 8:07 ` Jack Pham [this message]
2020-02-07 10:36 ` Bryan O'Donoghue
2020-02-07 10:50 ` Bryan O'Donoghue
2020-02-07 15:04 ` Bryan O'Donoghue
2020-02-07 1:58 ` [PATCH v4 10/18] usb: dwc3: Add support for usb-conn-gpio connectors Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 11/18] arm64: dts: qcom: qcs404: Add USB devices and PHYs Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 12/18] arm64: dts: qcom: qcs404-evb: Define VBUS detect pin Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 13/18] arm64: dts: qcom: qcs404-evb: Define VBUS boost pin Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 14/18] arm64: dts: qcom: qcs404-evb: Define USB ID pin Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 15/18] arm64: dts: qcom: qcs404-evb: Describe external VBUS regulator Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 16/18] arm64: dts: qcom: qcs404-evb: Raise vreg_l12_3p3 minimum voltage Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 17/18] arm64: dts: qcom: qcs404-evb: Enable secondary USB controller Bryan O'Donoghue
2020-02-07 1:59 ` [PATCH v4 18/18] arm64: dts: qcom: qcs404-evb: Enable primary " Bryan O'Donoghue
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200207080729.GA30341@jackp-linux.qualcomm.com \
--to=jackp@codeaurora.org \
--cc=agross@kernel.org \
--cc=balbi@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=bryan.odonoghue@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=lee.jones@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mgautam@codeaurora.org \
--cc=p.zabel@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.