Loading drivers/gpu/drm/drm_edid.c +2 −1 Original line number Diff line number Diff line Loading @@ -2960,7 +2960,7 @@ static u8 drm_match_hdmi_mode_clock_tolerance(const struct drm_display_mode *to_ * * Returns the HDMI Video ID (VIC) of the mode or 0 if it isn't one. */ static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match) u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match) { u8 vic; Loading @@ -2982,6 +2982,7 @@ static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match) } return 0; } EXPORT_SYMBOL(drm_match_hdmi_mode); static bool drm_valid_hdmi_vic(u8 vic) { Loading drivers/gpu/drm/msm/dp/dp_display.h +1 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ struct dp_display { int dp_display_get_num_of_displays(void); int dp_display_get_displays(void **displays, int count); bool dp_connector_mode_needs_full_range(void *display); bool dp_connector_mode_is_cea_mode(void *display); enum sde_csc_type dp_connector_get_csc_type(struct drm_connector *conn, void *data); #endif /* _DP_DISPLAY_H_ */ drivers/gpu/drm/msm/dp/dp_drm.c +45 −2 Original line number Diff line number Diff line Loading @@ -134,6 +134,8 @@ static void convert_to_dp_mode(const struct drm_display_mode *drm_mode, !!(drm_mode->flags & DRM_MODE_FLAG_NHSYNC); dp_mode->flags = drm_mode->flags; dp_mode->timing.par = drm_mode->picture_aspect_ratio; } static void convert_to_drm_mode(const struct dp_display_mode *dp_mode, Loading Loading @@ -174,6 +176,8 @@ static void convert_to_drm_mode(const struct dp_display_mode *dp_mode, drm_mode->flags = flags; drm_mode->flags |= (dp_mode->flags & SDE_DRM_MODE_FLAG_FMT_MASK); drm_mode->picture_aspect_ratio = dp_mode->timing.par; drm_mode->type = 0x48; drm_mode_set_name(drm_mode); } Loading Loading @@ -474,6 +478,45 @@ bool dp_connector_mode_needs_full_range(void *data) return false; } bool dp_connector_mode_is_cea_mode(void *data) { struct dp_display *display = data; struct dp_bridge *bridge; struct dp_display_mode *mode; struct drm_display_mode drm_mode; struct dp_panel_info *timing; bool is_ce_mode = false; if (!display) { pr_err("invalid input\n"); return false; } bridge = display->bridge; if (!bridge) { pr_err("invalid bridge data\n"); return false; } mode = &bridge->dp_mode; timing = &mode->timing; if (timing->h_active == 640 && timing->v_active == 480) is_ce_mode = false; convert_to_drm_mode(mode, &drm_mode); drm_mode.flags &= ~SDE_DRM_MODE_FLAG_FMT_MASK; if (drm_match_cea_mode(&drm_mode) || drm_match_hdmi_mode(&drm_mode)) is_ce_mode = true; pr_debug("%s: %s : %s video format\n", __func__, drm_mode.name, is_ce_mode ? "CE" : "IT"); return is_ce_mode; } enum sde_csc_type dp_connector_get_csc_type(struct drm_connector *conn, void *data) { Loading @@ -500,10 +543,10 @@ enum sde_csc_type dp_connector_get_csc_type(struct drm_connector *conn, return SDE_CSC_RGB2YUV_2020L; else if (dp_connector_mode_needs_full_range(data) || conn->yuv_qs) return SDE_CSC_RGB2YUV_601FR; return SDE_CSC_RGB2YUV_709FR; error: return SDE_CSC_RGB2YUV_601L; return SDE_CSC_RGB2YUV_709L; } enum drm_connector_status dp_connector_detect(struct drm_connector *conn, Loading drivers/gpu/drm/msm/dp/dp_panel.h +1 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ struct dp_panel_info { u32 pixel_clk_khz; u32 bpp; u32 out_format; enum hdmi_picture_aspect par; }; struct dp_display_mode { Loading drivers/gpu/drm/msm/sde/sde_connector.c +22 −0 Original line number Diff line number Diff line Loading @@ -768,6 +768,28 @@ bool sde_connector_mode_needs_full_range(struct drm_connector *connector) return c_conn->ops.mode_needs_full_range(c_conn->display); } bool sde_connector_mode_is_cea_mode(struct drm_connector *connector) { struct sde_connector *c_conn; if (!connector) { SDE_ERROR("invalid argument\n"); return false; } c_conn = to_sde_connector(connector); if (!c_conn->display) { SDE_ERROR("invalid argument\n"); return false; } if (!c_conn->ops.mode_is_cea_mode) return false; return c_conn->ops.mode_is_cea_mode(c_conn->display); } static void sde_connector_destroy(struct drm_connector *connector) { struct sde_connector *c_conn; Loading Loading
drivers/gpu/drm/drm_edid.c +2 −1 Original line number Diff line number Diff line Loading @@ -2960,7 +2960,7 @@ static u8 drm_match_hdmi_mode_clock_tolerance(const struct drm_display_mode *to_ * * Returns the HDMI Video ID (VIC) of the mode or 0 if it isn't one. */ static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match) u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match) { u8 vic; Loading @@ -2982,6 +2982,7 @@ static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match) } return 0; } EXPORT_SYMBOL(drm_match_hdmi_mode); static bool drm_valid_hdmi_vic(u8 vic) { Loading
drivers/gpu/drm/msm/dp/dp_display.h +1 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ struct dp_display { int dp_display_get_num_of_displays(void); int dp_display_get_displays(void **displays, int count); bool dp_connector_mode_needs_full_range(void *display); bool dp_connector_mode_is_cea_mode(void *display); enum sde_csc_type dp_connector_get_csc_type(struct drm_connector *conn, void *data); #endif /* _DP_DISPLAY_H_ */
drivers/gpu/drm/msm/dp/dp_drm.c +45 −2 Original line number Diff line number Diff line Loading @@ -134,6 +134,8 @@ static void convert_to_dp_mode(const struct drm_display_mode *drm_mode, !!(drm_mode->flags & DRM_MODE_FLAG_NHSYNC); dp_mode->flags = drm_mode->flags; dp_mode->timing.par = drm_mode->picture_aspect_ratio; } static void convert_to_drm_mode(const struct dp_display_mode *dp_mode, Loading Loading @@ -174,6 +176,8 @@ static void convert_to_drm_mode(const struct dp_display_mode *dp_mode, drm_mode->flags = flags; drm_mode->flags |= (dp_mode->flags & SDE_DRM_MODE_FLAG_FMT_MASK); drm_mode->picture_aspect_ratio = dp_mode->timing.par; drm_mode->type = 0x48; drm_mode_set_name(drm_mode); } Loading Loading @@ -474,6 +478,45 @@ bool dp_connector_mode_needs_full_range(void *data) return false; } bool dp_connector_mode_is_cea_mode(void *data) { struct dp_display *display = data; struct dp_bridge *bridge; struct dp_display_mode *mode; struct drm_display_mode drm_mode; struct dp_panel_info *timing; bool is_ce_mode = false; if (!display) { pr_err("invalid input\n"); return false; } bridge = display->bridge; if (!bridge) { pr_err("invalid bridge data\n"); return false; } mode = &bridge->dp_mode; timing = &mode->timing; if (timing->h_active == 640 && timing->v_active == 480) is_ce_mode = false; convert_to_drm_mode(mode, &drm_mode); drm_mode.flags &= ~SDE_DRM_MODE_FLAG_FMT_MASK; if (drm_match_cea_mode(&drm_mode) || drm_match_hdmi_mode(&drm_mode)) is_ce_mode = true; pr_debug("%s: %s : %s video format\n", __func__, drm_mode.name, is_ce_mode ? "CE" : "IT"); return is_ce_mode; } enum sde_csc_type dp_connector_get_csc_type(struct drm_connector *conn, void *data) { Loading @@ -500,10 +543,10 @@ enum sde_csc_type dp_connector_get_csc_type(struct drm_connector *conn, return SDE_CSC_RGB2YUV_2020L; else if (dp_connector_mode_needs_full_range(data) || conn->yuv_qs) return SDE_CSC_RGB2YUV_601FR; return SDE_CSC_RGB2YUV_709FR; error: return SDE_CSC_RGB2YUV_601L; return SDE_CSC_RGB2YUV_709L; } enum drm_connector_status dp_connector_detect(struct drm_connector *conn, Loading
drivers/gpu/drm/msm/dp/dp_panel.h +1 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ struct dp_panel_info { u32 pixel_clk_khz; u32 bpp; u32 out_format; enum hdmi_picture_aspect par; }; struct dp_display_mode { Loading
drivers/gpu/drm/msm/sde/sde_connector.c +22 −0 Original line number Diff line number Diff line Loading @@ -768,6 +768,28 @@ bool sde_connector_mode_needs_full_range(struct drm_connector *connector) return c_conn->ops.mode_needs_full_range(c_conn->display); } bool sde_connector_mode_is_cea_mode(struct drm_connector *connector) { struct sde_connector *c_conn; if (!connector) { SDE_ERROR("invalid argument\n"); return false; } c_conn = to_sde_connector(connector); if (!c_conn->display) { SDE_ERROR("invalid argument\n"); return false; } if (!c_conn->ops.mode_is_cea_mode) return false; return c_conn->ops.mode_is_cea_mode(c_conn->display); } static void sde_connector_destroy(struct drm_connector *connector) { struct sde_connector *c_conn; Loading