Lines Matching full:miim

14 #include <linux/mdio/mdio-mscc-miim.h>
76 struct mscc_miim_dev *miim = bus->priv; in mscc_miim_status() local
79 ret = regmap_read(miim->regs, in mscc_miim_status()
80 MSCC_MIIM_REG_STATUS + miim->mii_status_offset, &val); in mscc_miim_status()
82 WARN_ONCE(1, "mscc miim status read error %d\n", ret); in mscc_miim_status()
109 struct mscc_miim_dev *miim = bus->priv; in mscc_miim_read() local
117 ret = regmap_write(miim->regs, in mscc_miim_read()
118 MSCC_MIIM_REG_CMD + miim->mii_status_offset, in mscc_miim_read()
125 WARN_ONCE(1, "mscc miim write cmd reg error %d\n", ret); in mscc_miim_read()
133 ret = regmap_read(miim->regs, in mscc_miim_read()
134 MSCC_MIIM_REG_DATA + miim->mii_status_offset, &val); in mscc_miim_read()
136 WARN_ONCE(1, "mscc miim read data reg error %d\n", ret); in mscc_miim_read()
140 if (!miim->ignore_read_errors && !!(val & MSCC_MIIM_DATA_ERROR)) { in mscc_miim_read()
153 struct mscc_miim_dev *miim = bus->priv; in mscc_miim_write() local
160 ret = regmap_write(miim->regs, in mscc_miim_write()
161 MSCC_MIIM_REG_CMD + miim->mii_status_offset, in mscc_miim_write()
169 WARN_ONCE(1, "mscc miim write error %d\n", ret); in mscc_miim_write()
176 struct mscc_miim_dev *miim = bus->priv; in mscc_miim_reset() local
180 if (!miim->phy_regs) in mscc_miim_reset()
183 offset = miim->info->phy_reset_offset; in mscc_miim_reset()
184 bits = miim->info->phy_reset_bits; in mscc_miim_reset()
186 ret = regmap_update_bits(miim->phy_regs, offset, bits, 0); in mscc_miim_reset()
192 ret = regmap_update_bits(miim->phy_regs, offset, bits, bits); in mscc_miim_reset()
220 struct mscc_miim_dev *miim; in mscc_miim_setup() local
223 bus = devm_mdiobus_alloc_size(dev, sizeof(*miim)); in mscc_miim_setup()
234 miim = bus->priv; in mscc_miim_setup()
238 miim->regs = mii_regmap; in mscc_miim_setup()
239 miim->mii_status_offset = status_offset; in mscc_miim_setup()
240 miim->ignore_read_errors = ignore_read_errors; in mscc_miim_setup()
250 struct mscc_miim_dev *miim = bus->priv; in mscc_miim_clk_set() local
255 if (!miim->bus_freq) in mscc_miim_clk_set()
258 rate = clk_get_rate(miim->clk); in mscc_miim_clk_set()
260 div = DIV_ROUND_UP(rate, 2 * miim->bus_freq) - 1; in mscc_miim_clk_set()
266 return regmap_update_bits(miim->regs, MSCC_MIIM_REG_CFG, in mscc_miim_clk_set()
276 struct mscc_miim_dev *miim; in mscc_miim_probe() local
290 "Unable to create MIIM regmap\n"); in mscc_miim_probe()
305 miim = bus->priv; in mscc_miim_probe()
306 miim->phy_regs = phy_regmap; in mscc_miim_probe()
308 miim->info = device_get_match_data(dev); in mscc_miim_probe()
309 if (!miim->info) in mscc_miim_probe()
312 miim->clk = devm_clk_get_optional(dev, NULL); in mscc_miim_probe()
313 if (IS_ERR(miim->clk)) in mscc_miim_probe()
314 return PTR_ERR(miim->clk); in mscc_miim_probe()
316 of_property_read_u32(np, "clock-frequency", &miim->bus_freq); in mscc_miim_probe()
318 if (miim->bus_freq && !miim->clk) { in mscc_miim_probe()
323 ret = clk_prepare_enable(miim->clk); in mscc_miim_probe()
342 clk_disable_unprepare(miim->clk); in mscc_miim_probe()
349 struct mscc_miim_dev *miim = bus->priv; in mscc_miim_remove() local
351 clk_disable_unprepare(miim->clk); in mscc_miim_remove()
368 .compatible = "mscc,ocelot-miim",
371 .compatible = "microchip,lan966x-miim",
382 .name = "mscc-miim",
389 MODULE_DESCRIPTION("Microsemi MIIM driver");