Added extra modes for H3 legacy, not working for me. Need to fine tune, added to h3 disp too

https://github.com/igorpecovnik/lib/issues/323
This commit is contained in:
Igor Pecovnik
2016-07-26 21:05:09 +02:00
parent 9b9d763474
commit 144f704c41
2 changed files with 361 additions and 4 deletions

View File

@@ -0,0 +1,288 @@
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 , 4 , 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,147140000, 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;

View File

@@ -25,6 +25,9 @@
#
# CHANGES:
#
# v0.4: Added new modes in a combination with kernel patch, but they refuse to work.
# Additional work is needed for all modes larger than 10
#
# v0.3: Added the ability to set the colour-range HDMI-output and spruced the
# output of h3disp in general with a splash of colour. Also, don't spit
# out so much text by default.
@@ -90,37 +93,100 @@ Main() {
case ${VideoMode} in
0|480i) # res
HDMIMode=0
pll_video=54
;;
1|576i) # res
HDMIMode=1
pll_video=54
;;
2|480p) # res
HDMIMode=2
pll_video=108
;;
3|576p) # res
HDMIMode=3
pll_video=108
;;
4|720p50|1280x720p50) # res
HDMIMode=4
pll_video=297
;;
5|720p60|720p|1280x720p60) # res
HDMIMode=5
pll_video=297
;;
6|1080i50|1920x1080i50) # res
HDMIMode=6
pll_video=297
;;
7|1080i60|1080i|1920x1080i60) # res
HDMIMode=7
pll_video=297
;;
8|1080p24|1920x1080p24) # res
HDMIMode=8
pll_video=297
;;
9|1080p50|1920x1080p50) # res
HDMIMode=9
pll_video=594
;;
10|1080p60|1080p|1920x1080p60) # res
HDMIMode=10
;;
pll_video=594
;;
11|1080p25|1080p|1920x1080p25) # res
HDMIMode=11
pll_video=297
;;
12|1080p30|1080p|1920x1080p30) # res
HDMIMode=12
pll_video=297
;;
13|1080p24_3d|1920x1080p24_3d) # res
HDMIMode=13
pll_video=594
;;
14|720p50_3d|1280x720p50_3d) # res
HDMIMode=14
pll_video=594
;;
15|720p60_3d|1280x720p60_3d) # res
HDMIMode=15
pll_video=594
;;
16|4kp30|3840x2160P30) # res
HDMIMode=16
pll_video=1188
;;
17|4kp25|3840x2160P25) # res
HDMIMode=17
pll_video=1188
;;
18|800x480) # res
HDMIMode=18
pll_video=108
;;
19|1024x768) # res
HDMIMode=19
pll_video=260
;;
20|1280x1024) # res
HDMIMode=20
pll_video=432
;;
21|1360x768) # res
HDMIMode=21
pll_video=342
;;
22|1440x900) # res
HDMIMode=22
pll_video=432
;;
23|1680x1050) # res
HDMIMode=23
pll_video=588
;;
*)
if [ "X${VideoMode}" = "X" ]; then
echo -e "$0: missing video mode. Try one of the following:\n"
@@ -134,7 +200,7 @@ Main() {
fi
echo -e "Now trying to patch script.bin with your settings. \c"
PatchScriptBin ${HDMIMode} ${DVIUsed}
PatchScriptBin ${HDMIMode} ${DVIUsed} ${pll_video}
echo "Successfully finished. Please reboot for changes to take effect"
# Let's see whether we have to collect debug output
@@ -239,9 +305,10 @@ ShowVideoModes() {
} # ShowVideoModes
PatchScriptBin() {
# This function will be called with 2 arguments:
# This function will be called with 3 arguments:
# $1 HDMI mode to set
# $2 wether HDMI-to-DVI converter should be used or not (has to be TRUE)
# $3 pll_video value
# check whether we've the necessary tools available
Fex2Bin="$(which fex2bin)"
@@ -283,6 +350,8 @@ PatchScriptBin() {
cp -p "${ScriptBin}" "${Path2ScriptBin}/script.bin.bak"
sed -i "/\[disp_init\]/a screen0_output_type = 3\nscreen0_output_mode = $1\nscreen1_output_type = 3\nscreen1_output_mode = $1" "${MyTmpFile}"
sed -i "/\[clock\]/a pll_video = $3" "${MyTmpFile}"
if [ -v ColourRange ]; then
sed -i "/\[disp_init\]/a screen0_out_color_range = ${ColourRange}" "${MyTmpFile}"
@@ -315,4 +384,4 @@ InstallSunxiTools() {
make install
} # InstallSunxiTools
Main "$@"
Main "$@"