From patchwork Thu Mar 23 05:54:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "\(Exiting\) Baolin Wang" X-Patchwork-Id: 95885 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp618763qgd; Thu, 23 Mar 2017 00:45:34 -0700 (PDT) X-Received: by 10.98.19.156 with SMTP id 28mr1367217pft.208.1490255133926; Thu, 23 Mar 2017 00:45:33 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f22si4607641plk.264.2017.03.23.00.45.33; Thu, 23 Mar 2017 00:45:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-usb-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-usb-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-usb-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752040AbdCWHpT (ORCPT + 4 others); Thu, 23 Mar 2017 03:45:19 -0400 Received: from mail-pf0-f180.google.com ([209.85.192.180]:32821 "EHLO mail-pf0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751506AbdCWHo7 (ORCPT ); Thu, 23 Mar 2017 03:44:59 -0400 Received: by mail-pf0-f180.google.com with SMTP id o190so20389202pfo.0 for ; Thu, 23 Mar 2017 00:44:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=/7xaa3USvw/EnKeh5fiKpbAhKJcy7UbJ9vlZieA2p9s=; b=PIk2XBbmRlf6HCpj4y0M7b2v1x3wSMcsWlg+sH06LjRX3w9xvjFNpM6yP8nIWe9nTi +OGqmx/kH5NXy9HQt2WrEZy6kP5ELa5HJvRUnajo59uJvVdZy4aBHT47B5mQVjQIFZMU 382V//KQgjNtDc/e46QqJCNNY7Q7KMB0bEcWA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=/7xaa3USvw/EnKeh5fiKpbAhKJcy7UbJ9vlZieA2p9s=; b=SKEIPcb1vAaQ49auclFEEYgXWWM7OifMpPOiwiKV98OG0x8BU0YnunREdOp4pGn5Og Wn0cCxVcFAG/cwr+LZKI9Z/9EDHOg/pM0ef/5CKm8LKiBlsMp7Ao8lp1QGZvCDB9LADm 3aB0KnDDDRtjKBD5jCqrcI3OgbVfoBt3K/zgIbsjsJvyizNFvGvvtHyUynMnZZeyjk93 Ru8AHIRWfqhoMfiywjsgWN3z0zpd9uuUY3CvAm6XOyhmGMIjl0TpgE7oamNl+mZKfgQh X9eXSJpBMW9yrokzmCarvsJBZHlZg2AGFTDBPumU+zdbX833gRYYIHF/7G5LYuLH+SL4 UqBg== X-Gm-Message-State: AFeK/H0UuUFWAaLWxZlrTANZMgY8ck06ByxJVZSqszT81rvlF1fbwIwsfpKpm2IeGvX5HkBI X-Received: by 10.98.216.202 with SMTP id e193mr965812pfg.80.1490248520681; Wed, 22 Mar 2017 22:55:20 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id t66sm7282467pfk.53.2017.03.22.22.55.17 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Mar 2017 22:55:20 -0700 (PDT) From: Baolin Wang To: balbi@kernel.org, gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linaro-kernel@lists.linaro.org, neilb@suse.com, jun.li@nxp.com, peter.chen@freescale.com, broonie@kernel.org, baolin.wang@linaro.org Subject: [PATCH v2 1/2] usb: phy: Introduce one extcon device into usb phy Date: Thu, 23 Mar 2017 13:54:57 +0800 Message-Id: <0b16763df04e197fb5b3c21b19799280d3bce275.1490248054.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Usually usb phy need register one extcon device to get the connection notifications. It will remove some duplicate code if the extcon device is registered using common code instead of each phy driver having its own related extcon APIs. So we add one pointer of extcon device into usb phy structure, and some other helper functions to register extcon. Suggested-by: NeilBrown Signed-off-by: Baolin Wang --- Changes since v1: - Fix build errors with random config. --- drivers/usb/phy/Kconfig | 6 +++--- drivers/usb/phy/phy.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/usb/phy.h | 6 ++++++ 3 files changed, 53 insertions(+), 3 deletions(-) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/usb/phy/Kconfig b/drivers/usb/phy/Kconfig index 61cef75..c9c61a8 100644 --- a/drivers/usb/phy/Kconfig +++ b/drivers/usb/phy/Kconfig @@ -4,6 +4,7 @@ menu "USB Physical Layer drivers" config USB_PHY + select EXTCON def_bool n # @@ -116,7 +117,7 @@ config OMAP_OTG config TAHVO_USB tristate "Tahvo USB transceiver driver" - depends on MFD_RETU && EXTCON + depends on MFD_RETU depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't be 'y' select USB_PHY help @@ -148,7 +149,6 @@ config USB_MSM_OTG depends on (USB || USB_GADGET) && (ARCH_QCOM || COMPILE_TEST) depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't be 'y' depends on RESET_CONTROLLER - depends on EXTCON select USB_PHY help Enable this to support the USB OTG transceiver on Qualcomm chips. It @@ -162,7 +162,7 @@ config USB_MSM_OTG config USB_QCOM_8X16_PHY tristate "Qualcomm APQ8016/MSM8916 on-chip USB PHY controller support" depends on ARCH_QCOM || COMPILE_TEST - depends on RESET_CONTROLLER && EXTCON + depends on RESET_CONTROLLER select USB_PHY select USB_ULPI_VIEWPORT help diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c index 98f75d2..baa8b18 100644 --- a/drivers/usb/phy/phy.c +++ b/drivers/usb/phy/phy.c @@ -100,6 +100,41 @@ static int devm_usb_phy_match(struct device *dev, void *res, void *match_data) return *phy == match_data; } +static int usb_add_extcon(struct usb_phy *x) +{ + int ret; + + if (of_property_read_bool(x->dev->of_node, "extcon")) { + x->edev = extcon_get_edev_by_phandle(x->dev, 0); + if (IS_ERR(x->edev)) + return PTR_ERR(x->edev); + + if (x->vbus_nb.notifier_call) { + ret = devm_extcon_register_notifier(x->dev, x->edev, + EXTCON_USB, + &x->vbus_nb); + if (ret < 0) { + dev_err(x->dev, + "register VBUS notifier failed\n"); + return ret; + } + } + + if (x->id_nb.notifier_call) { + ret = devm_extcon_register_notifier(x->dev, x->edev, + EXTCON_USB_HOST, + &x->id_nb); + if (ret < 0) { + dev_err(x->dev, + "register ID notifier failed\n"); + return ret; + } + } + } + + return 0; +} + /** * devm_usb_get_phy - find the USB PHY * @dev - device that requests this phy @@ -388,6 +423,10 @@ int usb_add_phy(struct usb_phy *x, enum usb_phy_type type) return -EINVAL; } + ret = usb_add_extcon(x); + if (ret) + return ret; + ATOMIC_INIT_NOTIFIER_HEAD(&x->notifier); spin_lock_irqsave(&phy_lock, flags); @@ -422,12 +461,17 @@ int usb_add_phy_dev(struct usb_phy *x) { struct usb_phy_bind *phy_bind; unsigned long flags; + int ret; if (!x->dev) { dev_err(x->dev, "no device provided for PHY\n"); return -EINVAL; } + ret = usb_add_extcon(x); + if (ret) + return ret; + ATOMIC_INIT_NOTIFIER_HEAD(&x->notifier); spin_lock_irqsave(&phy_lock, flags); diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h index 31a8068..1b5269e 100644 --- a/include/linux/usb/phy.h +++ b/include/linux/usb/phy.h @@ -9,6 +9,7 @@ #ifndef __LINUX_USB_PHY_H #define __LINUX_USB_PHY_H +#include #include #include @@ -85,6 +86,11 @@ struct usb_phy { struct usb_phy_io_ops *io_ops; void __iomem *io_priv; + /* to support extcon device */ + struct extcon_dev *edev; + struct notifier_block vbus_nb; + struct notifier_block id_nb; + /* for notification of usb_phy_events */ struct atomic_notifier_head notifier; From patchwork Thu Mar 23 05:54:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "\(Exiting\) Baolin Wang" X-Patchwork-Id: 95883 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp616034qgd; Thu, 23 Mar 2017 00:36:57 -0700 (PDT) X-Received: by 10.98.137.75 with SMTP id v72mr1367637pfd.190.1490254616923; Thu, 23 Mar 2017 00:36:56 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c64si3276618pfl.21.2017.03.23.00.36.56; Thu, 23 Mar 2017 00:36:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-usb-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-usb-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-usb-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753574AbdCWHgz (ORCPT + 4 others); Thu, 23 Mar 2017 03:36:55 -0400 Received: from mail-pg0-f46.google.com ([74.125.83.46]:33225 "EHLO mail-pg0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753125AbdCWHgy (ORCPT ); Thu, 23 Mar 2017 03:36:54 -0400 Received: by mail-pg0-f46.google.com with SMTP id w20so16735085pgc.0 for ; Thu, 23 Mar 2017 00:36:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=LrpuaKJ9OvjUsduJvdiLfwJwf3a8LIYfqinqQ3ZsT5U=; b=V4moOFpCJ+XWmzLHjJhvKSX0G+osX0rp9HINEKwHML0CFN+g8FXoe3fCmFCeamrYs9 Ysg11UWOm6qttYNJjKDGvkAKI1aDptCeFxdfTkdSPe53MqvVobVNVocdloqACo2AWNyC NqWL7NP+hY5O44mlSu1MXUCrdTtpuhmn4Nya0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=LrpuaKJ9OvjUsduJvdiLfwJwf3a8LIYfqinqQ3ZsT5U=; b=ejTRdsjySXeMYUnItmiaK5M7zlsgfHVWlLDPp93TyC7r1q4MpT7SJihTQKq/84RMyq L/V3hZOlHRGg77fSW+Ln+qGAIKoyDiYg5Z7wQdk84sKB3ux9WVeDJGuiodPAkVFjf7qW 7QwpyD4gVuUtQJPC/lONz9Ip9lELDIQLHo7+X5p/dRvhMRhcILfzV+MLcBNKqJ2ICV0C JsQeIYQEGK+5H/jNs4NiC1557lYzGKJ77kH/EVmqreNIKhMlHycQ7mpXWSA+FI+R7RBN ogh2zCzC0nN16N3LPnBZeT/R6cAAgz/dWzWIuBtzPYzPUZk4ls4ng2v866+xG4KigN7K AAuQ== X-Gm-Message-State: AFeK/H3m1531mPImW1wIPm1MejUkLQK0rbocP19zHV+dw/4pWwC0yNdAZVbKqOTgf0FtrGKB X-Received: by 10.98.148.25 with SMTP id m25mr924769pfe.45.1490248523712; Wed, 22 Mar 2017 22:55:23 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id t66sm7282467pfk.53.2017.03.22.22.55.20 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Mar 2017 22:55:23 -0700 (PDT) From: Baolin Wang To: balbi@kernel.org, gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linaro-kernel@lists.linaro.org, neilb@suse.com, jun.li@nxp.com, peter.chen@freescale.com, broonie@kernel.org, baolin.wang@linaro.org Subject: [PATCH v2 2/2] usb: phy: phy-qcom-8x16-usb: Remove redundant extcon register/unregister Date: Thu, 23 Mar 2017 13:54:58 +0800 Message-Id: X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <0b16763df04e197fb5b3c21b19799280d3bce275.1490248054.git.baolin.wang@linaro.org> References: <0b16763df04e197fb5b3c21b19799280d3bce275.1490248054.git.baolin.wang@linaro.org> In-Reply-To: <0b16763df04e197fb5b3c21b19799280d3bce275.1490248054.git.baolin.wang@linaro.org> References: <0b16763df04e197fb5b3c21b19799280d3bce275.1490248054.git.baolin.wang@linaro.org> Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Since usb phy core has added common code to register or unregister extcon device, then phy-qcom-8x16-usb driver does not need its own code to register/unregister extcon device, then remove them. Signed-off-by: Baolin Wang --- Changes since v1: - No updates. --- drivers/usb/phy/phy-qcom-8x16-usb.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/usb/phy/phy-qcom-8x16-usb.c b/drivers/usb/phy/phy-qcom-8x16-usb.c index fdf6863..b6a83a5 100644 --- a/drivers/usb/phy/phy-qcom-8x16-usb.c +++ b/drivers/usb/phy/phy-qcom-8x16-usb.c @@ -69,9 +69,6 @@ struct phy_8x16 { struct reset_control *phy_reset; - struct extcon_dev *vbus_edev; - struct notifier_block vbus_notify; - struct gpio_desc *switch_gpio; struct notifier_block reboot_notify; }; @@ -131,7 +128,8 @@ static int phy_8x16_vbus_off(struct phy_8x16 *qphy) static int phy_8x16_vbus_notify(struct notifier_block *nb, unsigned long event, void *ptr) { - struct phy_8x16 *qphy = container_of(nb, struct phy_8x16, vbus_notify); + struct usb_phy *usb_phy = container_of(nb, struct usb_phy, vbus_nb); + struct phy_8x16 *qphy = container_of(usb_phy, struct phy_8x16, phy); if (event) phy_8x16_vbus_on(qphy); @@ -187,7 +185,7 @@ static int phy_8x16_init(struct usb_phy *phy) val = ULPI_PWR_OTG_COMP_DISABLE; usb_phy_io_write(phy, val, ULPI_SET(ULPI_PWR_CLK_MNG_REG)); - state = extcon_get_state(qphy->vbus_edev, EXTCON_USB); + state = extcon_get_state(qphy->phy.edev, EXTCON_USB); if (state) phy_8x16_vbus_on(qphy); else @@ -289,15 +287,13 @@ static int phy_8x16_probe(struct platform_device *pdev) phy->io_priv = qphy->regs + HSPHY_ULPI_VIEWPORT; phy->io_ops = &ulpi_viewport_access_ops; phy->type = USB_PHY_TYPE_USB2; + phy->vbus_nb.notifier_call = phy_8x16_vbus_notify; + phy->id_nb.notifier_call = NULL; ret = phy_8x16_read_devicetree(qphy); if (ret < 0) return ret; - qphy->vbus_edev = extcon_get_edev_by_phandle(phy->dev, 0); - if (IS_ERR(qphy->vbus_edev)) - return PTR_ERR(qphy->vbus_edev); - ret = clk_set_rate(qphy->core_clk, INT_MAX); if (ret < 0) dev_dbg(phy->dev, "Can't boost core clock\n"); @@ -315,12 +311,6 @@ static int phy_8x16_probe(struct platform_device *pdev) if (WARN_ON(ret)) goto off_clks; - qphy->vbus_notify.notifier_call = phy_8x16_vbus_notify; - ret = devm_extcon_register_notifier(&pdev->dev, qphy->vbus_edev, - EXTCON_USB, &qphy->vbus_notify); - if (ret < 0) - goto off_power; - ret = usb_add_phy_dev(&qphy->phy); if (ret) goto off_power;