Lines Matching +full:rzg2l +full:- +full:usbphy +full:- +full:ctrl
1 // SPDX-License-Identifier: GPL-2.0
3 * Renesas RZ/G2L USBPHY control driver
14 #include <linux/reset-controller.h>
46 void __iomem *base = priv->base; in rzg2l_usbphy_ctrl_assert()
50 spin_lock_irqsave(&priv->lock, flags); in rzg2l_usbphy_ctrl_assert()
56 spin_unlock_irqrestore(&priv->lock, flags); in rzg2l_usbphy_ctrl_assert()
65 void __iomem *base = priv->base; in rzg2l_usbphy_ctrl_deassert()
69 spin_lock_irqsave(&priv->lock, flags); in rzg2l_usbphy_ctrl_deassert()
75 spin_unlock_irqrestore(&priv->lock, flags); in rzg2l_usbphy_ctrl_deassert()
88 return !!(readl(priv->base + RESET) & port_mask); in rzg2l_usbphy_ctrl_status()
92 { .compatible = "renesas,rzg2l-usbphy-ctrl" },
105 struct device *dev = &pdev->dev; in rzg2l_usbphy_ctrl_probe()
113 return -ENOMEM; in rzg2l_usbphy_ctrl_probe()
115 priv->base = devm_platform_ioremap_resource(pdev, 0); in rzg2l_usbphy_ctrl_probe()
116 if (IS_ERR(priv->base)) in rzg2l_usbphy_ctrl_probe()
117 return PTR_ERR(priv->base); in rzg2l_usbphy_ctrl_probe()
119 priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL); in rzg2l_usbphy_ctrl_probe()
120 if (IS_ERR(priv->rstc)) in rzg2l_usbphy_ctrl_probe()
121 return dev_err_probe(dev, PTR_ERR(priv->rstc), in rzg2l_usbphy_ctrl_probe()
124 reset_control_deassert(priv->rstc); in rzg2l_usbphy_ctrl_probe()
126 priv->rcdev.ops = &rzg2l_usbphy_ctrl_reset_ops; in rzg2l_usbphy_ctrl_probe()
127 priv->rcdev.of_reset_n_cells = 1; in rzg2l_usbphy_ctrl_probe()
128 priv->rcdev.nr_resets = NUM_PORTS; in rzg2l_usbphy_ctrl_probe()
129 priv->rcdev.of_node = dev->of_node; in rzg2l_usbphy_ctrl_probe()
130 priv->rcdev.dev = dev; in rzg2l_usbphy_ctrl_probe()
132 error = devm_reset_controller_register(dev, &priv->rcdev); in rzg2l_usbphy_ctrl_probe()
136 spin_lock_init(&priv->lock); in rzg2l_usbphy_ctrl_probe()
139 pm_runtime_enable(&pdev->dev); in rzg2l_usbphy_ctrl_probe()
140 pm_runtime_resume_and_get(&pdev->dev); in rzg2l_usbphy_ctrl_probe()
143 spin_lock_irqsave(&priv->lock, flags); in rzg2l_usbphy_ctrl_probe()
144 val = readl(priv->base + RESET); in rzg2l_usbphy_ctrl_probe()
146 writel(val, priv->base + RESET); in rzg2l_usbphy_ctrl_probe()
147 spin_unlock_irqrestore(&priv->lock, flags); in rzg2l_usbphy_ctrl_probe()
154 struct rzg2l_usbphy_ctrl_priv *priv = dev_get_drvdata(&pdev->dev); in rzg2l_usbphy_ctrl_remove()
156 pm_runtime_put(&pdev->dev); in rzg2l_usbphy_ctrl_remove()
157 pm_runtime_disable(&pdev->dev); in rzg2l_usbphy_ctrl_remove()
158 reset_control_assert(priv->rstc); in rzg2l_usbphy_ctrl_remove()
174 MODULE_DESCRIPTION("Renesas RZ/G2L USBPHY Control");