Lines Matching refs:rphy

225 static inline struct regmap *get_reg_base(struct rockchip_usb2phy *rphy)  in get_reg_base()  argument
227 return rphy->usbgrf == NULL ? rphy->grf : rphy->usbgrf; in get_reg_base()
259 struct rockchip_usb2phy *rphy = in rockchip_usb2phy_clk480m_prepare() local
261 struct regmap *base = get_reg_base(rphy); in rockchip_usb2phy_clk480m_prepare()
265 if (!property_enabled(base, &rphy->phy_cfg->clkout_ctl)) { in rockchip_usb2phy_clk480m_prepare()
266 ret = property_enable(base, &rphy->phy_cfg->clkout_ctl, true); in rockchip_usb2phy_clk480m_prepare()
279 struct rockchip_usb2phy *rphy = in rockchip_usb2phy_clk480m_unprepare() local
281 struct regmap *base = get_reg_base(rphy); in rockchip_usb2phy_clk480m_unprepare()
284 property_enable(base, &rphy->phy_cfg->clkout_ctl, false); in rockchip_usb2phy_clk480m_unprepare()
289 struct rockchip_usb2phy *rphy = in rockchip_usb2phy_clk480m_prepared() local
291 struct regmap *base = get_reg_base(rphy); in rockchip_usb2phy_clk480m_prepared()
293 return property_enabled(base, &rphy->phy_cfg->clkout_ctl); in rockchip_usb2phy_clk480m_prepared()
312 struct rockchip_usb2phy *rphy = data; in rockchip_usb2phy_clk480m_unregister() local
314 of_clk_del_provider(rphy->dev->of_node); in rockchip_usb2phy_clk480m_unregister()
315 clk_unregister(rphy->clk480m); in rockchip_usb2phy_clk480m_unregister()
319 rockchip_usb2phy_clk480m_register(struct rockchip_usb2phy *rphy) in rockchip_usb2phy_clk480m_register() argument
321 struct device_node *node = rphy->dev->of_node; in rockchip_usb2phy_clk480m_register()
333 if (rphy->clk) { in rockchip_usb2phy_clk480m_register()
334 clk_name = __clk_get_name(rphy->clk); in rockchip_usb2phy_clk480m_register()
342 rphy->clk480m_hw.init = &init; in rockchip_usb2phy_clk480m_register()
345 rphy->clk480m = clk_register(rphy->dev, &rphy->clk480m_hw); in rockchip_usb2phy_clk480m_register()
346 if (IS_ERR(rphy->clk480m)) { in rockchip_usb2phy_clk480m_register()
347 ret = PTR_ERR(rphy->clk480m); in rockchip_usb2phy_clk480m_register()
351 ret = of_clk_add_provider(node, of_clk_src_simple_get, rphy->clk480m); in rockchip_usb2phy_clk480m_register()
355 ret = devm_add_action(rphy->dev, rockchip_usb2phy_clk480m_unregister, in rockchip_usb2phy_clk480m_register()
356 rphy); in rockchip_usb2phy_clk480m_register()
365 clk_unregister(rphy->clk480m); in rockchip_usb2phy_clk480m_register()
370 static int rockchip_usb2phy_extcon_register(struct rockchip_usb2phy *rphy) in rockchip_usb2phy_extcon_register() argument
373 struct device_node *node = rphy->dev->of_node; in rockchip_usb2phy_extcon_register()
377 edev = extcon_get_edev_by_phandle(rphy->dev, 0); in rockchip_usb2phy_extcon_register()
380 dev_err(rphy->dev, "Invalid or missing extcon\n"); in rockchip_usb2phy_extcon_register()
385 edev = devm_extcon_dev_allocate(rphy->dev, in rockchip_usb2phy_extcon_register()
391 ret = devm_extcon_dev_register(rphy->dev, edev); in rockchip_usb2phy_extcon_register()
393 dev_err(rphy->dev, "failed to register extcon device\n"); in rockchip_usb2phy_extcon_register()
398 rphy->edev = edev; in rockchip_usb2phy_extcon_register()
406 struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent); in rockchip_usb2phy_init() local
415 ret = property_enable(rphy->grf, in rockchip_usb2phy_init()
421 ret = property_enable(rphy->grf, in rockchip_usb2phy_init()
435 ret = property_enable(rphy->grf, in rockchip_usb2phy_init()
440 ret = property_enable(rphy->grf, in rockchip_usb2phy_init()
456 struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent); in rockchip_usb2phy_power_on() local
457 struct regmap *base = get_reg_base(rphy); in rockchip_usb2phy_power_on()
465 ret = clk_prepare_enable(rphy->clk480m); in rockchip_usb2phy_power_on()
483 struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent); in rockchip_usb2phy_power_off() local
484 struct regmap *base = get_reg_base(rphy); in rockchip_usb2phy_power_off()
497 clk_disable_unprepare(rphy->clk480m); in rockchip_usb2phy_power_off()
530 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); in rockchip_usb2phy_otg_sm_work() local
535 vbus_attach = property_enabled(rphy->grf, in rockchip_usb2phy_otg_sm_work()
551 if (extcon_get_state(rphy->edev, EXTCON_USB_HOST) > 0) { in rockchip_usb2phy_otg_sm_work()
558 switch (rphy->chg_state) { in rockchip_usb2phy_otg_sm_work()
563 switch (rphy->chg_type) { in rockchip_usb2phy_otg_sm_work()
596 rphy->chg_state = USB_CHG_STATE_UNDEFINED; in rockchip_usb2phy_otg_sm_work()
597 rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN; in rockchip_usb2phy_otg_sm_work()
603 if (notify_charger && rphy->edev) { in rockchip_usb2phy_otg_sm_work()
604 extcon_set_state_sync(rphy->edev, in rockchip_usb2phy_otg_sm_work()
607 extcon_set_state_sync(rphy->edev, in rockchip_usb2phy_otg_sm_work()
616 rphy->chg_state = USB_CHG_STATE_UNDEFINED; in rockchip_usb2phy_otg_sm_work()
617 rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN; in rockchip_usb2phy_otg_sm_work()
625 if (extcon_get_state(rphy->edev, EXTCON_USB_HOST) == 0) { in rockchip_usb2phy_otg_sm_work()
653 static void rockchip_chg_enable_dcd(struct rockchip_usb2phy *rphy, in rockchip_chg_enable_dcd() argument
656 struct regmap *base = get_reg_base(rphy); in rockchip_chg_enable_dcd()
658 property_enable(base, &rphy->phy_cfg->chg_det.rdm_pdwn_en, en); in rockchip_chg_enable_dcd()
659 property_enable(base, &rphy->phy_cfg->chg_det.idp_src_en, en); in rockchip_chg_enable_dcd()
662 static void rockchip_chg_enable_primary_det(struct rockchip_usb2phy *rphy, in rockchip_chg_enable_primary_det() argument
665 struct regmap *base = get_reg_base(rphy); in rockchip_chg_enable_primary_det()
667 property_enable(base, &rphy->phy_cfg->chg_det.vdp_src_en, en); in rockchip_chg_enable_primary_det()
668 property_enable(base, &rphy->phy_cfg->chg_det.idm_sink_en, en); in rockchip_chg_enable_primary_det()
671 static void rockchip_chg_enable_secondary_det(struct rockchip_usb2phy *rphy, in rockchip_chg_enable_secondary_det() argument
674 struct regmap *base = get_reg_base(rphy); in rockchip_chg_enable_secondary_det()
676 property_enable(base, &rphy->phy_cfg->chg_det.vdm_src_en, en); in rockchip_chg_enable_secondary_det()
677 property_enable(base, &rphy->phy_cfg->chg_det.idp_sink_en, en); in rockchip_chg_enable_secondary_det()
688 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); in rockchip_chg_detect_work() local
689 struct regmap *base = get_reg_base(rphy); in rockchip_chg_detect_work()
694 rphy->chg_state); in rockchip_chg_detect_work()
695 switch (rphy->chg_state) { in rockchip_chg_detect_work()
700 property_enable(base, &rphy->phy_cfg->chg_det.opmode, false); in rockchip_chg_detect_work()
702 rockchip_chg_enable_dcd(rphy, true); in rockchip_chg_detect_work()
703 rphy->chg_state = USB_CHG_STATE_WAIT_FOR_DCD; in rockchip_chg_detect_work()
704 rphy->dcd_retries = 0; in rockchip_chg_detect_work()
709 is_dcd = property_enabled(rphy->grf, in rockchip_chg_detect_work()
710 &rphy->phy_cfg->chg_det.dp_det); in rockchip_chg_detect_work()
711 tmout = ++rphy->dcd_retries == CHG_DCD_MAX_RETRIES; in rockchip_chg_detect_work()
716 rockchip_chg_enable_dcd(rphy, false); in rockchip_chg_detect_work()
718 rockchip_chg_enable_primary_det(rphy, true); in rockchip_chg_detect_work()
720 rphy->chg_state = USB_CHG_STATE_DCD_DONE; in rockchip_chg_detect_work()
727 vout = property_enabled(rphy->grf, in rockchip_chg_detect_work()
728 &rphy->phy_cfg->chg_det.cp_det); in rockchip_chg_detect_work()
729 rockchip_chg_enable_primary_det(rphy, false); in rockchip_chg_detect_work()
732 rockchip_chg_enable_secondary_det(rphy, true); in rockchip_chg_detect_work()
734 rphy->chg_state = USB_CHG_STATE_PRIMARY_DONE; in rockchip_chg_detect_work()
736 if (rphy->dcd_retries == CHG_DCD_MAX_RETRIES) { in rockchip_chg_detect_work()
738 rphy->chg_type = POWER_SUPPLY_TYPE_USB_DCP; in rockchip_chg_detect_work()
739 rphy->chg_state = USB_CHG_STATE_DETECTED; in rockchip_chg_detect_work()
742 rphy->chg_type = POWER_SUPPLY_TYPE_USB; in rockchip_chg_detect_work()
743 rphy->chg_state = USB_CHG_STATE_DETECTED; in rockchip_chg_detect_work()
749 vout = property_enabled(rphy->grf, in rockchip_chg_detect_work()
750 &rphy->phy_cfg->chg_det.dcp_det); in rockchip_chg_detect_work()
752 rockchip_chg_enable_secondary_det(rphy, false); in rockchip_chg_detect_work()
754 rphy->chg_type = POWER_SUPPLY_TYPE_USB_DCP; in rockchip_chg_detect_work()
756 rphy->chg_type = POWER_SUPPLY_TYPE_USB_CDP; in rockchip_chg_detect_work()
759 rphy->chg_state = USB_CHG_STATE_DETECTED; in rockchip_chg_detect_work()
764 property_enable(base, &rphy->phy_cfg->chg_det.opmode, true); in rockchip_chg_detect_work()
767 chg_to_string(rphy->chg_type)); in rockchip_chg_detect_work()
793 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); in rockchip_usb2phy_sm_work() local
802 ret = regmap_read(rphy->grf, rport->port_cfg->utmi_ls.offset, &ul); in rockchip_usb2phy_sm_work()
806 ret = regmap_read(rphy->grf, rport->port_cfg->utmi_hstdet.offset, &uhd); in rockchip_usb2phy_sm_work()
860 property_enable(rphy->grf, &rport->port_cfg->ls_det_clr, true); in rockchip_usb2phy_sm_work()
861 property_enable(rphy->grf, &rport->port_cfg->ls_det_en, true); in rockchip_usb2phy_sm_work()
882 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); in rockchip_usb2phy_linestate_irq() local
884 if (!property_enabled(rphy->grf, &rport->port_cfg->ls_det_st)) in rockchip_usb2phy_linestate_irq()
890 property_enable(rphy->grf, &rport->port_cfg->ls_det_en, false); in rockchip_usb2phy_linestate_irq()
891 property_enable(rphy->grf, &rport->port_cfg->ls_det_clr, true); in rockchip_usb2phy_linestate_irq()
909 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); in rockchip_usb2phy_bvalid_irq() local
911 if (!property_enabled(rphy->grf, &rport->port_cfg->bvalid_det_st)) in rockchip_usb2phy_bvalid_irq()
917 property_enable(rphy->grf, &rport->port_cfg->bvalid_det_clr, true); in rockchip_usb2phy_bvalid_irq()
929 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); in rockchip_usb2phy_otg_mux_irq() local
931 if (property_enabled(rphy->grf, &rport->port_cfg->bvalid_det_st)) in rockchip_usb2phy_otg_mux_irq()
937 static int rockchip_usb2phy_host_port_init(struct rockchip_usb2phy *rphy, in rockchip_usb2phy_host_port_init() argument
944 rport->port_cfg = &rphy->phy_cfg->port_cfgs[USB2PHY_PORT_HOST]; in rockchip_usb2phy_host_port_init()
952 dev_err(rphy->dev, "no linestate irq provided\n"); in rockchip_usb2phy_host_port_init()
956 ret = devm_request_threaded_irq(rphy->dev, rport->ls_irq, NULL, in rockchip_usb2phy_host_port_init()
961 dev_err(rphy->dev, "failed to request linestate irq handle\n"); in rockchip_usb2phy_host_port_init()
979 static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy, in rockchip_usb2phy_otg_port_init() argument
986 rport->port_cfg = &rphy->phy_cfg->port_cfgs[USB2PHY_PORT_OTG]; in rockchip_usb2phy_otg_port_init()
1017 ret = devm_request_threaded_irq(rphy->dev, rport->otg_mux_irq, in rockchip_usb2phy_otg_port_init()
1024 dev_err(rphy->dev, in rockchip_usb2phy_otg_port_init()
1031 dev_err(rphy->dev, "no vbus valid irq provided\n"); in rockchip_usb2phy_otg_port_init()
1036 ret = devm_request_threaded_irq(rphy->dev, rport->bvalid_irq, in rockchip_usb2phy_otg_port_init()
1043 dev_err(rphy->dev, in rockchip_usb2phy_otg_port_init()
1049 if (!IS_ERR(rphy->edev)) { in rockchip_usb2phy_otg_port_init()
1052 ret = devm_extcon_register_notifier(rphy->dev, rphy->edev, in rockchip_usb2phy_otg_port_init()
1055 dev_err(rphy->dev, "register USB HOST notifier failed\n"); in rockchip_usb2phy_otg_port_init()
1068 struct rockchip_usb2phy *rphy; in rockchip_usb2phy_probe() local
1074 rphy = devm_kzalloc(dev, sizeof(*rphy), GFP_KERNEL); in rockchip_usb2phy_probe()
1075 if (!rphy) in rockchip_usb2phy_probe()
1087 rphy->grf = syscon_node_to_regmap(dev->parent->of_node); in rockchip_usb2phy_probe()
1088 if (IS_ERR(rphy->grf)) in rockchip_usb2phy_probe()
1089 return PTR_ERR(rphy->grf); in rockchip_usb2phy_probe()
1092 rphy->usbgrf = in rockchip_usb2phy_probe()
1095 if (IS_ERR(rphy->usbgrf)) in rockchip_usb2phy_probe()
1096 return PTR_ERR(rphy->usbgrf); in rockchip_usb2phy_probe()
1098 rphy->usbgrf = NULL; in rockchip_usb2phy_probe()
1107 rphy->dev = dev; in rockchip_usb2phy_probe()
1109 rphy->chg_state = USB_CHG_STATE_UNDEFINED; in rockchip_usb2phy_probe()
1110 rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN; in rockchip_usb2phy_probe()
1111 platform_set_drvdata(pdev, rphy); in rockchip_usb2phy_probe()
1113 ret = rockchip_usb2phy_extcon_register(rphy); in rockchip_usb2phy_probe()
1121 rphy->phy_cfg = &phy_cfgs[index]; in rockchip_usb2phy_probe()
1128 if (!rphy->phy_cfg) { in rockchip_usb2phy_probe()
1134 rphy->clk = of_clk_get_by_name(np, "phyclk"); in rockchip_usb2phy_probe()
1135 if (!IS_ERR(rphy->clk)) { in rockchip_usb2phy_probe()
1136 clk_prepare_enable(rphy->clk); in rockchip_usb2phy_probe()
1139 rphy->clk = NULL; in rockchip_usb2phy_probe()
1142 ret = rockchip_usb2phy_clk480m_register(rphy); in rockchip_usb2phy_probe()
1150 struct rockchip_usb2phy_port *rport = &rphy->ports[index]; in rockchip_usb2phy_probe()
1170 ret = rockchip_usb2phy_host_port_init(rphy, rport, in rockchip_usb2phy_probe()
1175 ret = rockchip_usb2phy_otg_port_init(rphy, rport, in rockchip_usb2phy_probe()
1183 if (++index >= rphy->phy_cfg->num_ports) in rockchip_usb2phy_probe()
1193 if (rphy->clk) { in rockchip_usb2phy_probe()
1194 clk_disable_unprepare(rphy->clk); in rockchip_usb2phy_probe()
1195 clk_put(rphy->clk); in rockchip_usb2phy_probe()