From: Gregory CLEMENT <gregory.clement@free-electrons.com>
To: Mathias Nyman <mathias.nyman@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Felipe Balbi <balbi@ti.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Gregory CLEMENT <gregory.clement@free-electrons.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
linux-arm-kernel@lists.infradead.org,
Lior Amsalem <alior@marvell.com>,
Tawfik Bayouk <tawfik@marvell.com>,
Nadav Haklai <nadavh@marvell.com>,
Grant Likely <grant.likely@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
devicetree@vger.kernel.org
Subject: [PATCH v6 07/17] usb: host: xhci-plat: add clock support
Date: Thu, 15 May 2014 12:17:32 +0200 [thread overview]
Message-ID: <1400149062-32661-8-git-send-email-gregory.clement@free-electrons.com> (raw)
In-Reply-To: <1400149062-32661-1-git-send-email-gregory.clement@free-electrons.com>
Some platforms (such as the Armada 38x ones) can gate the clock of
their USB controller. This patch adds the support for one clock in
xhci-plat, by enabling it during probe and disabling it on remove.
To achieve this, it adds a 'struct clk *' member in xhci_hcd. While
only used for now in xhci-plat, it might be used by other drivers in
the future. Moreover, the xhci_hcd structure already holds other
members such as msix_count and msix_entries, which are MSI-X specific,
and therefore only used by xhci-pci.
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Acked-by: Felipe Balbi <balbi@ti.com>
Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com>
---
drivers/usb/host/xhci-plat.c | 24 +++++++++++++++++++++++-
drivers/usb/host/xhci.h | 2 ++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index f5351af4b2c5..8108e58c9e02 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -11,6 +11,7 @@
* version 2 as published by the Free Software Foundation.
*/
+#include <linux/clk.h>
#include <linux/dma-mapping.h>
#include <linux/module.h>
#include <linux/of.h>
@@ -91,6 +92,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
struct xhci_hcd *xhci;
struct resource *res;
struct usb_hcd *hcd;
+ struct clk *clk;
int ret;
int irq;
@@ -137,14 +139,27 @@ static int xhci_plat_probe(struct platform_device *pdev)
goto release_mem_region;
}
+ /*
+ * Not all platforms have a clk so it is not an error if the
+ * clock does not exists.
+ */
+ clk = devm_clk_get(&pdev->dev, NULL);
+ if (!IS_ERR(clk)) {
+ ret = clk_prepare_enable(clk);
+ if (ret)
+ goto unmap_registers;
+ }
+
ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (ret)
- goto unmap_registers;
+ goto disable_clk;
+
device_wakeup_enable(hcd->self.controller);
/* USB 2.0 roothub is stored in the platform_device now. */
hcd = platform_get_drvdata(pdev);
xhci = hcd_to_xhci(hcd);
+ xhci->clk = clk;
xhci->shared_hcd = usb_create_shared_hcd(driver, &pdev->dev,
dev_name(&pdev->dev), hcd);
if (!xhci->shared_hcd) {
@@ -173,6 +188,10 @@ put_usb3_hcd:
dealloc_usb2_hcd:
usb_remove_hcd(hcd);
+disable_clk:
+ if (!IS_ERR(clk))
+ clk_disable_unprepare(clk);
+
unmap_registers:
iounmap(hcd->regs);
@@ -189,11 +208,14 @@ static int xhci_plat_remove(struct platform_device *dev)
{
struct usb_hcd *hcd = platform_get_drvdata(dev);
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct clk *clk = xhci->clk;
usb_remove_hcd(xhci->shared_hcd);
usb_put_hcd(xhci->shared_hcd);
usb_remove_hcd(hcd);
+ if (!IS_ERR(clk))
+ clk_disable_unprepare(clk);
iounmap(hcd->regs);
release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
usb_put_hcd(hcd);
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index d280e9213d08..003dc094ca37 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1478,6 +1478,8 @@ struct xhci_hcd {
/* msi-x vectors */
int msix_count;
struct msix_entry *msix_entries;
+ /* optional clock */
+ struct clk *clk;
/* data structures */
struct xhci_device_context_array *dcbaa;
struct xhci_ring *cmd_ring;
--
1.8.1.2
next prev parent reply other threads:[~2014-05-15 10:22 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-15 10:17 [PATCH v6 00/17] USB support for Armada 38x and Armada 375 Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 01/17] usb: ehci-orion: use platform_get_irq() for DT probing Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 02/17] usb: ehci-orion: rename error goto labels in ehci_orion_drv_probe() Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 03/17] usb: ehci-orion: fix clock reference leaking Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 04/17] usb: ehci-orion: add optional PHY support Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 05/17] Documentation: dt-bindings: update ehci-orion binding documentation Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 06/17] usb: host: xhci-plat: sort the headers in alphabetic order Gregory CLEMENT
2014-05-15 10:17 ` Gregory CLEMENT [this message]
2014-05-15 10:17 ` [PATCH v6 08/17] usb: host: xhci-plat: add support for the Armada 375/38x XHCI controllers Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 09/17] Documentation: dt-bindings: update xhci-platform DT binding Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 10/17] ARM: mvebu: add USB3 support for Armada 38x Gregory CLEMENT
2014-05-16 5:39 ` Jason Cooper
2014-05-16 19:07 ` Jason Cooper
2014-05-19 11:09 ` Paul Bolle
2014-05-21 13:53 ` Gregory CLEMENT
2014-05-22 14:08 ` Jason Cooper
2014-05-15 10:17 ` [PATCH v6 11/17] ARM: mvebu: add USB3 support for Armada 375 Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 12/17] ARM: configs: enable XHCI mvebu support in mvebu_v7_defconfig Gregory CLEMENT
2014-05-16 5:41 ` Jason Cooper
2014-05-16 19:07 ` Jason Cooper
2014-05-15 10:17 ` [PATCH v6 13/17] ARM: configs: enable XHCI mvebu support in multi_v7_defconfig Gregory CLEMENT
2014-05-15 13:32 ` Jason Cooper
2014-05-15 10:17 ` [PATCH v6 14/17] ARM: mvebu: add Device Tree description of xHCI controllers on Armada 38x Gregory CLEMENT
2014-05-16 5:57 ` Jason Cooper
2014-05-16 19:07 ` Jason Cooper
2014-05-15 10:17 ` [PATCH v6 15/17] ARM: mvebu: add Device Tree description of the EHCI controller " Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 16/17] ARM: mvebu: add Device Tree description of the xHCI controller on Armada 375 Gregory CLEMENT
2014-05-15 10:17 ` [PATCH v6 17/17] ARM: mvebu: add Device Tree description of the EHCI " Gregory CLEMENT
2014-05-15 13:26 ` Sergei Shtylyov
2014-05-15 13:34 ` Jason Cooper
2014-05-15 13:44 ` Gregory CLEMENT
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=1400149062-32661-8-git-send-email-gregory.clement@free-electrons.com \
--to=gregory.clement@free-electrons.com \
--cc=alior@marvell.com \
--cc=andrew@lunn.ch \
--cc=balbi@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=ezequiel.garcia@free-electrons.com \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=jason@lakedaemon.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=nadavh@marvell.com \
--cc=robh+dt@kernel.org \
--cc=sebastian.hesselbarth@gmail.com \
--cc=tawfik@marvell.com \
--cc=thomas.petazzoni@free-electrons.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®