Lines Matching +full:c +full:- +full:45

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright (c) 2015, The Linux Foundation. All rights reserved. */
3 /* Copyright (c) 2020 Sartura Ltd. */
29 /* 0 = Clause 22, 1 = Clause 45 */
48 struct ipq4019_mdio_data *priv = bus->priv; in ipq4019_mdio_wait_busy()
51 return readl_poll_timeout(priv->membase + MDIO_CMD_REG, busy, in ipq4019_mdio_wait_busy()
58 struct ipq4019_mdio_data *priv = bus->priv; in ipq4019_mdio_read()
63 return -ETIMEDOUT; in ipq4019_mdio_read()
65 /* Clause 45 support */ in ipq4019_mdio_read()
70 /* Enter Clause 45 mode */ in ipq4019_mdio_read()
71 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
75 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
78 writel((mii_id << 8) | mmd, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_read()
81 writel(reg, priv->membase + MDIO_DATA_WRITE_REG); in ipq4019_mdio_read()
86 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
90 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
93 writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_read()
99 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_read()
103 return -ETIMEDOUT; in ipq4019_mdio_read()
108 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_read()
111 return -ETIMEDOUT; in ipq4019_mdio_read()
115 return readl(priv->membase + MDIO_DATA_READ_REG); in ipq4019_mdio_read()
121 struct ipq4019_mdio_data *priv = bus->priv; in ipq4019_mdio_write()
126 return -ETIMEDOUT; in ipq4019_mdio_write()
128 /* Clause 45 support */ in ipq4019_mdio_write()
133 /* Enter Clause 45 mode */ in ipq4019_mdio_write()
134 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
138 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
141 writel((mii_id << 8) | mmd, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_write()
144 writel(reg, priv->membase + MDIO_DATA_WRITE_REG); in ipq4019_mdio_write()
148 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_write()
151 return -ETIMEDOUT; in ipq4019_mdio_write()
154 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
158 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
161 writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_write()
165 writel(value, priv->membase + MDIO_DATA_WRITE_REG); in ipq4019_mdio_write()
173 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_write()
177 return -ETIMEDOUT; in ipq4019_mdio_write()
184 struct ipq4019_mdio_data *priv = bus->priv; in ipq_mdio_reset()
191 if (priv->eth_ldo_rdy) { in ipq_mdio_reset()
192 val = readl(priv->eth_ldo_rdy); in ipq_mdio_reset()
194 writel(val, priv->eth_ldo_rdy); in ipq_mdio_reset()
199 ret = clk_set_rate(priv->mdio_clk, IPQ_MDIO_CLK_RATE); in ipq_mdio_reset()
203 ret = clk_prepare_enable(priv->mdio_clk); in ipq_mdio_reset()
217 bus = devm_mdiobus_alloc_size(&pdev->dev, sizeof(*priv)); in ipq4019_mdio_probe()
219 return -ENOMEM; in ipq4019_mdio_probe()
221 priv = bus->priv; in ipq4019_mdio_probe()
223 priv->membase = devm_platform_ioremap_resource(pdev, 0); in ipq4019_mdio_probe()
224 if (IS_ERR(priv->membase)) in ipq4019_mdio_probe()
225 return PTR_ERR(priv->membase); in ipq4019_mdio_probe()
227 priv->mdio_clk = devm_clk_get_optional(&pdev->dev, "gcc_mdio_ahb_clk"); in ipq4019_mdio_probe()
228 if (IS_ERR(priv->mdio_clk)) in ipq4019_mdio_probe()
229 return PTR_ERR(priv->mdio_clk); in ipq4019_mdio_probe()
235 priv->eth_ldo_rdy = devm_ioremap_resource(&pdev->dev, res); in ipq4019_mdio_probe()
237 bus->name = "ipq4019_mdio"; in ipq4019_mdio_probe()
238 bus->read = ipq4019_mdio_read; in ipq4019_mdio_probe()
239 bus->write = ipq4019_mdio_write; in ipq4019_mdio_probe()
240 bus->reset = ipq_mdio_reset; in ipq4019_mdio_probe()
241 bus->parent = &pdev->dev; in ipq4019_mdio_probe()
242 snprintf(bus->id, MII_BUS_ID_SIZE, "%s%d", pdev->name, pdev->id); in ipq4019_mdio_probe()
244 ret = of_mdiobus_register(bus, pdev->dev.of_node); in ipq4019_mdio_probe()
246 dev_err(&pdev->dev, "Cannot register MDIO bus!\n"); in ipq4019_mdio_probe()
265 { .compatible = "qcom,ipq4019-mdio" },
266 { .compatible = "qcom,ipq5018-mdio" },
275 .name = "ipq4019-mdio",