Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1676061

[PATCH 6/8] usb: bdc: Add support for suspend/resume

From Al Cooper <alcooperx@gmail.com>
Newsgroups linux.kernel
Subject [PATCH 6/8] usb: bdc: Add support for suspend/resume
Date 2017-06-27 20:30 +0200
Message-ID <tX3po-4kt-25@gated-at.bofh.it> (permalink)
References <tX3pn-4kt-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Based on a previous commit by Danesh Petigara <dpetigara@broadcom.com>
that added resume to solve the following problem:
"The BDC driver will fail after resuming from S3 suspend and this
will cause any upper layer gadget driver to fail."
This commit also adds support for suspend and manages the clock during
suspend/resume.

Signed-off-by: Al Cooper <alcooperx@gmail.com>
---
 drivers/usb/gadget/udc/bdc/bdc.h      |  1 +
 drivers/usb/gadget/udc/bdc/bdc_core.c | 36 +++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/drivers/usb/gadget/udc/bdc/bdc.h b/drivers/usb/gadget/udc/bdc/bdc.h
index 3664808..f838647 100644
--- a/drivers/usb/gadget/udc/bdc/bdc.h
+++ b/drivers/usb/gadget/udc/bdc/bdc.h
@@ -454,6 +454,7 @@ struct bdc {
 	 * Func Wake packet every 2.5 secs. Refer to USB3 spec section 8.5.6.4
 	 */
 	struct delayed_work	func_wake_notify;
+	struct clk		*clk;
 };
 
 static inline u32 bdc_readl(void __iomem *base, u32 offset)
diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c
index 1714bd3..021c0e7 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_core.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
@@ -473,6 +473,8 @@ static int bdc_probe(struct platform_device *pdev)
 	if (!bdc)
 		return -ENOMEM;
 
+	bdc->clk = clk;
+
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	bdc->regs = devm_ioremap_resource(dev, res);
 	if (IS_ERR(bdc->regs)) {
@@ -529,10 +531,43 @@ static int bdc_remove(struct platform_device *pdev)
 	dev_dbg(bdc->dev, "%s ()\n", __func__);
 	bdc_udc_exit(bdc);
 	bdc_hw_exit(bdc);
+	clk_disable_unprepare(bdc->clk);
+	return 0;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int bdc_suspend(struct device *dev)
+{
+	struct bdc *bdc = dev_get_drvdata(dev);
+
+	clk_disable_unprepare(bdc->clk);
+	return 0;
+}
+
+static int bdc_resume(struct device *dev)
+{
+	struct bdc *bdc = dev_get_drvdata(dev);
+	int ret;
+
+	ret = clk_prepare_enable(bdc->clk);
+	if (ret) {
+		dev_err(bdc->dev, "err enabling the clock\n");
+		return ret;
+	}
+	ret = bdc_reinit(bdc);
+	if (ret) {
+		dev_err(bdc->dev, "err in bdc reinit\n");
+		return ret;
+	}
 
 	return 0;
 }
 
+#endif /* CONFIG_PM_SLEEP */
+
+static SIMPLE_DEV_PM_OPS(bdc_pm_ops, bdc_suspend,
+		bdc_resume);
+
 static const struct of_device_id bdc_of_match[] = {
 	{ .compatible = "brcm,bdc-udc-v0.16" },
 	{ .compatible = "brcm,bdc-udc" },
@@ -543,6 +578,7 @@ static int bdc_remove(struct platform_device *pdev)
 	.driver		= {
 		.name	= BRCM_BDC_NAME,
 		.owner	= THIS_MODULE,
+		.pm = &bdc_pm_ops,
 		.of_match_table	= bdc_of_match,
 	},
 	.probe		= bdc_probe,
-- 
1.9.0.138.g2de3478

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/8] Bugs fixes and improvements to Broadcom BDC driver Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200
  [PATCH 6/8] usb: bdc: Add support for suspend/resume Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200
  [PATCH 5/8] usb: gadget: bdc: hook a quick Device Tree compatible string Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200
    [PATCH] usb: gadget: bdc: fix platform_no_drv_owner.cocci warnings kbuild test robot <lkp@intel.com> - 2017-06-29 01:50 +0200
    Re: [PATCH 5/8] usb: gadget: bdc: hook a quick Device Tree  compatible string kbuild test robot <lkp@intel.com> - 2017-06-29 01:50 +0200
  [PATCH 1/8] usb: gadget: bdc: Fix misleading register names Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200
  [PATCH 8/8] usb: bdc: Enable in Kconfig for ARCH_BRCMSTB systems Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200
  [PATCH 2/8] usb: bdc: Add Device Tree binding document for Broadcom BDC driver Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200
  [PATCH 7/8] usb: bdc: fix "xsf for ep not enabled" errror Al Cooper <alcooperx@gmail.com> - 2017-06-27 20:30 +0200

csiph-web