Lines Matching full:ctrl
105 struct dp_ctrl_private *ctrl; in dp_ctrl_push_idle() local
107 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_push_idle()
109 reinit_completion(&ctrl->idle_comp); in dp_ctrl_push_idle()
110 dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_PUSH_IDLE); in dp_ctrl_push_idle()
112 if (!wait_for_completion_timeout(&ctrl->idle_comp, in dp_ctrl_push_idle()
119 static void dp_ctrl_config_ctrl(struct dp_ctrl_private *ctrl) in dp_ctrl_config_ctrl() argument
122 u8 *dpcd = ctrl->panel->dpcd; in dp_ctrl_config_ctrl()
131 tbd = dp_link_get_test_bits_depth(ctrl->link, in dp_ctrl_config_ctrl()
132 ctrl->panel->dp_mode.bpp); in dp_ctrl_config_ctrl()
142 config |= ((ctrl->link->link_params.num_lanes - 1) in dp_ctrl_config_ctrl()
154 dp_catalog_ctrl_config_ctrl(ctrl->catalog, config); in dp_ctrl_config_ctrl()
157 static void dp_ctrl_configure_source_params(struct dp_ctrl_private *ctrl) in dp_ctrl_configure_source_params() argument
161 dp_catalog_ctrl_lane_mapping(ctrl->catalog); in dp_ctrl_configure_source_params()
162 dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, true); in dp_ctrl_configure_source_params()
164 dp_ctrl_config_ctrl(ctrl); in dp_ctrl_configure_source_params()
166 tb = dp_link_get_test_bits_depth(ctrl->link, in dp_ctrl_configure_source_params()
167 ctrl->panel->dp_mode.bpp); in dp_ctrl_configure_source_params()
168 cc = dp_link_get_colorimetry_config(ctrl->link); in dp_ctrl_configure_source_params()
169 dp_catalog_ctrl_config_misc(ctrl->catalog, cc, tb); in dp_ctrl_configure_source_params()
170 dp_panel_timing_cfg(ctrl->panel); in dp_ctrl_configure_source_params()
935 static void dp_ctrl_calc_tu_parameters(struct dp_ctrl_private *ctrl, in dp_ctrl_calc_tu_parameters() argument
941 drm_mode = &ctrl->panel->dp_mode.drm_mode; in dp_ctrl_calc_tu_parameters()
943 in.lclk = ctrl->link->link_params.rate / 1000; in dp_ctrl_calc_tu_parameters()
947 in.nlanes = ctrl->link->link_params.num_lanes; in dp_ctrl_calc_tu_parameters()
948 in.bpp = ctrl->panel->dp_mode.bpp; in dp_ctrl_calc_tu_parameters()
959 static void dp_ctrl_setup_tr_unit(struct dp_ctrl_private *ctrl) in dp_ctrl_setup_tr_unit() argument
966 dp_ctrl_calc_tu_parameters(ctrl, &tu_calc_table); in dp_ctrl_setup_tr_unit()
982 dp_catalog_ctrl_update_transfer_unit(ctrl->catalog, in dp_ctrl_setup_tr_unit()
986 static int dp_ctrl_wait4video_ready(struct dp_ctrl_private *ctrl) in dp_ctrl_wait4video_ready() argument
990 if (!wait_for_completion_timeout(&ctrl->video_comp, in dp_ctrl_wait4video_ready()
998 static int dp_ctrl_update_vx_px(struct dp_ctrl_private *ctrl) in dp_ctrl_update_vx_px() argument
1000 struct dp_link *link = ctrl->link; in dp_ctrl_update_vx_px()
1009 ret = dp_catalog_ctrl_update_vx_px(ctrl->catalog, in dp_ctrl_update_vx_px()
1029 lane_cnt = ctrl->link->link_params.num_lanes; in dp_ctrl_update_vx_px()
1036 ret = drm_dp_dpcd_write(ctrl->aux, DP_TRAINING_LANE0_SET, in dp_ctrl_update_vx_px()
1044 static bool dp_ctrl_train_pattern_set(struct dp_ctrl_private *ctrl, in dp_ctrl_train_pattern_set() argument
1057 ret = drm_dp_dpcd_writeb(ctrl->aux, DP_TRAINING_PATTERN_SET, buf); in dp_ctrl_train_pattern_set()
1061 static int dp_ctrl_read_link_status(struct dp_ctrl_private *ctrl, in dp_ctrl_read_link_status() argument
1066 len = drm_dp_dpcd_read_link_status(ctrl->aux, link_status); in dp_ctrl_read_link_status()
1075 static int dp_ctrl_link_train_1(struct dp_ctrl_private *ctrl, in dp_ctrl_link_train_1() argument
1082 dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in dp_ctrl_link_train_1()
1086 ret = dp_catalog_ctrl_set_pattern(ctrl->catalog, DP_TRAINING_PATTERN_1); in dp_ctrl_link_train_1()
1089 dp_ctrl_train_pattern_set(ctrl, DP_TRAINING_PATTERN_1 | in dp_ctrl_link_train_1()
1092 ret = dp_ctrl_update_vx_px(ctrl); in dp_ctrl_link_train_1()
1097 old_v_level = ctrl->link->phy_params.v_level; in dp_ctrl_link_train_1()
1099 drm_dp_link_train_clock_recovery_delay(ctrl->aux, ctrl->panel->dpcd); in dp_ctrl_link_train_1()
1101 ret = dp_ctrl_read_link_status(ctrl, link_status); in dp_ctrl_link_train_1()
1106 ctrl->link->link_params.num_lanes)) { in dp_ctrl_link_train_1()
1110 if (ctrl->link->phy_params.v_level >= in dp_ctrl_link_train_1()
1116 if (old_v_level != ctrl->link->phy_params.v_level) { in dp_ctrl_link_train_1()
1118 old_v_level = ctrl->link->phy_params.v_level; in dp_ctrl_link_train_1()
1123 dp_link_adjust_levels(ctrl->link, link_status); in dp_ctrl_link_train_1()
1124 ret = dp_ctrl_update_vx_px(ctrl); in dp_ctrl_link_train_1()
1133 static int dp_ctrl_link_rate_down_shift(struct dp_ctrl_private *ctrl) in dp_ctrl_link_rate_down_shift() argument
1137 switch (ctrl->link->link_params.rate) { in dp_ctrl_link_rate_down_shift()
1139 ctrl->link->link_params.rate = 540000; in dp_ctrl_link_rate_down_shift()
1142 ctrl->link->link_params.rate = 270000; in dp_ctrl_link_rate_down_shift()
1145 ctrl->link->link_params.rate = 162000; in dp_ctrl_link_rate_down_shift()
1154 DRM_DEBUG_DP("new rate=0x%x\n", ctrl->link->link_params.rate); in dp_ctrl_link_rate_down_shift()
1159 static int dp_ctrl_link_lane_down_shift(struct dp_ctrl_private *ctrl) in dp_ctrl_link_lane_down_shift() argument
1162 if (ctrl->link->link_params.num_lanes == 1) in dp_ctrl_link_lane_down_shift()
1165 ctrl->link->link_params.num_lanes /= 2; in dp_ctrl_link_lane_down_shift()
1166 ctrl->link->link_params.rate = ctrl->panel->link_info.rate; in dp_ctrl_link_lane_down_shift()
1168 ctrl->link->phy_params.p_level = 0; in dp_ctrl_link_lane_down_shift()
1169 ctrl->link->phy_params.v_level = 0; in dp_ctrl_link_lane_down_shift()
1174 static void dp_ctrl_clear_training_pattern(struct dp_ctrl_private *ctrl) in dp_ctrl_clear_training_pattern() argument
1176 dp_ctrl_train_pattern_set(ctrl, DP_TRAINING_PATTERN_DISABLE); in dp_ctrl_clear_training_pattern()
1177 drm_dp_link_train_channel_eq_delay(ctrl->aux, ctrl->panel->dpcd); in dp_ctrl_clear_training_pattern()
1180 static int dp_ctrl_link_train_2(struct dp_ctrl_private *ctrl, in dp_ctrl_link_train_2() argument
1188 dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in dp_ctrl_link_train_2()
1192 if (drm_dp_tps3_supported(ctrl->panel->dpcd)) in dp_ctrl_link_train_2()
1197 ret = dp_catalog_ctrl_set_pattern(ctrl->catalog, pattern); in dp_ctrl_link_train_2()
1201 dp_ctrl_train_pattern_set(ctrl, pattern | DP_RECOVERED_CLOCK_OUT_EN); in dp_ctrl_link_train_2()
1204 drm_dp_link_train_channel_eq_delay(ctrl->aux, ctrl->panel->dpcd); in dp_ctrl_link_train_2()
1206 ret = dp_ctrl_read_link_status(ctrl, link_status); in dp_ctrl_link_train_2()
1211 ctrl->link->link_params.num_lanes)) { in dp_ctrl_link_train_2()
1215 dp_link_adjust_levels(ctrl->link, link_status); in dp_ctrl_link_train_2()
1216 ret = dp_ctrl_update_vx_px(ctrl); in dp_ctrl_link_train_2()
1225 static int dp_ctrl_reinitialize_mainlink(struct dp_ctrl_private *ctrl);
1227 static int dp_ctrl_link_train(struct dp_ctrl_private *ctrl, in dp_ctrl_link_train() argument
1234 dp_ctrl_config_ctrl(ctrl); in dp_ctrl_link_train()
1236 link_info.num_lanes = ctrl->link->link_params.num_lanes; in dp_ctrl_link_train()
1237 link_info.rate = ctrl->link->link_params.rate; in dp_ctrl_link_train()
1240 dp_aux_link_configure(ctrl->aux, &link_info); in dp_ctrl_link_train()
1241 drm_dp_dpcd_write(ctrl->aux, DP_MAIN_LINK_CHANNEL_CODING_SET, in dp_ctrl_link_train()
1244 ret = dp_ctrl_link_train_1(ctrl, training_step); in dp_ctrl_link_train()
1253 ret = dp_ctrl_link_train_2(ctrl, training_step); in dp_ctrl_link_train()
1263 dp_catalog_ctrl_state_ctrl(ctrl->catalog, 0); in dp_ctrl_link_train()
1268 static int dp_ctrl_setup_main_link(struct dp_ctrl_private *ctrl, in dp_ctrl_setup_main_link() argument
1273 dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, true); in dp_ctrl_setup_main_link()
1275 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) in dp_ctrl_setup_main_link()
1284 ret = dp_ctrl_link_train(ctrl, training_step); in dp_ctrl_setup_main_link()
1289 static void dp_ctrl_set_clock_rate(struct dp_ctrl_private *ctrl, in dp_ctrl_set_clock_rate() argument
1292 u32 num = ctrl->parser->mp[module].num_clk; in dp_ctrl_set_clock_rate()
1293 struct dss_clk *cfg = ctrl->parser->mp[module].clk_config; in dp_ctrl_set_clock_rate()
1309 static int dp_ctrl_enable_mainlink_clocks(struct dp_ctrl_private *ctrl) in dp_ctrl_enable_mainlink_clocks() argument
1312 struct dp_io *dp_io = &ctrl->parser->io; in dp_ctrl_enable_mainlink_clocks()
1316 opts_dp->lanes = ctrl->link->link_params.num_lanes; in dp_ctrl_enable_mainlink_clocks()
1317 opts_dp->link_rate = ctrl->link->link_params.rate / 100; in dp_ctrl_enable_mainlink_clocks()
1318 dp_ctrl_set_clock_rate(ctrl, DP_CTRL_PM, "ctrl_link", in dp_ctrl_enable_mainlink_clocks()
1319 ctrl->link->link_params.rate * 1000); in dp_ctrl_enable_mainlink_clocks()
1324 ret = dp_power_clk_enable(ctrl->power, DP_CTRL_PM, true); in dp_ctrl_enable_mainlink_clocks()
1329 ctrl->link->link_params.rate, ctrl->dp_ctrl.pixel_rate); in dp_ctrl_enable_mainlink_clocks()
1334 static int dp_ctrl_enable_stream_clocks(struct dp_ctrl_private *ctrl) in dp_ctrl_enable_stream_clocks() argument
1338 dp_ctrl_set_clock_rate(ctrl, DP_STREAM_PM, "stream_pixel", in dp_ctrl_enable_stream_clocks()
1339 ctrl->dp_ctrl.pixel_rate * 1000); in dp_ctrl_enable_stream_clocks()
1341 ret = dp_power_clk_enable(ctrl->power, DP_STREAM_PM, true); in dp_ctrl_enable_stream_clocks()
1346 ctrl->link->link_params.rate, ctrl->dp_ctrl.pixel_rate); in dp_ctrl_enable_stream_clocks()
1353 struct dp_ctrl_private *ctrl; in dp_ctrl_host_init() local
1362 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_host_init()
1363 dp_io = &ctrl->parser->io; in dp_ctrl_host_init()
1366 ctrl->dp_ctrl.orientation = flip; in dp_ctrl_host_init()
1369 dp_catalog_ctrl_reset(ctrl->catalog); in dp_ctrl_host_init()
1372 dp_catalog_ctrl_phy_reset(ctrl->catalog); in dp_ctrl_host_init()
1374 dp_catalog_ctrl_enable_irq(ctrl->catalog, true); in dp_ctrl_host_init()
1388 struct dp_ctrl_private *ctrl; in dp_ctrl_host_deinit() local
1397 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_host_deinit()
1398 dp_io = &ctrl->parser->io; in dp_ctrl_host_deinit()
1401 dp_catalog_ctrl_enable_irq(ctrl->catalog, false); in dp_ctrl_host_deinit()
1407 static bool dp_ctrl_use_fixed_nvid(struct dp_ctrl_private *ctrl) in dp_ctrl_use_fixed_nvid() argument
1409 u8 *dpcd = ctrl->panel->dpcd; in dp_ctrl_use_fixed_nvid()
1416 return (drm_dp_has_quirk(&ctrl->panel->desc, in dp_ctrl_use_fixed_nvid()
1422 static int dp_ctrl_reinitialize_mainlink(struct dp_ctrl_private *ctrl) in dp_ctrl_reinitialize_mainlink() argument
1425 struct dp_io *dp_io = &ctrl->parser->io; in dp_ctrl_reinitialize_mainlink()
1429 dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in dp_ctrl_reinitialize_mainlink()
1430 opts_dp->lanes = ctrl->link->link_params.num_lanes; in dp_ctrl_reinitialize_mainlink()
1437 ret = dp_power_clk_enable(ctrl->power, DP_CTRL_PM, false); in dp_ctrl_reinitialize_mainlink()
1446 ret = dp_ctrl_enable_mainlink_clocks(ctrl); in dp_ctrl_reinitialize_mainlink()
1455 static int dp_ctrl_deinitialize_mainlink(struct dp_ctrl_private *ctrl) in dp_ctrl_deinitialize_mainlink() argument
1461 dp_io = &ctrl->parser->io; in dp_ctrl_deinitialize_mainlink()
1464 dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in dp_ctrl_deinitialize_mainlink()
1466 dp_catalog_ctrl_reset(ctrl->catalog); in dp_ctrl_deinitialize_mainlink()
1468 ret = dp_power_clk_enable(ctrl->power, DP_CTRL_PM, false); in dp_ctrl_deinitialize_mainlink()
1479 static int dp_ctrl_link_maintenance(struct dp_ctrl_private *ctrl) in dp_ctrl_link_maintenance() argument
1484 dp_ctrl_push_idle(&ctrl->dp_ctrl); in dp_ctrl_link_maintenance()
1486 ctrl->link->phy_params.p_level = 0; in dp_ctrl_link_maintenance()
1487 ctrl->link->phy_params.v_level = 0; in dp_ctrl_link_maintenance()
1489 ctrl->dp_ctrl.pixel_rate = ctrl->panel->dp_mode.drm_mode.clock; in dp_ctrl_link_maintenance()
1491 ret = dp_ctrl_setup_main_link(ctrl, &training_step); in dp_ctrl_link_maintenance()
1495 dp_ctrl_clear_training_pattern(ctrl); in dp_ctrl_link_maintenance()
1497 dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_SEND_VIDEO); in dp_ctrl_link_maintenance()
1499 ret = dp_ctrl_wait4video_ready(ctrl); in dp_ctrl_link_maintenance()
1504 static int dp_ctrl_process_phy_test_request(struct dp_ctrl_private *ctrl) in dp_ctrl_process_phy_test_request() argument
1508 if (!ctrl->link->phy_params.phy_test_pattern_sel) { in dp_ctrl_process_phy_test_request()
1518 ret = dp_ctrl_off_link_stream(&ctrl->dp_ctrl); in dp_ctrl_process_phy_test_request()
1524 ret = dp_ctrl_on_link(&ctrl->dp_ctrl); in dp_ctrl_process_phy_test_request()
1526 ret = dp_ctrl_on_stream(&ctrl->dp_ctrl); in dp_ctrl_process_phy_test_request()
1533 static bool dp_ctrl_send_phy_test_pattern(struct dp_ctrl_private *ctrl) in dp_ctrl_send_phy_test_pattern() argument
1537 u32 pattern_requested = ctrl->link->phy_params.phy_test_pattern_sel; in dp_ctrl_send_phy_test_pattern()
1541 if (dp_catalog_ctrl_update_vx_px(ctrl->catalog, in dp_ctrl_send_phy_test_pattern()
1542 ctrl->link->phy_params.v_level, in dp_ctrl_send_phy_test_pattern()
1543 ctrl->link->phy_params.p_level)) { in dp_ctrl_send_phy_test_pattern()
1547 dp_catalog_ctrl_send_phy_pattern(ctrl->catalog, pattern_requested); in dp_ctrl_send_phy_test_pattern()
1548 dp_ctrl_update_vx_px(ctrl); in dp_ctrl_send_phy_test_pattern()
1549 dp_link_send_test_response(ctrl->link); in dp_ctrl_send_phy_test_pattern()
1551 pattern_sent = dp_catalog_ctrl_read_phy_pattern(ctrl->catalog); in dp_ctrl_send_phy_test_pattern()
1587 struct dp_ctrl_private *ctrl; in dp_ctrl_handle_sink_request() local
1595 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_handle_sink_request()
1596 sink_request = ctrl->link->sink_request; in dp_ctrl_handle_sink_request()
1600 if (dp_ctrl_process_phy_test_request(ctrl)) { in dp_ctrl_handle_sink_request()
1607 if (dp_ctrl_link_maintenance(ctrl)) { in dp_ctrl_handle_sink_request()
1614 dp_link_send_test_response(ctrl->link); in dp_ctrl_handle_sink_request()
1615 if (dp_ctrl_link_maintenance(ctrl)) { in dp_ctrl_handle_sink_request()
1641 static bool dp_ctrl_channel_eq_ok(struct dp_ctrl_private *ctrl) in dp_ctrl_channel_eq_ok() argument
1644 int num_lanes = ctrl->link->link_params.num_lanes; in dp_ctrl_channel_eq_ok()
1646 dp_ctrl_read_link_status(ctrl, link_status); in dp_ctrl_channel_eq_ok()
1654 struct dp_ctrl_private *ctrl; in dp_ctrl_on_link() local
1664 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_on_link()
1666 rate = ctrl->panel->link_info.rate; in dp_ctrl_on_link()
1668 dp_power_clk_enable(ctrl->power, DP_CORE_PM, true); in dp_ctrl_on_link()
1670 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) { in dp_ctrl_on_link()
1672 if (!ctrl->panel->dp_mode.drm_mode.clock) in dp_ctrl_on_link()
1673 ctrl->dp_ctrl.pixel_rate = phy_cts_pixel_clk_khz; in dp_ctrl_on_link()
1675 ctrl->link->link_params.rate = rate; in dp_ctrl_on_link()
1676 ctrl->link->link_params.num_lanes = in dp_ctrl_on_link()
1677 ctrl->panel->link_info.num_lanes; in dp_ctrl_on_link()
1678 ctrl->dp_ctrl.pixel_rate = ctrl->panel->dp_mode.drm_mode.clock; in dp_ctrl_on_link()
1682 ctrl->link->link_params.rate, in dp_ctrl_on_link()
1683 ctrl->link->link_params.num_lanes, ctrl->dp_ctrl.pixel_rate); in dp_ctrl_on_link()
1685 ctrl->link->phy_params.p_level = 0; in dp_ctrl_on_link()
1686 ctrl->link->phy_params.v_level = 0; in dp_ctrl_on_link()
1688 rc = dp_ctrl_enable_mainlink_clocks(ctrl); in dp_ctrl_on_link()
1693 rc = dp_ctrl_reinitialize_mainlink(ctrl); in dp_ctrl_on_link()
1701 rc = dp_ctrl_setup_main_link(ctrl, &training_step); in dp_ctrl_on_link()
1707 if (!dp_catalog_link_is_connected(ctrl->catalog)) in dp_ctrl_on_link()
1710 dp_ctrl_read_link_status(ctrl, link_status); in dp_ctrl_on_link()
1712 rc = dp_ctrl_link_rate_down_shift(ctrl); in dp_ctrl_on_link()
1715 ctrl->link->link_params.num_lanes)) { in dp_ctrl_on_link()
1720 rc = dp_ctrl_link_lane_down_shift(ctrl); in dp_ctrl_on_link()
1732 if (!dp_catalog_link_is_connected(ctrl->catalog)) in dp_ctrl_on_link()
1735 dp_ctrl_read_link_status(ctrl, link_status); in dp_ctrl_on_link()
1738 ctrl->link->link_params.num_lanes)) in dp_ctrl_on_link()
1739 rc = dp_ctrl_link_rate_down_shift(ctrl); in dp_ctrl_on_link()
1741 rc = dp_ctrl_link_lane_down_shift(ctrl); in dp_ctrl_on_link()
1750 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) in dp_ctrl_on_link()
1764 dp_ctrl_clear_training_pattern(ctrl); in dp_ctrl_on_link()
1766 dp_ctrl_deinitialize_mainlink(ctrl); in dp_ctrl_on_link()
1773 static int dp_ctrl_link_retrain(struct dp_ctrl_private *ctrl) in dp_ctrl_link_retrain() argument
1777 return dp_ctrl_setup_main_link(ctrl, &training_step); in dp_ctrl_link_retrain()
1784 struct dp_ctrl_private *ctrl; in dp_ctrl_on_stream() local
1789 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_on_stream()
1791 ctrl->dp_ctrl.pixel_rate = ctrl->panel->dp_mode.drm_mode.clock; in dp_ctrl_on_stream()
1794 ctrl->link->link_params.rate, in dp_ctrl_on_stream()
1795 ctrl->link->link_params.num_lanes, ctrl->dp_ctrl.pixel_rate); in dp_ctrl_on_stream()
1797 if (!dp_power_clk_status(ctrl->power, DP_CTRL_PM)) { /* link clk is off */ in dp_ctrl_on_stream()
1798 ret = dp_ctrl_enable_mainlink_clocks(ctrl); in dp_ctrl_on_stream()
1805 if (!dp_ctrl_channel_eq_ok(ctrl)) in dp_ctrl_on_stream()
1806 dp_ctrl_link_retrain(ctrl); in dp_ctrl_on_stream()
1809 dp_ctrl_clear_training_pattern(ctrl); in dp_ctrl_on_stream()
1811 ret = dp_ctrl_enable_stream_clocks(ctrl); in dp_ctrl_on_stream()
1817 if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) { in dp_ctrl_on_stream()
1818 dp_ctrl_send_phy_test_pattern(ctrl); in dp_ctrl_on_stream()
1826 reinit_completion(&ctrl->video_comp); in dp_ctrl_on_stream()
1828 dp_ctrl_configure_source_params(ctrl); in dp_ctrl_on_stream()
1830 dp_catalog_ctrl_config_msa(ctrl->catalog, in dp_ctrl_on_stream()
1831 ctrl->link->link_params.rate, in dp_ctrl_on_stream()
1832 ctrl->dp_ctrl.pixel_rate, dp_ctrl_use_fixed_nvid(ctrl)); in dp_ctrl_on_stream()
1834 dp_ctrl_setup_tr_unit(ctrl); in dp_ctrl_on_stream()
1836 dp_catalog_ctrl_state_ctrl(ctrl->catalog, DP_STATE_CTRL_SEND_VIDEO); in dp_ctrl_on_stream()
1838 ret = dp_ctrl_wait4video_ready(ctrl); in dp_ctrl_on_stream()
1842 mainlink_ready = dp_catalog_ctrl_mainlink_ready(ctrl->catalog); in dp_ctrl_on_stream()
1851 struct dp_ctrl_private *ctrl; in dp_ctrl_off_link_stream() local
1856 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_off_link_stream()
1857 dp_io = &ctrl->parser->io; in dp_ctrl_off_link_stream()
1861 dp_link_psm_config(ctrl->link, &ctrl->panel->link_info, true); in dp_ctrl_off_link_stream()
1863 dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in dp_ctrl_off_link_stream()
1865 if (dp_power_clk_status(ctrl->power, DP_STREAM_PM)) { in dp_ctrl_off_link_stream()
1866 ret = dp_power_clk_enable(ctrl->power, DP_STREAM_PM, false); in dp_ctrl_off_link_stream()
1873 ret = dp_power_clk_enable(ctrl->power, DP_CTRL_PM, false); in dp_ctrl_off_link_stream()
1891 struct dp_ctrl_private *ctrl; in dp_ctrl_off_phy() local
1895 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_off_phy()
1896 dp_io = &ctrl->parser->io; in dp_ctrl_off_phy()
1899 dp_catalog_ctrl_reset(ctrl->catalog); in dp_ctrl_off_phy()
1908 struct dp_ctrl_private *ctrl; in dp_ctrl_off() local
1916 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_off()
1917 dp_io = &ctrl->parser->io; in dp_ctrl_off()
1920 dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false); in dp_ctrl_off()
1922 dp_catalog_ctrl_reset(ctrl->catalog); in dp_ctrl_off()
1924 ret = dp_power_clk_enable(ctrl->power, DP_STREAM_PM, false); in dp_ctrl_off()
1928 ret = dp_power_clk_enable(ctrl->power, DP_CTRL_PM, false); in dp_ctrl_off()
1942 struct dp_ctrl_private *ctrl; in dp_ctrl_isr() local
1948 ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); in dp_ctrl_isr()
1950 isr = dp_catalog_ctrl_get_interrupt(ctrl->catalog); in dp_ctrl_isr()
1954 complete(&ctrl->video_comp); in dp_ctrl_isr()
1959 complete(&ctrl->idle_comp); in dp_ctrl_isr()
1968 struct dp_ctrl_private *ctrl; in dp_ctrl_get() local
1977 ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL); in dp_ctrl_get()
1978 if (!ctrl) { in dp_ctrl_get()
1995 init_completion(&ctrl->idle_comp); in dp_ctrl_get()
1996 init_completion(&ctrl->video_comp); in dp_ctrl_get()
1999 ctrl->parser = parser; in dp_ctrl_get()
2000 ctrl->panel = panel; in dp_ctrl_get()
2001 ctrl->power = power; in dp_ctrl_get()
2002 ctrl->aux = aux; in dp_ctrl_get()
2003 ctrl->link = link; in dp_ctrl_get()
2004 ctrl->catalog = catalog; in dp_ctrl_get()
2005 ctrl->dev = dev; in dp_ctrl_get()
2007 return &ctrl->dp_ctrl; in dp_ctrl_get()