diff options
| author | Adrian Salido-Moreno <adrianm@codeaurora.org> | 2013-06-07 10:34:37 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:18:02 -0700 |
| commit | d613a2aff43c7fd9e0e906f86fef43e9e62a8348 (patch) | |
| tree | 95616161a4e7329ed75b6d6ebee4e55d36d8596a /drivers/video/fbdev | |
| parent | b05a74b05ec48b69b8f04ab081e0f7015a558713 (diff) | |
msm: mdss: use panel framerate for performance calculations
Replace hard coded panel frame rate with proper calculations based on
panel size and clock rate.
Change-Id: I78ff239b989df15ef9b0559e02873292d7b2c3bb
Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_ctl.c | 3 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_util.c | 25 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_panel.h | 40 |
4 files changed, 43 insertions, 27 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index 1cd2dbd3e204..b08f9cb9b5fd 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -103,7 +103,7 @@ static void mdss_mdp_perf_mixer_update(struct mdss_mdp_mixer *mixer, u32 *clk_rate) { struct mdss_mdp_pipe *pipe; - const int fps = 60; + int fps = DEFAULT_FRAME_RATE; u32 quota, rate; u32 v_total; int i; @@ -121,6 +121,7 @@ static void mdss_mdp_perf_mixer_update(struct mdss_mdp_mixer *mixer, if (mixer->type == MDSS_MDP_MIXER_TYPE_INTF) { struct mdss_panel_info *pinfo; pinfo = &mixer->ctl->panel_data->panel_info; + fps = mdss_panel_get_framerate(pinfo); v_total = (pinfo->yres + pinfo->lcdc.v_back_porch + pinfo->lcdc.v_front_porch + pinfo->lcdc.v_pulse_width); diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index fcaa80bdb8c4..49fef24f914f 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -1667,7 +1667,7 @@ static int mdss_fb_get_metadata(struct msm_fb_data_type *mfd, switch (metadata->op) { case metadata_op_frame_rate: metadata->data.panel_frame_rate = - mdss_get_panel_framerate(mfd); + mdss_panel_get_framerate(mfd->panel_info); break; case metadata_op_get_caps: ret = mdss_fb_get_hw_caps(mfd, &metadata->data.caps); diff --git a/drivers/video/fbdev/msm/mdss_mdp_util.c b/drivers/video/fbdev/msm/mdss_mdp_util.c index a1da0c5b9e72..6af1c1543752 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_util.c +++ b/drivers/video/fbdev/msm/mdss_mdp_util.c @@ -29,7 +29,6 @@ #include "mdss_mdp.h" #include "mdss_mdp_formats.h" #include "mdss_debug.h" -#define DEFAULT_FRAME_RATE 60 enum { MDP_INTR_VSYNC_INTF_0, @@ -558,27 +557,3 @@ int mdss_mdp_get_img(struct msmfb_data *img, struct mdss_mdp_img_data *data) return ret; } - -u32 mdss_get_panel_framerate(struct msm_fb_data_type *mfd) -{ - u32 frame_rate = DEFAULT_FRAME_RATE; - u32 pixel_total; - struct mdss_panel_info *panel_info = mfd->panel_info; - - if ((panel_info->type == MIPI_VIDEO_PANEL) || - (panel_info->type == MIPI_CMD_PANEL)) { - frame_rate = panel_info->mipi.frame_rate; - } else { - pixel_total = (panel_info->lcdc.h_back_porch + - panel_info->lcdc.h_front_porch + - panel_info->lcdc.h_pulse_width + - panel_info->xres) * - (panel_info->lcdc.v_back_porch + - panel_info->lcdc.v_front_porch + - panel_info->lcdc.v_pulse_width + - panel_info->yres); - if (pixel_total) - frame_rate = panel_info->clk_rate / pixel_total; - } - return frame_rate; -} diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h index 1bf414fc1008..25ec6d226c89 100644 --- a/drivers/video/fbdev/msm/mdss_panel.h +++ b/drivers/video/fbdev/msm/mdss_panel.h @@ -23,6 +23,8 @@ struct panel_id { u16 type; }; +#define DEFAULT_FRAME_RATE 60 + /* panel type list */ #define NO_PANEL 0xffff /* No Panel */ #define MDDI_PANEL 1 /* MDDI */ @@ -270,6 +272,44 @@ struct mdss_panel_data { struct mdss_panel_data *next; }; +/** + * mdss_get_panel_framerate() - get panel frame rate based on panel information + * @panel_info: Pointer to panel info containing all panel information + */ +static inline u32 mdss_panel_get_framerate(struct mdss_panel_info *panel_info) +{ + u32 frame_rate, pixel_total; + + if (panel_info == NULL) + return DEFAULT_FRAME_RATE; + + switch (panel_info->type) { + case MIPI_VIDEO_PANEL: + case MIPI_CMD_PANEL: + frame_rate = panel_info->mipi.frame_rate; + break; + case WRITEBACK_PANEL: + frame_rate = DEFAULT_FRAME_RATE; + break; + default: + pixel_total = (panel_info->lcdc.h_back_porch + + panel_info->lcdc.h_front_porch + + panel_info->lcdc.h_pulse_width + + panel_info->xres) * + (panel_info->lcdc.v_back_porch + + panel_info->lcdc.v_front_porch + + panel_info->lcdc.v_pulse_width + + panel_info->yres); + if (pixel_total) + frame_rate = panel_info->clk_rate / pixel_total; + else + frame_rate = DEFAULT_FRAME_RATE; + + break; + } + return frame_rate; +} + int mdss_register_panel(struct platform_device *pdev, struct mdss_panel_data *pdata); #endif /* MDSS_PANEL_H */ |
