diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 8c86e981e4..28f0d7d32a 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -6224,9 +6224,16 @@ int dsi_display_get_modes(struct dsi_display *display, } end = array_idx; /* - * if dynamic clk switch is supported then update all the bit - * clk rates. + * if POMS is enabled and boot up mode is video mode, + * skip bit clk rates update for command mode, + * else if dynamic clk switch is supported then update all + * the bit clk rates. */ + + if (is_cmd_mode && + (display->panel->panel_mode == DSI_OP_VIDEO_MODE)) + continue; + _dsi_display_populate_bit_clks(display, start, end, &array_idx); } diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index 6c2fe136f0..61c6c7a0ab 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -3478,9 +3478,20 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel) 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 */ - panel->num_display_modes = (num_cmd_modes * num_bit_clks) + - (num_video_modes * num_bit_clks * num_dfps_rates); + /* + * Inflate num_of_modes by fps and bit clks in dfps. + * Single command mode for video mode panels supporting + * panel operating mode switch. + */ + num_video_modes = num_video_modes * num_bit_clks * num_dfps_rates; + + if ((panel->panel_mode == DSI_OP_VIDEO_MODE) && + (panel->panel_mode_switch_enabled)) + num_cmd_modes = 1; + else + num_cmd_modes = num_cmd_modes * num_bit_clks; + + panel->num_display_modes = num_video_modes + num_cmd_modes; error: return rc;