From adf5f133f99e4ecb3f95cda4eec0de8db5c0c35c Mon Sep 17 00:00:00 2001 From: Ken Huang Date: Thu, 20 Aug 2020 15:11:55 +0800 Subject: msm/dsi: Fix mismatch between refresh rate and notifier Instead of current_mode, Kernel idle timer uses display_mode to switch refresh rate. Bug: 165768235 Test: enable refresh rate overlay and check fps state in sysfs node. Signed-off-by: Ken Huang Change-Id: Iea633600a7bf6f44c26ebd1d4251b73f9278ffbd --- msm/dsi/dsi_backlight.c | 4 +++- msm/dsi/dsi_panel.h | 1 + msm/dsi/dsi_panel_switch.c | 7 +++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/msm/dsi/dsi_backlight.c b/msm/dsi/dsi_backlight.c index 3726060d..a43212ab 100644 --- a/msm/dsi/dsi_backlight.c +++ b/msm/dsi/dsi_backlight.c @@ -699,7 +699,9 @@ static ssize_t state_show(struct device *dev, struct device_attribute *attr, mutex_unlock(&bl->state_lock); if (show_mode) { - const struct dsi_display_mode *mode = panel->cur_mode; + const struct dsi_display_mode *mode = + get_panel_display_mode(panel); + if (unlikely(!mode)) return -ENODEV; diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h index 67402485..01be1ea5 100644 --- a/msm/dsi/dsi_panel.h +++ b/msm/dsi/dsi_panel.h @@ -581,5 +581,6 @@ int dsi_panel_get_vendor_extinfo(struct dsi_panel *panel); ssize_t parse_byte_buf(u8 *out, size_t out_len, char *src, size_t src_len); int parse_u32_buf(char *src, size_t src_len, u32 *out, size_t out_len); +const struct dsi_display_mode *get_panel_display_mode(struct dsi_panel *panel); #endif /* _DSI_PANEL_H_ */ diff --git a/msm/dsi/dsi_panel_switch.c b/msm/dsi/dsi_panel_switch.c index 1dc00ff3..1362758c 100644 --- a/msm/dsi/dsi_panel_switch.c +++ b/msm/dsi/dsi_panel_switch.c @@ -441,6 +441,13 @@ static int panel_post_enable(struct dsi_panel *panel) return rc; } +const struct dsi_display_mode *get_panel_display_mode(struct dsi_panel *panel) +{ + struct panel_switch_data *pdata = panel->private_data; + + return unlikely(!pdata) ? NULL : pdata->display_mode; +} + static int panel_idle(struct dsi_panel *panel) { struct panel_switch_data *pdata = panel->private_data; -- cgit v1.2.3