Loading drivers/gpu/drm/msm/dp/dp_debug.c +9 −7 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ static ssize_t dp_debug_write_edid_modes(struct file *file, struct dp_debug_private *debug = file->private_data; char buf[SZ_32]; size_t len = 0; int hdisplay = 0, vdisplay = 0, vrefresh = 0; int hdisplay = 0, vdisplay = 0, vrefresh = 0, aspect_ratio; if (!debug) return -ENODEV; Loading @@ -89,7 +89,8 @@ static ssize_t dp_debug_write_edid_modes(struct file *file, buf[len] = '\0'; if (sscanf(buf, "%d %d %d", &hdisplay, &vdisplay, &vrefresh) != 3) if (sscanf(buf, "%d %d %d %d", &hdisplay, &vdisplay, &vrefresh, &aspect_ratio) != 4) goto clear; if (!hdisplay || !vdisplay || !vrefresh) Loading @@ -99,6 +100,7 @@ static ssize_t dp_debug_write_edid_modes(struct file *file, debug->dp_debug.hdisplay = hdisplay; debug->dp_debug.vdisplay = vdisplay; debug->dp_debug.vrefresh = vrefresh; debug->dp_debug.aspect_ratio = aspect_ratio; goto end; clear: pr_debug("clearing debug modes\n"); Loading Loading @@ -198,11 +200,11 @@ static ssize_t dp_debug_read_edid_modes(struct file *file, list_for_each_entry(mode, &connector->modes, head) { len += snprintf(buf + len, SZ_4K - len, "%s %d %d %d %d %d %d %d %d %d 0x%x\n", mode->name, mode->vrefresh, mode->hdisplay, mode->hsync_start, mode->hsync_end, mode->htotal, mode->vdisplay, mode->vsync_start, mode->vsync_end, mode->vtotal, mode->flags); "%s %d %d %d %d %d %d %d %d %d %d 0x%x\n", mode->name, mode->vrefresh, mode->picture_aspect_ratio, mode->hdisplay, mode->hsync_start, mode->hsync_end, mode->htotal, mode->vdisplay, mode->vsync_start, mode->vsync_end, mode->vtotal, mode->flags); } if (copy_to_user(user_buff, buf, len)) { Loading drivers/gpu/drm/msm/dp/dp_debug.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ */ struct dp_debug { bool debug_en; int aspect_ratio; int vdisplay; int hdisplay; int vrefresh; Loading drivers/gpu/drm/msm/dp/dp_drm.c +14 −20 Original line number Diff line number Diff line Loading @@ -514,25 +514,19 @@ enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector, dp_disp = display; debug = dp_disp->get_debug(dp_disp); if (debug->debug_en) { if (mode->hdisplay == debug->hdisplay && mode->vdisplay == debug->vdisplay && mode->vrefresh == debug->vrefresh && mode->clock <= dp_disp->max_pclk_khz) return MODE_OK; else return MODE_ERROR; } else { if (mode->vrefresh == 0) { int vrefresh = (mode->clock * 1000) / (mode->vtotal * mode->htotal); if (vrefresh > 60) mode->vrefresh = drm_mode_vrefresh(mode); if (mode->vrefresh > 60) return MODE_BAD; } if (mode->clock > dp_disp->max_pclk_khz) return MODE_BAD; else if (debug->debug_en && (mode->hdisplay != debug->hdisplay || mode->vdisplay != debug->vdisplay || mode->vrefresh != debug->vrefresh || mode->picture_aspect_ratio != debug->aspect_ratio)) return MODE_BAD; return MODE_OK; } } Loading
drivers/gpu/drm/msm/dp/dp_debug.c +9 −7 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ static ssize_t dp_debug_write_edid_modes(struct file *file, struct dp_debug_private *debug = file->private_data; char buf[SZ_32]; size_t len = 0; int hdisplay = 0, vdisplay = 0, vrefresh = 0; int hdisplay = 0, vdisplay = 0, vrefresh = 0, aspect_ratio; if (!debug) return -ENODEV; Loading @@ -89,7 +89,8 @@ static ssize_t dp_debug_write_edid_modes(struct file *file, buf[len] = '\0'; if (sscanf(buf, "%d %d %d", &hdisplay, &vdisplay, &vrefresh) != 3) if (sscanf(buf, "%d %d %d %d", &hdisplay, &vdisplay, &vrefresh, &aspect_ratio) != 4) goto clear; if (!hdisplay || !vdisplay || !vrefresh) Loading @@ -99,6 +100,7 @@ static ssize_t dp_debug_write_edid_modes(struct file *file, debug->dp_debug.hdisplay = hdisplay; debug->dp_debug.vdisplay = vdisplay; debug->dp_debug.vrefresh = vrefresh; debug->dp_debug.aspect_ratio = aspect_ratio; goto end; clear: pr_debug("clearing debug modes\n"); Loading Loading @@ -198,11 +200,11 @@ static ssize_t dp_debug_read_edid_modes(struct file *file, list_for_each_entry(mode, &connector->modes, head) { len += snprintf(buf + len, SZ_4K - len, "%s %d %d %d %d %d %d %d %d %d 0x%x\n", mode->name, mode->vrefresh, mode->hdisplay, mode->hsync_start, mode->hsync_end, mode->htotal, mode->vdisplay, mode->vsync_start, mode->vsync_end, mode->vtotal, mode->flags); "%s %d %d %d %d %d %d %d %d %d %d 0x%x\n", mode->name, mode->vrefresh, mode->picture_aspect_ratio, mode->hdisplay, mode->hsync_start, mode->hsync_end, mode->htotal, mode->vdisplay, mode->vsync_start, mode->vsync_end, mode->vtotal, mode->flags); } if (copy_to_user(user_buff, buf, len)) { Loading
drivers/gpu/drm/msm/dp/dp_debug.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ */ struct dp_debug { bool debug_en; int aspect_ratio; int vdisplay; int hdisplay; int vrefresh; Loading
drivers/gpu/drm/msm/dp/dp_drm.c +14 −20 Original line number Diff line number Diff line Loading @@ -514,25 +514,19 @@ enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector, dp_disp = display; debug = dp_disp->get_debug(dp_disp); if (debug->debug_en) { if (mode->hdisplay == debug->hdisplay && mode->vdisplay == debug->vdisplay && mode->vrefresh == debug->vrefresh && mode->clock <= dp_disp->max_pclk_khz) return MODE_OK; else return MODE_ERROR; } else { if (mode->vrefresh == 0) { int vrefresh = (mode->clock * 1000) / (mode->vtotal * mode->htotal); if (vrefresh > 60) mode->vrefresh = drm_mode_vrefresh(mode); if (mode->vrefresh > 60) return MODE_BAD; } if (mode->clock > dp_disp->max_pclk_khz) return MODE_BAD; else if (debug->debug_en && (mode->hdisplay != debug->hdisplay || mode->vdisplay != debug->vdisplay || mode->vrefresh != debug->vrefresh || mode->picture_aspect_ratio != debug->aspect_ratio)) return MODE_BAD; return MODE_OK; } }