Lines Matching refs:data

110 static void davinci_mdio_init_clk(struct davinci_mdio_data *data)
114 mdio_in = clk_get_rate(data->clk);
115 div = (mdio_in / data->pdata.bus_freq) - 1;
119 data->clk_div = div;
123 * 32 bits of transferred data
135 data->access_time = usecs_to_jiffies(access_time * 4);
136 if (!data->access_time)
137 data->access_time = 1;
140 static void davinci_mdio_enable(struct davinci_mdio_data *data)
143 writel(data->clk_div | CONTROL_ENABLE, &data->regs->control);
146 static void davinci_mdio_disable(struct davinci_mdio_data *data)
151 reg = readl(&data->regs->control);
154 reg |= data->clk_div;
157 writel(reg, &data->regs->control);
160 static void davinci_mdio_enable_manual_mode(struct davinci_mdio_data *data)
164 reg = readl(&data->regs->poll);
166 writel(reg, &data->regs->poll);
171 struct davinci_mdio_data *data;
174 data = container_of(ctrl, struct davinci_mdio_data, bb_ctrl);
175 reg = readl(&data->regs->manualif);
182 writel(reg, &data->regs->manualif);
187 struct davinci_mdio_data *data;
190 data = container_of(ctrl, struct davinci_mdio_data, bb_ctrl);
191 reg = readl(&data->regs->manualif);
198 writel(reg, &data->regs->manualif);
203 struct davinci_mdio_data *data;
206 data = container_of(ctrl, struct davinci_mdio_data, bb_ctrl);
207 reg = readl(&data->regs->manualif);
214 writel(reg, &data->regs->manualif);
219 struct davinci_mdio_data *data;
222 data = container_of(ctrl, struct davinci_mdio_data, bb_ctrl);
223 reg = readl(&data->regs->manualif);
294 static int davinci_mdio_common_reset(struct davinci_mdio_data *data)
299 ret = pm_runtime_resume_and_get(data->dev);
303 if (data->manual_mode) {
304 davinci_mdio_disable(data);
305 davinci_mdio_enable_manual_mode(data);
309 msleep(PHY_MAX_ADDR * data->access_time);
312 ver = readl(&data->regs->version);
313 dev_info(data->dev,
316 data->pdata.bus_freq);
318 if (data->skip_scan)
322 phy_mask = readl(&data->regs->alive);
325 dev_info(data->dev, "detected phy mask %x\n", ~phy_mask);
329 dev_warn(data->dev, "no live phy, scanning all\n");
332 data->bus->phy_mask = phy_mask;
335 pm_runtime_mark_last_busy(data->dev);
336 pm_runtime_put_autosuspend(data->dev);
343 struct davinci_mdio_data *data = bus->priv;
345 return davinci_mdio_common_reset(data);
351 struct davinci_mdio_data *data;
353 data = container_of(ctrl, struct davinci_mdio_data, bb_ctrl);
355 return davinci_mdio_common_reset(data);
359 static inline int wait_for_user_access(struct davinci_mdio_data *data)
361 struct davinci_mdio_regs __iomem *regs = data->regs;
381 dev_warn(data->dev, "resetting idled controller\n");
382 davinci_mdio_enable(data);
390 dev_err(data->dev, "timed out waiting for user access\n");
395 static inline int wait_for_idle(struct davinci_mdio_data *data)
397 struct davinci_mdio_regs __iomem *regs = data->regs;
403 dev_err(data->dev, "timed out waiting for idle\n");
410 struct davinci_mdio_data *data = bus->priv;
417 ret = pm_runtime_resume_and_get(data->dev);
425 ret = wait_for_user_access(data);
431 writel(reg, &data->regs->user[0].access);
433 ret = wait_for_user_access(data);
439 reg = readl(&data->regs->user[0].access);
444 pm_runtime_mark_last_busy(data->dev);
445 pm_runtime_put_autosuspend(data->dev);
452 struct davinci_mdio_data *data = bus->priv;
459 ret = pm_runtime_resume_and_get(data->dev);
467 ret = wait_for_user_access(data);
473 writel(reg, &data->regs->user[0].access);
475 ret = wait_for_user_access(data);
481 pm_runtime_mark_last_busy(data->dev);
482 pm_runtime_put_autosuspend(data->dev);
487 static int davinci_mdio_probe_dt(struct mdio_platform_data *data,
500 data->bus_freq = prop;
514 { .family = "AM62X", .data = &am65_mdio_soc_data },
515 { .family = "AM64X", .data = &am65_mdio_soc_data },
516 { .family = "AM65X", .data = &am65_mdio_soc_data },
517 { .family = "J7200", .data = &am65_mdio_soc_data },
518 { .family = "J721E", .data = &am65_mdio_soc_data },
519 { .family = "J721S2", .data = &am65_mdio_soc_data },
530 { .compatible = "ti,cpsw-mdio", .data = &of_cpsw_mdio_data},
548 struct davinci_mdio_data *data;
554 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
555 if (!data)
558 data->manual_mode = false;
559 data->bb_ctrl.ops = &davinci_mdiobb_ops;
565 if (soc_match_data && soc_match_data->data) {
567 soc_match_data->data;
569 data->manual_mode = socdata->manual_mode;
573 if (data->manual_mode)
574 data->bus = alloc_mdio_bitbang(&data->bb_ctrl);
576 data->bus = devm_mdiobus_alloc(dev);
578 if (!data->bus) {
586 ret = davinci_mdio_probe_dt(&data->pdata, pdev);
589 snprintf(data->bus->id, MII_BUS_ID_SIZE, "%s", pdev->name);
597 data->pdata = pdata ? (*pdata) : default_pdata;
598 snprintf(data->bus->id, MII_BUS_ID_SIZE, "%s-%x",
602 data->bus->name = dev_name(dev);
604 if (data->manual_mode) {
605 data->bus->read = davinci_mdiobb_read_c22;
606 data->bus->write = davinci_mdiobb_write_c22;
607 data->bus->read_c45 = davinci_mdiobb_read_c45;
608 data->bus->write_c45 = davinci_mdiobb_write_c45;
609 data->bus->reset = davinci_mdiobb_reset;
613 data->bus->read = davinci_mdio_read;
614 data->bus->write = davinci_mdio_write;
615 data->bus->reset = davinci_mdio_reset;
616 data->bus->priv = data;
618 data->bus->parent = dev;
620 data->clk = devm_clk_get(dev, "fck");
621 if (IS_ERR(data->clk)) {
623 return PTR_ERR(data->clk);
626 dev_set_drvdata(dev, data);
627 data->dev = dev;
632 data->regs = devm_ioremap(dev, res->start, resource_size(res));
633 if (!data->regs)
636 davinci_mdio_init_clk(data);
648 data->skip_scan = true;
650 ret = of_mdiobus_register(data->bus, dev->of_node);
656 phy = mdiobus_get_phy(data->bus, addr);
674 struct davinci_mdio_data *data = platform_get_drvdata(pdev);
676 if (data->bus) {
677 mdiobus_unregister(data->bus);
679 if (data->manual_mode)
680 free_mdio_bitbang(data->bus);
690 struct davinci_mdio_data *data = dev_get_drvdata(dev);
694 ctrl = readl(&data->regs->control);
696 writel(ctrl, &data->regs->control);
698 if (!data->manual_mode)
699 wait_for_idle(data);
706 struct davinci_mdio_data *data = dev_get_drvdata(dev);
708 if (data->manual_mode) {
709 davinci_mdio_disable(data);
710 davinci_mdio_enable_manual_mode(data);
712 davinci_mdio_enable(data);
721 struct davinci_mdio_data *data = dev_get_drvdata(dev);
724 data->active_in_suspend = !pm_runtime_status_suspended(dev);
725 if (data->active_in_suspend)
738 struct davinci_mdio_data *data = dev_get_drvdata(dev);
743 if (data->active_in_suspend)