Symbol: mxs_phy
drivers/usb/phy/phy-mxs-usb.c
132
#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
drivers/usb/phy/phy-mxs-usb.c
236
static inline bool is_imx6q_phy(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
238
return mxs_phy->data == &imx6q_phy_data;
drivers/usb/phy/phy-mxs-usb.c
241
static inline bool is_imx6sl_phy(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
243
return mxs_phy->data == &imx6sl_phy_data;
drivers/usb/phy/phy-mxs-usb.c
246
static inline bool is_imx7ulp_phy(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
248
return mxs_phy->data == &imx7ulp_phy_data;
drivers/usb/phy/phy-mxs-usb.c
251
static inline bool is_imx6ul_phy(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
253
return mxs_phy->data == &imx6ul_phy_data;
drivers/usb/phy/phy-mxs-usb.c
265
static void mxs_phy_tx_init(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
267
void __iomem *base = mxs_phy->phy.io_priv;
drivers/usb/phy/phy-mxs-usb.c
271
if (mxs_phy->tx_reg_mask) {
drivers/usb/phy/phy-mxs-usb.c
273
phytx &= ~mxs_phy->tx_reg_mask;
drivers/usb/phy/phy-mxs-usb.c
274
phytx |= mxs_phy->tx_reg_set;
drivers/usb/phy/phy-mxs-usb.c
308
static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
311
void __iomem *base = mxs_phy->phy.io_priv;
drivers/usb/phy/phy-mxs-usb.c
313
if (is_imx7ulp_phy(mxs_phy)) {
drivers/usb/phy/phy-mxs-usb.c
323
if (mxs_phy->phy_3p0) {
drivers/usb/phy/phy-mxs-usb.c
324
ret = regulator_enable(mxs_phy->phy_3p0);
drivers/usb/phy/phy-mxs-usb.c
326
dev_err(mxs_phy->phy.dev,
drivers/usb/phy/phy-mxs-usb.c
350
if (mxs_phy->data->flags & MXS_PHY_NEED_IP_FIX)
drivers/usb/phy/phy-mxs-usb.c
353
if (mxs_phy->regmap_anatop) {
drivers/usb/phy/phy-mxs-usb.c
354
unsigned int reg = mxs_phy->port_id ?
drivers/usb/phy/phy-mxs-usb.c
361
regmap_write(mxs_phy->regmap_anatop, reg,
drivers/usb/phy/phy-mxs-usb.c
366
mxs_phy_tx_init(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
371
if (is_imx7ulp_phy(mxs_phy))
drivers/usb/phy/phy-mxs-usb.c
377
static bool mxs_phy_get_vbus_status(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
381
if (!mxs_phy->regmap_anatop)
drivers/usb/phy/phy-mxs-usb.c
384
if (mxs_phy->port_id == 0)
drivers/usb/phy/phy-mxs-usb.c
385
regmap_read(mxs_phy->regmap_anatop,
drivers/usb/phy/phy-mxs-usb.c
388
else if (mxs_phy->port_id == 1)
drivers/usb/phy/phy-mxs-usb.c
389
regmap_read(mxs_phy->regmap_anatop,
drivers/usb/phy/phy-mxs-usb.c
399
static void __mxs_phy_disconnect_line(struct mxs_phy *mxs_phy, bool disconnect)
drivers/usb/phy/phy-mxs-usb.c
401
void __iomem *base = mxs_phy->phy.io_priv;
drivers/usb/phy/phy-mxs-usb.c
408
if (mxs_phy->port_id == 0) {
drivers/usb/phy/phy-mxs-usb.c
411
regmap_write(mxs_phy->regmap_anatop, reg,
drivers/usb/phy/phy-mxs-usb.c
414
} else if (mxs_phy->port_id == 1) {
drivers/usb/phy/phy-mxs-usb.c
417
regmap_write(mxs_phy->regmap_anatop, reg,
drivers/usb/phy/phy-mxs-usb.c
431
static bool mxs_phy_is_otg_host(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
433
return mxs_phy->phy.last_event == USB_EVENT_ID;
drivers/usb/phy/phy-mxs-usb.c
436
static void mxs_phy_disconnect_line(struct mxs_phy *mxs_phy, bool on)
drivers/usb/phy/phy-mxs-usb.c
439
enum usb_phy_events last_event = mxs_phy->phy.last_event;
drivers/usb/phy/phy-mxs-usb.c
442
if (!(mxs_phy->data->flags & MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS))
drivers/usb/phy/phy-mxs-usb.c
446
if (!mxs_phy->regmap_anatop)
drivers/usb/phy/phy-mxs-usb.c
449
vbus_is_on = mxs_phy_get_vbus_status(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
451
if (on && ((!vbus_is_on && !mxs_phy_is_otg_host(mxs_phy))
drivers/usb/phy/phy-mxs-usb.c
453
__mxs_phy_disconnect_line(mxs_phy, true);
drivers/usb/phy/phy-mxs-usb.c
455
__mxs_phy_disconnect_line(mxs_phy, false);
drivers/usb/phy/phy-mxs-usb.c
462
struct mxs_phy *mxs_phy = to_mxs_phy(phy);
drivers/usb/phy/phy-mxs-usb.c
465
ret = clk_prepare_enable(mxs_phy->clk);
drivers/usb/phy/phy-mxs-usb.c
469
return mxs_phy_hw_init(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
474
struct mxs_phy *mxs_phy = to_mxs_phy(phy);
drivers/usb/phy/phy-mxs-usb.c
490
if (is_imx7ulp_phy(mxs_phy))
drivers/usb/phy/phy-mxs-usb.c
493
if (mxs_phy->phy_3p0)
drivers/usb/phy/phy-mxs-usb.c
494
regulator_disable(mxs_phy->phy_3p0);
drivers/usb/phy/phy-mxs-usb.c
496
clk_disable_unprepare(mxs_phy->clk);
drivers/usb/phy/phy-mxs-usb.c
499
static bool mxs_phy_is_low_speed_connection(struct mxs_phy *mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
508
if (!mxs_phy->regmap_anatop)
drivers/usb/phy/phy-mxs-usb.c
511
if (mxs_phy->port_id == 0)
drivers/usb/phy/phy-mxs-usb.c
513
else if (mxs_phy->port_id == 1)
drivers/usb/phy/phy-mxs-usb.c
516
regmap_read(mxs_phy->regmap_anatop, reg, &line_state);
drivers/usb/phy/phy-mxs-usb.c
527
struct mxs_phy *mxs_phy = to_mxs_phy(x);
drivers/usb/phy/phy-mxs-usb.c
530
low_speed_connection = mxs_phy_is_low_speed_connection(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
531
vbus_is_on = mxs_phy_get_vbus_status(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
551
if (!(mxs_phy->port_id == 1 &&
drivers/usb/phy/phy-mxs-usb.c
552
(mxs_phy->data->flags &
drivers/usb/phy/phy-mxs-usb.c
554
clk_disable_unprepare(mxs_phy->clk);
drivers/usb/phy/phy-mxs-usb.c
557
if (!(mxs_phy->port_id == 1 &&
drivers/usb/phy/phy-mxs-usb.c
558
(mxs_phy->data->flags &
drivers/usb/phy/phy-mxs-usb.c
560
ret = clk_prepare_enable(mxs_phy->clk);
drivers/usb/phy/phy-mxs-usb.c
574
struct mxs_phy *mxs_phy = to_mxs_phy(x);
drivers/usb/phy/phy-mxs-usb.c
579
mxs_phy_disconnect_line(mxs_phy, true);
drivers/usb/phy/phy-mxs-usb.c
583
mxs_phy_disconnect_line(mxs_phy, false);
drivers/usb/phy/phy-mxs-usb.c
618
static int mxs_charger_data_contact_detect(struct mxs_phy *x)
drivers/usb/phy/phy-mxs-usb.c
671
static enum usb_charger_type mxs_charger_primary_detection(struct mxs_phy *x)
drivers/usb/phy/phy-mxs-usb.c
707
static enum usb_charger_type mxs_charger_secondary_detection(struct mxs_phy *x)
drivers/usb/phy/phy-mxs-usb.c
726
struct mxs_phy *mxs_phy = to_mxs_phy(phy);
drivers/usb/phy/phy-mxs-usb.c
727
struct regmap *regmap = mxs_phy->regmap_anatop;
drivers/usb/phy/phy-mxs-usb.c
734
if (mxs_charger_data_contact_detect(mxs_phy))
drivers/usb/phy/phy-mxs-usb.c
737
chgr_type = mxs_charger_primary_detection(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
746
chgr_type = mxs_charger_secondary_detection(mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
762
struct mxs_phy *mxs_phy;
drivers/usb/phy/phy-mxs-usb.c
776
mxs_phy = devm_kzalloc(&pdev->dev, sizeof(*mxs_phy), GFP_KERNEL);
drivers/usb/phy/phy-mxs-usb.c
777
if (!mxs_phy)
drivers/usb/phy/phy-mxs-usb.c
782
mxs_phy->regmap_anatop = syscon_regmap_lookup_by_phandle
drivers/usb/phy/phy-mxs-usb.c
784
if (IS_ERR(mxs_phy->regmap_anatop)) {
drivers/usb/phy/phy-mxs-usb.c
787
return PTR_ERR(mxs_phy->regmap_anatop);
drivers/usb/phy/phy-mxs-usb.c
793
mxs_phy->regmap_sim = syscon_regmap_lookup_by_phandle
drivers/usb/phy/phy-mxs-usb.c
795
if (IS_ERR(mxs_phy->regmap_sim)) {
drivers/usb/phy/phy-mxs-usb.c
798
return PTR_ERR(mxs_phy->regmap_sim);
drivers/usb/phy/phy-mxs-usb.c
808
mxs_phy->tx_reg_mask |= GM_USBPHY_TX_TXCAL45DN(~0);
drivers/usb/phy/phy-mxs-usb.c
809
mxs_phy->tx_reg_set |= GM_USBPHY_TX_TXCAL45DN(val);
drivers/usb/phy/phy-mxs-usb.c
817
mxs_phy->tx_reg_mask |= GM_USBPHY_TX_TXCAL45DP(~0);
drivers/usb/phy/phy-mxs-usb.c
818
mxs_phy->tx_reg_set |= GM_USBPHY_TX_TXCAL45DP(val);
drivers/usb/phy/phy-mxs-usb.c
829
mxs_phy->tx_reg_mask |= GM_USBPHY_TX_D_CAL(~0);
drivers/usb/phy/phy-mxs-usb.c
830
mxs_phy->tx_reg_set |= GM_USBPHY_TX_D_CAL(val);
drivers/usb/phy/phy-mxs-usb.c
836
mxs_phy->port_id = ret;
drivers/usb/phy/phy-mxs-usb.c
838
mxs_phy->phy.io_priv = base;
drivers/usb/phy/phy-mxs-usb.c
839
mxs_phy->phy.dev = &pdev->dev;
drivers/usb/phy/phy-mxs-usb.c
840
mxs_phy->phy.label = DRIVER_NAME;
drivers/usb/phy/phy-mxs-usb.c
841
mxs_phy->phy.init = mxs_phy_init;
drivers/usb/phy/phy-mxs-usb.c
842
mxs_phy->phy.shutdown = mxs_phy_shutdown;
drivers/usb/phy/phy-mxs-usb.c
843
mxs_phy->phy.set_suspend = mxs_phy_suspend;
drivers/usb/phy/phy-mxs-usb.c
844
mxs_phy->phy.notify_connect = mxs_phy_on_connect;
drivers/usb/phy/phy-mxs-usb.c
845
mxs_phy->phy.notify_disconnect = mxs_phy_on_disconnect;
drivers/usb/phy/phy-mxs-usb.c
846
mxs_phy->phy.type = USB_PHY_TYPE_USB2;
drivers/usb/phy/phy-mxs-usb.c
847
mxs_phy->phy.set_wakeup = mxs_phy_set_wakeup;
drivers/usb/phy/phy-mxs-usb.c
848
mxs_phy->phy.charger_detect = mxs_phy_charger_detect;
drivers/usb/phy/phy-mxs-usb.c
850
mxs_phy->clk = clk;
drivers/usb/phy/phy-mxs-usb.c
851
mxs_phy->data = of_device_get_match_data(&pdev->dev);
drivers/usb/phy/phy-mxs-usb.c
853
mxs_phy->phy_3p0 = devm_regulator_get(&pdev->dev, "phy-3p0");
drivers/usb/phy/phy-mxs-usb.c
854
if (PTR_ERR(mxs_phy->phy_3p0) == -ENODEV)
drivers/usb/phy/phy-mxs-usb.c
856
mxs_phy->phy_3p0 = NULL;
drivers/usb/phy/phy-mxs-usb.c
857
else if (IS_ERR(mxs_phy->phy_3p0))
drivers/usb/phy/phy-mxs-usb.c
858
return dev_err_probe(&pdev->dev, PTR_ERR(mxs_phy->phy_3p0),
drivers/usb/phy/phy-mxs-usb.c
861
if (mxs_phy->phy_3p0)
drivers/usb/phy/phy-mxs-usb.c
862
regulator_set_voltage(mxs_phy->phy_3p0, 3200000, 3200000);
drivers/usb/phy/phy-mxs-usb.c
864
platform_set_drvdata(pdev, mxs_phy);
drivers/usb/phy/phy-mxs-usb.c
868
return usb_add_phy_dev(&mxs_phy->phy);
drivers/usb/phy/phy-mxs-usb.c
873
struct mxs_phy *mxs_phy = platform_get_drvdata(pdev);
drivers/usb/phy/phy-mxs-usb.c
875
usb_remove_phy(&mxs_phy->phy);
drivers/usb/phy/phy-mxs-usb.c
879
static void mxs_phy_wakeup_enable(struct mxs_phy *mxs_phy, bool on)
drivers/usb/phy/phy-mxs-usb.c
884
if (!mxs_phy->regmap_sim)
drivers/usb/phy/phy-mxs-usb.c
888
regmap_update_bits(mxs_phy->regmap_sim, SIM_GPR1, mask, mask);
drivers/usb/phy/phy-mxs-usb.c
891
regmap_update_bits(mxs_phy->regmap_sim, SIM_GPR1, mask, 0);
drivers/usb/phy/phy-mxs-usb.c
895
static void mxs_phy_enable_ldo_in_suspend(struct mxs_phy *mxs_phy, bool on)
drivers/usb/phy/phy-mxs-usb.c
901
if (!mxs_phy->regmap_anatop)
drivers/usb/phy/phy-mxs-usb.c
904
if (is_imx6q_phy(mxs_phy)) {
drivers/usb/phy/phy-mxs-usb.c
906
regmap_write(mxs_phy->regmap_anatop, reg,
drivers/usb/phy/phy-mxs-usb.c
908
} else if (is_imx6sl_phy(mxs_phy)) {
drivers/usb/phy/phy-mxs-usb.c
910
regmap_write(mxs_phy->regmap_anatop,
drivers/usb/phy/phy-mxs-usb.c
912
} else if (is_imx6ul_phy(mxs_phy)) {
drivers/usb/phy/phy-mxs-usb.c
916
if (mxs_phy_get_vbus_status(mxs_phy) && on)
drivers/usb/phy/phy-mxs-usb.c
917
regmap_write(mxs_phy->regmap_anatop, reg, value);
drivers/usb/phy/phy-mxs-usb.c
919
regmap_write(mxs_phy->regmap_anatop, reg, value);
drivers/usb/phy/phy-mxs-usb.c
925
struct mxs_phy *mxs_phy = dev_get_drvdata(dev);
drivers/usb/phy/phy-mxs-usb.c
928
mxs_phy_enable_ldo_in_suspend(mxs_phy, true);
drivers/usb/phy/phy-mxs-usb.c
929
mxs_phy_wakeup_enable(mxs_phy, true);
drivers/usb/phy/phy-mxs-usb.c
937
struct mxs_phy *mxs_phy = dev_get_drvdata(dev);
drivers/usb/phy/phy-mxs-usb.c
940
mxs_phy_enable_ldo_in_suspend(mxs_phy, false);
drivers/usb/phy/phy-mxs-usb.c
941
mxs_phy_wakeup_enable(mxs_phy, false);