Lines Matching refs:rtk_phy
115 struct rtk_phy { struct
262 static void update_dc_disconnect_level_at_page0(struct rtk_phy *rtk_phy, in update_dc_disconnect_level_at_page0() argument
274 phy_cfg = rtk_phy->phy_cfg; in update_dc_disconnect_level_at_page0()
299 dev_err(rtk_phy->dev, in update_dc_disconnect_level_at_page0()
335 static void update_dc_disconnect_level_at_page1(struct rtk_phy *rtk_phy, in update_dc_disconnect_level_at_page1() argument
346 phy_cfg = rtk_phy->phy_cfg; in update_dc_disconnect_level_at_page1()
370 dev_err(rtk_phy->dev, in update_dc_disconnect_level_at_page1()
375 static void update_dc_disconnect_level(struct rtk_phy *rtk_phy, in update_dc_disconnect_level() argument
378 struct phy_cfg *phy_cfg = rtk_phy->phy_cfg; in update_dc_disconnect_level()
381 update_dc_disconnect_level_at_page0(rtk_phy, phy_parameter, update); in update_dc_disconnect_level()
383 update_dc_disconnect_level_at_page1(rtk_phy, phy_parameter, update); in update_dc_disconnect_level()
415 static void update_dc_driving_level(struct rtk_phy *rtk_phy, in update_dc_driving_level() argument
422 phy_cfg = rtk_phy->phy_cfg; in update_dc_driving_level()
438 dev_dbg(rtk_phy->dev, "%s driving_level=%d => dts driving_level=%d\n", in update_dc_driving_level()
450 static void update_hs_clk_select(struct rtk_phy *rtk_phy, in update_hs_clk_select() argument
456 phy_cfg = rtk_phy->phy_cfg; in update_hs_clk_select()
470 static void do_rtk_phy_toggle(struct rtk_phy *rtk_phy, in do_rtk_phy_toggle() argument
480 phy_cfg = rtk_phy->phy_cfg; in do_rtk_phy_toggle()
481 phy_parameter = &((struct phy_parameter *)rtk_phy->phy_parameter)[index]; in do_rtk_phy_toggle()
539 update_dc_disconnect_level(rtk_phy, phy_parameter, false); in do_rtk_phy_toggle()
554 update_dc_disconnect_level(rtk_phy, phy_parameter, true); in do_rtk_phy_toggle()
560 static int do_rtk_phy_init(struct rtk_phy *rtk_phy, int index) in do_rtk_phy_init() argument
568 phy_cfg = rtk_phy->phy_cfg; in do_rtk_phy_init()
569 phy_parameter = &((struct phy_parameter *)rtk_phy->phy_parameter)[index]; in do_rtk_phy_init()
573 dev_dbg(rtk_phy->dev, "%s phy#%d use default parameter\n", in do_rtk_phy_init()
591 dev_err(rtk_phy->dev, in do_rtk_phy_init()
611 dev_err(rtk_phy->dev, in do_rtk_phy_init()
634 dev_err(rtk_phy->dev, in do_rtk_phy_init()
642 do_rtk_phy_toggle(rtk_phy, index, false); in do_rtk_phy_init()
649 struct rtk_phy *rtk_phy = phy_get_drvdata(phy); in rtk_phy_init() local
653 if (!rtk_phy) in rtk_phy_init()
656 for (i = 0; i < rtk_phy->num_phy; i++) in rtk_phy_init()
657 ret = do_rtk_phy_init(rtk_phy, i); in rtk_phy_init()
659 dev_dbg(rtk_phy->dev, "Initialized RTK USB 2.0 PHY (take %dms)\n", in rtk_phy_init()
669 static void rtk_phy_toggle(struct rtk_phy *rtk_phy, bool connect, int port) in rtk_phy_toggle() argument
673 if (index > rtk_phy->num_phy) { in rtk_phy_toggle()
674 dev_err(rtk_phy->dev, "%s: The port=%d is not in usb phy (num_phy=%d)\n", in rtk_phy_toggle()
675 __func__, index, rtk_phy->num_phy); in rtk_phy_toggle()
679 do_rtk_phy_toggle(rtk_phy, index, connect); in rtk_phy_toggle()
684 struct rtk_phy *rtk_phy = phy_get_drvdata(phy); in rtk_phy_connect() local
686 dev_dbg(rtk_phy->dev, "%s port=%d\n", __func__, port); in rtk_phy_connect()
687 rtk_phy_toggle(rtk_phy, true, port); in rtk_phy_connect()
694 struct rtk_phy *rtk_phy = phy_get_drvdata(phy); in rtk_phy_disconnect() local
696 dev_dbg(rtk_phy->dev, "%s port=%d\n", __func__, port); in rtk_phy_disconnect()
697 rtk_phy_toggle(rtk_phy, false, port); in rtk_phy_disconnect()
724 struct rtk_phy *rtk_phy = s->private; in rtk_usb2_parameter_show() local
728 phy_cfg = rtk_phy->phy_cfg; in rtk_usb2_parameter_show()
756 for (index = 0; index < rtk_phy->num_phy; index++) { in rtk_usb2_parameter_show()
761 phy_parameter = &((struct phy_parameter *)rtk_phy->phy_parameter)[index]; in rtk_usb2_parameter_show()
846 static inline void create_debug_files(struct rtk_phy *rtk_phy) in create_debug_files() argument
854 rtk_phy->debug_dir = debugfs_create_dir(dev_name(rtk_phy->dev), in create_debug_files()
857 debugfs_create_file("parameter", 0444, rtk_phy->debug_dir, rtk_phy, in create_debug_files()
861 static inline void remove_debug_files(struct rtk_phy *rtk_phy) in remove_debug_files() argument
863 debugfs_remove_recursive(rtk_phy->debug_dir); in remove_debug_files()
866 static inline void create_debug_files(struct rtk_phy *rtk_phy) { } in create_debug_files() argument
867 static inline void remove_debug_files(struct rtk_phy *rtk_phy) { } in remove_debug_files() argument
870 static int get_phy_data_by_efuse(struct rtk_phy *rtk_phy, in get_phy_data_by_efuse() argument
873 struct phy_cfg *phy_cfg = rtk_phy->phy_cfg; in get_phy_data_by_efuse()
884 cell = nvmem_cell_get(rtk_phy->dev, "usb-dc-cal"); in get_phy_data_by_efuse()
886 dev_dbg(rtk_phy->dev, "%s no usb-dc-cal: %ld\n", in get_phy_data_by_efuse()
910 dev_dbg(rtk_phy->dev, "For groot IC we need a workaround to adjust efuse_usb_dc_cal\n"); in get_phy_data_by_efuse()
926 cell = nvmem_cell_get(rtk_phy->dev, "usb-dc-dis"); in get_phy_data_by_efuse()
928 dev_dbg(rtk_phy->dev, "%s no usb-dc-dis: %ld\n", in get_phy_data_by_efuse()
958 static int parse_phy_data(struct rtk_phy *rtk_phy) in parse_phy_data() argument
960 struct device *dev = rtk_phy->dev; in parse_phy_data()
966 rtk_phy->phy_parameter = devm_kzalloc(dev, sizeof(struct phy_parameter) * in parse_phy_data()
967 rtk_phy->num_phy, GFP_KERNEL); in parse_phy_data()
968 if (!rtk_phy->phy_parameter) in parse_phy_data()
971 for (index = 0; index < rtk_phy->num_phy; index++) { in parse_phy_data()
972 phy_parameter = &((struct phy_parameter *)rtk_phy->phy_parameter)[index]; in parse_phy_data()
995 get_phy_data_by_efuse(rtk_phy, phy_parameter, index); in parse_phy_data()
997 update_dc_driving_level(rtk_phy, phy_parameter); in parse_phy_data()
999 update_hs_clk_select(rtk_phy, phy_parameter); in parse_phy_data()
1007 struct rtk_phy *rtk_phy; in rtk_usb2phy_probe() local
1020 rtk_phy = devm_kzalloc(dev, sizeof(*rtk_phy), GFP_KERNEL); in rtk_usb2phy_probe()
1021 if (!rtk_phy) in rtk_usb2phy_probe()
1024 rtk_phy->dev = &pdev->dev; in rtk_usb2phy_probe()
1025 rtk_phy->phy_cfg = devm_kzalloc(dev, sizeof(*phy_cfg), GFP_KERNEL); in rtk_usb2phy_probe()
1026 if (!rtk_phy->phy_cfg) in rtk_usb2phy_probe()
1029 memcpy(rtk_phy->phy_cfg, phy_cfg, sizeof(*phy_cfg)); in rtk_usb2phy_probe()
1031 rtk_phy->num_phy = phy_cfg->num_phy; in rtk_usb2phy_probe()
1033 ret = parse_phy_data(rtk_phy); in rtk_usb2phy_probe()
1037 platform_set_drvdata(pdev, rtk_phy); in rtk_usb2phy_probe()
1039 generic_phy = devm_phy_create(rtk_phy->dev, NULL, &ops); in rtk_usb2phy_probe()
1043 phy_set_drvdata(generic_phy, rtk_phy); in rtk_usb2phy_probe()
1045 phy_provider = devm_of_phy_provider_register(rtk_phy->dev, in rtk_usb2phy_probe()
1050 create_debug_files(rtk_phy); in rtk_usb2phy_probe()
1058 struct rtk_phy *rtk_phy = platform_get_drvdata(pdev); in rtk_usb2phy_remove() local
1060 remove_debug_files(rtk_phy); in rtk_usb2phy_remove()