diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_util.c | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_util.c b/drivers/video/fbdev/msm/mdss_mdp_util.c index 87a14c425af9..7f58b8203713 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_util.c +++ b/drivers/video/fbdev/msm/mdss_mdp_util.c @@ -54,17 +54,23 @@ void mdss_mdp_format_flag_removal(u32 *table, u32 num, u32 remove_bits) } } -void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata) -{ #define SET_BIT(value, bit_num) \ { \ value[bit_num >> 3] |= (1 << (bit_num & 7)); \ - } \ + } +static inline void __set_pipes_supported_fmt(struct mdss_mdp_pipe *pipe_list, + int count, struct mdss_mdp_format_params *fmt) +{ + struct mdss_mdp_pipe *pipe = pipe_list; + int i, j; - struct mdss_mdp_pipe *vig_pipes = mdata->vig_pipes; - struct mdss_mdp_pipe *rgb_pipes = mdata->rgb_pipes; - struct mdss_mdp_pipe *dma_pipes = mdata->dma_pipes; - struct mdss_mdp_pipe *cur_pipes = mdata->cursor_pipes; + for (i = 0; i < count; i++, pipe += j) + for (j = 0; j < pipe->multirect.max_rects; j++) + SET_BIT(pipe[j].supported_formats, fmt->format); +} + +void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata) +{ struct mdss_mdp_writeback *wb = mdata->wb; bool has_tile = mdata->highest_bank_bit && !mdata->has_ubwc; bool has_ubwc = mdata->has_ubwc; @@ -81,9 +87,8 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata) mdata->mdss_caps_map)) continue; - for (j = 0; j < mdata->nvig_pipes; j++) - SET_BIT(vig_pipes[j].supported_formats, - fmt->format); + __set_pipes_supported_fmt(mdata->vig_pipes, + mdata->nvig_pipes, fmt); if (fmt->flag & VALID_ROT_WB_FORMAT) { for (j = 0; j < mdata->nwb; j++) @@ -97,19 +102,15 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata) } if (fmt->flag & VALID_MDP_CURSOR_FORMAT && mdata->ncursor_pipes) { - for (j = 0; j < mdata->ncursor_pipes; j++) - SET_BIT(cur_pipes[j].supported_formats, - fmt->format); + __set_pipes_supported_fmt(mdata->cursor_pipes, + mdata->ncursor_pipes, fmt); } if (!fmt->is_yuv) { - for (j = 0; j < mdata->nrgb_pipes; j++) - SET_BIT(rgb_pipes[j].supported_formats, - fmt->format); - - for (j = 0; j < mdata->ndma_pipes; j++) - SET_BIT(dma_pipes[j].supported_formats, - fmt->format); + __set_pipes_supported_fmt(mdata->rgb_pipes, + mdata->nrgb_pipes, fmt); + __set_pipes_supported_fmt(mdata->dma_pipes, + mdata->ndma_pipes, fmt); } } } @@ -123,8 +124,8 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata) mdata->mdss_caps_map)) continue; - for (j = 0; j < mdata->nvig_pipes; j++) - SET_BIT(vig_pipes[j].supported_formats, fmt->format); + __set_pipes_supported_fmt(mdata->vig_pipes, + mdata->nvig_pipes, fmt); if (fmt->flag & VALID_ROT_WB_FORMAT) { for (j = 0; j < mdata->nwb; j++) @@ -138,19 +139,15 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata) } if (fmt->flag & VALID_MDP_CURSOR_FORMAT && mdata->ncursor_pipes) { - for (j = 0; j < mdata->ncursor_pipes; j++) - SET_BIT(cur_pipes[j].supported_formats, - fmt->format); + __set_pipes_supported_fmt(mdata->cursor_pipes, + mdata->ncursor_pipes, fmt); } if (!fmt->is_yuv) { - for (j = 0; j < mdata->nrgb_pipes; j++) - SET_BIT(rgb_pipes[j].supported_formats, - fmt->format); - - for (j = 0; j < mdata->ndma_pipes; j++) - SET_BIT(dma_pipes[j].supported_formats, - fmt->format); + __set_pipes_supported_fmt(mdata->rgb_pipes, + mdata->nrgb_pipes, fmt); + __set_pipes_supported_fmt(mdata->dma_pipes, + mdata->ndma_pipes, fmt); } } } |
