Lines Matching refs:phy_drd

164 	void (*phy_init)(struct exynos5_usbdrd_phy *phy_drd);
281 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_pipe3_set_refclk() local
284 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_pipe3_set_refclk()
294 switch (phy_drd->extrefclk) { in exynos5_usbdrd_pipe3_set_refclk()
312 dev_dbg(phy_drd->dev, "unsupported ref clk\n"); in exynos5_usbdrd_pipe3_set_refclk()
327 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_utmi_set_refclk() local
330 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_utmi_set_refclk()
338 reg |= PHYCLKRST_FSEL(phy_drd->extrefclk); in exynos5_usbdrd_utmi_set_refclk()
343 static void exynos5_usbdrd_pipe3_init(struct exynos5_usbdrd_phy *phy_drd) in exynos5_usbdrd_pipe3_init() argument
347 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_pipe3_init()
351 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_pipe3_init()
353 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_pipe3_init()
355 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_pipe3_init()
358 static void exynos5_usbdrd_utmi_init(struct exynos5_usbdrd_phy *phy_drd) in exynos5_usbdrd_utmi_init() argument
362 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_utmi_init()
366 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_utmi_init()
368 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_utmi_init()
372 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM1); in exynos5_usbdrd_utmi_init()
375 writel(PHYUTMI_OTGDISABLE, phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMI); in exynos5_usbdrd_utmi_init()
377 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_utmi_init()
379 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_utmi_init()
387 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_init() local
389 ret = clk_prepare_enable(phy_drd->clk); in exynos5_usbdrd_phy_init()
394 writel(0x0, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0); in exynos5_usbdrd_phy_init()
395 writel(0x0, phy_drd->reg_phy + EXYNOS5_DRD_PHYRESUME); in exynos5_usbdrd_phy_init()
403 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_LINKSYSTEM); in exynos5_usbdrd_phy_init()
405 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_phy_init()
408 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYPARAM0); in exynos5_usbdrd_phy_init()
411 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMICLKSEL); in exynos5_usbdrd_phy_init()
413 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMICLKSEL); in exynos5_usbdrd_phy_init()
416 inst->phy_cfg->phy_init(phy_drd); in exynos5_usbdrd_phy_init()
432 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_init()
437 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_init()
439 clk_disable_unprepare(phy_drd->clk); in exynos5_usbdrd_phy_init()
449 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_exit() local
451 ret = clk_prepare_enable(phy_drd->clk); in exynos5_usbdrd_phy_exit()
458 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYUTMI); in exynos5_usbdrd_phy_exit()
461 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_exit()
465 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYCLKRST); in exynos5_usbdrd_phy_exit()
468 reg = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_phy_exit()
471 writel(reg, phy_drd->reg_phy + EXYNOS5_DRD_PHYTEST); in exynos5_usbdrd_phy_exit()
473 clk_disable_unprepare(phy_drd->clk); in exynos5_usbdrd_phy_exit()
482 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_power_on() local
484 dev_dbg(phy_drd->dev, "Request to power_on usbdrd_phy phy\n"); in exynos5_usbdrd_phy_power_on()
486 clk_prepare_enable(phy_drd->ref_clk); in exynos5_usbdrd_phy_power_on()
487 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_power_on()
488 clk_prepare_enable(phy_drd->pipeclk); in exynos5_usbdrd_phy_power_on()
489 clk_prepare_enable(phy_drd->utmiclk); in exynos5_usbdrd_phy_power_on()
490 clk_prepare_enable(phy_drd->itpclk); in exynos5_usbdrd_phy_power_on()
494 if (phy_drd->vbus_boost) { in exynos5_usbdrd_phy_power_on()
495 ret = regulator_enable(phy_drd->vbus_boost); in exynos5_usbdrd_phy_power_on()
497 dev_err(phy_drd->dev, in exynos5_usbdrd_phy_power_on()
503 if (phy_drd->vbus) { in exynos5_usbdrd_phy_power_on()
504 ret = regulator_enable(phy_drd->vbus); in exynos5_usbdrd_phy_power_on()
506 dev_err(phy_drd->dev, "Failed to enable VBUS supply\n"); in exynos5_usbdrd_phy_power_on()
517 if (phy_drd->vbus_boost) in exynos5_usbdrd_phy_power_on()
518 regulator_disable(phy_drd->vbus_boost); in exynos5_usbdrd_phy_power_on()
521 clk_disable_unprepare(phy_drd->ref_clk); in exynos5_usbdrd_phy_power_on()
522 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_power_on()
523 clk_disable_unprepare(phy_drd->itpclk); in exynos5_usbdrd_phy_power_on()
524 clk_disable_unprepare(phy_drd->utmiclk); in exynos5_usbdrd_phy_power_on()
525 clk_disable_unprepare(phy_drd->pipeclk); in exynos5_usbdrd_phy_power_on()
534 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_power_off() local
536 dev_dbg(phy_drd->dev, "Request to power_off usbdrd_phy phy\n"); in exynos5_usbdrd_phy_power_off()
542 if (phy_drd->vbus) in exynos5_usbdrd_phy_power_off()
543 regulator_disable(phy_drd->vbus); in exynos5_usbdrd_phy_power_off()
544 if (phy_drd->vbus_boost) in exynos5_usbdrd_phy_power_off()
545 regulator_disable(phy_drd->vbus_boost); in exynos5_usbdrd_phy_power_off()
547 clk_disable_unprepare(phy_drd->ref_clk); in exynos5_usbdrd_phy_power_off()
548 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_power_off()
549 clk_disable_unprepare(phy_drd->itpclk); in exynos5_usbdrd_phy_power_off()
550 clk_disable_unprepare(phy_drd->pipeclk); in exynos5_usbdrd_phy_power_off()
551 clk_disable_unprepare(phy_drd->utmiclk); in exynos5_usbdrd_phy_power_off()
557 static int crport_handshake(struct exynos5_usbdrd_phy *phy_drd, in crport_handshake() argument
563 writel(val | cmd, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0); in crport_handshake()
565 err = readl_poll_timeout(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1, in crport_handshake()
568 dev_err(phy_drd->dev, "CRPORT handshake timeout1 (0x%08x)\n", val); in crport_handshake()
572 writel(val, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0); in crport_handshake()
574 err = readl_poll_timeout(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1, in crport_handshake()
577 dev_err(phy_drd->dev, "CRPORT handshake timeout2 (0x%08x)\n", val); in crport_handshake()
584 static int crport_ctrl_write(struct exynos5_usbdrd_phy *phy_drd, in crport_ctrl_write() argument
591 phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0); in crport_ctrl_write()
592 ret = crport_handshake(phy_drd, PHYREG0_CR_DATA_IN(addr), in crport_ctrl_write()
599 phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0); in crport_ctrl_write()
600 ret = crport_handshake(phy_drd, PHYREG0_CR_DATA_IN(data), in crport_ctrl_write()
605 ret = crport_handshake(phy_drd, PHYREG0_CR_DATA_IN(data), in crport_ctrl_write()
616 static int exynos5420_usbdrd_phy_calibrate(struct exynos5_usbdrd_phy *phy_drd) in exynos5420_usbdrd_phy_calibrate() argument
630 ret = crport_ctrl_write(phy_drd, in exynos5420_usbdrd_phy_calibrate()
634 dev_err(phy_drd->dev, in exynos5420_usbdrd_phy_calibrate()
644 ret = crport_ctrl_write(phy_drd, in exynos5420_usbdrd_phy_calibrate()
648 dev_err(phy_drd->dev, in exynos5420_usbdrd_phy_calibrate()
662 switch (phy_drd->extrefclk) { in exynos5420_usbdrd_phy_calibrate()
676 ret = crport_ctrl_write(phy_drd, in exynos5420_usbdrd_phy_calibrate()
680 dev_err(phy_drd->dev, in exynos5420_usbdrd_phy_calibrate()
689 struct exynos5_usbdrd_phy *phy_drd = dev_get_drvdata(dev); in exynos5_usbdrd_phy_xlate() local
694 return phy_drd->phys[args->args[0]].phy; in exynos5_usbdrd_phy_xlate()
700 struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst); in exynos5_usbdrd_phy_calibrate() local
703 return exynos5420_usbdrd_phy_calibrate(phy_drd); in exynos5_usbdrd_phy_calibrate()
716 static int exynos5_usbdrd_phy_clk_handle(struct exynos5_usbdrd_phy *phy_drd) in exynos5_usbdrd_phy_clk_handle() argument
721 phy_drd->clk = devm_clk_get(phy_drd->dev, "phy"); in exynos5_usbdrd_phy_clk_handle()
722 if (IS_ERR(phy_drd->clk)) { in exynos5_usbdrd_phy_clk_handle()
723 dev_err(phy_drd->dev, "Failed to get phy clock\n"); in exynos5_usbdrd_phy_clk_handle()
724 return PTR_ERR(phy_drd->clk); in exynos5_usbdrd_phy_clk_handle()
727 phy_drd->ref_clk = devm_clk_get(phy_drd->dev, "ref"); in exynos5_usbdrd_phy_clk_handle()
728 if (IS_ERR(phy_drd->ref_clk)) { in exynos5_usbdrd_phy_clk_handle()
729 dev_err(phy_drd->dev, "Failed to get phy reference clock\n"); in exynos5_usbdrd_phy_clk_handle()
730 return PTR_ERR(phy_drd->ref_clk); in exynos5_usbdrd_phy_clk_handle()
732 ref_rate = clk_get_rate(phy_drd->ref_clk); in exynos5_usbdrd_phy_clk_handle()
734 ret = exynos5_rate_to_clk(ref_rate, &phy_drd->extrefclk); in exynos5_usbdrd_phy_clk_handle()
736 dev_err(phy_drd->dev, "Clock rate (%ld) not supported\n", in exynos5_usbdrd_phy_clk_handle()
741 if (!phy_drd->drv_data->has_common_clk_gate) { in exynos5_usbdrd_phy_clk_handle()
742 phy_drd->pipeclk = devm_clk_get(phy_drd->dev, "phy_pipe"); in exynos5_usbdrd_phy_clk_handle()
743 if (IS_ERR(phy_drd->pipeclk)) { in exynos5_usbdrd_phy_clk_handle()
744 dev_info(phy_drd->dev, in exynos5_usbdrd_phy_clk_handle()
746 phy_drd->pipeclk = NULL; in exynos5_usbdrd_phy_clk_handle()
749 phy_drd->utmiclk = devm_clk_get(phy_drd->dev, "phy_utmi"); in exynos5_usbdrd_phy_clk_handle()
750 if (IS_ERR(phy_drd->utmiclk)) { in exynos5_usbdrd_phy_clk_handle()
751 dev_info(phy_drd->dev, in exynos5_usbdrd_phy_clk_handle()
753 phy_drd->utmiclk = NULL; in exynos5_usbdrd_phy_clk_handle()
756 phy_drd->itpclk = devm_clk_get(phy_drd->dev, "itp"); in exynos5_usbdrd_phy_clk_handle()
757 if (IS_ERR(phy_drd->itpclk)) { in exynos5_usbdrd_phy_clk_handle()
758 dev_info(phy_drd->dev, in exynos5_usbdrd_phy_clk_handle()
760 phy_drd->itpclk = NULL; in exynos5_usbdrd_phy_clk_handle()
830 struct exynos5_usbdrd_phy *phy_drd; in exynos5_usbdrd_phy_probe() local
839 phy_drd = devm_kzalloc(dev, sizeof(*phy_drd), GFP_KERNEL); in exynos5_usbdrd_phy_probe()
840 if (!phy_drd) in exynos5_usbdrd_phy_probe()
843 dev_set_drvdata(dev, phy_drd); in exynos5_usbdrd_phy_probe()
844 phy_drd->dev = dev; in exynos5_usbdrd_phy_probe()
847 phy_drd->reg_phy = devm_ioremap_resource(dev, res); in exynos5_usbdrd_phy_probe()
848 if (IS_ERR(phy_drd->reg_phy)) in exynos5_usbdrd_phy_probe()
849 return PTR_ERR(phy_drd->reg_phy); in exynos5_usbdrd_phy_probe()
855 phy_drd->drv_data = drv_data; in exynos5_usbdrd_phy_probe()
857 ret = exynos5_usbdrd_phy_clk_handle(phy_drd); in exynos5_usbdrd_phy_probe()
881 pmu_offset = phy_drd->drv_data->pmu_offset_usbdrd1_phy; in exynos5_usbdrd_phy_probe()
885 pmu_offset = phy_drd->drv_data->pmu_offset_usbdrd0_phy; in exynos5_usbdrd_phy_probe()
890 phy_drd->vbus = devm_regulator_get(dev, "vbus"); in exynos5_usbdrd_phy_probe()
891 if (IS_ERR(phy_drd->vbus)) { in exynos5_usbdrd_phy_probe()
892 ret = PTR_ERR(phy_drd->vbus); in exynos5_usbdrd_phy_probe()
897 phy_drd->vbus = NULL; in exynos5_usbdrd_phy_probe()
900 phy_drd->vbus_boost = devm_regulator_get(dev, "vbus-boost"); in exynos5_usbdrd_phy_probe()
901 if (IS_ERR(phy_drd->vbus_boost)) { in exynos5_usbdrd_phy_probe()
902 ret = PTR_ERR(phy_drd->vbus_boost); in exynos5_usbdrd_phy_probe()
907 phy_drd->vbus_boost = NULL; in exynos5_usbdrd_phy_probe()
920 phy_drd->phys[i].phy = phy; in exynos5_usbdrd_phy_probe()
921 phy_drd->phys[i].index = i; in exynos5_usbdrd_phy_probe()
922 phy_drd->phys[i].reg_pmu = reg_pmu; in exynos5_usbdrd_phy_probe()
923 phy_drd->phys[i].pmu_offset = pmu_offset; in exynos5_usbdrd_phy_probe()
924 phy_drd->phys[i].phy_cfg = &drv_data->phy_cfg[i]; in exynos5_usbdrd_phy_probe()
925 phy_set_drvdata(phy, &phy_drd->phys[i]); in exynos5_usbdrd_phy_probe()
931 dev_err(phy_drd->dev, "Failed to register phy provider\n"); in exynos5_usbdrd_phy_probe()