From: Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>
To: Sneeker Yeh <sneeker.yeh-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>,
Greg Kroah-Hartman
<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
Mathias Nyman
<mathias.nyman-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Grant Likely
<grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Alan Stern
<stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
Paul Bolle <pebolle-IWqWACnzNjzz+pZb47iToQ@public.gmane.org>,
Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Thomas Pugliese
<thomas.pugliese-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
David Mosberger <davidm-haPfTeumbwasTnJN9+BGXg@public.gmane.org>,
Peter Griffin
<peter.griffin-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Sylwester Nawrocki
<s.nawrocki-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
Andrew Bresticker
<abrestic-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
Gregory CLEMENT
<gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
Yoshihiro Shimoda
<yoshihiro.shimoda.uh-zM6kxYcvzFBBDgjK7y7TUQ@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-usb@
Subject: Re: [PATCH 2/3] usb: dwc3: add Fujitsu Specific Glue layer
Date: Mon, 22 Dec 2014 09:59:36 -0600 [thread overview]
Message-ID: <20141222155936.GB12815@saruman> (raw)
In-Reply-To: <1418695828-605-3-git-send-email-Sneeker.Yeh-l16TxrwUIHTQFUHtdCDX3A@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 8203 bytes --]
Hi,
On Tue, Dec 16, 2014 at 10:10:27AM +0800, Sneeker Yeh wrote:
> This patch adds support for Synopsis DesignWare USB3 IP Core found
> on Fujitsu Socs.
>
> Signed-off-by: Sneeker Yeh <Sneeker.Yeh-l16TxrwUIHTQFUHtdCDX3A@public.gmane.org>
> ---
> .../devicetree/bindings/usb/fujitsu-dwc3.txt | 25 +++
> drivers/usb/dwc3/Kconfig | 11 ++
> drivers/usb/dwc3/Makefile | 1 +
> drivers/usb/dwc3/dwc3-mb86s70.c | 194 ++++++++++++++++++++
> 4 files changed, 231 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt
> create mode 100644 drivers/usb/dwc3/dwc3-mb86s70.c
>
> diff --git a/Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt b/Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt
> new file mode 100644
> index 0000000..df77f91
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt
> @@ -0,0 +1,25 @@
> +FUJITSU GLUE COMPONENTS
> +
> +MB86S7x DWC3 GLUE
> + - compatible : Should be "fujitsu,mb86s70-dwc3"
> + - clocks: from common clock binding, handle to usb clock.
> + - clock-names: from common clock binding.
> + - #address-cells, #size-cells : Must be present if the device has sub-nodes
> + - ranges: the child address space are mapped 1:1 onto the parent address space
> + - #stream-id-cells : handle to use "arm,mmu-400" ARM IOMMU driver
> +
> +Sub-nodes:
> +The dwc3 core should be added as subnode to MB86S7x dwc3 glue.
> +- dwc3 :
> + The binding details of dwc3 can be found in:
> + Documentation/devicetree/bindings/usb/dwc3.txt
> +
> +usb3host: mb86s70_usb3host {
> + compatible = "fujitsu,mb86s70-dwc3";
> + clocks = <&clk_alw_1_1>;
> + clock-names = "bus_clk";
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges;
> + #stream-id-cells = <0>;
> +};
> diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
> index 58b5b2c..3390d42 100644
> --- a/drivers/usb/dwc3/Kconfig
> +++ b/drivers/usb/dwc3/Kconfig
> @@ -61,6 +61,17 @@ config USB_DWC3_EXYNOS
> Recent Exynos5 SoCs ship with one DesignWare Core USB3 IP inside,
> say 'Y' or 'M' if you have one such device.
>
> +config USB_DWC3_MB86S70
> + tristate "MB86S70 Designware USB3 Platform code"
> + default USB_DWC3
> + help
> + MB86S7X SOC ship with DesignWare Core USB3 IP inside,
> + this implementation also integrated Fujitsu USB PHY inside
> + this Core USB3 IP.
> +
> + say 'Y' or 'M' if you have one such device.
> +
> +
> config USB_DWC3_PCI
> tristate "PCIe-based Platforms"
> depends on PCI
> diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
> index bb34fbc..05d1de2 100644
> --- a/drivers/usb/dwc3/Makefile
> +++ b/drivers/usb/dwc3/Makefile
> @@ -38,3 +38,4 @@ obj-$(CONFIG_USB_DWC3_PCI) += dwc3-pci.o
> obj-$(CONFIG_USB_DWC3_KEYSTONE) += dwc3-keystone.o
> obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
> obj-$(CONFIG_USB_DWC3_ST) += dwc3-st.o
> +obj-$(CONFIG_USB_DWC3_MB86S70) += dwc3-mb86s70.o
> diff --git a/drivers/usb/dwc3/dwc3-mb86s70.c b/drivers/usb/dwc3/dwc3-mb86s70.c
> new file mode 100644
> index 0000000..241c5bd
> --- /dev/null
> +++ b/drivers/usb/dwc3/dwc3-mb86s70.c
> @@ -0,0 +1,194 @@
> +/**
> + * dwc3-mb86s70.c - Fujitsu mb86s70 DWC3 Specific Glue layer
> + *
> + * Copyright (c) 2013 - 2014 FUJITSU SEMICONDUCTOR LIMITED
> + * http://jp.fujitsu.com/group/fsl
> + *
> + * Author: Alice Chan <Alice.Chan-l16TxrwUIHTQFUHtdCDX3A@public.gmane.org>
> + * based on dwc3-exynos.c
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +#include <linux/slab.h>
> +#include <linux/platform_device.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/interrupt.h>
> +#include <linux/of.h>
> +#include <linux/of_platform.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/clk.h>
> +
> +struct dwc3_mb86s70 {
> + struct device *dev;
> + struct clk **clk_table;
please align these.
> +};
> +
> +/* return 0 means successful */
this comment is unnecessary :-)
> +static int dwc3_mb86s70_clk_control(struct device *dev, bool on)
> +{
> + int ret, i;
> + struct clk *clk;
> +
> + if (!on)
> + goto clock_off;
> +
> + for (i = 0;; i++) {
> + clk = of_clk_get(dev->of_node, i);
you could count the number of properties first, then allocate clk_table
to the exact size.
> + if (IS_ERR(clk))
> + break;
> +
> + ret = clk_prepare_enable(clk);
> + if (ret) {
> + dev_err(dev, "failed to enable clock[%d]\n", i);
> + goto clock_off;
> + }
> + }
> +
> + return 0;
> +
> +clock_off:
> + for (i = 0;; i++) {
> + clk = of_clk_get(dev->of_node, i);
> + if (IS_ERR(clk))
> + break;
> +
> + clk_disable_unprepare(clk);
> + }
> +
> + return on;
> +}
> +
> +static int dwc3_mb86s70_remove_child(struct device *dev, void *unused)
> +{
> + struct platform_device *pdev = to_platform_device(dev);
> +
> + of_device_unregister(pdev);
> +
> + return 0;
> +}
> +
> +static u64 dwc3_mb86s70_dma_mask = DMA_BIT_MASK(32);
why ? Use dma_coerce_mask_and_coherent().
> +
> +static int dwc3_mb86s70_probe(struct platform_device *pdev)
> +{
> + struct dwc3_mb86s70 *mb86s70;
> + struct device *dev = &pdev->dev;
> + struct device_node *node = dev->of_node;
> + int ret;
> +
> + mb86s70 = devm_kzalloc(dev, sizeof(*mb86s70), GFP_KERNEL);
> + if (!mb86s70) {
> + ret = -ENOMEM;
> + goto err;
> + }
> +
> + dev->dma_mask = &dwc3_mb86s70_dma_mask;
> +
> + platform_set_drvdata(pdev, mb86s70);
> +
> + mb86s70->dev = dev;
> +
> + /* resume driver for clock, power */
> + pm_runtime_enable(&pdev->dev);
> + ret = pm_runtime_get_sync(&pdev->dev);
here's a slightly better way (add error checking where necessary):
dwc3_mb86s70_clk_control(dev, true);
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
pm_runtime_get(dev);
> + if (ret < 0) {
> + dev_err(&pdev->dev, "get_sync failed with err %d\n", ret);
> + goto err;
if get_sync() fails, you still need to call pm_runtime_put_sync(); In
this case, you also need to call pm_runtime_disable();
> + }
> +
> + if (node) {
> + ret = of_platform_populate(node, NULL, NULL, dev);
> + if (!ret)
> + return 0;
> + dev_err(dev, "failed to add dwc3 core\n");
> + }
> + dev_err(dev, "no device node, failed to add dwc3 core\n");
> + ret = -ENODEV;
> +
> +err:
> + return ret;
> +}
> +
> +static int dwc3_mb86s70_remove(struct platform_device *pdev)
> +{
> + device_for_each_child(&pdev->dev, NULL, dwc3_mb86s70_remove_child);
> +
> + pm_runtime_put_sync(&pdev->dev);
> + pm_runtime_disable(&pdev->dev);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id mb86s70_dwc3_match[] = {
> + { .compatible = "fujitsu,mb86s70-dwc3" },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, mb86s70_dwc3_match);
> +
> +#ifdef CONFIG_PM
> +#ifdef CONFIG_PM_RUNTIME
> +static int dwc3_mb86s70_runtime_suspend(struct device *dev)
> +{
> + dwc3_mb86s70_clk_control(dev, false);
> +
> + return 0;
> +}
> +
> +static int dwc3_mb86s70_runtime_resume(struct device *dev)
> +{
> + dwc3_mb86s70_clk_control(dev, true);
> +
> + return 0;
> +}
> +#endif /* CONFIG_PM_RUNTIME */
> +static int dwc3_mb86s70_suspend(struct device *dev)
> +{
> + if (pm_runtime_status_suspended(dev))
> + return 0;
> +
> + return dwc3_mb86s70_runtime_suspend(dev);
ok, this is a bit confusing and, in fact, wrong. You're not dealing with
wakeups (which are mandatory on runtime_pm and option on system sleep).
It's okay to have a common function called by both runtime_pm and
system_sleep methods, but calling your runtime_pm handler is a bit odd.
last but not least, I need to see results of this running on top of
v3.19-rc1. Are you using both host and peripheral modes or only one mode
for now ?
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Felipe Balbi <balbi@ti.com>
To: Sneeker Yeh <sneeker.yeh@gmail.com>
Cc: Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>, Felipe Balbi <balbi@ti.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mathias Nyman <mathias.nyman@intel.com>,
Grant Likely <grant.likely@linaro.org>,
Alan Stern <stern@rowland.harvard.edu>,
Arnd Bergmann <arnd@arndb.de>, Paul Bolle <pebolle@tiscali.nl>,
Hans de Goede <hdegoede@redhat.com>,
Thomas Pugliese <thomas.pugliese@gmail.com>,
David Mosberger <davidm@egauge.net>,
Peter Griffin <peter.griffin@linaro.org>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Andrew Bresticker <abrestic@chromium.org>,
Gregory CLEMENT <gregory.clement@free-electrons.com>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-usb@vger.kernel.org>, <linux-omap@vger.kernel.org>,
Andy Green <andy.green@linaro.org>,
Jassi Brar <jaswinder.singh@linaro.org>,
Sneeker Yeh <Sneeker.Yeh@tw.fujitsu.com>
Subject: Re: [PATCH 2/3] usb: dwc3: add Fujitsu Specific Glue layer
Date: Mon, 22 Dec 2014 09:59:36 -0600 [thread overview]
Message-ID: <20141222155936.GB12815@saruman> (raw)
In-Reply-To: <1418695828-605-3-git-send-email-Sneeker.Yeh@tw.fujitsu.com>
[-- Attachment #1: Type: text/plain, Size: 8153 bytes --]
Hi,
On Tue, Dec 16, 2014 at 10:10:27AM +0800, Sneeker Yeh wrote:
> This patch adds support for Synopsis DesignWare USB3 IP Core found
> on Fujitsu Socs.
>
> Signed-off-by: Sneeker Yeh <Sneeker.Yeh@tw.fujitsu.com>
> ---
> .../devicetree/bindings/usb/fujitsu-dwc3.txt | 25 +++
> drivers/usb/dwc3/Kconfig | 11 ++
> drivers/usb/dwc3/Makefile | 1 +
> drivers/usb/dwc3/dwc3-mb86s70.c | 194 ++++++++++++++++++++
> 4 files changed, 231 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt
> create mode 100644 drivers/usb/dwc3/dwc3-mb86s70.c
>
> diff --git a/Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt b/Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt
> new file mode 100644
> index 0000000..df77f91
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/fujitsu-dwc3.txt
> @@ -0,0 +1,25 @@
> +FUJITSU GLUE COMPONENTS
> +
> +MB86S7x DWC3 GLUE
> + - compatible : Should be "fujitsu,mb86s70-dwc3"
> + - clocks: from common clock binding, handle to usb clock.
> + - clock-names: from common clock binding.
> + - #address-cells, #size-cells : Must be present if the device has sub-nodes
> + - ranges: the child address space are mapped 1:1 onto the parent address space
> + - #stream-id-cells : handle to use "arm,mmu-400" ARM IOMMU driver
> +
> +Sub-nodes:
> +The dwc3 core should be added as subnode to MB86S7x dwc3 glue.
> +- dwc3 :
> + The binding details of dwc3 can be found in:
> + Documentation/devicetree/bindings/usb/dwc3.txt
> +
> +usb3host: mb86s70_usb3host {
> + compatible = "fujitsu,mb86s70-dwc3";
> + clocks = <&clk_alw_1_1>;
> + clock-names = "bus_clk";
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges;
> + #stream-id-cells = <0>;
> +};
> diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
> index 58b5b2c..3390d42 100644
> --- a/drivers/usb/dwc3/Kconfig
> +++ b/drivers/usb/dwc3/Kconfig
> @@ -61,6 +61,17 @@ config USB_DWC3_EXYNOS
> Recent Exynos5 SoCs ship with one DesignWare Core USB3 IP inside,
> say 'Y' or 'M' if you have one such device.
>
> +config USB_DWC3_MB86S70
> + tristate "MB86S70 Designware USB3 Platform code"
> + default USB_DWC3
> + help
> + MB86S7X SOC ship with DesignWare Core USB3 IP inside,
> + this implementation also integrated Fujitsu USB PHY inside
> + this Core USB3 IP.
> +
> + say 'Y' or 'M' if you have one such device.
> +
> +
> config USB_DWC3_PCI
> tristate "PCIe-based Platforms"
> depends on PCI
> diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
> index bb34fbc..05d1de2 100644
> --- a/drivers/usb/dwc3/Makefile
> +++ b/drivers/usb/dwc3/Makefile
> @@ -38,3 +38,4 @@ obj-$(CONFIG_USB_DWC3_PCI) += dwc3-pci.o
> obj-$(CONFIG_USB_DWC3_KEYSTONE) += dwc3-keystone.o
> obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
> obj-$(CONFIG_USB_DWC3_ST) += dwc3-st.o
> +obj-$(CONFIG_USB_DWC3_MB86S70) += dwc3-mb86s70.o
> diff --git a/drivers/usb/dwc3/dwc3-mb86s70.c b/drivers/usb/dwc3/dwc3-mb86s70.c
> new file mode 100644
> index 0000000..241c5bd
> --- /dev/null
> +++ b/drivers/usb/dwc3/dwc3-mb86s70.c
> @@ -0,0 +1,194 @@
> +/**
> + * dwc3-mb86s70.c - Fujitsu mb86s70 DWC3 Specific Glue layer
> + *
> + * Copyright (c) 2013 - 2014 FUJITSU SEMICONDUCTOR LIMITED
> + * http://jp.fujitsu.com/group/fsl
> + *
> + * Author: Alice Chan <Alice.Chan@tw.fujitsu.com>
> + * based on dwc3-exynos.c
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +#include <linux/slab.h>
> +#include <linux/platform_device.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/interrupt.h>
> +#include <linux/of.h>
> +#include <linux/of_platform.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/clk.h>
> +
> +struct dwc3_mb86s70 {
> + struct device *dev;
> + struct clk **clk_table;
please align these.
> +};
> +
> +/* return 0 means successful */
this comment is unnecessary :-)
> +static int dwc3_mb86s70_clk_control(struct device *dev, bool on)
> +{
> + int ret, i;
> + struct clk *clk;
> +
> + if (!on)
> + goto clock_off;
> +
> + for (i = 0;; i++) {
> + clk = of_clk_get(dev->of_node, i);
you could count the number of properties first, then allocate clk_table
to the exact size.
> + if (IS_ERR(clk))
> + break;
> +
> + ret = clk_prepare_enable(clk);
> + if (ret) {
> + dev_err(dev, "failed to enable clock[%d]\n", i);
> + goto clock_off;
> + }
> + }
> +
> + return 0;
> +
> +clock_off:
> + for (i = 0;; i++) {
> + clk = of_clk_get(dev->of_node, i);
> + if (IS_ERR(clk))
> + break;
> +
> + clk_disable_unprepare(clk);
> + }
> +
> + return on;
> +}
> +
> +static int dwc3_mb86s70_remove_child(struct device *dev, void *unused)
> +{
> + struct platform_device *pdev = to_platform_device(dev);
> +
> + of_device_unregister(pdev);
> +
> + return 0;
> +}
> +
> +static u64 dwc3_mb86s70_dma_mask = DMA_BIT_MASK(32);
why ? Use dma_coerce_mask_and_coherent().
> +
> +static int dwc3_mb86s70_probe(struct platform_device *pdev)
> +{
> + struct dwc3_mb86s70 *mb86s70;
> + struct device *dev = &pdev->dev;
> + struct device_node *node = dev->of_node;
> + int ret;
> +
> + mb86s70 = devm_kzalloc(dev, sizeof(*mb86s70), GFP_KERNEL);
> + if (!mb86s70) {
> + ret = -ENOMEM;
> + goto err;
> + }
> +
> + dev->dma_mask = &dwc3_mb86s70_dma_mask;
> +
> + platform_set_drvdata(pdev, mb86s70);
> +
> + mb86s70->dev = dev;
> +
> + /* resume driver for clock, power */
> + pm_runtime_enable(&pdev->dev);
> + ret = pm_runtime_get_sync(&pdev->dev);
here's a slightly better way (add error checking where necessary):
dwc3_mb86s70_clk_control(dev, true);
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
pm_runtime_get(dev);
> + if (ret < 0) {
> + dev_err(&pdev->dev, "get_sync failed with err %d\n", ret);
> + goto err;
if get_sync() fails, you still need to call pm_runtime_put_sync(); In
this case, you also need to call pm_runtime_disable();
> + }
> +
> + if (node) {
> + ret = of_platform_populate(node, NULL, NULL, dev);
> + if (!ret)
> + return 0;
> + dev_err(dev, "failed to add dwc3 core\n");
> + }
> + dev_err(dev, "no device node, failed to add dwc3 core\n");
> + ret = -ENODEV;
> +
> +err:
> + return ret;
> +}
> +
> +static int dwc3_mb86s70_remove(struct platform_device *pdev)
> +{
> + device_for_each_child(&pdev->dev, NULL, dwc3_mb86s70_remove_child);
> +
> + pm_runtime_put_sync(&pdev->dev);
> + pm_runtime_disable(&pdev->dev);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id mb86s70_dwc3_match[] = {
> + { .compatible = "fujitsu,mb86s70-dwc3" },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, mb86s70_dwc3_match);
> +
> +#ifdef CONFIG_PM
> +#ifdef CONFIG_PM_RUNTIME
> +static int dwc3_mb86s70_runtime_suspend(struct device *dev)
> +{
> + dwc3_mb86s70_clk_control(dev, false);
> +
> + return 0;
> +}
> +
> +static int dwc3_mb86s70_runtime_resume(struct device *dev)
> +{
> + dwc3_mb86s70_clk_control(dev, true);
> +
> + return 0;
> +}
> +#endif /* CONFIG_PM_RUNTIME */
> +static int dwc3_mb86s70_suspend(struct device *dev)
> +{
> + if (pm_runtime_status_suspended(dev))
> + return 0;
> +
> + return dwc3_mb86s70_runtime_suspend(dev);
ok, this is a bit confusing and, in fact, wrong. You're not dealing with
wakeups (which are mandatory on runtime_pm and option on system sleep).
It's okay to have a common function called by both runtime_pm and
system_sleep methods, but calling your runtime_pm handler is a bit odd.
last but not least, I need to see results of this running on top of
v3.19-rc1. Are you using both host and peripheral modes or only one mode
for now ?
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-12-22 15:59 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-16 2:10 [PATCH 0/3] Add support for Fujitsu USB host controller Sneeker Yeh
2014-12-16 2:10 ` Sneeker Yeh
2014-12-16 2:10 ` [PATCH 1/3] usb: host: f_usb20ho: add support for Fujitsu ehci/ohci USB 2.0 " Sneeker Yeh
2014-12-16 2:10 ` Sneeker Yeh
2014-12-16 9:06 ` Arnd Bergmann
2014-12-16 9:06 ` Arnd Bergmann
2014-12-17 15:33 ` Sneeker.Yeh
[not found] ` <830AC58E49A426478AC39824BC0FA915D8BB402BB7-BxlyW7DJwtfE0yrG4eIIn8GT06e9YD5CS4/B3AGzWvkvtab9mdV7tw@public.gmane.org>
2014-12-17 15:44 ` Arnd Bergmann
2014-12-17 15:44 ` Arnd Bergmann
2014-12-17 15:46 ` Sneeker.Yeh
2014-12-16 2:10 ` [PATCH 2/3] usb: dwc3: add Fujitsu Specific Glue layer Sneeker Yeh
2014-12-16 2:10 ` Sneeker Yeh
[not found] ` <1418695828-605-3-git-send-email-Sneeker.Yeh-l16TxrwUIHTQFUHtdCDX3A@public.gmane.org>
2014-12-22 15:59 ` Felipe Balbi [this message]
2014-12-22 15:59 ` Felipe Balbi
2014-12-28 17:52 ` Sneeker Yeh
2014-12-29 16:14 ` Felipe Balbi
2014-12-29 16:14 ` Felipe Balbi
2015-01-04 13:16 ` Sneeker Yeh
2015-01-05 15:52 ` Felipe Balbi
2015-01-05 15:52 ` Felipe Balbi
[not found] ` <CAJ1gpc0uniw3F3O9nxTLHp9M2boxrOACYDB=fgruhLOLdqg9yA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-30 10:12 ` Arnd Bergmann
2014-12-30 10:12 ` Arnd Bergmann
2015-01-03 1:21 ` Felipe Balbi
2015-01-03 1:21 ` Felipe Balbi
2015-01-05 15:28 ` Arnd Bergmann
2015-01-05 15:28 ` Arnd Bergmann
2015-01-05 15:50 ` Felipe Balbi
2015-01-05 15:50 ` Felipe Balbi
2015-01-04 14:32 ` Sneeker Yeh
2014-12-16 2:10 ` [PATCH 3/3] usb: dwc3: add a quirk for device disconnection issue in Synopsis dwc3 core Sneeker Yeh
2014-12-16 2:10 ` Sneeker Yeh
2014-12-22 15:37 ` Felipe Balbi
2014-12-22 15:37 ` Felipe Balbi
2014-12-29 6:41 ` Sneeker Yeh
2014-12-29 8:07 ` Sneeker Yeh
[not found] ` <CAJ1gpc3-Wjtm54WOhO6RXjZft9BMngzyYC0-S-XnTacV-qKgMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-29 16:06 ` Felipe Balbi
2014-12-29 16:06 ` Felipe Balbi
2015-01-04 12:55 ` Sneeker Yeh
[not found] ` <CAJ1gpc0Uu4vS2iA_o_W5NaE_QBWDYFZJio7yKvhpaR5f=qWcGA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-05 17:09 ` Felipe Balbi
2015-01-05 17:09 ` Felipe Balbi
2015-01-11 15:19 ` Sneeker Yeh
2015-01-12 17:20 ` Felipe Balbi
2015-01-12 17:20 ` Felipe Balbi
2015-01-12 17:29 ` Paul Bolle
2015-01-12 17:29 ` Paul Bolle
2015-01-12 17:50 ` Felipe Balbi
2015-01-12 17:50 ` Felipe Balbi
2015-01-14 7:08 ` Sneeker Yeh
2015-01-14 17:02 ` Felipe Balbi
2015-01-14 17:02 ` Felipe Balbi
2015-01-17 10:52 ` Sneeker Yeh
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=20141222155936.GB12815@saruman \
--to=balbi-l0cymroini0@public.gmane.org \
--cc=abrestic-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=davidm-haPfTeumbwasTnJN9+BGXg@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=mathias.nyman-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
--cc=pebolle-IWqWACnzNjzz+pZb47iToQ@public.gmane.org \
--cc=peter.griffin-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=s.nawrocki-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=sneeker.yeh-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org \
--cc=thomas.pugliese-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=yoshihiro.shimoda.uh-zM6kxYcvzFBBDgjK7y7TUQ@public.gmane.org \
/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.