build/patch/kernel/sun8i-default/z-0003-add-additional-video-modes.patch
2016-11-30 21:12:20 +01:00

288 lines
12 KiB
Diff

diff --git a/drivers/video/sunxi/disp/de/disp_display.c b/drivers/video/sunxi/disp/de/disp_display.c
index b3f1075..9148329 100755
--- a/drivers/video/sunxi/disp/de/disp_display.c
+++ b/drivers/video/sunxi/disp/de/disp_display.c
@@ -740,6 +740,30 @@ s32 bsp_disp_get_screen_width_from_output_type(u32 screen_id, u32 output_type, u
width = 3840;
height = 2160;
break;
+ case DISP_TV_MOD_800_480P:
+ width = 800;
+ height = 480;
+ break;
+ case DISP_TV_MOD_1024_768P:
+ width = 1024;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1280_1024P:
+ width = 1280;
+ height = 1024;
+ break;
+ case DISP_TV_MOD_1360_768P:
+ width = 1360;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1440_900P:
+ width = 1440;
+ height = 900;
+ break;
+ case DISP_TV_MOD_1680_1050P:
+ width = 1680;
+ height = 1050;
+ break;
default:
printk("err:function:%s, line:%d,output_mode=%d\n", __func__, __LINE__, output_mode);
}
@@ -794,6 +818,30 @@ s32 bsp_disp_get_screen_height_from_output_type(u32 screen_id, u32 output_type,
width = 3840;
height = 2160;
break;
+ case DISP_TV_MOD_800_480P:
+ width = 800;
+ height = 480;
+ break;
+ case DISP_TV_MOD_1024_768P:
+ width = 1024;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1280_1024P:
+ width = 1280;
+ height = 1024;
+ break;
+ case DISP_TV_MOD_1360_768P:
+ width = 1360;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1440_900P:
+ width = 1440;
+ height = 900;
+ break;
+ case DISP_TV_MOD_1680_1050P:
+ width = 1680;
+ height = 1050;
+ break;
default:
printk("err:function:%s, line:%d,output_mode=%d\n", __func__, __LINE__, output_mode);
}
diff --git a/drivers/video/sunxi/disp2/disp/de/disp_display.c b/drivers/video/sunxi/disp2/disp/de/disp_display.c
index a390049..1af8af5 100755
--- a/drivers/video/sunxi/disp2/disp/de/disp_display.c
+++ b/drivers/video/sunxi/disp2/disp/de/disp_display.c
@@ -751,6 +751,30 @@ s32 bsp_disp_get_screen_width_from_output_type(u32 disp, u32 output_type, u32 ou
width = 3840;
height = 2160;
break;
+ case DISP_TV_MOD_800_480P:
+ width = 800;
+ height = 480;
+ break;
+ case DISP_TV_MOD_1024_768P:
+ width = 1024;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1280_1024P:
+ width = 1280;
+ height = 1024;
+ break;
+ case DISP_TV_MOD_1360_768P:
+ width = 1360;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1440_900P:
+ width = 1440;
+ height = 900;
+ break;
+ case DISP_TV_MOD_1680_1050P:
+ width = 1680;
+ height = 1050;
+ break;
}
}
/* FIXME: add other output device res */
@@ -803,6 +827,30 @@ s32 bsp_disp_get_screen_height_from_output_type(u32 disp, u32 output_type, u32 o
width = 3840;
height = 2160;
break;
+ case DISP_TV_MOD_800_480P:
+ width = 800;
+ height = 480;
+ break;
+ case DISP_TV_MOD_1024_768P:
+ width = 1024;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1280_1024P:
+ width = 1280;
+ height = 1024;
+ break;
+ case DISP_TV_MOD_1360_768P:
+ width = 1360;
+ height = 768;
+ break;
+ case DISP_TV_MOD_1440_900P:
+ width = 1440;
+ height = 900;
+ break;
+ case DISP_TV_MOD_1680_1050P:
+ width = 1680;
+ height = 1050;
+ break;
}
}
/* FIXME: add other output device res */
diff --git a/drivers/video/sunxi/disp2/hdmi/aw/hdmi_bsp_sun8iw7.c b/drivers/video/sunxi/disp2/hdmi/aw/hdmi_bsp_sun8iw7.c
index ddcb2b0..95b9a0f 100755
--- a/drivers/video/sunxi/disp2/hdmi/aw/hdmi_bsp_sun8iw7.c
+++ b/drivers/video/sunxi/disp2/hdmi/aw/hdmi_bsp_sun8iw7.c
@@ -46,6 +46,31 @@ static struct para_tab ptbl[] =
{{257 , 1 , 0, 96, 15, 10, 8, 2, 8, 0, 0, 0, 48, 176, 88, 112, 90, 1, 1 }},
{{258 , 1 , 0, 96, 15, 10, 8, 5, 8, 4, 0, 0, 160, 32, 88, 112, 90, 1, 1 }},
{{35 , 11 , 0, 0, 1, 3, 3, 0, 13, 0, 0, 208, 228, 80, 60, 208, 45, 0, 0 }},
+ // vic dclk int mx vst my mhbw vfp mhfp +x hbw hfp hst +y vbw h polarity v polarity
+ {{6 , 1 , 1, 1, 5, 3, 0, 1, 4, 0, 0, 160, 20, 38, 124, 240, 22, 0, 0 }},
+ {{21 , 11 , 1, 1, 5, 3, 1, 1, 2, 0, 0, 160, 32, 24, 126, 32, 24, 0, 0 }},
+ {{2 , 11 , 0, 0, 2, 6, 1, 0, 9, 0, 0, 208, 138, 16, 62, 224, 45, 0, 0 }},
+ {{17 , 11 , 0, 0, 2, 5, 2, 0, 5, 0, 0, 208, 144, 12, 64, 64, 49, 0, 0 }},
+ {{19 , 4 , 0, 96, 5, 5, 2, 2, 5, 1, 0, 0, 188, 184, 40, 208, 30, 1, 1 }},
+ {{4 , 4 , 0, 96, 5, 5, 2, 1, 5, 0, 0, 0, 114, 110, 40, 208, 30, 1, 1 }},
+ {{20 , 4 , 0, 97, 7, 5, 4, 2, 2, 2, 0, 128, 208, 16, 44, 56, 22, 1, 1 }},
+ {{5 , 4 , 0, 97, 7, 5, 4, 1, 2, 0, 0, 128, 24, 88, 44, 56, 22, 1, 1 }},
+ {{31 , 2 , 0, 96, 7, 5, 4, 2, 4, 2, 0, 128, 208, 16, 44, 56, 45, 1, 1 }},
+ {{16 , 2 , 0, 96, 7, 5, 4, 1, 4, 0, 0, 128, 24, 88, 44, 56, 45, 1, 1 }},
+ {{32 , 4 , 0, 96, 7, 5, 4, 3, 4, 2, 0, 128, 62, 126, 44, 56, 45, 1, 1 }},
+ {{33 , 4 , 0, 0, 7, 5, 4, 2, 4, 2, 0, 128, 208, 16, 44, 56, 45, 1, 1 }},
+ {{34 , 4 , 0, 0, 7, 5, 4, 1, 4, 0, 0, 128, 24, 88, 44, 56, 45, 1, 1 }},
+ {{160 , 2 , 0, 96, 7, 5, 8, 3, 4, 2, 0, 128, 62, 126, 44, 157, 45, 1, 1 }},
+ {{147 , 2 , 0, 96, 5, 5, 5, 2, 5, 1, 0, 0, 188, 184, 40, 190, 30, 1, 1 }},
+ {{132 , 2 , 0, 96, 5, 5, 5, 1, 5, 0, 0, 0, 114, 110, 40, 160, 30, 1, 1 }},
+ {{257 , 1 , 0, 96, 15, 10, 8, 2, 8, 0, 0, 0, 48, 176, 88, 112, 90, 1, 1 }},
+ {{258 , 1 , 0, 96, 15, 10, 8, 5, 8, 4, 0, 0, 160, 32, 88, 112, 90, 1, 1 }},
+ {{35 , 11 , 0, 0, 1, 3, 3, 0, 13, 0, 0, 208, 228, 80, 60, 208, 45, 0, 0 }},
+ {{36 , 4 , 0, 96, 4, 6, 3, 1, 3, 0, 0, 0, 64, 24, 136, 0, 32, 1, 1 }},
+ {{37 , 4 , 0, 96, 5, 3, 4, 1, 1, 0, 0, 0, 152, 48, 112, 0, 42, 1, 1 }},
+ {{38 , 4 , 0, 96, 5, 7, 3, 1, 3, 0, 0, 80, 176, 64, 112, 0, 32, 1, 1 }},
+ {{39 , 4 , 0, 96, 5, 9, 3, 1, 18, 0, 1, 160, 216, 32, 152, 132, 37, 1, 1 }},
+ {{40 , 2 , 0, 96, 6, 3, 4, 2, 1, 0, 0, 144, 64, 104, 184, 26, 44, 1, 1 }},
};
static unsigned char ca_table[64]=
diff --git a/drivers/video/sunxi/disp2/hdmi/aw/hdmi_core.c b/drivers/video/sunxi/disp2/hdmi/aw/hdmi_core.c
index 80580b4..5851d02 100755
--- a/drivers/video/sunxi/disp2/hdmi/aw/hdmi_core.c
+++ b/drivers/video/sunxi/disp2/hdmi/aw/hdmi_core.c
@@ -45,6 +45,11 @@ disp_video_timings video_timing[] =
{HDMI3840_2160P_30, 0,297000000, 0, 3840, 2160, 4400, 296, 176, 88, 2250, 72, 8, 10, 1, 1, 0, 0, 0},
{HDMI3840_2160P_25, 0,297000000, 0, 3840, 2160, 5280, 296, 1056, 88, 2250, 72, 8, 10, 1, 1, 0, 0, 0},
{HDMI800_480P, 0,27000000, 0, 800, 480, 1028, 88, 80, 60, 525, 29, 13, 3, 0, 0, 0, 0, 0},
+ {HDMI1024_768P, 0,65000000, 0, 1024, 768, 1344, 160, 24, 136, 806, 29, 3, 6, 0, 0, 0, 0, 0},
+ {HDMI1280_1024P, 0,108000000, 0, 1280, 1024, 1688, 248, 48, 112, 1066, 38, 1, 3, 1, 1, 0, 0, 0},
+ {HDMI1360_768P, 0,85500000, 0, 1360, 768, 1792, 256, 64, 112, 805, 17, 3, 17, 0, 0, 0, 0, 0},
+ {HDMI1440_900P, 0,108000000, 0, 1440, 900, 1848, 248, 48, 112, 942, 38, 1, 3, 1, 1, 0, 0, 0},
+ {HDMI1680_1050P, 0,147000000, 0, 1680, 1050, 2256, 288, 104, 184, 1087, 33, 1, 3, 1, 1, 0, 0, 0},
{ HDMI_EDID, },
};
diff --git a/drivers/video/sunxi/disp2/hdmi/aw/hdmi_edid.c b/drivers/video/sunxi/disp2/hdmi/aw/hdmi_edid.c
index 71ae0d3..e7437d8 100755
--- a/drivers/video/sunxi/disp2/hdmi/aw/hdmi_edid.c
+++ b/drivers/video/sunxi/disp2/hdmi/aw/hdmi_edid.c
@@ -163,6 +163,24 @@ static __s32 Parse_DTD_Block(__u8 *pbuf)
if ((sizex== 720) && (sizey == 480)) {
//Device_Support_VIC[HDMI480P] = 1;
}
+ if ((sizex== 800) && (sizey == 480)) {
+ Device_Support_VIC[HDMI800_480P] = 1;
+ }
+ if ((sizex== 1024) && (sizey == 768)) {
+ Device_Support_VIC[HDMI1024_768P] = 1;
+ }
+ if ((sizex== 1280) && (sizey == 1024)) {
+ Device_Support_VIC[HDMI1280_1024P] = 1;
+ }
+ if ((sizex== 1360) && (sizey == 768)) {
+ Device_Support_VIC[HDMI1360_768P] = 1;
+ }
+ if ((sizex== 1440) && (sizey == 900)) {
+ Device_Support_VIC[HDMI1440_900P] = 1;
+ }
+ if ((sizex== 1680) && (sizey == 1050)) {
+ Device_Support_VIC[HDMI1680_1050P] = 1;
+ }
if ((sizex== 1280) && (sizey == 720)) {
Device_Support_VIC[HDMI720P_60] = 1;
}
@@ -180,6 +198,24 @@ static __s32 Parse_DTD_Block(__u8 *pbuf)
if ((sizex== 720) && (sizey == 576)) {
Device_Support_VIC[HDMI576P] = 1;
}
+ if ((sizex== 800) && (sizey == 480)) {
+ Device_Support_VIC[HDMI800_480P] = 1;
+ }
+ if ((sizex== 1024) && (sizey == 768)) {
+ Device_Support_VIC[HDMI1024_768P] = 1;
+ }
+ if ((sizex== 1280) && (sizey == 1024)) {
+ Device_Support_VIC[HDMI1280_1024P] = 1;
+ }
+ if ((sizex== 1360) && (sizey == 768)) {
+ Device_Support_VIC[HDMI1360_768P] = 1;
+ }
+ if ((sizex== 1440) && (sizey == 900)) {
+ Device_Support_VIC[HDMI1440_900P] = 1;
+ }
+ if ((sizex== 1680) && (sizey == 1050)) {
+ Device_Support_VIC[HDMI1680_1050P] = 1;
+ }
if ((sizex== 1280) && (sizey == 720)) {
Device_Support_VIC[HDMI720P_50] = 1;
}
diff --git a/drivers/video/sunxi/disp2/hdmi/drv_hdmi.c b/drivers/video/sunxi/disp2/hdmi/drv_hdmi.c
index f0d2ae3..b510375 100755
--- a/drivers/video/sunxi/disp2/hdmi/drv_hdmi.c
+++ b/drivers/video/sunxi/disp2/hdmi/drv_hdmi.c
@@ -285,6 +285,11 @@ static struct disp_hdmi_mode hdmi_mode_tbl[] = {
{DISP_TV_MOD_3840_2160P_30HZ, HDMI3840_2160P_30, },
{DISP_TV_MOD_3840_2160P_25HZ, HDMI3840_2160P_25, },
{DISP_TV_MOD_800_480P, HDMI800_480P, },
+ {DISP_TV_MOD_1024_768P, HDMI1024_768P, },
+ {DISP_TV_MOD_1280_1024P, HDMI1280_1024P, },
+ {DISP_TV_MOD_1360_768P, HDMI1360_768P, },
+ {DISP_TV_MOD_1440_900P, HDMI1440_900P, },
+ {DISP_TV_MOD_1680_1050P, HDMI1680_1050P, },
};
__u32 Hdmi_get_vic(u32 mode)
diff --git a/drivers/video/sunxi/disp2/hdmi/hdmi_hal.h b/drivers/video/sunxi/disp2/hdmi/hdmi_hal.h
index 9074103..cf4a07f 100755
--- a/drivers/video/sunxi/disp2/hdmi/hdmi_hal.h
+++ b/drivers/video/sunxi/disp2/hdmi/hdmi_hal.h
@@ -17,6 +17,11 @@
#define HDMI1080P_25 33
#define HDMI1080P_30 34
#define HDMI800_480P 35
+#define HDMI1024_768P 36
+#define HDMI1280_1024P 37
+#define HDMI1360_768P 38
+#define HDMI1440_900P 39
+#define HDMI1680_1050P 40
#define HDMI1080P_24_3D_FP (HDMI1080P_24 +0x80)
#define HDMI720P_50_3D_FP (HDMI720P_50 +0x80)
#define HDMI720P_60_3D_FP (HDMI720P_60 +0x80)
diff --git a/include/video/sunxi_display2.h b/include/video/sunxi_display2.h
index c59aafb..98be01b 100755
--- a/include/video/sunxi_display2.h
+++ b/include/video/sunxi_display2.h
@@ -131,7 +131,12 @@ typedef enum
DISP_TV_MOD_3840_2160P_25HZ = 0x1d,
DISP_TV_MOD_3840_2160P_24HZ = 0x1e,
DISP_TV_MOD_800_480P = 0x1f,
- DISP_TV_MODE_NUM = 0x20,
+ DISP_TV_MOD_1024_768P = 0x20,
+ DISP_TV_MOD_1280_1024P = 0x21,
+ DISP_TV_MOD_1360_768P = 0x22,
+ DISP_TV_MOD_1440_900P = 0x23,
+ DISP_TV_MOD_1680_1050P = 0x24,
+ DISP_TV_MODE_NUM = 0x25,
}disp_tv_mode;