Lines Matching refs:rphy

225 static inline struct regmap *get_reg_base(struct rockchip_usb2phy *rphy)
227 return rphy->usbgrf == NULL ? rphy->grf : rphy->usbgrf;
259 struct rockchip_usb2phy *rphy =
261 struct regmap *base = get_reg_base(rphy);
265 if (!property_enabled(base, &rphy->phy_cfg->clkout_ctl)) {
266 ret = property_enable(base, &rphy->phy_cfg->clkout_ctl, true);
279 struct rockchip_usb2phy *rphy =
281 struct regmap *base = get_reg_base(rphy);
284 property_enable(base, &rphy->phy_cfg->clkout_ctl, false);
289 struct rockchip_usb2phy *rphy =
291 struct regmap *base = get_reg_base(rphy);
293 return property_enabled(base, &rphy->phy_cfg->clkout_ctl);
312 struct rockchip_usb2phy *rphy = data;
314 of_clk_del_provider(rphy->dev->of_node);
315 clk_unregister(rphy->clk480m);
319 rockchip_usb2phy_clk480m_register(struct rockchip_usb2phy *rphy)
321 struct device_node *node = rphy->dev->of_node;
333 if (rphy->clk) {
334 clk_name = __clk_get_name(rphy->clk);
342 rphy->clk480m_hw.init = &init;
345 rphy->clk480m = clk_register(rphy->dev, &rphy->clk480m_hw);
346 if (IS_ERR(rphy->clk480m)) {
347 ret = PTR_ERR(rphy->clk480m);
351 ret = of_clk_add_provider(node, of_clk_src_simple_get, rphy->clk480m);
355 ret = devm_add_action(rphy->dev, rockchip_usb2phy_clk480m_unregister,
356 rphy);
365 clk_unregister(rphy->clk480m);
370 static int rockchip_usb2phy_extcon_register(struct rockchip_usb2phy *rphy)
373 struct device_node *node = rphy->dev->of_node;
377 edev = extcon_get_edev_by_phandle(rphy->dev, 0);
380 dev_err(rphy->dev, "Invalid or missing extcon\n");
385 edev = devm_extcon_dev_allocate(rphy->dev,
391 ret = devm_extcon_dev_register(rphy->dev, edev);
393 dev_err(rphy->dev, "failed to register extcon device\n");
398 rphy->edev = edev;
406 struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent);
415 ret = property_enable(rphy->grf,
421 ret = property_enable(rphy->grf,
435 ret = property_enable(rphy->grf,
440 ret = property_enable(rphy->grf,
456 struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent);
457 struct regmap *base = get_reg_base(rphy);
465 ret = clk_prepare_enable(rphy->clk480m);
471 clk_disable_unprepare(rphy->clk480m);
485 struct rockchip_usb2phy *rphy = dev_get_drvdata(phy->dev.parent);
486 struct regmap *base = get_reg_base(rphy);
499 clk_disable_unprepare(rphy->clk480m);
532 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent);
537 vbus_attach = property_enabled(rphy->grf,
553 if (extcon_get_state(rphy->edev, EXTCON_USB_HOST) > 0) {
560 switch (rphy->chg_state) {
565 switch (rphy->chg_type) {
598 rphy->chg_state = USB_CHG_STATE_UNDEFINED;
599 rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN;
605 if (notify_charger && rphy->edev) {
606 extcon_set_state_sync(rphy->edev,
609 extcon_set_state_sync(rphy->edev,
618 rphy->chg_state = USB_CHG_STATE_UNDEFINED;
619 rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN;
627 if (extcon_get_state(rphy->edev, EXTCON_USB_HOST) == 0) {
655 static void rockchip_chg_enable_dcd(struct rockchip_usb2phy *rphy,
658 struct regmap *base = get_reg_base(rphy);
660 property_enable(base, &rphy->phy_cfg->chg_det.rdm_pdwn_en, en);
661 property_enable(base, &rphy->phy_cfg->chg_det.idp_src_en, en);
664 static void rockchip_chg_enable_primary_det(struct rockchip_usb2phy *rphy,
667 struct regmap *base = get_reg_base(rphy);
669 property_enable(base, &rphy->phy_cfg->chg_det.vdp_src_en, en);
670 property_enable(base, &rphy->phy_cfg->chg_det.idm_sink_en, en);
673 static void rockchip_chg_enable_secondary_det(struct rockchip_usb2phy *rphy,
676 struct regmap *base = get_reg_base(rphy);
678 property_enable(base, &rphy->phy_cfg->chg_det.vdm_src_en, en);
679 property_enable(base, &rphy->phy_cfg->chg_det.idp_sink_en, en);
690 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent);
691 struct regmap *base = get_reg_base(rphy);
696 rphy->chg_state);
697 switch (rphy->chg_state) {
702 property_enable(base, &rphy->phy_cfg->chg_det.opmode, false);
704 rockchip_chg_enable_dcd(rphy, true);
705 rphy->chg_state = USB_CHG_STATE_WAIT_FOR_DCD;
706 rphy->dcd_retries = 0;
711 is_dcd = property_enabled(rphy->grf,
712 &rphy->phy_cfg->chg_det.dp_det);
713 tmout = ++rphy->dcd_retries == CHG_DCD_MAX_RETRIES;
718 rockchip_chg_enable_dcd(rphy, false);
720 rockchip_chg_enable_primary_det(rphy, true);
722 rphy->chg_state = USB_CHG_STATE_DCD_DONE;
729 vout = property_enabled(rphy->grf,
730 &rphy->phy_cfg->chg_det.cp_det);
731 rockchip_chg_enable_primary_det(rphy, false);
734 rockchip_chg_enable_secondary_det(rphy, true);
736 rphy->chg_state = USB_CHG_STATE_PRIMARY_DONE;
738 if (rphy->dcd_retries == CHG_DCD_MAX_RETRIES) {
740 rphy->chg_type = POWER_SUPPLY_TYPE_USB_DCP;
741 rphy->chg_state = USB_CHG_STATE_DETECTED;
744 rphy->chg_type = POWER_SUPPLY_TYPE_USB;
745 rphy->chg_state = USB_CHG_STATE_DETECTED;
751 vout = property_enabled(rphy->grf,
752 &rphy->phy_cfg->chg_det.dcp_det);
754 rockchip_chg_enable_secondary_det(rphy, false);
756 rphy->chg_type = POWER_SUPPLY_TYPE_USB_DCP;
758 rphy->chg_type = POWER_SUPPLY_TYPE_USB_CDP;
761 rphy->chg_state = USB_CHG_STATE_DETECTED;
766 property_enable(base, &rphy->phy_cfg->chg_det.opmode, true);
769 chg_to_string(rphy->chg_type));
795 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent);
804 ret = regmap_read(rphy->grf, rport->port_cfg->utmi_ls.offset, &ul);
808 ret = regmap_read(rphy->grf, rport->port_cfg->utmi_hstdet.offset, &uhd);
862 property_enable(rphy->grf, &rport->port_cfg->ls_det_clr, true);
863 property_enable(rphy->grf, &rport->port_cfg->ls_det_en, true);
884 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent);
886 if (!property_enabled(rphy->grf, &rport->port_cfg->ls_det_st))
892 property_enable(rphy->grf, &rport->port_cfg->ls_det_en, false);
893 property_enable(rphy->grf, &rport->port_cfg->ls_det_clr, true);
911 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent);
913 if (!property_enabled(rphy->grf, &rport->port_cfg->bvalid_det_st))
919 property_enable(rphy->grf, &rport->port_cfg->bvalid_det_clr, true);
931 struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent);
933 if (property_enabled(rphy->grf, &rport->port_cfg->bvalid_det_st))
939 static int rockchip_usb2phy_host_port_init(struct rockchip_usb2phy *rphy,
946 rport->port_cfg = &rphy->phy_cfg->port_cfgs[USB2PHY_PORT_HOST];
954 dev_err(rphy->dev, "no linestate irq provided\n");
958 ret = devm_request_threaded_irq(rphy->dev, rport->ls_irq, NULL,
963 dev_err(rphy->dev, "failed to request linestate irq handle\n");
981 static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy,
988 rport->port_cfg = &rphy->phy_cfg->port_cfgs[USB2PHY_PORT_OTG];
1019 ret = devm_request_threaded_irq(rphy->dev, rport->otg_mux_irq,
1026 dev_err(rphy->dev,
1033 dev_err(rphy->dev, "no vbus valid irq provided\n");
1038 ret = devm_request_threaded_irq(rphy->dev, rport->bvalid_irq,
1045 dev_err(rphy->dev,
1051 if (!IS_ERR(rphy->edev)) {
1054 ret = devm_extcon_register_notifier(rphy->dev, rphy->edev,
1057 dev_err(rphy->dev, "register USB HOST notifier failed\n");
1070 struct rockchip_usb2phy *rphy;
1076 rphy = devm_kzalloc(dev, sizeof(*rphy), GFP_KERNEL);
1077 if (!rphy)
1089 rphy->grf = syscon_node_to_regmap(dev->parent->of_node);
1090 if (IS_ERR(rphy->grf))
1091 return PTR_ERR(rphy->grf);
1094 rphy->usbgrf =
1097 if (IS_ERR(rphy->usbgrf))
1098 return PTR_ERR(rphy->usbgrf);
1100 rphy->usbgrf = NULL;
1109 rphy->dev = dev;
1111 rphy->chg_state = USB_CHG_STATE_UNDEFINED;
1112 rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN;
1113 platform_set_drvdata(pdev, rphy);
1115 ret = rockchip_usb2phy_extcon_register(rphy);
1123 rphy->phy_cfg = &phy_cfgs[index];
1130 if (!rphy->phy_cfg) {
1136 rphy->clk = of_clk_get_by_name(np, "phyclk");
1137 if (!IS_ERR(rphy->clk)) {
1138 clk_prepare_enable(rphy->clk);
1141 rphy->clk = NULL;
1144 ret = rockchip_usb2phy_clk480m_register(rphy);
1152 struct rockchip_usb2phy_port *rport = &rphy->ports[index];
1172 ret = rockchip_usb2phy_host_port_init(rphy, rport,
1177 ret = rockchip_usb2phy_otg_port_init(rphy, rport,
1185 if (++index >= rphy->phy_cfg->num_ports)
1195 if (rphy->clk) {
1196 clk_disable_unprepare(rphy->clk);
1197 clk_put(rphy->clk);