Просмотр исходного кода

disp: msm: dsi: use single mode for RFI feature

Currently, a different dsi_display_mode is created for
each combination of RFI frequency, but only one of
those modes is reported to the user. Hence,
it is not necessary to create multiple RFI modes anymore.

This change removes code to inflate the list of modes
by the number of RFI frequencies, removes pclk from
the mode name as it will change dynamically.

Change-Id: I0714de5e53f46d9f142da1f4562f65793de38e54
Signed-off-by: Amine Najahi <[email protected]>
Amine Najahi 4 лет назад
Родитель
Сommit
50de265951
3 измененных файлов с 12 добавлено и 55 удалено
  1. 7 44
      msm/dsi/dsi_display.c
  2. 2 3
      msm/dsi/dsi_drm.c
  3. 3 8
      msm/dsi/dsi_panel.c

+ 7 - 44
msm/dsi/dsi_display.c

@@ -6590,17 +6590,14 @@ void dsi_display_adjust_mode_timing(struct dsi_display *display,
 	}
 	}
 }
 }
 
 
-static void _dsi_display_populate_bit_clks(struct dsi_display *display,
-					   int start, int end, u32 *mode_idx)
+static void _dsi_display_populate_bit_clks(struct dsi_display *display, int start, int end)
 {
 {
 	struct dsi_dyn_clk_caps *dyn_clk_caps;
 	struct dsi_dyn_clk_caps *dyn_clk_caps;
-	struct dsi_display_mode *src, *dst;
+	struct dsi_display_mode *src;
 	struct dsi_host_common_cfg *cfg;
 	struct dsi_host_common_cfg *cfg;
-	struct dsi_display_mode_priv_info *priv_info;
-	int i, j, total_modes, bpp, lanes = 0;
-	size_t size = 0;
+	int i, bpp, lanes = 0;
 
 
-	if (!display || !mode_idx)
+	if (!display)
 		return;
 		return;
 
 
 	dyn_clk_caps = &(display->panel->dyn_clk_caps);
 	dyn_clk_caps = &(display->panel->dyn_clk_caps);
@@ -6619,8 +6616,6 @@ static void _dsi_display_populate_bit_clks(struct dsi_display *display,
 	if (cfg->data_lanes & DSI_DATA_LANE_3)
 	if (cfg->data_lanes & DSI_DATA_LANE_3)
 		lanes++;
 		lanes++;
 
 
-	total_modes = display->panel->num_display_modes;
-
 	for (i = start; i < end; i++) {
 	for (i = start; i < end; i++) {
 		src = &display->modes[i];
 		src = &display->modes[i];
 		if (!src)
 		if (!src)
@@ -6634,43 +6629,10 @@ static void _dsi_display_populate_bit_clks(struct dsi_display *display,
 
 
 		dsi_display_adjust_mode_timing(display, src, lanes, bpp);
 		dsi_display_adjust_mode_timing(display, src, lanes, bpp);
 
 
-		src->pixel_clk_khz =
-			div_u64(src->timing.clk_rate_hz * lanes, bpp);
+		src->pixel_clk_khz = div_u64(src->timing.clk_rate_hz * lanes, bpp);
 		src->pixel_clk_khz /= 1000;
 		src->pixel_clk_khz /= 1000;
 		src->pixel_clk_khz *= display->ctrl_count;
 		src->pixel_clk_khz *= display->ctrl_count;
 	}
 	}
-
-	for (i = 1; i < dyn_clk_caps->bit_clk_list_len; i++) {
-		if (*mode_idx >= total_modes)
-			return;
-		for (j = start; j < end; j++) {
-			src = &display->modes[j];
-			dst = &display->modes[*mode_idx];
-
-			if (!src || !dst) {
-				DSI_ERR("invalid mode index\n");
-				return;
-			}
-			memcpy(dst, src, sizeof(struct dsi_display_mode));
-
-			size = sizeof(struct dsi_display_mode_priv_info);
-			priv_info = kzalloc(size, GFP_KERNEL);
-			dst->priv_info = priv_info;
-			if (dst->priv_info)
-				memcpy(dst->priv_info, src->priv_info, size);
-
-			dst->timing.clk_rate_hz = dyn_clk_caps->bit_clk_list[i];
-
-			dsi_display_adjust_mode_timing(display, dst, lanes,
-									bpp);
-			dst->panel_mode_caps = DSI_OP_VIDEO_MODE;
-			dst->pixel_clk_khz =
-				div_u64(dst->timing.clk_rate_hz * lanes, bpp);
-			dst->pixel_clk_khz /= 1000;
-			dst->pixel_clk_khz *= display->ctrl_count;
-			(*mode_idx)++;
-		}
-	}
 }
 }
 
 
 void dsi_display_put_mode(struct dsi_display *display,
 void dsi_display_put_mode(struct dsi_display *display,
@@ -6822,7 +6784,8 @@ int dsi_display_get_modes(struct dsi_display *display,
 		}
 		}
 		end = array_idx;
 		end = array_idx;
 
 
-		_dsi_display_populate_bit_clks(display, start, end, &array_idx);
+		_dsi_display_populate_bit_clks(display, start, end);
+
 		if (is_preferred) {
 		if (is_preferred) {
 			/* Set first timing sub mode as preferred mode */
 			/* Set first timing sub mode as preferred mode */
 			display->modes[start].is_preferred = true;
 			display->modes[start].is_preferred = true;

+ 2 - 3
msm/dsi/dsi_drm.c

@@ -130,10 +130,9 @@ void dsi_convert_to_drm_mode(const struct dsi_display_mode *dsi_mode,
 		drm_mode->flags |= DRM_MODE_FLAG_PVSYNC;
 		drm_mode->flags |= DRM_MODE_FLAG_PVSYNC;
 
 
 	/* set mode name */
 	/* set mode name */
-	snprintf(drm_mode->name, DRM_DISPLAY_MODE_LEN, "%dx%dx%dx%u%s",
+	snprintf(drm_mode->name, DRM_DISPLAY_MODE_LEN, "%dx%dx%d%s",
 			drm_mode->hdisplay, drm_mode->vdisplay,
 			drm_mode->hdisplay, drm_mode->vdisplay,
-			drm_mode_vrefresh(drm_mode), dsi_mode->pixel_clk_khz,
-			panel_caps);
+			drm_mode_vrefresh(drm_mode), panel_caps);
 }
 }
 
 
 static void dsi_convert_to_msm_mode(const struct dsi_display_mode *dsi_mode,
 static void dsi_convert_to_msm_mode(const struct dsi_display_mode *dsi_mode,

+ 3 - 8
msm/dsi/dsi_panel.c

@@ -3728,7 +3728,7 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel)
 	const u32 SINGLE_MODE_SUPPORT = 1;
 	const u32 SINGLE_MODE_SUPPORT = 1;
 	struct dsi_parser_utils *utils;
 	struct dsi_parser_utils *utils;
 	struct device_node *timings_np, *child_np;
 	struct device_node *timings_np, *child_np;
-	int num_dfps_rates, num_bit_clks;
+	int num_dfps_rates;
 	int num_video_modes = 0, num_cmd_modes = 0;
 	int num_video_modes = 0, num_cmd_modes = 0;
 	int count, rc = 0;
 	int count, rc = 0;
 	u32 dsc_count = 0, lm_count = 0;
 	u32 dsc_count = 0, lm_count = 0;
@@ -3787,21 +3787,16 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel)
 	num_dfps_rates = !panel->dfps_caps.dfps_support ? 1 :
 	num_dfps_rates = !panel->dfps_caps.dfps_support ? 1 :
 					panel->dfps_caps.dfps_list_len;
 					panel->dfps_caps.dfps_list_len;
 
 
-	num_bit_clks = !panel->dyn_clk_caps.dyn_clk_support ? 1 :
-					panel->dyn_clk_caps.bit_clk_list_len;
-
 	/*
 	/*
-	 * Inflate num_of_modes by fps and bit clks in dfps.
+	 * Inflate num_of_modes by fps in dfps.
 	 * Single command mode for video mode panels supporting
 	 * Single command mode for video mode panels supporting
 	 * panel operating mode switch.
 	 * panel operating mode switch.
 	 */
 	 */
-	num_video_modes = num_video_modes * num_bit_clks * num_dfps_rates;
+	num_video_modes = num_video_modes * num_dfps_rates;
 
 
 	if ((panel->panel_mode == DSI_OP_VIDEO_MODE) &&
 	if ((panel->panel_mode == DSI_OP_VIDEO_MODE) &&
 			(panel->panel_mode_switch_enabled))
 			(panel->panel_mode_switch_enabled))
 		num_cmd_modes  = 1;
 		num_cmd_modes  = 1;
-	else
-		num_cmd_modes = num_cmd_modes * num_bit_clks;
 
 
 	panel->num_display_modes = num_video_modes + num_cmd_modes;
 	panel->num_display_modes = num_video_modes + num_cmd_modes;