msm_dp_panel
struct msm_dp_panel *panel;
struct msm_dp_panel *panel, struct drm_dp_aux *aux,
struct msm_dp_panel *panel,
int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,
struct msm_dp_panel *panel;
int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,
int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,
struct msm_dp_panel *msm_dp_panel;
msm_dp_panel = msm_dp_display->panel;
msm_dp_panel->vsc_sdp_supported;
struct msm_dp_panel *panel;
msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd);
link_info = &msm_dp_panel->link_info;
if (msm_dp_panel->dpcd[DP_EDP_CONFIGURATION_CAP]) {
static u32 msm_dp_panel_get_supported_bpp(struct msm_dp_panel *msm_dp_panel,
link_info = &msm_dp_panel->link_info;
int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel,
struct msm_dp_panel msm_dp_panel;
if (!msm_dp_panel || !connector) {
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
rc = msm_dp_panel_read_dpcd(msm_dp_panel);
bw_code = drm_dp_link_rate_to_bw_code(msm_dp_panel->link_info.rate);
!is_lane_count_valid(msm_dp_panel->link_info.num_lanes) ||
(bw_code > msm_dp_panel->max_bw_code)) {
DRM_ERROR("Illegal link rate=%d lane=%d\n", msm_dp_panel->link_info.rate,
msm_dp_panel->link_info.num_lanes);
if (drm_dp_is_branch(msm_dp_panel->dpcd)) {
rc = drm_dp_read_downstream_info(panel->aux, msm_dp_panel->dpcd,
msm_dp_panel->downstream_ports);
drm_edid_free(msm_dp_panel->drm_edid);
msm_dp_panel->drm_edid = drm_edid_read_ddc(connector, &panel->aux->ddc);
drm_edid_connector_update(connector, msm_dp_panel->drm_edid);
if (!msm_dp_panel->drm_edid) {
u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel,
if (!msm_dp_panel || !mode_edid_bpp || !mode_pclk_khz) {
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
if (msm_dp_panel->video_test)
bpp = msm_dp_panel_get_supported_bpp(msm_dp_panel, mode_edid_bpp,
int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel,
if (!msm_dp_panel) {
if (msm_dp_panel->drm_edid)
void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel)
if (!msm_dp_panel) {
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
const struct edid *edid = drm_edid_raw(msm_dp_panel->drm_edid);
checksum = msm_dp_panel->connector->real_edid_checksum;
static void msm_dp_panel_tpg_enable(struct msm_dp_panel *msm_dp_panel,
container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
static void msm_dp_panel_tpg_disable(struct msm_dp_panel *msm_dp_panel)
container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enable)
if (!msm_dp_panel) {
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
msm_dp_panel_tpg_disable(msm_dp_panel);
msm_dp_panel_tpg_enable(msm_dp_panel, &panel->msm_dp_panel.msm_dp_mode.drm_mode);
void msm_dp_panel_clear_dsc_dto(struct msm_dp_panel *msm_dp_panel)
container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
u32 hw_revision = panel->msm_dp_panel.hw_revision;
void msm_dp_panel_enable_vsc_sdp(struct msm_dp_panel *msm_dp_panel, struct dp_sdp *vsc_sdp)
container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
void msm_dp_panel_disable_vsc_sdp(struct msm_dp_panel *msm_dp_panel)
container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
static int msm_dp_panel_setup_vsc_sdp_yuv_420(struct msm_dp_panel *msm_dp_panel)
if (!msm_dp_panel) {
msm_dp_mode = &msm_dp_panel->msm_dp_mode;
msm_dp_panel_enable_vsc_sdp(msm_dp_panel, &vsc_sdp);
int msm_dp_panel_timing_cfg(struct msm_dp_panel *msm_dp_panel, bool wide_bus_en)
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
drm_mode = &panel->msm_dp_panel.msm_dp_mode.drm_mode;
data |= (panel->msm_dp_panel.msm_dp_mode.v_active_low << 31);
data |= (panel->msm_dp_panel.msm_dp_mode.h_active_low << 15);
if (msm_dp_panel->msm_dp_mode.out_fmt_is_yuv_420)
msm_dp_panel_setup_vsc_sdp_yuv_420(msm_dp_panel);
int msm_dp_panel_init_panel_info(struct msm_dp_panel *msm_dp_panel)
drm_mode = &msm_dp_panel->msm_dp_mode.drm_mode;
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
struct msm_dp_panel *msm_dp_panel;
drm_dbg_dp(panel->drm_dev, "bpp = %d\n", msm_dp_panel->msm_dp_mode.bpp);
msm_dp_panel->msm_dp_mode.bpp = msm_dp_panel_get_mode_bpp(msm_dp_panel, msm_dp_panel->msm_dp_mode.bpp,
msm_dp_panel->msm_dp_mode.drm_mode.clock);
msm_dp_panel->msm_dp_mode.bpp);
msm_dp_panel = &panel->msm_dp_panel;
struct msm_dp_panel *msm_dp_panel_get(struct device *dev, struct drm_dp_aux *aux,
struct msm_dp_panel *msm_dp_panel;
msm_dp_panel = &panel->msm_dp_panel;
msm_dp_panel->max_bw_code = DP_LINK_BW_8_1;
return msm_dp_panel;
if (msm_dp_panel->dpcd[DP_EDP_CONFIGURATION_CAP]) {
void msm_dp_panel_put(struct msm_dp_panel *msm_dp_panel)
if (!msm_dp_panel)
drm_edid_free(msm_dp_panel->drm_edid);
&msm_dp_panel->psr_cap, sizeof(msm_dp_panel->psr_cap));
if (rlen == sizeof(msm_dp_panel->psr_cap)) {
msm_dp_panel->psr_cap.version,
msm_dp_panel->psr_cap.capabilities);
static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel)
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
dpcd = msm_dp_panel->dpcd;
int msm_dp_panel_init_panel_info(struct msm_dp_panel *msm_dp_panel);
int msm_dp_panel_deinit(struct msm_dp_panel *msm_dp_panel);
int msm_dp_panel_timing_cfg(struct msm_dp_panel *msm_dp_panel, bool wide_bus_en);
int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel,
u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel, u32 mode_max_bpp,
int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel,
void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel);
void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enable);
void msm_dp_panel_clear_dsc_dto(struct msm_dp_panel *msm_dp_panel);
void msm_dp_panel_enable_vsc_sdp(struct msm_dp_panel *msm_dp_panel, struct dp_sdp *vsc_sdp);
void msm_dp_panel_disable_vsc_sdp(struct msm_dp_panel *msm_dp_panel);
struct msm_dp_panel *msm_dp_panel_get(struct device *dev, struct drm_dp_aux *aux,
void msm_dp_panel_put(struct msm_dp_panel *msm_dp_panel);