diff options
| author | Asaf Penso <apenso@codeaurora.org> | 2012-10-16 11:00:19 +0200 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:12:56 -0700 |
| commit | a8ee2af629d5c97d9c853b4aa2faeff2f8bfa836 (patch) | |
| tree | 43df747c017ad8948f5a309e3f2dc9f66af9d5d0 /drivers/video/fbdev | |
| parent | e4eb6694d4fe32e35bab97ca77e07496558d828e (diff) | |
msm: mdss: add support for different panel formats
Some panels have different color format requirement such as
RGB666 for EDP Panel. Add logic to detect panel resolution
based on panel bpp set by panel driver.
Change-Id: I4cad59033b8b4f807c2ed38b00451aab89737bb7
Signed-off-by: Asaf Penso <apenso@codeaurora.org>
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 | 21 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_hwio.h | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_intf_video.c | 2 |
3 files changed, 21 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index f51a8cb450fb..d68e6ac27de5 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -396,7 +396,6 @@ static int mdss_mdp_ctl_init(struct msm_fb_data_type *mfd) ctl->width = width; ctl->height = height; - ctl->dst_format = mfd->panel_info.out_format; if (!ctl->mixer_left) { ctl->mixer_left = @@ -467,6 +466,20 @@ static int mdss_mdp_ctl_init(struct msm_fb_data_type *mfd) ctl->opmode |= (ctl->intf_num << 4); + if (ctl->intf_num == MDSS_MDP_NO_INTF) { + ctl->dst_format = mfd->panel_info.out_format; + } else { + switch (mfd->panel_info.bpp) { + case 18: + ctl->dst_format = MDSS_MDP_PANEL_FORMAT_RGB666; + break; + case 24: + default: + ctl->dst_format = MDSS_MDP_PANEL_FORMAT_RGB888; + break; + } + } + if (ctl->mixer_right) { ctl->opmode |= MDSS_MDP_CTL_OP_PACK_3D_ENABLE | MDSS_MDP_CTL_OP_PACK_3D_H_ROW_INT; @@ -560,6 +573,12 @@ int mdss_mdp_ctl_on(struct msm_fb_data_type *mfd) temp |= (ctl->intf_type << ((ctl->intf_num - MDSS_MDP_INTF0) * 8)); MDSS_MDP_REG_WRITE(MDSS_MDP_REG_DISP_INTF_SEL, temp); + if (ctl->intf_num != MDSS_MDP_NO_INTF) { + off = MDSS_MDP_REG_INTF_OFFSET(ctl->intf_num); + MDSS_MDP_REG_WRITE(off + MDSS_MDP_REG_INTF_PANEL_FORMAT, + ctl->dst_format); + } + outsize = (mixer->height << 16) | mixer->width; off = MDSS_MDP_REG_LM_OFFSET(mixer->num); MDSS_MDP_REG_WRITE(off + MDSS_MDP_REG_LM_OUT_SIZE, outsize); diff --git a/drivers/video/fbdev/msm/mdss_mdp_hwio.h b/drivers/video/fbdev/msm/mdss_mdp_hwio.h index 130affc7b2dd..46269e79e7c0 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_hwio.h +++ b/drivers/video/fbdev/msm/mdss_mdp_hwio.h @@ -395,6 +395,7 @@ enum mdss_mpd_intf_index { #define MDSS_MDP_REG_INTF_FRAME_COUNT 0x0AC #define MDSS_MDP_REG_INTF_LINE_COUNT 0x0B0 #define MDSS_MDP_PANEL_FORMAT_RGB888 0x213F +#define MDSS_MDP_PANEL_FORMAT_RGB666 0x212A enum mdss_mdp_pingpong_index { MDSS_MDP_PINGPONG0, diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c index 1157ca1ea9a4..097ef3888b74 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c @@ -153,8 +153,6 @@ static int mdss_mdp_video_timegen_setup(struct mdss_mdp_ctl *ctl, p->hsync_skew); MDSS_MDP_REG_WRITE(off + MDSS_MDP_REG_INTF_POLARITY_CTL, polarity_ctl); - MDSS_MDP_REG_WRITE(off + MDSS_MDP_REG_INTF_PANEL_FORMAT, - MDSS_MDP_PANEL_FORMAT_RGB888); return 0; } |
