Lines Matching +full:wakeup +full:- +full:parent
1 // SPDX-License-Identifier: GPL-2.0
3 * cdns3-imx.c - NXP i.MX specific Glue layer for Cadence USB Controller
14 #include <linux/dma-mapping.h>
99 return readl(data->noncore + offset); in cdns_imx_readl()
104 writel(value, data->noncore + offset); in cdns_imx_writel()
119 struct device *dev = data->dev; in cdns_imx_noncore_init()
123 ret = readl_poll_timeout(data->noncore + USB3_SSPHY_STATUS, value, in cdns_imx_noncore_init()
151 bool suspend, bool wakeup);
166 struct device *dev = &pdev->dev; in cdns_imx_probe()
167 struct device_node *node = dev->of_node; in cdns_imx_probe()
172 return -ENODEV; in cdns_imx_probe()
176 return -ENOMEM; in cdns_imx_probe()
179 data->dev = dev; in cdns_imx_probe()
180 data->noncore = devm_platform_ioremap_resource(pdev, 0); in cdns_imx_probe()
181 if (IS_ERR(data->noncore)) { in cdns_imx_probe()
183 return PTR_ERR(data->noncore); in cdns_imx_probe()
186 data->num_clks = ARRAY_SIZE(imx_cdns3_core_clks); in cdns_imx_probe()
187 data->clks = devm_kmemdup(dev, imx_cdns3_core_clks, in cdns_imx_probe()
189 if (!data->clks) in cdns_imx_probe()
190 return -ENOMEM; in cdns_imx_probe()
192 ret = devm_clk_bulk_get(dev, data->num_clks, data->clks); in cdns_imx_probe()
196 ret = clk_bulk_prepare_enable(data->num_clks, data->clks); in cdns_imx_probe()
217 clk_bulk_disable_unprepare(data->num_clks, data->clks); in cdns_imx_probe()
223 struct device *dev = &pdev->dev; in cdns_imx_remove()
246 bool suspend, bool wakeup) in cdns_imx_platform_suspend() argument
249 struct device *parent = dev->parent; in cdns_imx_platform_suspend() local
250 struct cdns_imx *data = dev_get_drvdata(parent); in cdns_imx_platform_suspend()
251 void __iomem *otg_regs = (void __iomem *)(cdns->otg_regs); in cdns_imx_platform_suspend()
252 void __iomem *xhci_regs = cdns->xhci_regs; in cdns_imx_platform_suspend()
256 if (cdns->role != USB_ROLE_HOST) in cdns_imx_platform_suspend()
273 ret = readl_poll_timeout(data->noncore + USB3_CORE_STATUS, value, in cdns_imx_platform_suspend()
277 dev_warn(parent, "wait mdctrl_clk_status timeout\n"); in cdns_imx_platform_suspend()
281 ret = readl_poll_timeout(data->noncore + USB3_INT_REG, value, in cdns_imx_platform_suspend()
285 dev_warn(parent, "wait lpm_clk_req timeout\n"); in cdns_imx_platform_suspend()
289 ret = readl_poll_timeout(data->noncore + USB3_SSPHY_STATUS, value, in cdns_imx_platform_suspend()
293 dev_warn(parent, "wait phy_refclk_req timeout\n"); in cdns_imx_platform_suspend()
295 cdns3_set_wakeup(data, wakeup); in cdns_imx_platform_suspend()
317 ret = readl_poll_timeout(data->noncore + USB3_INT_REG, value, in cdns_imx_platform_suspend()
321 dev_warn(parent, "wait CLK_125_REQ timeout\n"); in cdns_imx_platform_suspend()
325 ret = readl_poll_timeout(data->noncore + USB3_CORE_STATUS, value, in cdns_imx_platform_suspend()
329 dev_warn(parent, "wait mdctrl_clk_status cleared timeout\n"); in cdns_imx_platform_suspend()
337 dev_warn(parent, "wait OTG ready timeout\n"); in cdns_imx_platform_suspend()
348 return clk_bulk_prepare_enable(data->num_clks, data->clks); in cdns_imx_resume()
355 clk_bulk_disable_unprepare(data->num_clks, data->clks); in cdns_imx_suspend()
361 bool suspend, bool wakeup) in cdns_imx_platform_suspend() argument
373 { .compatible = "fsl,imx8qm-usb3", },
382 .name = "cdns3-imx",
389 MODULE_ALIAS("platform:cdns3-imx");