hdmi:use 30bit lcdc interface when output 10bit mode.
Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
This commit is contained in:
@@ -78,31 +78,31 @@ static inline void hdmi_wq_set_audio(struct hdmi *hdmi)
|
||||
|
||||
static void hdmi_wq_set_video(struct hdmi *hdmi)
|
||||
{
|
||||
struct hdmi_video video;
|
||||
struct hdmi_video *video = &(hdmi->video);
|
||||
int deepcolor;
|
||||
|
||||
DBG("%s\n", __func__);
|
||||
|
||||
video.sink_hdmi = hdmi->edid.sink_hdmi;
|
||||
video.format_3d = hdmi->mode_3d;
|
||||
video.colorimetry = hdmi->colorimetry;
|
||||
video->sink_hdmi = hdmi->edid.sink_hdmi;
|
||||
video->format_3d = hdmi->mode_3d;
|
||||
video->colorimetry = hdmi->colorimetry;
|
||||
/* For DVI, output RGB */
|
||||
if (hdmi->edid.sink_hdmi == 0) {
|
||||
video.color_output = HDMI_COLOR_RGB_0_255;
|
||||
video->color_output = HDMI_COLOR_RGB_0_255;
|
||||
} else {
|
||||
if (hdmi->colormode == HDMI_COLOR_AUTO) {
|
||||
if (hdmi->edid.ycbcr444)
|
||||
video.color_output = HDMI_COLOR_YCBCR444;
|
||||
video->color_output = HDMI_COLOR_YCBCR444;
|
||||
else if (hdmi->edid.ycbcr422)
|
||||
video.color_output = HDMI_COLOR_YCBCR422;
|
||||
video->color_output = HDMI_COLOR_YCBCR422;
|
||||
else
|
||||
video.color_output = HDMI_COLOR_RGB_16_235;
|
||||
video->color_output = HDMI_COLOR_RGB_16_235;
|
||||
} else {
|
||||
video.color_output = hdmi->colormode;
|
||||
video->color_output = hdmi->colormode;
|
||||
}
|
||||
}
|
||||
if (hdmi->vic & HDMI_VIDEO_YUV420) {
|
||||
video.color_output = HDMI_COLOR_YCBCR420;
|
||||
video->color_output = HDMI_COLOR_YCBCR420;
|
||||
deepcolor = hdmi->edid.deepcolor_420;
|
||||
} else {
|
||||
deepcolor = hdmi->edid.deepcolor;
|
||||
@@ -111,25 +111,24 @@ static void hdmi_wq_set_video(struct hdmi *hdmi)
|
||||
(deepcolor & HDMI_DEEP_COLOR_30BITS)) {
|
||||
if (hdmi->colordepth == HDMI_DEPP_COLOR_AUTO ||
|
||||
hdmi->colordepth == 10)
|
||||
video.color_output_depth = 10;
|
||||
video->color_output_depth = 10;
|
||||
} else {
|
||||
video.color_output_depth = 8;
|
||||
video->color_output_depth = 8;
|
||||
}
|
||||
|
||||
pr_info("hdmi output corlor mode is %d\n", video.color_output);
|
||||
video.color_input = HDMI_COLOR_RGB_0_255;
|
||||
pr_info("hdmi output corlor mode is %d\n", video->color_output);
|
||||
video->color_input = HDMI_COLOR_RGB_0_255;
|
||||
if (hdmi->property->feature & SUPPORT_YCBCR_INPUT) {
|
||||
if (video.color_output == HDMI_COLOR_YCBCR444 ||
|
||||
video.color_output == HDMI_COLOR_YCBCR422)
|
||||
video.color_input = HDMI_COLOR_YCBCR444;
|
||||
else if (video.color_output == HDMI_COLOR_YCBCR420)
|
||||
video.color_input = HDMI_COLOR_YCBCR420;
|
||||
if (video->color_output == HDMI_COLOR_YCBCR444 ||
|
||||
video->color_output == HDMI_COLOR_YCBCR422)
|
||||
video->color_input = HDMI_COLOR_YCBCR444;
|
||||
else if (video->color_output == HDMI_COLOR_YCBCR420)
|
||||
video->color_input = HDMI_COLOR_YCBCR420;
|
||||
}
|
||||
hdmi->colormode_input = video.color_input;
|
||||
hdmi_set_lcdc(hdmi);
|
||||
video.vic = hdmi->vic & HDMI_VIC_MASK;
|
||||
video->vic = hdmi->vic & HDMI_VIC_MASK;
|
||||
if (hdmi->ops->setvideo)
|
||||
hdmi->ops->setvideo(hdmi, &video);
|
||||
hdmi->ops->setvideo(hdmi, video);
|
||||
}
|
||||
|
||||
static void hdmi_wq_parse_edid(struct hdmi *hdmi)
|
||||
|
||||
@@ -54,14 +54,21 @@ static int hdmi_set_info(struct rk_screen *screen, struct hdmi *hdmi)
|
||||
|
||||
/* screen type & face */
|
||||
screen->type = SCREEN_HDMI;
|
||||
if (hdmi->colormode_input == HDMI_COLOR_RGB_0_255)
|
||||
if (hdmi->video.color_input == HDMI_COLOR_RGB_0_255)
|
||||
screen->color_mode = COLOR_RGB;
|
||||
else
|
||||
screen->color_mode = COLOR_YCBCR;
|
||||
if (hdmi->vic & HDMI_VIDEO_YUV420)
|
||||
screen->face = OUT_YUV_420;
|
||||
else
|
||||
screen->face = hdmi_mode[i].interface;
|
||||
if (hdmi->vic & HDMI_VIDEO_YUV420) {
|
||||
if (hdmi->video.color_output_depth == 10)
|
||||
screen->face = OUT_YUV_420_10BIT;
|
||||
else
|
||||
screen->face = OUT_YUV_420;
|
||||
} else {
|
||||
if (hdmi->video.color_output_depth == 10)
|
||||
screen->face = OUT_P101010;
|
||||
else
|
||||
screen->face = hdmi_mode[i].interface;
|
||||
}
|
||||
screen->pixelrepeat = hdmi_mode[i].pixelrepeat - 1;
|
||||
mode = (struct fb_videomode *)&(hdmi_mode[i].mode);
|
||||
|
||||
|
||||
@@ -398,7 +398,6 @@ struct hdmi {
|
||||
0 is unmute*/
|
||||
int colordepth; /* Output color depth*/
|
||||
int colormode; /* Output color mode*/
|
||||
int colormode_input; /* Input color mode*/
|
||||
int colorimetry; /* Output colorimetry */
|
||||
struct hdmi_edid edid; /* EDID information*/
|
||||
int enable; /* Enable flag*/
|
||||
@@ -406,7 +405,7 @@ struct hdmi {
|
||||
int vic; /* HDMI output video information code*/
|
||||
int mode_3d; /* HDMI output video 3d mode*/
|
||||
struct hdmi_audio audio; /* HDMI output audio information.*/
|
||||
|
||||
struct hdmi_video video; /* HDMI output video information.*/
|
||||
int xscale;
|
||||
int yscale;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user