Lines Matching full:ctrl
123 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_push_idle() local
125 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_push_idle()
127 reinit_completion(&ctrl->idle_comp); in msm_dp_ctrl_push_idle()
128 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_PUSH_IDLE); in msm_dp_ctrl_push_idle()
130 if (!wait_for_completion_timeout(&ctrl->idle_comp, in msm_dp_ctrl_push_idle()
134 drm_dbg_dp(ctrl->drm_dev, "mainlink off\n"); in msm_dp_ctrl_push_idle()
137 static void msm_dp_ctrl_config_ctrl(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_config_ctrl() argument
140 const u8 *dpcd = ctrl->panel->dpcd; in msm_dp_ctrl_config_ctrl()
145 if (ctrl->panel->msm_dp_mode.out_fmt_is_yuv_420) in msm_dp_ctrl_config_ctrl()
152 tbd = msm_dp_link_get_test_bits_depth(ctrl->link, in msm_dp_ctrl_config_ctrl()
153 ctrl->panel->msm_dp_mode.bpp); in msm_dp_ctrl_config_ctrl()
158 config |= ((ctrl->link->link_params.num_lanes - 1) in msm_dp_ctrl_config_ctrl()
170 if (ctrl->panel->psr_cap.version) in msm_dp_ctrl_config_ctrl()
173 msm_dp_catalog_ctrl_config_ctrl(ctrl->catalog, config); in msm_dp_ctrl_config_ctrl()
176 static void msm_dp_ctrl_configure_source_params(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_configure_source_params() argument
180 msm_dp_catalog_ctrl_lane_mapping(ctrl->catalog); in msm_dp_ctrl_configure_source_params()
181 msm_dp_catalog_setup_peripheral_flush(ctrl->catalog); in msm_dp_ctrl_configure_source_params()
183 msm_dp_ctrl_config_ctrl(ctrl); in msm_dp_ctrl_configure_source_params()
185 tb = msm_dp_link_get_test_bits_depth(ctrl->link, in msm_dp_ctrl_configure_source_params()
186 ctrl->panel->msm_dp_mode.bpp); in msm_dp_ctrl_configure_source_params()
187 cc = msm_dp_link_get_colorimetry_config(ctrl->link); in msm_dp_ctrl_configure_source_params()
188 msm_dp_catalog_ctrl_config_misc(ctrl->catalog, cc, tb); in msm_dp_ctrl_configure_source_params()
189 msm_dp_panel_timing_cfg(ctrl->panel); in msm_dp_ctrl_configure_source_params()
624 static void _dp_ctrl_calc_tu(struct msm_dp_ctrl_private *ctrl, in _dp_ctrl_calc_tu() argument
709 drm_dbg_dp(ctrl->drm_dev, in _dp_ctrl_calc_tu()
745 drm_dbg_dp(ctrl->drm_dev, in _dp_ctrl_calc_tu()
940 drm_dbg_dp(ctrl->drm_dev, "TU: valid_boundary_link: %d\n", in _dp_ctrl_calc_tu()
942 drm_dbg_dp(ctrl->drm_dev, "TU: delay_start_link: %d\n", in _dp_ctrl_calc_tu()
944 drm_dbg_dp(ctrl->drm_dev, "TU: boundary_moderation_en: %d\n", in _dp_ctrl_calc_tu()
946 drm_dbg_dp(ctrl->drm_dev, "TU: valid_lower_boundary_link: %d\n", in _dp_ctrl_calc_tu()
948 drm_dbg_dp(ctrl->drm_dev, "TU: upper_boundary_count: %d\n", in _dp_ctrl_calc_tu()
950 drm_dbg_dp(ctrl->drm_dev, "TU: lower_boundary_count: %d\n", in _dp_ctrl_calc_tu()
952 drm_dbg_dp(ctrl->drm_dev, "TU: tu_size_minus1: %d\n", in _dp_ctrl_calc_tu()
958 static void msm_dp_ctrl_calc_tu_parameters(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_calc_tu_parameters() argument
964 drm_mode = &ctrl->panel->msm_dp_mode.drm_mode; in msm_dp_ctrl_calc_tu_parameters()
966 in.lclk = ctrl->link->link_params.rate / 1000; in msm_dp_ctrl_calc_tu_parameters()
970 in.nlanes = ctrl->link->link_params.num_lanes; in msm_dp_ctrl_calc_tu_parameters()
971 in.bpp = ctrl->panel->msm_dp_mode.bpp; in msm_dp_ctrl_calc_tu_parameters()
972 in.pixel_enc = ctrl->panel->msm_dp_mode.out_fmt_is_yuv_420 ? 420 : 444; in msm_dp_ctrl_calc_tu_parameters()
979 _dp_ctrl_calc_tu(ctrl, &in, tu_table); in msm_dp_ctrl_calc_tu_parameters()
982 static void msm_dp_ctrl_setup_tr_unit(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_setup_tr_unit() argument
989 msm_dp_ctrl_calc_tu_parameters(ctrl, &tu_calc_table); in msm_dp_ctrl_setup_tr_unit()
1005 msm_dp_catalog_ctrl_update_transfer_unit(ctrl->catalog, in msm_dp_ctrl_setup_tr_unit()
1009 static int msm_dp_ctrl_wait4video_ready(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_wait4video_ready() argument
1013 if (!wait_for_completion_timeout(&ctrl->video_comp, in msm_dp_ctrl_wait4video_ready()
1021 static int msm_dp_ctrl_set_vx_px(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_set_vx_px() argument
1024 union phy_configure_opts *phy_opts = &ctrl->phy_opts; in msm_dp_ctrl_set_vx_px()
1030 phy_configure(ctrl->phy, phy_opts); in msm_dp_ctrl_set_vx_px()
1036 static int msm_dp_ctrl_update_vx_px(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_update_vx_px() argument
1038 struct msm_dp_link *link = ctrl->link; in msm_dp_ctrl_update_vx_px()
1045 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_update_vx_px()
1048 ret = msm_dp_ctrl_set_vx_px(ctrl, in msm_dp_ctrl_update_vx_px()
1055 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_update_vx_px()
1062 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_update_vx_px()
1070 lane_cnt = ctrl->link->link_params.num_lanes; in msm_dp_ctrl_update_vx_px()
1075 drm_dbg_dp(ctrl->drm_dev, "sink: p|v=0x%x\n", in msm_dp_ctrl_update_vx_px()
1077 ret = drm_dp_dpcd_write(ctrl->aux, DP_TRAINING_LANE0_SET, in msm_dp_ctrl_update_vx_px()
1085 static bool msm_dp_ctrl_train_pattern_set(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_train_pattern_set() argument
1091 drm_dbg_dp(ctrl->drm_dev, "sink: pattern=%x\n", pattern); in msm_dp_ctrl_train_pattern_set()
1098 ret = drm_dp_dpcd_writeb(ctrl->aux, DP_TRAINING_PATTERN_SET, buf); in msm_dp_ctrl_train_pattern_set()
1102 static int msm_dp_ctrl_read_link_status(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_read_link_status() argument
1107 len = drm_dp_dpcd_read_link_status(ctrl->aux, link_status); in msm_dp_ctrl_read_link_status()
1116 static int msm_dp_ctrl_link_train_1(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_link_train_1() argument
1123 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in msm_dp_ctrl_link_train_1()
1127 ret = msm_dp_catalog_ctrl_set_pattern_state_bit(ctrl->catalog, 1); in msm_dp_ctrl_link_train_1()
1130 msm_dp_ctrl_train_pattern_set(ctrl, DP_TRAINING_PATTERN_1 | in msm_dp_ctrl_link_train_1()
1133 ret = msm_dp_ctrl_update_vx_px(ctrl); in msm_dp_ctrl_link_train_1()
1138 old_v_level = ctrl->link->phy_params.v_level; in msm_dp_ctrl_link_train_1()
1140 drm_dp_link_train_clock_recovery_delay(ctrl->aux, ctrl->panel->dpcd); in msm_dp_ctrl_link_train_1()
1142 ret = msm_dp_ctrl_read_link_status(ctrl, link_status); in msm_dp_ctrl_link_train_1()
1147 ctrl->link->link_params.num_lanes)) { in msm_dp_ctrl_link_train_1()
1151 if (ctrl->link->phy_params.v_level >= in msm_dp_ctrl_link_train_1()
1157 if (old_v_level != ctrl->link->phy_params.v_level) { in msm_dp_ctrl_link_train_1()
1159 old_v_level = ctrl->link->phy_params.v_level; in msm_dp_ctrl_link_train_1()
1162 msm_dp_link_adjust_levels(ctrl->link, link_status); in msm_dp_ctrl_link_train_1()
1163 ret = msm_dp_ctrl_update_vx_px(ctrl); in msm_dp_ctrl_link_train_1()
1172 static int msm_dp_ctrl_link_rate_down_shift(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_link_rate_down_shift() argument
1176 switch (ctrl->link->link_params.rate) { in msm_dp_ctrl_link_rate_down_shift()
1178 ctrl->link->link_params.rate = 540000; in msm_dp_ctrl_link_rate_down_shift()
1181 ctrl->link->link_params.rate = 270000; in msm_dp_ctrl_link_rate_down_shift()
1184 ctrl->link->link_params.rate = 162000; in msm_dp_ctrl_link_rate_down_shift()
1193 drm_dbg_dp(ctrl->drm_dev, "new rate=0x%x\n", in msm_dp_ctrl_link_rate_down_shift()
1194 ctrl->link->link_params.rate); in msm_dp_ctrl_link_rate_down_shift()
1200 static int msm_dp_ctrl_link_lane_down_shift(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_link_lane_down_shift() argument
1203 if (ctrl->link->link_params.num_lanes == 1) in msm_dp_ctrl_link_lane_down_shift()
1206 ctrl->link->link_params.num_lanes /= 2; in msm_dp_ctrl_link_lane_down_shift()
1207 ctrl->link->link_params.rate = ctrl->panel->link_info.rate; in msm_dp_ctrl_link_lane_down_shift()
1209 ctrl->link->phy_params.p_level = 0; in msm_dp_ctrl_link_lane_down_shift()
1210 ctrl->link->phy_params.v_level = 0; in msm_dp_ctrl_link_lane_down_shift()
1215 static void msm_dp_ctrl_clear_training_pattern(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_clear_training_pattern() argument
1217 msm_dp_ctrl_train_pattern_set(ctrl, DP_TRAINING_PATTERN_DISABLE); in msm_dp_ctrl_clear_training_pattern()
1218 drm_dp_link_train_channel_eq_delay(ctrl->aux, ctrl->panel->dpcd); in msm_dp_ctrl_clear_training_pattern()
1221 static int msm_dp_ctrl_link_train_2(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_link_train_2() argument
1230 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in msm_dp_ctrl_link_train_2()
1234 if (drm_dp_tps4_supported(ctrl->panel->dpcd)) { in msm_dp_ctrl_link_train_2()
1237 } else if (drm_dp_tps3_supported(ctrl->panel->dpcd)) { in msm_dp_ctrl_link_train_2()
1245 ret = msm_dp_catalog_ctrl_set_pattern_state_bit(ctrl->catalog, state_ctrl_bit); in msm_dp_ctrl_link_train_2()
1249 msm_dp_ctrl_train_pattern_set(ctrl, pattern); in msm_dp_ctrl_link_train_2()
1252 drm_dp_link_train_channel_eq_delay(ctrl->aux, ctrl->panel->dpcd); in msm_dp_ctrl_link_train_2()
1254 ret = msm_dp_ctrl_read_link_status(ctrl, link_status); in msm_dp_ctrl_link_train_2()
1259 ctrl->link->link_params.num_lanes)) { in msm_dp_ctrl_link_train_2()
1263 msm_dp_link_adjust_levels(ctrl->link, link_status); in msm_dp_ctrl_link_train_2()
1264 ret = msm_dp_ctrl_update_vx_px(ctrl); in msm_dp_ctrl_link_train_2()
1273 static int msm_dp_ctrl_link_train(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_link_train() argument
1277 const u8 *dpcd = ctrl->panel->dpcd; in msm_dp_ctrl_link_train()
1282 msm_dp_ctrl_config_ctrl(ctrl); in msm_dp_ctrl_link_train()
1284 link_info.num_lanes = ctrl->link->link_params.num_lanes; in msm_dp_ctrl_link_train()
1285 link_info.rate = ctrl->link->link_params.rate; in msm_dp_ctrl_link_train()
1288 msm_dp_link_reset_phy_params_vx_px(ctrl->link); in msm_dp_ctrl_link_train()
1290 msm_dp_aux_link_configure(ctrl->aux, &link_info); in msm_dp_ctrl_link_train()
1296 drm_dp_dpcd_write(ctrl->aux, DP_DOWNSPREAD_CTRL, encoding, 2); in msm_dp_ctrl_link_train()
1300 drm_dp_dpcd_write(ctrl->aux, DP_EDP_CONFIGURATION_SET, in msm_dp_ctrl_link_train()
1304 ret = msm_dp_ctrl_link_train_1(ctrl, training_step); in msm_dp_ctrl_link_train()
1311 drm_dbg_dp(ctrl->drm_dev, "link training #1 successful\n"); in msm_dp_ctrl_link_train()
1313 ret = msm_dp_ctrl_link_train_2(ctrl, training_step); in msm_dp_ctrl_link_train()
1320 drm_dbg_dp(ctrl->drm_dev, "link training #2 successful\n"); in msm_dp_ctrl_link_train()
1323 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in msm_dp_ctrl_link_train()
1328 static int msm_dp_ctrl_setup_main_link(struct msm_dp_ctrl_private *ctrl, in msm_dp_ctrl_setup_main_link() argument
1333 msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, true); in msm_dp_ctrl_setup_main_link()
1335 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) in msm_dp_ctrl_setup_main_link()
1344 ret = msm_dp_ctrl_link_train(ctrl, training_step); in msm_dp_ctrl_setup_main_link()
1351 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_core_clk_enable() local
1354 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_core_clk_enable()
1356 if (ctrl->core_clks_on) { in msm_dp_ctrl_core_clk_enable()
1357 drm_dbg_dp(ctrl->drm_dev, "core clks already enabled\n"); in msm_dp_ctrl_core_clk_enable()
1361 ret = clk_bulk_prepare_enable(ctrl->num_core_clks, ctrl->core_clks); in msm_dp_ctrl_core_clk_enable()
1365 ctrl->core_clks_on = true; in msm_dp_ctrl_core_clk_enable()
1367 drm_dbg_dp(ctrl->drm_dev, "enable core clocks \n"); in msm_dp_ctrl_core_clk_enable()
1368 drm_dbg_dp(ctrl->drm_dev, "stream_clks:%s link_clks:%s core_clks:%s\n", in msm_dp_ctrl_core_clk_enable()
1369 ctrl->stream_clks_on ? "on" : "off", in msm_dp_ctrl_core_clk_enable()
1370 ctrl->link_clks_on ? "on" : "off", in msm_dp_ctrl_core_clk_enable()
1371 ctrl->core_clks_on ? "on" : "off"); in msm_dp_ctrl_core_clk_enable()
1378 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_core_clk_disable() local
1380 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_core_clk_disable()
1382 clk_bulk_disable_unprepare(ctrl->num_core_clks, ctrl->core_clks); in msm_dp_ctrl_core_clk_disable()
1384 ctrl->core_clks_on = false; in msm_dp_ctrl_core_clk_disable()
1386 drm_dbg_dp(ctrl->drm_dev, "disable core clocks \n"); in msm_dp_ctrl_core_clk_disable()
1387 drm_dbg_dp(ctrl->drm_dev, "stream_clks:%s link_clks:%s core_clks:%s\n", in msm_dp_ctrl_core_clk_disable()
1388 ctrl->stream_clks_on ? "on" : "off", in msm_dp_ctrl_core_clk_disable()
1389 ctrl->link_clks_on ? "on" : "off", in msm_dp_ctrl_core_clk_disable()
1390 ctrl->core_clks_on ? "on" : "off"); in msm_dp_ctrl_core_clk_disable()
1395 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_link_clk_enable() local
1398 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_link_clk_enable()
1400 if (ctrl->link_clks_on) { in msm_dp_ctrl_link_clk_enable()
1401 drm_dbg_dp(ctrl->drm_dev, "links clks already enabled\n"); in msm_dp_ctrl_link_clk_enable()
1405 if (!ctrl->core_clks_on) { in msm_dp_ctrl_link_clk_enable()
1406 drm_dbg_dp(ctrl->drm_dev, "Enable core clks before link clks\n"); in msm_dp_ctrl_link_clk_enable()
1411 ret = clk_bulk_prepare_enable(ctrl->num_link_clks, ctrl->link_clks); in msm_dp_ctrl_link_clk_enable()
1415 ctrl->link_clks_on = true; in msm_dp_ctrl_link_clk_enable()
1417 drm_dbg_dp(ctrl->drm_dev, "enable link clocks\n"); in msm_dp_ctrl_link_clk_enable()
1418 drm_dbg_dp(ctrl->drm_dev, "stream_clks:%s link_clks:%s core_clks:%s\n", in msm_dp_ctrl_link_clk_enable()
1419 ctrl->stream_clks_on ? "on" : "off", in msm_dp_ctrl_link_clk_enable()
1420 ctrl->link_clks_on ? "on" : "off", in msm_dp_ctrl_link_clk_enable()
1421 ctrl->core_clks_on ? "on" : "off"); in msm_dp_ctrl_link_clk_enable()
1428 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_link_clk_disable() local
1430 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_link_clk_disable()
1432 clk_bulk_disable_unprepare(ctrl->num_link_clks, ctrl->link_clks); in msm_dp_ctrl_link_clk_disable()
1434 ctrl->link_clks_on = false; in msm_dp_ctrl_link_clk_disable()
1436 drm_dbg_dp(ctrl->drm_dev, "disabled link clocks\n"); in msm_dp_ctrl_link_clk_disable()
1437 drm_dbg_dp(ctrl->drm_dev, "stream_clks:%s link_clks:%s core_clks:%s\n", in msm_dp_ctrl_link_clk_disable()
1438 ctrl->stream_clks_on ? "on" : "off", in msm_dp_ctrl_link_clk_disable()
1439 ctrl->link_clks_on ? "on" : "off", in msm_dp_ctrl_link_clk_disable()
1440 ctrl->core_clks_on ? "on" : "off"); in msm_dp_ctrl_link_clk_disable()
1443 static int msm_dp_ctrl_enable_mainlink_clocks(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_enable_mainlink_clocks() argument
1446 struct phy *phy = ctrl->phy; in msm_dp_ctrl_enable_mainlink_clocks()
1447 const u8 *dpcd = ctrl->panel->dpcd; in msm_dp_ctrl_enable_mainlink_clocks()
1449 ctrl->phy_opts.dp.lanes = ctrl->link->link_params.num_lanes; in msm_dp_ctrl_enable_mainlink_clocks()
1450 ctrl->phy_opts.dp.link_rate = ctrl->link->link_params.rate / 100; in msm_dp_ctrl_enable_mainlink_clocks()
1451 ctrl->phy_opts.dp.ssc = drm_dp_max_downspread(dpcd); in msm_dp_ctrl_enable_mainlink_clocks()
1453 phy_configure(phy, &ctrl->phy_opts); in msm_dp_ctrl_enable_mainlink_clocks()
1456 dev_pm_opp_set_rate(ctrl->dev, ctrl->link->link_params.rate * 1000); in msm_dp_ctrl_enable_mainlink_clocks()
1457 ret = msm_dp_ctrl_link_clk_enable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_enable_mainlink_clocks()
1461 drm_dbg_dp(ctrl->drm_dev, "link rate=%d\n", ctrl->link->link_params.rate); in msm_dp_ctrl_enable_mainlink_clocks()
1468 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_reset_irq_ctrl() local
1470 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_reset_irq_ctrl()
1472 msm_dp_catalog_ctrl_reset(ctrl->catalog); in msm_dp_ctrl_reset_irq_ctrl()
1480 msm_dp_catalog_ctrl_enable_irq(ctrl->catalog, enable); in msm_dp_ctrl_reset_irq_ctrl()
1486 struct msm_dp_ctrl_private *ctrl = container_of(msm_dp_ctrl, in msm_dp_ctrl_config_psr() local
1489 if (!ctrl->panel->psr_cap.version) in msm_dp_ctrl_config_psr()
1492 msm_dp_catalog_ctrl_config_psr(ctrl->catalog); in msm_dp_ctrl_config_psr()
1495 drm_dp_dpcd_write(ctrl->aux, DP_PSR_EN_CFG, &cfg, 1); in msm_dp_ctrl_config_psr()
1500 struct msm_dp_ctrl_private *ctrl = container_of(msm_dp_ctrl, in msm_dp_ctrl_set_psr() local
1503 if (!ctrl->panel->psr_cap.version) in msm_dp_ctrl_set_psr()
1517 reinit_completion(&ctrl->psr_op_comp); in msm_dp_ctrl_set_psr()
1518 msm_dp_catalog_ctrl_set_psr(ctrl->catalog, true); in msm_dp_ctrl_set_psr()
1520 if (!wait_for_completion_timeout(&ctrl->psr_op_comp, in msm_dp_ctrl_set_psr()
1523 msm_dp_catalog_ctrl_set_psr(ctrl->catalog, false); in msm_dp_ctrl_set_psr()
1528 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in msm_dp_ctrl_set_psr()
1530 msm_dp_catalog_ctrl_psr_mainlink_enable(ctrl->catalog, false); in msm_dp_ctrl_set_psr()
1532 msm_dp_catalog_ctrl_psr_mainlink_enable(ctrl->catalog, true); in msm_dp_ctrl_set_psr()
1534 msm_dp_catalog_ctrl_set_psr(ctrl->catalog, false); in msm_dp_ctrl_set_psr()
1535 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_SEND_VIDEO); in msm_dp_ctrl_set_psr()
1536 msm_dp_ctrl_wait4video_ready(ctrl); in msm_dp_ctrl_set_psr()
1537 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in msm_dp_ctrl_set_psr()
1543 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_phy_init() local
1546 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_phy_init()
1547 phy = ctrl->phy; in msm_dp_ctrl_phy_init()
1549 msm_dp_catalog_ctrl_phy_reset(ctrl->catalog); in msm_dp_ctrl_phy_init()
1552 drm_dbg_dp(ctrl->drm_dev, "phy=%p init=%d power_on=%d\n", in msm_dp_ctrl_phy_init()
1558 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_phy_exit() local
1561 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_phy_exit()
1562 phy = ctrl->phy; in msm_dp_ctrl_phy_exit()
1564 msm_dp_catalog_ctrl_phy_reset(ctrl->catalog); in msm_dp_ctrl_phy_exit()
1566 drm_dbg_dp(ctrl->drm_dev, "phy=%p init=%d power_on=%d\n", in msm_dp_ctrl_phy_exit()
1570 static int msm_dp_ctrl_reinitialize_mainlink(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_reinitialize_mainlink() argument
1572 struct phy *phy = ctrl->phy; in msm_dp_ctrl_reinitialize_mainlink()
1575 msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in msm_dp_ctrl_reinitialize_mainlink()
1576 ctrl->phy_opts.dp.lanes = ctrl->link->link_params.num_lanes; in msm_dp_ctrl_reinitialize_mainlink()
1577 phy_configure(phy, &ctrl->phy_opts); in msm_dp_ctrl_reinitialize_mainlink()
1583 dev_pm_opp_set_rate(ctrl->dev, 0); in msm_dp_ctrl_reinitialize_mainlink()
1585 msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_reinitialize_mainlink()
1591 ret = msm_dp_ctrl_enable_mainlink_clocks(ctrl); in msm_dp_ctrl_reinitialize_mainlink()
1600 static int msm_dp_ctrl_deinitialize_mainlink(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_deinitialize_mainlink() argument
1604 phy = ctrl->phy; in msm_dp_ctrl_deinitialize_mainlink()
1606 msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in msm_dp_ctrl_deinitialize_mainlink()
1608 msm_dp_catalog_ctrl_reset(ctrl->catalog); in msm_dp_ctrl_deinitialize_mainlink()
1610 dev_pm_opp_set_rate(ctrl->dev, 0); in msm_dp_ctrl_deinitialize_mainlink()
1611 msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_deinitialize_mainlink()
1619 drm_dbg_dp(ctrl->drm_dev, "phy=%p init=%d power_on=%d\n", in msm_dp_ctrl_deinitialize_mainlink()
1624 static int msm_dp_ctrl_link_maintenance(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_link_maintenance() argument
1629 msm_dp_ctrl_push_idle(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_link_maintenance()
1631 ctrl->link->phy_params.p_level = 0; in msm_dp_ctrl_link_maintenance()
1632 ctrl->link->phy_params.v_level = 0; in msm_dp_ctrl_link_maintenance()
1634 ret = msm_dp_ctrl_setup_main_link(ctrl, &training_step); in msm_dp_ctrl_link_maintenance()
1638 msm_dp_ctrl_clear_training_pattern(ctrl); in msm_dp_ctrl_link_maintenance()
1640 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_SEND_VIDEO); in msm_dp_ctrl_link_maintenance()
1642 ret = msm_dp_ctrl_wait4video_ready(ctrl); in msm_dp_ctrl_link_maintenance()
1647 static bool msm_dp_ctrl_send_phy_test_pattern(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_send_phy_test_pattern() argument
1651 u32 pattern_requested = ctrl->link->phy_params.phy_test_pattern_sel; in msm_dp_ctrl_send_phy_test_pattern()
1653 drm_dbg_dp(ctrl->drm_dev, "request: 0x%x\n", pattern_requested); in msm_dp_ctrl_send_phy_test_pattern()
1655 if (msm_dp_ctrl_set_vx_px(ctrl, in msm_dp_ctrl_send_phy_test_pattern()
1656 ctrl->link->phy_params.v_level, in msm_dp_ctrl_send_phy_test_pattern()
1657 ctrl->link->phy_params.p_level)) { in msm_dp_ctrl_send_phy_test_pattern()
1661 msm_dp_catalog_ctrl_send_phy_pattern(ctrl->catalog, pattern_requested); in msm_dp_ctrl_send_phy_test_pattern()
1662 msm_dp_ctrl_update_vx_px(ctrl); in msm_dp_ctrl_send_phy_test_pattern()
1663 msm_dp_link_send_test_response(ctrl->link); in msm_dp_ctrl_send_phy_test_pattern()
1665 pattern_sent = msm_dp_catalog_ctrl_read_phy_pattern(ctrl->catalog); in msm_dp_ctrl_send_phy_test_pattern()
1694 drm_dbg_dp(ctrl->drm_dev, "%s: test->0x%x\n", in msm_dp_ctrl_send_phy_test_pattern()
1699 static int msm_dp_ctrl_process_phy_test_request(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_process_phy_test_request() argument
1704 if (!ctrl->link->phy_params.phy_test_pattern_sel) { in msm_dp_ctrl_process_phy_test_request()
1705 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_process_phy_test_request()
1715 msm_dp_ctrl_off(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_process_phy_test_request()
1717 ret = msm_dp_ctrl_on_link(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_process_phy_test_request()
1723 pixel_rate = ctrl->panel->msm_dp_mode.drm_mode.clock; in msm_dp_ctrl_process_phy_test_request()
1724 ret = clk_set_rate(ctrl->pixel_clk, pixel_rate * 1000); in msm_dp_ctrl_process_phy_test_request()
1730 if (ctrl->stream_clks_on) { in msm_dp_ctrl_process_phy_test_request()
1731 drm_dbg_dp(ctrl->drm_dev, "pixel clks already enabled\n"); in msm_dp_ctrl_process_phy_test_request()
1733 ret = clk_prepare_enable(ctrl->pixel_clk); in msm_dp_ctrl_process_phy_test_request()
1738 ctrl->stream_clks_on = true; in msm_dp_ctrl_process_phy_test_request()
1741 msm_dp_ctrl_send_phy_test_pattern(ctrl); in msm_dp_ctrl_process_phy_test_request()
1748 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_handle_sink_request() local
1756 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_handle_sink_request()
1757 sink_request = ctrl->link->sink_request; in msm_dp_ctrl_handle_sink_request()
1760 drm_dbg_dp(ctrl->drm_dev, "PHY_TEST_PATTERN request\n"); in msm_dp_ctrl_handle_sink_request()
1761 if (msm_dp_ctrl_process_phy_test_request(ctrl)) { in msm_dp_ctrl_handle_sink_request()
1768 if (msm_dp_ctrl_link_maintenance(ctrl)) { in msm_dp_ctrl_handle_sink_request()
1775 msm_dp_link_send_test_response(ctrl->link); in msm_dp_ctrl_handle_sink_request()
1776 if (msm_dp_ctrl_link_maintenance(ctrl)) { in msm_dp_ctrl_handle_sink_request()
1802 static bool msm_dp_ctrl_channel_eq_ok(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_channel_eq_ok() argument
1805 int num_lanes = ctrl->link->link_params.num_lanes; in msm_dp_ctrl_channel_eq_ok()
1807 msm_dp_ctrl_read_link_status(ctrl, link_status); in msm_dp_ctrl_channel_eq_ok()
1815 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_on_link() local
1826 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_on_link()
1828 rate = ctrl->panel->link_info.rate; in msm_dp_ctrl_on_link()
1829 pixel_rate = ctrl->panel->msm_dp_mode.drm_mode.clock; in msm_dp_ctrl_on_link()
1831 msm_dp_ctrl_core_clk_enable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_on_link()
1833 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) { in msm_dp_ctrl_on_link()
1834 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_on_link()
1839 ctrl->link->link_params.rate = rate; in msm_dp_ctrl_on_link()
1840 ctrl->link->link_params.num_lanes = in msm_dp_ctrl_on_link()
1841 ctrl->panel->link_info.num_lanes; in msm_dp_ctrl_on_link()
1842 if (ctrl->panel->msm_dp_mode.out_fmt_is_yuv_420) in msm_dp_ctrl_on_link()
1846 drm_dbg_dp(ctrl->drm_dev, "rate=%d, num_lanes=%d, pixel_rate=%lu\n", in msm_dp_ctrl_on_link()
1847 ctrl->link->link_params.rate, ctrl->link->link_params.num_lanes, in msm_dp_ctrl_on_link()
1850 rc = msm_dp_ctrl_enable_mainlink_clocks(ctrl); in msm_dp_ctrl_on_link()
1856 rc = msm_dp_ctrl_setup_main_link(ctrl, &training_step); in msm_dp_ctrl_on_link()
1862 if (!msm_dp_catalog_link_is_connected(ctrl->catalog)) in msm_dp_ctrl_on_link()
1865 msm_dp_ctrl_read_link_status(ctrl, link_status); in msm_dp_ctrl_on_link()
1867 rc = msm_dp_ctrl_link_rate_down_shift(ctrl); in msm_dp_ctrl_on_link()
1870 ctrl->link->link_params.num_lanes)) { in msm_dp_ctrl_on_link()
1875 rc = msm_dp_ctrl_link_lane_down_shift(ctrl); in msm_dp_ctrl_on_link()
1887 if (!msm_dp_catalog_link_is_connected(ctrl->catalog)) in msm_dp_ctrl_on_link()
1890 msm_dp_ctrl_read_link_status(ctrl, link_status); in msm_dp_ctrl_on_link()
1893 ctrl->link->link_params.num_lanes)) in msm_dp_ctrl_on_link()
1894 rc = msm_dp_ctrl_link_rate_down_shift(ctrl); in msm_dp_ctrl_on_link()
1896 rc = msm_dp_ctrl_link_lane_down_shift(ctrl); in msm_dp_ctrl_on_link()
1904 msm_dp_ctrl_clear_training_pattern(ctrl); in msm_dp_ctrl_on_link()
1907 rc = msm_dp_ctrl_reinitialize_mainlink(ctrl); in msm_dp_ctrl_on_link()
1914 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) in msm_dp_ctrl_on_link()
1928 msm_dp_ctrl_clear_training_pattern(ctrl); in msm_dp_ctrl_on_link()
1930 msm_dp_ctrl_deinitialize_mainlink(ctrl); in msm_dp_ctrl_on_link()
1937 static int msm_dp_ctrl_link_retrain(struct msm_dp_ctrl_private *ctrl) in msm_dp_ctrl_link_retrain() argument
1941 return msm_dp_ctrl_setup_main_link(ctrl, &training_step); in msm_dp_ctrl_link_retrain()
1948 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_on_stream() local
1955 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_on_stream()
1957 pixel_rate = pixel_rate_orig = ctrl->panel->msm_dp_mode.drm_mode.clock; in msm_dp_ctrl_on_stream()
1959 if (msm_dp_ctrl->wide_bus_en || ctrl->panel->msm_dp_mode.out_fmt_is_yuv_420) in msm_dp_ctrl_on_stream()
1962 drm_dbg_dp(ctrl->drm_dev, "rate=%d, num_lanes=%d, pixel_rate=%lu\n", in msm_dp_ctrl_on_stream()
1963 ctrl->link->link_params.rate, in msm_dp_ctrl_on_stream()
1964 ctrl->link->link_params.num_lanes, pixel_rate); in msm_dp_ctrl_on_stream()
1966 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_on_stream()
1968 ctrl->core_clks_on, ctrl->link_clks_on, ctrl->stream_clks_on); in msm_dp_ctrl_on_stream()
1970 if (!ctrl->link_clks_on) { /* link clk is off */ in msm_dp_ctrl_on_stream()
1971 ret = msm_dp_ctrl_enable_mainlink_clocks(ctrl); in msm_dp_ctrl_on_stream()
1978 ret = clk_set_rate(ctrl->pixel_clk, pixel_rate * 1000); in msm_dp_ctrl_on_stream()
1984 if (ctrl->stream_clks_on) { in msm_dp_ctrl_on_stream()
1985 drm_dbg_dp(ctrl->drm_dev, "pixel clks already enabled\n"); in msm_dp_ctrl_on_stream()
1987 ret = clk_prepare_enable(ctrl->pixel_clk); in msm_dp_ctrl_on_stream()
1992 ctrl->stream_clks_on = true; in msm_dp_ctrl_on_stream()
1995 if (force_link_train || !msm_dp_ctrl_channel_eq_ok(ctrl)) in msm_dp_ctrl_on_stream()
1996 msm_dp_ctrl_link_retrain(ctrl); in msm_dp_ctrl_on_stream()
1999 msm_dp_ctrl_clear_training_pattern(ctrl); in msm_dp_ctrl_on_stream()
2005 reinit_completion(&ctrl->video_comp); in msm_dp_ctrl_on_stream()
2007 msm_dp_ctrl_configure_source_params(ctrl); in msm_dp_ctrl_on_stream()
2009 msm_dp_catalog_ctrl_config_msa(ctrl->catalog, in msm_dp_ctrl_on_stream()
2010 ctrl->link->link_params.rate, in msm_dp_ctrl_on_stream()
2012 ctrl->panel->msm_dp_mode.out_fmt_is_yuv_420); in msm_dp_ctrl_on_stream()
2014 msm_dp_ctrl_setup_tr_unit(ctrl); in msm_dp_ctrl_on_stream()
2016 msm_dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_SEND_VIDEO); in msm_dp_ctrl_on_stream()
2018 ret = msm_dp_ctrl_wait4video_ready(ctrl); in msm_dp_ctrl_on_stream()
2022 mainlink_ready = msm_dp_catalog_ctrl_mainlink_ready(ctrl->catalog); in msm_dp_ctrl_on_stream()
2023 drm_dbg_dp(ctrl->drm_dev, in msm_dp_ctrl_on_stream()
2032 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_off_link_stream() local
2035 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_off_link_stream()
2036 phy = ctrl->phy; in msm_dp_ctrl_off_link_stream()
2038 msm_dp_catalog_panel_disable_vsc_sdp(ctrl->catalog); in msm_dp_ctrl_off_link_stream()
2041 msm_dp_link_psm_config(ctrl->link, &ctrl->panel->link_info, true); in msm_dp_ctrl_off_link_stream()
2043 msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in msm_dp_ctrl_off_link_stream()
2045 if (ctrl->stream_clks_on) { in msm_dp_ctrl_off_link_stream()
2046 clk_disable_unprepare(ctrl->pixel_clk); in msm_dp_ctrl_off_link_stream()
2047 ctrl->stream_clks_on = false; in msm_dp_ctrl_off_link_stream()
2050 dev_pm_opp_set_rate(ctrl->dev, 0); in msm_dp_ctrl_off_link_stream()
2051 msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_off_link_stream()
2059 drm_dbg_dp(ctrl->drm_dev, "phy=%p init=%d power_on=%d\n", in msm_dp_ctrl_off_link_stream()
2065 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_off_link() local
2068 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_off_link()
2069 phy = ctrl->phy; in msm_dp_ctrl_off_link()
2071 msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in msm_dp_ctrl_off_link()
2073 dev_pm_opp_set_rate(ctrl->dev, 0); in msm_dp_ctrl_off_link()
2074 msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_off_link()
2087 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_off() local
2090 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_off()
2091 phy = ctrl->phy; in msm_dp_ctrl_off()
2093 msm_dp_catalog_panel_disable_vsc_sdp(ctrl->catalog); in msm_dp_ctrl_off()
2095 msm_dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in msm_dp_ctrl_off()
2097 msm_dp_catalog_ctrl_reset(ctrl->catalog); in msm_dp_ctrl_off()
2099 if (ctrl->stream_clks_on) { in msm_dp_ctrl_off()
2100 clk_disable_unprepare(ctrl->pixel_clk); in msm_dp_ctrl_off()
2101 ctrl->stream_clks_on = false; in msm_dp_ctrl_off()
2104 dev_pm_opp_set_rate(ctrl->dev, 0); in msm_dp_ctrl_off()
2105 msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_off()
2108 drm_dbg_dp(ctrl->drm_dev, "phy=%p init=%d power_on=%d\n", in msm_dp_ctrl_off()
2114 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_isr() local
2121 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_isr()
2123 if (ctrl->panel->psr_cap.version) { in msm_dp_ctrl_isr()
2124 isr = msm_dp_catalog_ctrl_read_psr_interrupt_status(ctrl->catalog); in msm_dp_ctrl_isr()
2127 complete(&ctrl->psr_op_comp); in msm_dp_ctrl_isr()
2130 drm_dbg_dp(ctrl->drm_dev, "PSR exit done\n"); in msm_dp_ctrl_isr()
2133 drm_dbg_dp(ctrl->drm_dev, "PSR frame update done\n"); in msm_dp_ctrl_isr()
2136 drm_dbg_dp(ctrl->drm_dev, "PSR frame capture done\n"); in msm_dp_ctrl_isr()
2139 isr = msm_dp_catalog_ctrl_get_interrupt(ctrl->catalog); in msm_dp_ctrl_isr()
2143 drm_dbg_dp(ctrl->drm_dev, "dp_video_ready\n"); in msm_dp_ctrl_isr()
2144 complete(&ctrl->video_comp); in msm_dp_ctrl_isr()
2149 drm_dbg_dp(ctrl->drm_dev, "idle_patterns_sent\n"); in msm_dp_ctrl_isr()
2150 complete(&ctrl->idle_comp); in msm_dp_ctrl_isr()
2169 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_clk_init() local
2173 ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl); in msm_dp_ctrl_clk_init()
2174 dev = ctrl->dev; in msm_dp_ctrl_clk_init()
2176 ctrl->num_core_clks = ARRAY_SIZE(core_clks); in msm_dp_ctrl_clk_init()
2177 ctrl->core_clks = devm_kcalloc(dev, ctrl->num_core_clks, sizeof(*ctrl->core_clks), GFP_KERNEL); in msm_dp_ctrl_clk_init()
2178 if (!ctrl->core_clks) in msm_dp_ctrl_clk_init()
2181 for (i = 0; i < ctrl->num_core_clks; i++) in msm_dp_ctrl_clk_init()
2182 ctrl->core_clks[i].id = core_clks[i]; in msm_dp_ctrl_clk_init()
2184 rc = devm_clk_bulk_get(dev, ctrl->num_core_clks, ctrl->core_clks); in msm_dp_ctrl_clk_init()
2188 ctrl->num_link_clks = ARRAY_SIZE(ctrl_clks); in msm_dp_ctrl_clk_init()
2189 ctrl->link_clks = devm_kcalloc(dev, ctrl->num_link_clks, sizeof(*ctrl->link_clks), GFP_KERNEL); in msm_dp_ctrl_clk_init()
2190 if (!ctrl->link_clks) in msm_dp_ctrl_clk_init()
2193 for (i = 0; i < ctrl->num_link_clks; i++) in msm_dp_ctrl_clk_init()
2194 ctrl->link_clks[i].id = ctrl_clks[i]; in msm_dp_ctrl_clk_init()
2196 rc = devm_clk_bulk_get(dev, ctrl->num_link_clks, ctrl->link_clks); in msm_dp_ctrl_clk_init()
2200 ctrl->pixel_clk = devm_clk_get(dev, "stream_pixel"); in msm_dp_ctrl_clk_init()
2201 if (IS_ERR(ctrl->pixel_clk)) in msm_dp_ctrl_clk_init()
2202 return PTR_ERR(ctrl->pixel_clk); in msm_dp_ctrl_clk_init()
2212 struct msm_dp_ctrl_private *ctrl; in msm_dp_ctrl_get() local
2221 ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL); in msm_dp_ctrl_get()
2222 if (!ctrl) { in msm_dp_ctrl_get()
2239 init_completion(&ctrl->idle_comp); in msm_dp_ctrl_get()
2240 init_completion(&ctrl->psr_op_comp); in msm_dp_ctrl_get()
2241 init_completion(&ctrl->video_comp); in msm_dp_ctrl_get()
2244 ctrl->panel = panel; in msm_dp_ctrl_get()
2245 ctrl->aux = aux; in msm_dp_ctrl_get()
2246 ctrl->link = link; in msm_dp_ctrl_get()
2247 ctrl->catalog = catalog; in msm_dp_ctrl_get()
2248 ctrl->dev = dev; in msm_dp_ctrl_get()
2249 ctrl->phy = phy; in msm_dp_ctrl_get()
2251 ret = msm_dp_ctrl_clk_init(&ctrl->msm_dp_ctrl); in msm_dp_ctrl_get()
2257 return &ctrl->msm_dp_ctrl; in msm_dp_ctrl_get()