Lines Matching refs:rk_phy
161 struct rockchip_usb_phy *rk_phy = dev_get_drvdata(dev); in otg_mode_show() local
163 if (!rk_phy) { in otg_mode_show()
168 switch (rk_phy->mode) { in otg_mode_show()
187 struct rockchip_usb_phy *rk_phy = dev_get_drvdata(dev); in otg_mode_store() local
192 if (!rk_phy) { in otg_mode_store()
197 mutex_lock(&rk_phy->mutex); in otg_mode_store()
206 dev_err(&rk_phy->phy->dev, "Error mode! Input 'otg' or 'host' or 'peripheral'\n"); in otg_mode_store()
211 if (rk_phy->mode == new_dr_mode) { in otg_mode_store()
212 dev_warn(&rk_phy->phy->dev, "Same as current mode.\n"); in otg_mode_store()
216 rk_phy->mode = new_dr_mode; in otg_mode_store()
218 switch (rk_phy->mode) { in otg_mode_store()
235 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON3, val); in otg_mode_store()
238 mutex_unlock(&rk_phy->mutex); in otg_mode_store()
407 struct rockchip_usb_phy *rk_phy = data; in rockchip_usb_phy_action() local
409 if (!rk_phy->uart_enabled) { in rockchip_usb_phy_action()
410 of_clk_del_provider(rk_phy->np); in rockchip_usb_phy_action()
411 clk_unregister(rk_phy->clk480m); in rockchip_usb_phy_action()
414 if (rk_phy->clk) in rockchip_usb_phy_action()
415 clk_put(rk_phy->clk); in rockchip_usb_phy_action()
455 struct rockchip_usb_phy *rk_phy = container_of(work, in rk3288_usb_phy_otg_sm_work() local
465 mutex_lock(&rk_phy->mutex); in rk3288_usb_phy_otg_sm_work()
469 regmap_read(rk_phy->base->reg_base, RK3288_SOC_STATUS2, &val); in rk3288_usb_phy_otg_sm_work()
472 regmap_read(rk_phy->base->reg_base, RK3288_SOC_STATUS2, &val); in rk3288_usb_phy_otg_sm_work()
476 if (!vbus_attached || !id || rk_phy->mode == USB_DR_MODE_HOST) { in rk3288_usb_phy_otg_sm_work()
477 dev_dbg(&rk_phy->phy->dev, "peripheral disconnected\n"); in rk3288_usb_phy_otg_sm_work()
478 wake_unlock(&rk_phy->wakelock); in rk3288_usb_phy_otg_sm_work()
479 extcon_set_state_sync(rk_phy->base->edev, cable, false); in rk3288_usb_phy_otg_sm_work()
480 rk_phy->chg_state = USB_CHG_STATE_UNDEFINED; in rk3288_usb_phy_otg_sm_work()
490 switch (rk_phy->chg_state) { in rk3288_usb_phy_otg_sm_work()
492 mutex_unlock(&rk_phy->mutex); in rk3288_usb_phy_otg_sm_work()
493 schedule_delayed_work(&rk_phy->chg_work, 0); in rk3288_usb_phy_otg_sm_work()
496 switch (rk_phy->chg_type) { in rk3288_usb_phy_otg_sm_work()
498 dev_dbg(&rk_phy->phy->dev, "sdp cable is connected\n"); in rk3288_usb_phy_otg_sm_work()
499 wake_lock(&rk_phy->wakelock); in rk3288_usb_phy_otg_sm_work()
504 dev_dbg(&rk_phy->phy->dev, "dcp cable is connected\n"); in rk3288_usb_phy_otg_sm_work()
509 dev_dbg(&rk_phy->phy->dev, "cdp cable is connected\n"); in rk3288_usb_phy_otg_sm_work()
510 wake_lock(&rk_phy->wakelock); in rk3288_usb_phy_otg_sm_work()
523 if (extcon_get_state(rk_phy->base->edev, cable) != vbus_attached) in rk3288_usb_phy_otg_sm_work()
524 extcon_set_state_sync(rk_phy->base->edev, cable, in rk3288_usb_phy_otg_sm_work()
529 schedule_delayed_work(&rk_phy->otg_sm_work, OTG_SCHEDULE_DELAY); in rk3288_usb_phy_otg_sm_work()
531 mutex_unlock(&rk_phy->mutex); in rk3288_usb_phy_otg_sm_work()
550 struct rockchip_usb_phy *rk_phy = in rk3288_chg_detect_work() local
560 dev_dbg(&rk_phy->phy->dev, "chg detection work state = %d\n", in rk3288_chg_detect_work()
561 rk_phy->chg_state); in rk3288_chg_detect_work()
563 switch (rk_phy->chg_state) { in rk3288_chg_detect_work()
565 mutex_lock(&rk_phy->mutex); in rk3288_chg_detect_work()
569 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON2, val); in rk3288_chg_detect_work()
573 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON3, val); in rk3288_chg_detect_work()
577 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON2, val); in rk3288_chg_detect_work()
578 rk_phy->chg_state = USB_CHG_STATE_WAIT_FOR_DCD; in rk3288_chg_detect_work()
585 regmap_read(rk_phy->base->reg_base, RK3288_SOC_STATUS19, &val); in rk3288_chg_detect_work()
594 regmap_write(rk_phy->base->reg_base, in rk3288_chg_detect_work()
602 regmap_write(rk_phy->base->reg_base, in rk3288_chg_detect_work()
605 rk_phy->chg_state = USB_CHG_STATE_DCD_DONE; in rk3288_chg_detect_work()
612 regmap_read(rk_phy->base->reg_base, RK3288_SOC_STATUS19, &val); in rk3288_chg_detect_work()
617 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON2, val); in rk3288_chg_detect_work()
626 regmap_write(rk_phy->base->reg_base, in rk3288_chg_detect_work()
629 rk_phy->chg_state = USB_CHG_STATE_PRIMARY_DONE; in rk3288_chg_detect_work()
633 rk_phy->chg_type = POWER_SUPPLY_TYPE_USB_DCP; in rk3288_chg_detect_work()
634 rk_phy->chg_state = USB_CHG_STATE_DETECTED; in rk3288_chg_detect_work()
640 rk_phy->chg_type = POWER_SUPPLY_TYPE_USB; in rk3288_chg_detect_work()
641 rk_phy->chg_state = USB_CHG_STATE_DETECTED; in rk3288_chg_detect_work()
647 regmap_read(rk_phy->base->reg_base, RK3288_SOC_STATUS19, &val); in rk3288_chg_detect_work()
654 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON2, val); in rk3288_chg_detect_work()
656 rk_phy->chg_type = POWER_SUPPLY_TYPE_USB_DCP; in rk3288_chg_detect_work()
658 rk_phy->chg_type = POWER_SUPPLY_TYPE_USB_CDP; in rk3288_chg_detect_work()
661 rk_phy->chg_state = USB_CHG_STATE_DETECTED; in rk3288_chg_detect_work()
666 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON2, val); in rk3288_chg_detect_work()
670 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON3, val); in rk3288_chg_detect_work()
671 mutex_unlock(&rk_phy->mutex); in rk3288_chg_detect_work()
672 rk3288_usb_phy_otg_sm_work(&rk_phy->otg_sm_work.work); in rk3288_chg_detect_work()
673 dev_info(&rk_phy->phy->dev, "charger = %s\n", in rk3288_chg_detect_work()
674 chg_to_string(rk_phy->chg_type)); in rk3288_chg_detect_work()
677 mutex_unlock(&rk_phy->mutex); in rk3288_chg_detect_work()
686 schedule_delayed_work(&rk_phy->chg_work, delay); in rk3288_chg_detect_work()
691 struct rockchip_usb_phy *rk_phy = data; in rk3288_usb_phy_bvalid_irq() local
695 ret = regmap_read(rk_phy->base->reg_base, RK3288_UOC0_CON4, &val); in rk3288_usb_phy_bvalid_irq()
699 mutex_lock(&rk_phy->mutex); in rk3288_usb_phy_bvalid_irq()
704 regmap_write(rk_phy->base->reg_base, RK3288_UOC0_CON4, val); in rk3288_usb_phy_bvalid_irq()
706 mutex_unlock(&rk_phy->mutex); in rk3288_usb_phy_bvalid_irq()
708 if (rk_phy->uart_enabled) in rk3288_usb_phy_bvalid_irq()
711 cancel_delayed_work_sync(&rk_phy->otg_sm_work); in rk3288_usb_phy_bvalid_irq()
712 rk3288_usb_phy_otg_sm_work(&rk_phy->otg_sm_work.work); in rk3288_usb_phy_bvalid_irq()
717 static int rk3288_usb_phy_probe_init(struct rockchip_usb_phy *rk_phy) in rk3288_usb_phy_probe_init() argument
722 if (rk_phy->reg_offset == 0x320) { in rk3288_usb_phy_probe_init()
726 rk_phy->bvalid_irq = of_irq_get_byname(rk_phy->np, in rk3288_usb_phy_probe_init()
728 regmap_read(rk_phy->base->reg_base, RK3288_UOC0_CON4, &val); in rk3288_usb_phy_probe_init()
729 if (rk_phy->bvalid_irq <= 0) { in rk3288_usb_phy_probe_init()
730 dev_err(&rk_phy->phy->dev, in rk3288_usb_phy_probe_init()
736 ret = devm_request_threaded_irq(rk_phy->base->dev, in rk3288_usb_phy_probe_init()
737 rk_phy->bvalid_irq, in rk3288_usb_phy_probe_init()
742 rk_phy); in rk3288_usb_phy_probe_init()
744 dev_err(&rk_phy->phy->dev, in rk3288_usb_phy_probe_init()
749 rk_phy->chg_state = USB_CHG_STATE_UNDEFINED; in rk3288_usb_phy_probe_init()
750 wake_lock_init(&rk_phy->wakelock, WAKE_LOCK_SUSPEND, in rk3288_usb_phy_probe_init()
752 INIT_DELAYED_WORK(&rk_phy->chg_work, rk3288_chg_detect_work); in rk3288_usb_phy_probe_init()
753 INIT_DELAYED_WORK(&rk_phy->otg_sm_work, in rk3288_usb_phy_probe_init()
756 rk_phy->mode = of_usb_get_dr_mode_by_phy(rk_phy->np, -1); in rk3288_usb_phy_probe_init()
757 if (rk_phy->mode == USB_DR_MODE_OTG || in rk3288_usb_phy_probe_init()
758 rk_phy->mode == USB_DR_MODE_UNKNOWN) { in rk3288_usb_phy_probe_init()
759 ret = sysfs_create_group(&rk_phy->phy->dev.kobj, in rk3288_usb_phy_probe_init()
762 dev_err(&rk_phy->phy->dev, in rk3288_usb_phy_probe_init()
767 } else if (rk_phy->reg_offset == 0x334) { in rk3288_usb_phy_probe_init()
780 regmap_write(rk_phy->base->reg_base, rk_phy->reg_offset, in rk3288_usb_phy_probe_init()
791 struct rockchip_usb_phy *rk_phy; in rockchip_usb_phy_init() local
797 rk_phy = devm_kzalloc(base->dev, sizeof(*rk_phy), GFP_KERNEL); in rockchip_usb_phy_init()
798 if (!rk_phy) in rockchip_usb_phy_init()
801 rk_phy->base = base; in rockchip_usb_phy_init()
802 rk_phy->np = child; in rockchip_usb_phy_init()
803 mutex_init(&rk_phy->mutex); in rockchip_usb_phy_init()
811 rk_phy->reset = of_reset_control_get(child, "phy-reset"); in rockchip_usb_phy_init()
812 if (IS_ERR(rk_phy->reset)) in rockchip_usb_phy_init()
813 rk_phy->reset = NULL; in rockchip_usb_phy_init()
815 rk_phy->reg_offset = reg_offset; in rockchip_usb_phy_init()
817 rk_phy->clk = of_clk_get_by_name(child, "phyclk"); in rockchip_usb_phy_init()
818 if (IS_ERR(rk_phy->clk)) in rockchip_usb_phy_init()
819 rk_phy->clk = NULL; in rockchip_usb_phy_init()
838 rk_phy->uart_enabled = true; in rockchip_usb_phy_init()
840 if (rk_phy->clk) { in rockchip_usb_phy_init()
841 clk_name = __clk_get_name(rk_phy->clk); in rockchip_usb_phy_init()
852 rk_phy->clk480m_hw.init = &init; in rockchip_usb_phy_init()
854 rk_phy->clk480m = clk_register(base->dev, &rk_phy->clk480m_hw); in rockchip_usb_phy_init()
855 if (IS_ERR(rk_phy->clk480m)) { in rockchip_usb_phy_init()
856 err = PTR_ERR(rk_phy->clk480m); in rockchip_usb_phy_init()
861 rk_phy->clk480m); in rockchip_usb_phy_init()
867 rk_phy); in rockchip_usb_phy_init()
871 rk_phy->phy = devm_phy_create(base->dev, child, &ops); in rockchip_usb_phy_init()
872 if (IS_ERR(rk_phy->phy)) { in rockchip_usb_phy_init()
874 return PTR_ERR(rk_phy->phy); in rockchip_usb_phy_init()
876 phy_set_drvdata(rk_phy->phy, rk_phy); in rockchip_usb_phy_init()
879 err = rk3288_usb_phy_probe_init(rk_phy); in rockchip_usb_phy_init()
884 rk_phy->vbus = devm_regulator_get_optional(&rk_phy->phy->dev, "vbus"); in rockchip_usb_phy_init()
885 if (IS_ERR(rk_phy->vbus)) { in rockchip_usb_phy_init()
886 if (PTR_ERR(rk_phy->vbus) == -EPROBE_DEFER) in rockchip_usb_phy_init()
887 return PTR_ERR(rk_phy->vbus); in rockchip_usb_phy_init()
888 rk_phy->vbus = NULL; in rockchip_usb_phy_init()
895 if (rk_phy->uart_enabled) in rockchip_usb_phy_init()
896 return clk_prepare_enable(rk_phy->clk); in rockchip_usb_phy_init()
898 return rockchip_usb_phy_power(rk_phy, 1); in rockchip_usb_phy_init()
901 if (!rk_phy->uart_enabled) in rockchip_usb_phy_init()
902 clk_unregister(rk_phy->clk480m); in rockchip_usb_phy_init()
904 if (rk_phy->clk) in rockchip_usb_phy_init()
905 clk_put(rk_phy->clk); in rockchip_usb_phy_init()