Lines Matching +full:data +full:- +full:bus
2 * Hisilicon Fast Ethernet MDIO Bus Driver
40 static int hisi_femac_mdio_wait_ready(struct hisi_femac_mdio_data *data) in hisi_femac_mdio_wait_ready() argument
44 return readl_poll_timeout(data->membase + MDIO_RWCTRL, in hisi_femac_mdio_wait_ready()
48 static int hisi_femac_mdio_read(struct mii_bus *bus, int mii_id, int regnum) in hisi_femac_mdio_read() argument
50 struct hisi_femac_mdio_data *data = bus->priv; in hisi_femac_mdio_read() local
53 ret = hisi_femac_mdio_wait_ready(data); in hisi_femac_mdio_read()
58 data->membase + MDIO_RWCTRL); in hisi_femac_mdio_read()
60 ret = hisi_femac_mdio_wait_ready(data); in hisi_femac_mdio_read()
64 return readl(data->membase + MDIO_RO_DATA) & 0xFFFF; in hisi_femac_mdio_read()
67 static int hisi_femac_mdio_write(struct mii_bus *bus, int mii_id, int regnum, in hisi_femac_mdio_write() argument
70 struct hisi_femac_mdio_data *data = bus->priv; in hisi_femac_mdio_write() local
73 ret = hisi_femac_mdio_wait_ready(data); in hisi_femac_mdio_write()
79 data->membase + MDIO_RWCTRL); in hisi_femac_mdio_write()
81 return hisi_femac_mdio_wait_ready(data); in hisi_femac_mdio_write()
86 struct device_node *np = pdev->dev.of_node; in hisi_femac_mdio_probe()
87 struct mii_bus *bus; in hisi_femac_mdio_probe() local
88 struct hisi_femac_mdio_data *data; in hisi_femac_mdio_probe() local
92 bus = mdiobus_alloc_size(sizeof(*data)); in hisi_femac_mdio_probe()
93 if (!bus) in hisi_femac_mdio_probe()
94 return -ENOMEM; in hisi_femac_mdio_probe()
96 bus->name = "hisi_femac_mii_bus"; in hisi_femac_mdio_probe()
97 bus->read = &hisi_femac_mdio_read; in hisi_femac_mdio_probe()
98 bus->write = &hisi_femac_mdio_write; in hisi_femac_mdio_probe()
99 snprintf(bus->id, MII_BUS_ID_SIZE, "%s", pdev->name); in hisi_femac_mdio_probe()
100 bus->parent = &pdev->dev; in hisi_femac_mdio_probe()
102 data = bus->priv; in hisi_femac_mdio_probe()
104 data->membase = devm_ioremap_resource(&pdev->dev, res); in hisi_femac_mdio_probe()
105 if (IS_ERR(data->membase)) { in hisi_femac_mdio_probe()
106 ret = PTR_ERR(data->membase); in hisi_femac_mdio_probe()
110 data->clk = devm_clk_get(&pdev->dev, NULL); in hisi_femac_mdio_probe()
111 if (IS_ERR(data->clk)) { in hisi_femac_mdio_probe()
112 ret = PTR_ERR(data->clk); in hisi_femac_mdio_probe()
116 ret = clk_prepare_enable(data->clk); in hisi_femac_mdio_probe()
120 ret = of_mdiobus_register(bus, np); in hisi_femac_mdio_probe()
124 platform_set_drvdata(pdev, bus); in hisi_femac_mdio_probe()
129 clk_disable_unprepare(data->clk); in hisi_femac_mdio_probe()
131 mdiobus_free(bus); in hisi_femac_mdio_probe()
137 struct mii_bus *bus = platform_get_drvdata(pdev); in hisi_femac_mdio_remove() local
138 struct hisi_femac_mdio_data *data = bus->priv; in hisi_femac_mdio_remove() local
140 mdiobus_unregister(bus); in hisi_femac_mdio_remove()
141 clk_disable_unprepare(data->clk); in hisi_femac_mdio_remove()
142 mdiobus_free(bus); in hisi_femac_mdio_remove()
148 { .compatible = "hisilicon,hisi-femac-mdio" },
157 .name = "hisi-femac-mdio",