diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 33dbd494d1..44d43cca9d 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -7150,7 +7150,7 @@ int dsi_display_find_mode(struct dsi_display *display, struct dsi_display_mode *m; struct dsi_dyn_clk_caps *dyn_clk_caps; unsigned int match_flags = DSI_MODE_MATCH_FULL_TIMINGS; - struct dsi_display_mode_priv_info priv_info; + struct dsi_display_mode_priv_info *priv_info; if (!display || !out_mode) return -EINVAL; @@ -7167,6 +7167,10 @@ int dsi_display_find_mode(struct dsi_display *display, return rc; } + priv_info = kzalloc(sizeof(struct dsi_display_mode_priv_info), GFP_KERNEL); + if (ZERO_OR_NULL_PTR(priv_info)) + return -ENOMEM; + mutex_lock(&display->display_lock); dyn_clk_caps = &(display->panel->dyn_clk_caps); for (i = 0; i < count; i++) { @@ -7183,9 +7187,7 @@ int dsi_display_find_mode(struct dsi_display *display, if (sub_mode && sub_mode->dsc_mode) { match_flags |= DSI_MODE_MATCH_DSC_CONFIG; - cmp->priv_info = &priv_info; - memset(cmp->priv_info, 0, - sizeof(struct dsi_display_mode_priv_info)); + cmp->priv_info = priv_info; cmp->priv_info->dsc_enabled = (sub_mode->dsc_mode == MSM_DISPLAY_DSC_MODE_ENABLED) ? true : false; } @@ -7200,6 +7202,7 @@ int dsi_display_find_mode(struct dsi_display *display, cmp->priv_info = NULL; mutex_unlock(&display->display_lock); + kfree(priv_info); if (!*out_mode) { DSI_ERR("[%s] failed to find mode for v_active %u h_active %u fps %u pclk %u\n",