Lines Matching +full:ipq4019 +full:- +full:mdio

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
40 struct ipq4019_mdio_data *priv = bus->priv; in ipq4019_mdio_wait_busy()
43 return readl_poll_timeout(priv->membase + MDIO_CMD_REG, busy, in ipq4019_mdio_wait_busy()
50 struct ipq4019_mdio_data *priv = bus->priv; in ipq4019_mdio_read()
55 return -ETIMEDOUT; in ipq4019_mdio_read()
63 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
67 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
70 writel((mii_id << 8) | mmd, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_read()
73 writel(reg, priv->membase + MDIO_DATA_WRITE_REG); in ipq4019_mdio_read()
78 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
82 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_read()
85 writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_read()
91 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_read()
95 return -ETIMEDOUT; in ipq4019_mdio_read()
100 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_read()
103 return -ETIMEDOUT; in ipq4019_mdio_read()
107 return readl(priv->membase + MDIO_DATA_READ_REG); in ipq4019_mdio_read()
113 struct ipq4019_mdio_data *priv = bus->priv; in ipq4019_mdio_write()
118 return -ETIMEDOUT; in ipq4019_mdio_write()
126 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
130 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
133 writel((mii_id << 8) | mmd, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_write()
136 writel(reg, priv->membase + MDIO_DATA_WRITE_REG); in ipq4019_mdio_write()
140 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_write()
143 return -ETIMEDOUT; in ipq4019_mdio_write()
146 data = readl(priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
150 writel(data, priv->membase + MDIO_MODE_REG); in ipq4019_mdio_write()
153 writel((mii_id << 8) | regnum, priv->membase + MDIO_ADDR_REG); in ipq4019_mdio_write()
157 writel(value, priv->membase + MDIO_DATA_WRITE_REG); in ipq4019_mdio_write()
165 writel(cmd, priv->membase + MDIO_CMD_REG); in ipq4019_mdio_write()
169 return -ETIMEDOUT; in ipq4019_mdio_write()
180 bus = devm_mdiobus_alloc_size(&pdev->dev, sizeof(*priv)); in ipq4019_mdio_probe()
182 return -ENOMEM; in ipq4019_mdio_probe()
184 priv = bus->priv; in ipq4019_mdio_probe()
186 priv->membase = devm_platform_ioremap_resource(pdev, 0); in ipq4019_mdio_probe()
187 if (IS_ERR(priv->membase)) in ipq4019_mdio_probe()
188 return PTR_ERR(priv->membase); in ipq4019_mdio_probe()
190 bus->name = "ipq4019_mdio"; in ipq4019_mdio_probe()
191 bus->read = ipq4019_mdio_read; in ipq4019_mdio_probe()
192 bus->write = ipq4019_mdio_write; in ipq4019_mdio_probe()
193 bus->parent = &pdev->dev; in ipq4019_mdio_probe()
194 snprintf(bus->id, MII_BUS_ID_SIZE, "%s%d", pdev->name, pdev->id); in ipq4019_mdio_probe()
196 ret = of_mdiobus_register(bus, pdev->dev.of_node); in ipq4019_mdio_probe()
198 dev_err(&pdev->dev, "Cannot register MDIO bus!\n"); in ipq4019_mdio_probe()
217 { .compatible = "qcom,ipq4019-mdio" },
226 .name = "ipq4019-mdio",
233 MODULE_DESCRIPTION("ipq4019 MDIO interface driver");