Lines Matching refs:dp_panel

15 	struct dp_panel dp_panel;  member
26 struct dp_panel *dp_panel; in dp_panel_read_psr_cap() local
28 dp_panel = &panel->dp_panel; in dp_panel_read_psr_cap()
31 if (dp_panel->dpcd[DP_EDP_CONFIGURATION_CAP]) { in dp_panel_read_psr_cap()
33 &dp_panel->psr_cap, sizeof(dp_panel->psr_cap)); in dp_panel_read_psr_cap()
34 if (rlen == sizeof(dp_panel->psr_cap)) { in dp_panel_read_psr_cap()
37 dp_panel->psr_cap.version, in dp_panel_read_psr_cap()
38 dp_panel->psr_cap.capabilities); in dp_panel_read_psr_cap()
44 static int dp_panel_read_dpcd(struct dp_panel *dp_panel) in dp_panel_read_dpcd() argument
54 dpcd = dp_panel->dpcd; in dp_panel_read_dpcd()
56 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_read_dpcd()
57 link_info = &dp_panel->link_info; in dp_panel_read_dpcd()
100 if (link_info->num_lanes > dp_panel->max_dp_lanes) in dp_panel_read_dpcd()
101 link_info->num_lanes = dp_panel->max_dp_lanes; in dp_panel_read_dpcd()
104 if (link_info->rate > dp_panel->max_dp_link_rate) in dp_panel_read_dpcd()
105 link_info->rate = dp_panel->max_dp_link_rate; in dp_panel_read_dpcd()
114 dp_panel->dfp_present = dpcd[DP_DOWNSTREAMPORT_PRESENT]; in dp_panel_read_dpcd()
115 dp_panel->dfp_present &= DP_DWN_STRM_PORT_PRESENT; in dp_panel_read_dpcd()
117 if (dp_panel->dfp_present && (dpcd[DP_DPCD_REV] > 0x10)) { in dp_panel_read_dpcd()
118 dp_panel->ds_port_cnt = dpcd[DP_DOWN_STREAM_PORT_COUNT]; in dp_panel_read_dpcd()
119 dp_panel->ds_port_cnt &= DP_PORT_COUNT_MASK; in dp_panel_read_dpcd()
123 DP_DOWNSTREAM_PORT_0, dp_panel->ds_cap_info, len); in dp_panel_read_dpcd()
136 static u32 dp_panel_get_supported_bpp(struct dp_panel *dp_panel, in dp_panel_get_supported_bpp() argument
145 link_info = &dp_panel->link_info; in dp_panel_get_supported_bpp()
179 int dp_panel_read_sink_caps(struct dp_panel *dp_panel, in dp_panel_read_sink_caps() argument
186 if (!dp_panel || !connector) { in dp_panel_read_sink_caps()
191 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_read_sink_caps()
193 rc = dp_panel_read_dpcd(dp_panel); in dp_panel_read_sink_caps()
199 bw_code = drm_dp_link_rate_to_bw_code(dp_panel->link_info.rate); in dp_panel_read_sink_caps()
201 !is_lane_count_valid(dp_panel->link_info.num_lanes) || in dp_panel_read_sink_caps()
202 (bw_code > dp_panel->max_bw_code)) { in dp_panel_read_sink_caps()
203 DRM_ERROR("Illegal link rate=%d lane=%d\n", dp_panel->link_info.rate, in dp_panel_read_sink_caps()
204 dp_panel->link_info.num_lanes); in dp_panel_read_sink_caps()
208 if (dp_panel->dfp_present) { in dp_panel_read_sink_caps()
222 kfree(dp_panel->edid); in dp_panel_read_sink_caps()
223 dp_panel->edid = NULL; in dp_panel_read_sink_caps()
225 dp_panel->edid = drm_get_edid(connector, in dp_panel_read_sink_caps()
227 if (!dp_panel->edid) { in dp_panel_read_sink_caps()
239 rc = dp_panel_read_dpcd(dp_panel); in dp_panel_read_sink_caps()
240 bw_code = drm_dp_link_rate_to_bw_code(dp_panel->link_info.rate); in dp_panel_read_sink_caps()
242 !is_lane_count_valid(dp_panel->link_info.num_lanes) in dp_panel_read_sink_caps()
243 || (bw_code > dp_panel->max_bw_code)) { in dp_panel_read_sink_caps()
253 u32 dp_panel_get_mode_bpp(struct dp_panel *dp_panel, in dp_panel_get_mode_bpp() argument
259 if (!dp_panel || !mode_edid_bpp || !mode_pclk_khz) { in dp_panel_get_mode_bpp()
264 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_get_mode_bpp()
266 if (dp_panel->video_test) in dp_panel_get_mode_bpp()
270 bpp = dp_panel_get_supported_bpp(dp_panel, mode_edid_bpp, in dp_panel_get_mode_bpp()
276 int dp_panel_get_modes(struct dp_panel *dp_panel, in dp_panel_get_modes() argument
279 if (!dp_panel) { in dp_panel_get_modes()
284 if (dp_panel->edid) in dp_panel_get_modes()
285 return dp_panel_update_modes(connector, dp_panel->edid); in dp_panel_get_modes()
297 void dp_panel_handle_sink_request(struct dp_panel *dp_panel) in dp_panel_handle_sink_request() argument
301 if (!dp_panel) { in dp_panel_handle_sink_request()
306 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_handle_sink_request()
311 if (dp_panel->edid) in dp_panel_handle_sink_request()
312 checksum = dp_panel_get_edid_checksum(dp_panel->edid); in dp_panel_handle_sink_request()
314 checksum = dp_panel->connector->real_edid_checksum; in dp_panel_handle_sink_request()
321 void dp_panel_tpg_config(struct dp_panel *dp_panel, bool enable) in dp_panel_tpg_config() argument
326 if (!dp_panel) { in dp_panel_tpg_config()
331 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_tpg_config()
346 dp_catalog_panel_tpg_enable(catalog, &panel->dp_panel.dp_mode.drm_mode); in dp_panel_tpg_config()
349 void dp_panel_dump_regs(struct dp_panel *dp_panel) in dp_panel_dump_regs() argument
354 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_dump_regs()
360 int dp_panel_timing_cfg(struct dp_panel *dp_panel) in dp_panel_timing_cfg() argument
367 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_timing_cfg()
369 drm_mode = &panel->dp_panel.dp_mode.drm_mode; in dp_panel_timing_cfg()
399 data |= (panel->dp_panel.dp_mode.v_active_low << 31); in dp_panel_timing_cfg()
401 data |= (panel->dp_panel.dp_mode.h_active_low << 15); in dp_panel_timing_cfg()
417 int dp_panel_init_panel_info(struct dp_panel *dp_panel) in dp_panel_init_panel_info() argument
422 drm_mode = &dp_panel->dp_mode.drm_mode; in dp_panel_init_panel_info()
424 panel = container_of(dp_panel, struct dp_panel_private, dp_panel); in dp_panel_init_panel_info()
445 drm_dbg_dp(panel->drm_dev, "bpp = %d\n", dp_panel->dp_mode.bpp); in dp_panel_init_panel_info()
447 dp_panel->dp_mode.bpp = dp_panel_get_mode_bpp(dp_panel, dp_panel->dp_mode.bpp, in dp_panel_init_panel_info()
448 dp_panel->dp_mode.drm_mode.clock); in dp_panel_init_panel_info()
451 dp_panel->dp_mode.bpp); in dp_panel_init_panel_info()
456 struct dp_panel *dp_panel_get(struct dp_panel_in *in) in dp_panel_get()
459 struct dp_panel *dp_panel; in dp_panel_get() local
475 dp_panel = &panel->dp_panel; in dp_panel_get()
476 dp_panel->max_bw_code = DP_LINK_BW_8_1; in dp_panel_get()
479 return dp_panel; in dp_panel_get()
482 void dp_panel_put(struct dp_panel *dp_panel) in dp_panel_put() argument
484 if (!dp_panel) in dp_panel_put()
487 kfree(dp_panel->edid); in dp_panel_put()