Lines Matching +full:usb3 +full:- +full:if

1 // SPDX-License-Identifier: GPL-2.0
3 // reset-uniphier-glue.c - Glue layer reset driver for UniPhier
12 #include <linux/reset/reset-simple.h>
33 struct device *dev = &pdev->dev; in uniphier_glue_reset_probe()
41 if (!priv) in uniphier_glue_reset_probe()
42 return -ENOMEM; in uniphier_glue_reset_probe()
44 priv->data = of_device_get_match_data(dev); in uniphier_glue_reset_probe()
45 if (WARN_ON(!priv->data || priv->data->nclks > MAX_CLKS || in uniphier_glue_reset_probe()
46 priv->data->nrsts > MAX_RSTS)) in uniphier_glue_reset_probe()
47 return -EINVAL; in uniphier_glue_reset_probe()
51 priv->rdata.membase = devm_ioremap_resource(dev, res); in uniphier_glue_reset_probe()
52 if (IS_ERR(priv->rdata.membase)) in uniphier_glue_reset_probe()
53 return PTR_ERR(priv->rdata.membase); in uniphier_glue_reset_probe()
55 for (i = 0; i < priv->data->nclks; i++) in uniphier_glue_reset_probe()
56 priv->clk[i].id = priv->data->clock_names[i]; in uniphier_glue_reset_probe()
57 ret = devm_clk_bulk_get(dev, priv->data->nclks, priv->clk); in uniphier_glue_reset_probe()
58 if (ret) in uniphier_glue_reset_probe()
61 for (i = 0; i < priv->data->nrsts; i++) { in uniphier_glue_reset_probe()
62 name = priv->data->reset_names[i]; in uniphier_glue_reset_probe()
63 priv->rst[i] = devm_reset_control_get_shared(dev, name); in uniphier_glue_reset_probe()
64 if (IS_ERR(priv->rst[i])) in uniphier_glue_reset_probe()
65 return PTR_ERR(priv->rst[i]); in uniphier_glue_reset_probe()
68 ret = clk_bulk_prepare_enable(priv->data->nclks, priv->clk); in uniphier_glue_reset_probe()
69 if (ret) in uniphier_glue_reset_probe()
72 for (nr = 0; nr < priv->data->nrsts; nr++) { in uniphier_glue_reset_probe()
73 ret = reset_control_deassert(priv->rst[nr]); in uniphier_glue_reset_probe()
74 if (ret) in uniphier_glue_reset_probe()
78 spin_lock_init(&priv->rdata.lock); in uniphier_glue_reset_probe()
79 priv->rdata.rcdev.owner = THIS_MODULE; in uniphier_glue_reset_probe()
80 priv->rdata.rcdev.nr_resets = size * BITS_PER_BYTE; in uniphier_glue_reset_probe()
81 priv->rdata.rcdev.ops = &reset_simple_ops; in uniphier_glue_reset_probe()
82 priv->rdata.rcdev.of_node = dev->of_node; in uniphier_glue_reset_probe()
83 priv->rdata.active_low = true; in uniphier_glue_reset_probe()
87 ret = devm_reset_controller_register(dev, &priv->rdata.rcdev); in uniphier_glue_reset_probe()
88 if (ret) in uniphier_glue_reset_probe()
94 while (nr--) in uniphier_glue_reset_probe()
95 reset_control_assert(priv->rst[nr]); in uniphier_glue_reset_probe()
97 clk_bulk_disable_unprepare(priv->data->nclks, priv->clk); in uniphier_glue_reset_probe()
107 for (i = 0; i < priv->data->nrsts; i++) in uniphier_glue_reset_remove()
108 reset_control_assert(priv->rst[i]); in uniphier_glue_reset_remove()
110 clk_bulk_disable_unprepare(priv->data->nclks, priv->clk); in uniphier_glue_reset_remove()
139 .compatible = "socionext,uniphier-pro4-usb3-reset",
143 .compatible = "socionext,uniphier-pro5-usb3-reset",
147 .compatible = "socionext,uniphier-pxs2-usb3-reset",
151 .compatible = "socionext,uniphier-ld20-usb3-reset",
155 .compatible = "socionext,uniphier-pxs3-usb3-reset",
159 .compatible = "socionext,uniphier-pro4-ahci-reset",
163 .compatible = "socionext,uniphier-pxs2-ahci-reset",
167 .compatible = "socionext,uniphier-pxs3-ahci-reset",
178 .name = "uniphier-glue-reset",