summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_util.c61
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);
}
}
}