Lines Matching refs:phy_drd

136 	void (*phy_init)(struct exynos5_usbdrd_phy *phy_drd);
253 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_pipe3_set_refclk() local
256 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_pipe3_set_refclk()
266 switch (phy_drd->extrefclk) { in exynos5_usbdrd_pipe3_set_refclk()
284 dev_dbg(phy_drd->dev, "unsupported ref clk\n"); in exynos5_usbdrd_pipe3_set_refclk()
299 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_utmi_set_refclk() local
302 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_utmi_set_refclk()
310 reg |= PHYCLKRST_FSEL(phy_drd->extrefclk); in exynos5_usbdrd_utmi_set_refclk()
315 static void exynos5_usbdrd_pipe3_init(struct exynos5_usbdrd_phy *phy_drd) in exynos5_usbdrd_pipe3_init() argument
319 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_pipe3_init()
323 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_pipe3_init()
325 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_pipe3_init()
327 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_pipe3_init()
330 static void exynos5_usbdrd_utmi_init(struct exynos5_usbdrd_phy *phy_drd) in exynos5_usbdrd_utmi_init() argument
334 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_utmi_init()
338 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_utmi_init()
340 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_utmi_init()
344 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_utmi_init()
347 writel(PHYUTMI_OTGDISABLE, phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMI); in exynos5_usbdrd_utmi_init()
349 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_utmi_init()
351 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_utmi_init()
359 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_init() local
361 ret = clk_prepare_enable(phy_drd->clk); in exynos5_usbdrd_phy_init()
366 writel(0x0, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0); in exynos5_usbdrd_phy_init()
367 writel(0x0, phy_drd->reg_phy + EXYNOS5_DRD_PHYRESUME); in exynos5_usbdrd_phy_init()
375 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_LINKSYSTEM); in exynos5_usbdrd_phy_init()
377 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_phy_init()
380 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_phy_init()
383 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMICLKSEL); in exynos5_usbdrd_phy_init()
385 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMICLKSEL); in exynos5_usbdrd_phy_init()
388 inst->phy_cfg->phy_init(phy_drd); in exynos5_usbdrd_phy_init()
404 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_init()
409 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_init()
411 clk_disable_unprepare(phy_drd->clk); in exynos5_usbdrd_phy_init()
421 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_exit() local
423 ret = clk_prepare_enable(phy_drd->clk); in exynos5_usbdrd_phy_exit()
430 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMI); in exynos5_usbdrd_phy_exit()
433 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_exit()
437 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_exit()
440 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_phy_exit()
443 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_phy_exit()
445 clk_disable_unprepare(phy_drd->clk); in exynos5_usbdrd_phy_exit()
454 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_power_on() local
456 dev_dbg(phy_drd->dev, "Request to power_on usbdrd_phy phy\n"); in exynos5_usbdrd_phy_power_on()
458 clk_prepare_enable(phy_drd->ref_clk); in exynos5_usbdrd_phy_power_on()
459 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_power_on()
460 clk_prepare_enable(phy_drd->pipeclk); in exynos5_usbdrd_phy_power_on()
461 clk_prepare_enable(phy_drd->utmiclk); in exynos5_usbdrd_phy_power_on()
462 clk_prepare_enable(phy_drd->itpclk); in exynos5_usbdrd_phy_power_on()
466 if (phy_drd->vbus_boost) { in exynos5_usbdrd_phy_power_on()
467 ret = regulator_enable(phy_drd->vbus_boost); in exynos5_usbdrd_phy_power_on()
469 dev_err(phy_drd->dev, in exynos5_usbdrd_phy_power_on()
475 if (phy_drd->vbus) { in exynos5_usbdrd_phy_power_on()
476 ret = regulator_enable(phy_drd->vbus); in exynos5_usbdrd_phy_power_on()
478 dev_err(phy_drd->dev, "Failed to enable VBUS supply\n"); in exynos5_usbdrd_phy_power_on()
489 if (phy_drd->vbus_boost) in exynos5_usbdrd_phy_power_on()
490 regulator_disable(phy_drd->vbus_boost); in exynos5_usbdrd_phy_power_on()
493 clk_disable_unprepare(phy_drd->ref_clk); in exynos5_usbdrd_phy_power_on()
494 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_power_on()
495 clk_disable_unprepare(phy_drd->itpclk); in exynos5_usbdrd_phy_power_on()
496 clk_disable_unprepare(phy_drd->utmiclk); in exynos5_usbdrd_phy_power_on()
497 clk_disable_unprepare(phy_drd->pipeclk); in exynos5_usbdrd_phy_power_on()
506 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_power_off() local
508 dev_dbg(phy_drd->dev, "Request to power_off usbdrd_phy phy\n"); in exynos5_usbdrd_phy_power_off()
514 if (phy_drd->vbus) in exynos5_usbdrd_phy_power_off()
515 regulator_disable(phy_drd->vbus); in exynos5_usbdrd_phy_power_off()
516 if (phy_drd->vbus_boost) in exynos5_usbdrd_phy_power_off()
517 regulator_disable(phy_drd->vbus_boost); in exynos5_usbdrd_phy_power_off()
519 clk_disable_unprepare(phy_drd->ref_clk); in exynos5_usbdrd_phy_power_off()
520 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_power_off()
521 clk_disable_unprepare(phy_drd->itpclk); in exynos5_usbdrd_phy_power_off()
522 clk_disable_unprepare(phy_drd->pipeclk); in exynos5_usbdrd_phy_power_off()
523 clk_disable_unprepare(phy_drd->utmiclk); in exynos5_usbdrd_phy_power_off()
532 struct exynos5_usbdrd_phy *phy_drd = dev_get_drvdata(dev); in exynos5_usbdrd_phy_xlate() local
537 return phy_drd->phys[args->args[0]].phy; in exynos5_usbdrd_phy_xlate()
548 static int exynos5_usbdrd_phy_clk_handle(struct exynos5_usbdrd_phy *phy_drd) in exynos5_usbdrd_phy_clk_handle() argument
553 phy_drd->clk = devm_clk_get(phy_drd->dev, "phy"); in exynos5_usbdrd_phy_clk_handle()
554 if (IS_ERR(phy_drd->clk)) { in exynos5_usbdrd_phy_clk_handle()
555 dev_err(phy_drd->dev, "Failed to get phy clock\n"); in exynos5_usbdrd_phy_clk_handle()
556 return PTR_ERR(phy_drd->clk); in exynos5_usbdrd_phy_clk_handle()
559 phy_drd->ref_clk = devm_clk_get(phy_drd->dev, "ref"); in exynos5_usbdrd_phy_clk_handle()
560 if (IS_ERR(phy_drd->ref_clk)) { in exynos5_usbdrd_phy_clk_handle()
561 dev_err(phy_drd->dev, "Failed to get phy reference clock\n"); in exynos5_usbdrd_phy_clk_handle()
562 return PTR_ERR(phy_drd->ref_clk); in exynos5_usbdrd_phy_clk_handle()
564 ref_rate = clk_get_rate(phy_drd->ref_clk); in exynos5_usbdrd_phy_clk_handle()
566 ret = exynos5_rate_to_clk(ref_rate, &phy_drd->extrefclk); in exynos5_usbdrd_phy_clk_handle()
568 dev_err(phy_drd->dev, "Clock rate (%ld) not supported\n", in exynos5_usbdrd_phy_clk_handle()
573 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_clk_handle()
574 phy_drd->pipeclk = devm_clk_get(phy_drd->dev, "phy_pipe"); in exynos5_usbdrd_phy_clk_handle()
575 if (IS_ERR(phy_drd->pipeclk)) { in exynos5_usbdrd_phy_clk_handle()
576 dev_info(phy_drd->dev, in exynos5_usbdrd_phy_clk_handle()
578 phy_drd->pipeclk = NULL; in exynos5_usbdrd_phy_clk_handle()
581 phy_drd->utmiclk = devm_clk_get(phy_drd->dev, "phy_utmi"); in exynos5_usbdrd_phy_clk_handle()
582 if (IS_ERR(phy_drd->utmiclk)) { in exynos5_usbdrd_phy_clk_handle()
583 dev_info(phy_drd->dev, in exynos5_usbdrd_phy_clk_handle()
585 phy_drd->utmiclk = NULL; in exynos5_usbdrd_phy_clk_handle()
588 phy_drd->itpclk = devm_clk_get(phy_drd->dev, "itp"); in exynos5_usbdrd_phy_clk_handle()
589 if (IS_ERR(phy_drd->itpclk)) { in exynos5_usbdrd_phy_clk_handle()
590 dev_info(phy_drd->dev, in exynos5_usbdrd_phy_clk_handle()
592 phy_drd->itpclk = NULL; in exynos5_usbdrd_phy_clk_handle()
662 struct exynos5_usbdrd_phy *phy_drd; in exynos5_usbdrd_phy_probe() local
672 phy_drd = devm_kzalloc(dev, sizeof(*phy_drd), GFP_KERNEL); in exynos5_usbdrd_phy_probe()
673 if (!phy_drd) in exynos5_usbdrd_phy_probe()
676 dev_set_drvdata(dev, phy_drd); in exynos5_usbdrd_phy_probe()
677 phy_drd->dev = dev; in exynos5_usbdrd_phy_probe()
680 phy_drd->reg_phy = devm_ioremap_resource(dev, res); in exynos5_usbdrd_phy_probe()
681 if (IS_ERR(phy_drd->reg_phy)) in exynos5_usbdrd_phy_probe()
682 return PTR_ERR(phy_drd->reg_phy); in exynos5_usbdrd_phy_probe()
687 phy_drd->drv_data = drv_data; in exynos5_usbdrd_phy_probe()
689 ret = exynos5_usbdrd_phy_clk_handle(phy_drd); in exynos5_usbdrd_phy_probe()
713 pmu_offset = phy_drd->drv_data->pmu_offset_usbdrd1_phy; in exynos5_usbdrd_phy_probe()
717 pmu_offset = phy_drd->drv_data->pmu_offset_usbdrd0_phy; in exynos5_usbdrd_phy_probe()
722 phy_drd->vbus = devm_regulator_get(dev, "vbus"); in exynos5_usbdrd_phy_probe()
723 if (IS_ERR(phy_drd->vbus)) { in exynos5_usbdrd_phy_probe()
724 ret = PTR_ERR(phy_drd->vbus); in exynos5_usbdrd_phy_probe()
729 phy_drd->vbus = NULL; in exynos5_usbdrd_phy_probe()
732 phy_drd->vbus_boost = devm_regulator_get(dev, "vbus-boost"); in exynos5_usbdrd_phy_probe()
733 if (IS_ERR(phy_drd->vbus_boost)) { in exynos5_usbdrd_phy_probe()
734 ret = PTR_ERR(phy_drd->vbus_boost); in exynos5_usbdrd_phy_probe()
739 phy_drd->vbus_boost = NULL; in exynos5_usbdrd_phy_probe()
752 phy_drd->phys[i].phy = phy; in exynos5_usbdrd_phy_probe()
753 phy_drd->phys[i].index = i; in exynos5_usbdrd_phy_probe()
754 phy_drd->phys[i].reg_pmu = reg_pmu; in exynos5_usbdrd_phy_probe()
755 phy_drd->phys[i].pmu_offset = pmu_offset; in exynos5_usbdrd_phy_probe()
756 phy_drd->phys[i].phy_cfg = &drv_data->phy_cfg[i]; in exynos5_usbdrd_phy_probe()
757 phy_set_drvdata(phy, &phy_drd->phys[i]); in exynos5_usbdrd_phy_probe()
763 dev_err(phy_drd->dev, "Failed to register phy provider\n"); in exynos5_usbdrd_phy_probe()