mxs_phy 120 drivers/usb/phy/phy-mxs-usb.c #define to_mxs_phy(p) container_of((p), struct mxs_phy, phy) mxs_phy 209 drivers/usb/phy/phy-mxs-usb.c static inline bool is_imx6q_phy(struct mxs_phy *mxs_phy) mxs_phy 211 drivers/usb/phy/phy-mxs-usb.c return mxs_phy->data == &imx6q_phy_data; mxs_phy 214 drivers/usb/phy/phy-mxs-usb.c static inline bool is_imx6sl_phy(struct mxs_phy *mxs_phy) mxs_phy 216 drivers/usb/phy/phy-mxs-usb.c return mxs_phy->data == &imx6sl_phy_data; mxs_phy 219 drivers/usb/phy/phy-mxs-usb.c static inline bool is_imx7ulp_phy(struct mxs_phy *mxs_phy) mxs_phy 221 drivers/usb/phy/phy-mxs-usb.c return mxs_phy->data == &imx7ulp_phy_data; mxs_phy 233 drivers/usb/phy/phy-mxs-usb.c static void mxs_phy_tx_init(struct mxs_phy *mxs_phy) mxs_phy 235 drivers/usb/phy/phy-mxs-usb.c void __iomem *base = mxs_phy->phy.io_priv; mxs_phy 239 drivers/usb/phy/phy-mxs-usb.c if (mxs_phy->tx_reg_mask) { mxs_phy 241 drivers/usb/phy/phy-mxs-usb.c phytx &= ~mxs_phy->tx_reg_mask; mxs_phy 242 drivers/usb/phy/phy-mxs-usb.c phytx |= mxs_phy->tx_reg_set; mxs_phy 276 drivers/usb/phy/phy-mxs-usb.c static int mxs_phy_hw_init(struct mxs_phy *mxs_phy) mxs_phy 279 drivers/usb/phy/phy-mxs-usb.c void __iomem *base = mxs_phy->phy.io_priv; mxs_phy 281 drivers/usb/phy/phy-mxs-usb.c if (is_imx7ulp_phy(mxs_phy)) { mxs_phy 308 drivers/usb/phy/phy-mxs-usb.c if (mxs_phy->data->flags & MXS_PHY_NEED_IP_FIX) mxs_phy 311 drivers/usb/phy/phy-mxs-usb.c if (mxs_phy->regmap_anatop) { mxs_phy 312 drivers/usb/phy/phy-mxs-usb.c unsigned int reg = mxs_phy->port_id ? mxs_phy 319 drivers/usb/phy/phy-mxs-usb.c regmap_write(mxs_phy->regmap_anatop, reg, mxs_phy 324 drivers/usb/phy/phy-mxs-usb.c mxs_phy_tx_init(mxs_phy); mxs_phy 329 drivers/usb/phy/phy-mxs-usb.c if (is_imx7ulp_phy(mxs_phy)) mxs_phy 335 drivers/usb/phy/phy-mxs-usb.c static bool mxs_phy_get_vbus_status(struct mxs_phy *mxs_phy) mxs_phy 339 drivers/usb/phy/phy-mxs-usb.c if (!mxs_phy->regmap_anatop) mxs_phy 342 drivers/usb/phy/phy-mxs-usb.c if (mxs_phy->port_id == 0) mxs_phy 343 drivers/usb/phy/phy-mxs-usb.c regmap_read(mxs_phy->regmap_anatop, mxs_phy 346 drivers/usb/phy/phy-mxs-usb.c else if (mxs_phy->port_id == 1) mxs_phy 347 drivers/usb/phy/phy-mxs-usb.c regmap_read(mxs_phy->regmap_anatop, mxs_phy 357 drivers/usb/phy/phy-mxs-usb.c static void __mxs_phy_disconnect_line(struct mxs_phy *mxs_phy, bool disconnect) mxs_phy 359 drivers/usb/phy/phy-mxs-usb.c void __iomem *base = mxs_phy->phy.io_priv; mxs_phy 366 drivers/usb/phy/phy-mxs-usb.c if (mxs_phy->port_id == 0) { mxs_phy 369 drivers/usb/phy/phy-mxs-usb.c regmap_write(mxs_phy->regmap_anatop, reg, mxs_phy 372 drivers/usb/phy/phy-mxs-usb.c } else if (mxs_phy->port_id == 1) { mxs_phy 375 drivers/usb/phy/phy-mxs-usb.c regmap_write(mxs_phy->regmap_anatop, reg, mxs_phy 389 drivers/usb/phy/phy-mxs-usb.c static bool mxs_phy_is_otg_host(struct mxs_phy *mxs_phy) mxs_phy 391 drivers/usb/phy/phy-mxs-usb.c void __iomem *base = mxs_phy->phy.io_priv; mxs_phy 401 drivers/usb/phy/phy-mxs-usb.c static void mxs_phy_disconnect_line(struct mxs_phy *mxs_phy, bool on) mxs_phy 406 drivers/usb/phy/phy-mxs-usb.c if (!(mxs_phy->data->flags & MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS)) mxs_phy 410 drivers/usb/phy/phy-mxs-usb.c if (!mxs_phy->regmap_anatop) mxs_phy 413 drivers/usb/phy/phy-mxs-usb.c vbus_is_on = mxs_phy_get_vbus_status(mxs_phy); mxs_phy 415 drivers/usb/phy/phy-mxs-usb.c if (on && !vbus_is_on && !mxs_phy_is_otg_host(mxs_phy)) mxs_phy 416 drivers/usb/phy/phy-mxs-usb.c __mxs_phy_disconnect_line(mxs_phy, true); mxs_phy 418 drivers/usb/phy/phy-mxs-usb.c __mxs_phy_disconnect_line(mxs_phy, false); mxs_phy 425 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = to_mxs_phy(phy); mxs_phy 428 drivers/usb/phy/phy-mxs-usb.c ret = clk_prepare_enable(mxs_phy->clk); mxs_phy 432 drivers/usb/phy/phy-mxs-usb.c return mxs_phy_hw_init(mxs_phy); mxs_phy 437 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = to_mxs_phy(phy); mxs_phy 453 drivers/usb/phy/phy-mxs-usb.c if (is_imx7ulp_phy(mxs_phy)) mxs_phy 456 drivers/usb/phy/phy-mxs-usb.c clk_disable_unprepare(mxs_phy->clk); mxs_phy 459 drivers/usb/phy/phy-mxs-usb.c static bool mxs_phy_is_low_speed_connection(struct mxs_phy *mxs_phy) mxs_phy 468 drivers/usb/phy/phy-mxs-usb.c if (!mxs_phy->regmap_anatop) mxs_phy 471 drivers/usb/phy/phy-mxs-usb.c if (mxs_phy->port_id == 0) mxs_phy 473 drivers/usb/phy/phy-mxs-usb.c else if (mxs_phy->port_id == 1) mxs_phy 476 drivers/usb/phy/phy-mxs-usb.c regmap_read(mxs_phy->regmap_anatop, reg, &line_state); mxs_phy 487 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = to_mxs_phy(x); mxs_phy 490 drivers/usb/phy/phy-mxs-usb.c low_speed_connection = mxs_phy_is_low_speed_connection(mxs_phy); mxs_phy 491 drivers/usb/phy/phy-mxs-usb.c vbus_is_on = mxs_phy_get_vbus_status(mxs_phy); mxs_phy 511 drivers/usb/phy/phy-mxs-usb.c clk_disable_unprepare(mxs_phy->clk); mxs_phy 514 drivers/usb/phy/phy-mxs-usb.c ret = clk_prepare_enable(mxs_phy->clk); mxs_phy 527 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = to_mxs_phy(x); mxs_phy 532 drivers/usb/phy/phy-mxs-usb.c mxs_phy_disconnect_line(mxs_phy, true); mxs_phy 536 drivers/usb/phy/phy-mxs-usb.c mxs_phy_disconnect_line(mxs_phy, false); mxs_phy 571 drivers/usb/phy/phy-mxs-usb.c static int mxs_charger_data_contact_detect(struct mxs_phy *x) mxs_phy 624 drivers/usb/phy/phy-mxs-usb.c static enum usb_charger_type mxs_charger_primary_detection(struct mxs_phy *x) mxs_phy 660 drivers/usb/phy/phy-mxs-usb.c static enum usb_charger_type mxs_charger_secondary_detection(struct mxs_phy *x) mxs_phy 679 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = to_mxs_phy(phy); mxs_phy 680 drivers/usb/phy/phy-mxs-usb.c struct regmap *regmap = mxs_phy->regmap_anatop; mxs_phy 687 drivers/usb/phy/phy-mxs-usb.c if (mxs_charger_data_contact_detect(mxs_phy)) mxs_phy 690 drivers/usb/phy/phy-mxs-usb.c chgr_type = mxs_charger_primary_detection(mxs_phy); mxs_phy 699 drivers/usb/phy/phy-mxs-usb.c chgr_type = mxs_charger_secondary_detection(mxs_phy); mxs_phy 716 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy; mxs_phy 738 drivers/usb/phy/phy-mxs-usb.c mxs_phy = devm_kzalloc(&pdev->dev, sizeof(*mxs_phy), GFP_KERNEL); mxs_phy 739 drivers/usb/phy/phy-mxs-usb.c if (!mxs_phy) mxs_phy 744 drivers/usb/phy/phy-mxs-usb.c mxs_phy->regmap_anatop = syscon_regmap_lookup_by_phandle mxs_phy 746 drivers/usb/phy/phy-mxs-usb.c if (IS_ERR(mxs_phy->regmap_anatop)) { mxs_phy 749 drivers/usb/phy/phy-mxs-usb.c return PTR_ERR(mxs_phy->regmap_anatop); mxs_phy 759 drivers/usb/phy/phy-mxs-usb.c mxs_phy->tx_reg_mask |= GM_USBPHY_TX_TXCAL45DN(~0); mxs_phy 760 drivers/usb/phy/phy-mxs-usb.c mxs_phy->tx_reg_set |= GM_USBPHY_TX_TXCAL45DN(val); mxs_phy 768 drivers/usb/phy/phy-mxs-usb.c mxs_phy->tx_reg_mask |= GM_USBPHY_TX_TXCAL45DP(~0); mxs_phy 769 drivers/usb/phy/phy-mxs-usb.c mxs_phy->tx_reg_set |= GM_USBPHY_TX_TXCAL45DP(val); mxs_phy 780 drivers/usb/phy/phy-mxs-usb.c mxs_phy->tx_reg_mask |= GM_USBPHY_TX_D_CAL(~0); mxs_phy 781 drivers/usb/phy/phy-mxs-usb.c mxs_phy->tx_reg_set |= GM_USBPHY_TX_D_CAL(val); mxs_phy 787 drivers/usb/phy/phy-mxs-usb.c mxs_phy->port_id = ret; mxs_phy 789 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.io_priv = base; mxs_phy 790 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.dev = &pdev->dev; mxs_phy 791 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.label = DRIVER_NAME; mxs_phy 792 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.init = mxs_phy_init; mxs_phy 793 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.shutdown = mxs_phy_shutdown; mxs_phy 794 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.set_suspend = mxs_phy_suspend; mxs_phy 795 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.notify_connect = mxs_phy_on_connect; mxs_phy 796 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.notify_disconnect = mxs_phy_on_disconnect; mxs_phy 797 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.type = USB_PHY_TYPE_USB2; mxs_phy 798 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.set_wakeup = mxs_phy_set_wakeup; mxs_phy 799 drivers/usb/phy/phy-mxs-usb.c mxs_phy->phy.charger_detect = mxs_phy_charger_detect; mxs_phy 801 drivers/usb/phy/phy-mxs-usb.c mxs_phy->clk = clk; mxs_phy 802 drivers/usb/phy/phy-mxs-usb.c mxs_phy->data = of_id->data; mxs_phy 804 drivers/usb/phy/phy-mxs-usb.c platform_set_drvdata(pdev, mxs_phy); mxs_phy 808 drivers/usb/phy/phy-mxs-usb.c return usb_add_phy_dev(&mxs_phy->phy); mxs_phy 813 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = platform_get_drvdata(pdev); mxs_phy 815 drivers/usb/phy/phy-mxs-usb.c usb_remove_phy(&mxs_phy->phy); mxs_phy 821 drivers/usb/phy/phy-mxs-usb.c static void mxs_phy_enable_ldo_in_suspend(struct mxs_phy *mxs_phy, bool on) mxs_phy 826 drivers/usb/phy/phy-mxs-usb.c if (!mxs_phy->regmap_anatop) mxs_phy 829 drivers/usb/phy/phy-mxs-usb.c if (is_imx6q_phy(mxs_phy)) mxs_phy 830 drivers/usb/phy/phy-mxs-usb.c regmap_write(mxs_phy->regmap_anatop, reg, mxs_phy 832 drivers/usb/phy/phy-mxs-usb.c else if (is_imx6sl_phy(mxs_phy)) mxs_phy 833 drivers/usb/phy/phy-mxs-usb.c regmap_write(mxs_phy->regmap_anatop, mxs_phy 839 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = dev_get_drvdata(dev); mxs_phy 842 drivers/usb/phy/phy-mxs-usb.c mxs_phy_enable_ldo_in_suspend(mxs_phy, true); mxs_phy 849 drivers/usb/phy/phy-mxs-usb.c struct mxs_phy *mxs_phy = dev_get_drvdata(dev); mxs_phy 852 drivers/usb/phy/phy-mxs-usb.c mxs_phy_enable_ldo_in_suspend(mxs_phy, false);