Lines Matching refs:data
95 static void davinci_mdio_init_clk(struct davinci_mdio_data *data)
99 mdio_in = clk_get_rate(data->clk);
100 div = (mdio_in / data->pdata.bus_freq) - 1;
104 data->clk_div = div;
108 * 32 bits of transferred data
120 data->access_time = usecs_to_jiffies(access_time * 4);
121 if (!data->access_time)
122 data->access_time = 1;
125 static void davinci_mdio_enable(struct davinci_mdio_data *data)
128 writel(data->clk_div | CONTROL_ENABLE, &data->regs->control);
133 struct davinci_mdio_data *data = bus->priv;
137 ret = pm_runtime_get_sync(data->dev);
139 pm_runtime_put_noidle(data->dev);
144 msleep(PHY_MAX_ADDR * data->access_time);
147 ver = readl(&data->regs->version);
148 dev_info(data->dev,
151 data->pdata.bus_freq);
153 if (data->skip_scan)
157 phy_mask = readl(&data->regs->alive);
160 dev_info(data->dev, "detected phy mask %x\n", ~phy_mask);
164 dev_warn(data->dev, "no live phy, scanning all\n");
167 data->bus->phy_mask = phy_mask;
170 pm_runtime_mark_last_busy(data->dev);
171 pm_runtime_put_autosuspend(data->dev);
177 static inline int wait_for_user_access(struct davinci_mdio_data *data)
179 struct davinci_mdio_regs __iomem *regs = data->regs;
199 dev_warn(data->dev, "resetting idled controller\n");
200 davinci_mdio_enable(data);
208 dev_err(data->dev, "timed out waiting for user access\n");
213 static inline int wait_for_idle(struct davinci_mdio_data *data)
215 struct davinci_mdio_regs __iomem *regs = data->regs;
221 dev_err(data->dev, "timed out waiting for idle\n");
228 struct davinci_mdio_data *data = bus->priv;
235 ret = pm_runtime_get_sync(data->dev);
237 pm_runtime_put_noidle(data->dev);
245 ret = wait_for_user_access(data);
251 writel(reg, &data->regs->user[0].access);
253 ret = wait_for_user_access(data);
259 reg = readl(&data->regs->user[0].access);
264 pm_runtime_mark_last_busy(data->dev);
265 pm_runtime_put_autosuspend(data->dev);
272 struct davinci_mdio_data *data = bus->priv;
279 ret = pm_runtime_get_sync(data->dev);
281 pm_runtime_put_noidle(data->dev);
289 ret = wait_for_user_access(data);
295 writel(reg, &data->regs->user[0].access);
297 ret = wait_for_user_access(data);
303 pm_runtime_mark_last_busy(data->dev);
304 pm_runtime_put_autosuspend(data->dev);
309 static int davinci_mdio_probe_dt(struct mdio_platform_data *data,
322 data->bus_freq = prop;
334 { .compatible = "ti,cpsw-mdio", .data = &of_cpsw_mdio_data},
344 struct davinci_mdio_data *data;
350 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
351 if (!data)
354 data->bus = devm_mdiobus_alloc(dev);
355 if (!data->bus) {
363 ret = davinci_mdio_probe_dt(&data->pdata, pdev);
366 snprintf(data->bus->id, MII_BUS_ID_SIZE, "%s", pdev->name);
372 of_mdio_data = of_id->data;
378 data->pdata = pdata ? (*pdata) : default_pdata;
379 snprintf(data->bus->id, MII_BUS_ID_SIZE, "%s-%x",
383 data->bus->name = dev_name(dev);
384 data->bus->read = davinci_mdio_read,
385 data->bus->write = davinci_mdio_write,
386 data->bus->reset = davinci_mdio_reset,
387 data->bus->parent = dev;
388 data->bus->priv = data;
390 data->clk = devm_clk_get(dev, "fck");
391 if (IS_ERR(data->clk)) {
393 return PTR_ERR(data->clk);
396 dev_set_drvdata(dev, data);
397 data->dev = dev;
402 data->regs = devm_ioremap(dev, res->start, resource_size(res));
403 if (!data->regs)
406 davinci_mdio_init_clk(data);
418 data->skip_scan = true;
420 ret = of_mdiobus_register(data->bus, dev->of_node);
426 phy = mdiobus_get_phy(data->bus, addr);
444 struct davinci_mdio_data *data = platform_get_drvdata(pdev);
446 if (data->bus)
447 mdiobus_unregister(data->bus);
458 struct davinci_mdio_data *data = dev_get_drvdata(dev);
462 ctrl = readl(&data->regs->control);
464 writel(ctrl, &data->regs->control);
465 wait_for_idle(data);
472 struct davinci_mdio_data *data = dev_get_drvdata(dev);
474 davinci_mdio_enable(data);
482 struct davinci_mdio_data *data = dev_get_drvdata(dev);
485 data->active_in_suspend = !pm_runtime_status_suspended(dev);
486 if (data->active_in_suspend)
499 struct davinci_mdio_data *data = dev_get_drvdata(dev);
504 if (data->active_in_suspend)