lkml.org 
[lkml]   [2020]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 7/7] usb: dwc3: qcom: Enable gpio-usb-conn based role-switching
    Date
    This patch adds the ability to receive a notification from the DRD code for
    role-switch events and in doing so it introduces a disjunction between
    gpio-usb-conn or extcon mode.

    This is what we want to do, since the two methods are mutually exclusive.

    Cc: Andy Gross <agross@kernel.org>
    Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
    Cc: Lee Jones <lee.jones@linaro.org>
    Cc: Felipe Balbi <balbi@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Philipp Zabel <p.zabel@pengutronix.de>
    Cc: Jack Pham <jackp@codeaurora.org>
    Cc: linux-arm-msm@vger.kernel.org
    Cc: linux-usb@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Tested-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    ---
    drivers/usb/dwc3/dwc3-qcom.c | 16 ++++++++++++++--
    1 file changed, 14 insertions(+), 2 deletions(-)

    diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
    index 6f4b2b3cffce..f6a7ede5953e 100644
    --- a/drivers/usb/dwc3/dwc3-qcom.c
    +++ b/drivers/usb/dwc3/dwc3-qcom.c
    @@ -571,6 +571,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
    struct device *dev = &pdev->dev;
    struct dwc3_qcom *qcom;
    struct resource *res, *parent_res = NULL;
    + struct dwc3 *dwc;
    int ret, i;
    bool ignore_pipe_clk;

    @@ -669,8 +670,16 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
    if (qcom->mode == USB_DR_MODE_PERIPHERAL)
    dwc3_qcom_vbus_overrride_enable(qcom, true);

    - /* register extcon to override sw_vbus on Vbus change later */
    - ret = dwc3_qcom_register_extcon(qcom);
    + if (dwc3_qcom_find_gpio_usb_connector(qcom->dwc3)) {
    + /* Using gpio-usb-conn register a notifier for VBUS */
    + dwc = platform_get_drvdata(qcom->dwc3);
    + qcom->vbus_nb.notifier_call = dwc3_qcom_vbus_notifier;
    + ret = dwc3_role_switch_notifier_register(dwc, &qcom->vbus_nb);
    + } else {
    + /* register extcon to override sw_vbus on Vbus change later */
    + ret = dwc3_qcom_register_extcon(qcom);
    + }
    +
    if (ret)
    goto depopulate;

    @@ -702,8 +711,11 @@ static int dwc3_qcom_remove(struct platform_device *pdev)
    {
    struct dwc3_qcom *qcom = platform_get_drvdata(pdev);
    struct device *dev = &pdev->dev;
    + struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3);
    int i;

    + dwc3_role_switch_notifier_unregister(dwc, &qcom->vbus_nb);
    +
    of_platform_depopulate(dev);

    for (i = qcom->num_clocks - 1; i >= 0; i--) {
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-03-11 20:16    [W:2.596 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site