aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/via/hw.c
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2010-08-11 18:22:54 -0400
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2010-09-23 22:14:58 -0400
commitcd7e9103e983ff0f518ac0e85cee265027ccbfa4 (patch)
tree3a87b00683aee3adc2c4670b0cb85a15b5d7dbb0 /drivers/video/via/hw.c
parentbc6848875152f3df860d0f54a2323cc7615527d9 (diff)
viafb: merge the remaining output path with enable functions
This patch merges the remaining functionality of the output path function in the associated enabling functions. This is very natural as most of the remaining code does actually enable the device. Just some more or less intelligent code merge. If no stupid mistakes occured there should be no regressions. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: Joseph Chan <JosephChan@via.com.tw>
Diffstat (limited to 'drivers/video/via/hw.c')
-rw-r--r--drivers/video/via/hw.c164
1 files changed, 0 insertions, 164 deletions
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index c8f24058c570..03303232e543 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/via/hw.c
@@ -718,10 +718,6 @@ static struct rgbLUT palLUT_table[] = {
718 0x00} 718 0x00}
719}; 719};
720 720
721static void dvi_patch_skew_dvp0(void);
722static void dvi_patch_skew_dvp_low(void);
723static void set_dvi_output_path(int set_iga, int output_interface);
724static void set_lcd_output_path(int set_iga, int output_interface);
725static void load_fix_bit_crtc_reg(void); 721static void load_fix_bit_crtc_reg(void);
726static void __devinit init_gfx_chip_info(int chip_type); 722static void __devinit init_gfx_chip_info(int chip_type);
727static void __devinit init_tmds_chip_info(void); 723static void __devinit init_tmds_chip_info(void);
@@ -944,21 +940,6 @@ void viafb_set_secondary_color_register(u8 index, u8 red, u8 green, u8 blue)
944 set_color_register(index, red, green, blue); 940 set_color_register(index, red, green, blue);
945} 941}
946 942
947void viafb_set_output_path(int device, int set_iga, int output_interface)
948{
949 switch (device) {
950 case DEVICE_CRT:
951 viafb_write_reg_mask(CR36, VIACR, 0x00, BIT4 + BIT5);
952 break;
953 case DEVICE_DVI:
954 set_dvi_output_path(set_iga, output_interface);
955 break;
956 case DEVICE_LCD:
957 set_lcd_output_path(set_iga, output_interface);
958 break;
959 }
960}
961
962static void set_source_common(u8 index, u8 offset, u8 iga) 943static void set_source_common(u8 index, u8 offset, u8 iga)
963{ 944{
964 u8 value, mask = 1 << offset; 945 u8 value, mask = 1 << offset;
@@ -1045,134 +1026,6 @@ void via_set_source(u32 devices, u8 iga)
1045 set_lvds2_source(iga); 1026 set_lvds2_source(iga);
1046} 1027}
1047 1028
1048static void dvi_patch_skew_dvp0(void)
1049{
1050 /* Reset data driving first: */
1051 viafb_write_reg_mask(SR1B, VIASR, 0, BIT1);
1052 viafb_write_reg_mask(SR2A, VIASR, 0, BIT4);
1053
1054 switch (viaparinfo->chip_info->gfx_chip_name) {
1055 case UNICHROME_P4M890:
1056 {
1057 if ((viaparinfo->tmds_setting_info->h_active == 1600) &&
1058 (viaparinfo->tmds_setting_info->v_active ==
1059 1200))
1060 viafb_write_reg_mask(CR96, VIACR, 0x03,
1061 BIT0 + BIT1 + BIT2);
1062 else
1063 viafb_write_reg_mask(CR96, VIACR, 0x07,
1064 BIT0 + BIT1 + BIT2);
1065 break;
1066 }
1067
1068 case UNICHROME_P4M900:
1069 {
1070 viafb_write_reg_mask(CR96, VIACR, 0x07,
1071 BIT0 + BIT1 + BIT2 + BIT3);
1072 viafb_write_reg_mask(SR1B, VIASR, 0x02, BIT1);
1073 viafb_write_reg_mask(SR2A, VIASR, 0x10, BIT4);
1074 break;
1075 }
1076
1077 default:
1078 {
1079 break;
1080 }
1081 }
1082}
1083
1084static void dvi_patch_skew_dvp_low(void)
1085{
1086 switch (viaparinfo->chip_info->gfx_chip_name) {
1087 case UNICHROME_K8M890:
1088 {
1089 viafb_write_reg_mask(CR99, VIACR, 0x03, BIT0 + BIT1);
1090 break;
1091 }
1092
1093 case UNICHROME_P4M900:
1094 {
1095 viafb_write_reg_mask(CR99, VIACR, 0x08,
1096 BIT0 + BIT1 + BIT2 + BIT3);
1097 break;
1098 }
1099
1100 case UNICHROME_P4M890:
1101 {
1102 viafb_write_reg_mask(CR99, VIACR, 0x0F,
1103 BIT0 + BIT1 + BIT2 + BIT3);
1104 break;
1105 }
1106
1107 default:
1108 {
1109 break;
1110 }
1111 }
1112}
1113
1114static void set_dvi_output_path(int set_iga, int output_interface)
1115{
1116 switch (output_interface) {
1117 case INTERFACE_DVP0:
1118 viafb_write_reg_mask(CR6B, VIACR, 0x01, BIT0);
1119 viafb_write_reg_mask(CR6C, VIACR, 0x21, BIT0 + BIT5);
1120 viafb_write_reg_mask(SR1E, VIASR, 0xC0, BIT7 + BIT6);
1121 dvi_patch_skew_dvp0();
1122 break;
1123
1124 case INTERFACE_DVP1:
1125 if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
1126 viafb_write_reg_mask(CR93, VIACR, 0x21, BIT0 + BIT5);
1127
1128 viafb_write_reg_mask(SR1E, VIASR, 0x30, BIT4 + BIT5);
1129 break;
1130 case INTERFACE_DFP_HIGH:
1131 if (viaparinfo->chip_info->gfx_chip_name != UNICHROME_CLE266)
1132 via_write_reg_mask(VIACR, CR97, 0x03, 0x03);
1133
1134 viafb_write_reg_mask(SR2A, VIASR, 0x0C, BIT2 + BIT3);
1135 break;
1136
1137 case INTERFACE_DFP_LOW:
1138 if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
1139 break;
1140 viafb_write_reg_mask(SR2A, VIASR, 0x03, BIT0 + BIT1);
1141 dvi_patch_skew_dvp_low();
1142 break;
1143 }
1144
1145 if (set_iga == IGA2) {
1146 /* Disable LCD Scaling */
1147 viafb_write_reg_mask(CR79, VIACR, 0x00, BIT0);
1148 }
1149}
1150
1151static void set_lcd_output_path(int set_iga, int output_interface)
1152{
1153 DEBUG_MSG(KERN_INFO
1154 "set_lcd_output_path, iga:%d,out_interface:%d\n",
1155 set_iga, output_interface);
1156
1157 viafb_write_reg_mask(CR6B, VIACR, 0x00, BIT3);
1158 viafb_write_reg_mask(CR6A, VIACR, 0x08, BIT3);
1159 switch (output_interface) {
1160 case INTERFACE_DFP:
1161 if ((UNICHROME_K8M890 == viaparinfo->chip_info->gfx_chip_name)
1162 || (UNICHROME_P4M890 ==
1163 viaparinfo->chip_info->gfx_chip_name))
1164 viafb_write_reg_mask(CR97, VIACR, 0x84,
1165 BIT7 + BIT2 + BIT1 + BIT0);
1166 case INTERFACE_DVP0:
1167 case INTERFACE_DVP1:
1168 case INTERFACE_DFP_HIGH:
1169 case INTERFACE_DFP_LOW:
1170 if (set_iga == IGA2)
1171 viafb_write_reg(CR91, VIACR, 0x00);
1172 break;
1173 }
1174}
1175
1176static void load_fix_bit_crtc_reg(void) 1029static void load_fix_bit_crtc_reg(void)
1177{ 1030{
1178 /* always set to 1 */ 1031 /* always set to 1 */
@@ -2447,9 +2300,6 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
2447 viafb_read_reg(VIACR, CR02) - 1); 2300 viafb_read_reg(VIACR, CR02) - 1);
2448 viafb_lock_crt(); 2301 viafb_lock_crt();
2449 } 2302 }
2450
2451 viafb_set_output_path(DEVICE_CRT,
2452 viaparinfo->crt_setting_info->iga_path, 0);
2453 } 2303 }
2454 2304
2455 if (viafb_DVI_ON) { 2305 if (viafb_DVI_ON) {
@@ -2469,10 +2319,6 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
2469 video_bpp, viaparinfo-> 2319 video_bpp, viaparinfo->
2470 tmds_setting_info->iga_path); 2320 tmds_setting_info->iga_path);
2471 } 2321 }
2472
2473 viafb_set_output_path(DEVICE_DVI,
2474 viaparinfo->tmds_setting_info->iga_path,
2475 viaparinfo->chip_info->tmds_chip_info.output_interface);
2476 } 2322 }
2477 2323
2478 if (viafb_LCD_ON) { 2324 if (viafb_LCD_ON) {
@@ -2493,11 +2339,6 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
2493 lvds_setting_info, 2339 lvds_setting_info,
2494 &viaparinfo->chip_info->lvds_chip_info); 2340 &viaparinfo->chip_info->lvds_chip_info);
2495 } 2341 }
2496
2497 viafb_set_output_path(DEVICE_LCD,
2498 viaparinfo->lvds_setting_info->iga_path,
2499 viaparinfo->chip_info->
2500 lvds_chip_info.output_interface);
2501 } 2342 }
2502 if (viafb_LCD2_ON) { 2343 if (viafb_LCD2_ON) {
2503 if (viafb_SAMM_ON && 2344 if (viafb_SAMM_ON &&
@@ -2517,11 +2358,6 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
2517 lvds_setting_info2, 2358 lvds_setting_info2,
2518 &viaparinfo->chip_info->lvds_chip_info2); 2359 &viaparinfo->chip_info->lvds_chip_info2);
2519 } 2360 }
2520
2521 viafb_set_output_path(DEVICE_LCD,
2522 viaparinfo->lvds_setting_info2->iga_path,
2523 viaparinfo->chip_info->
2524 lvds_chip_info2.output_interface);
2525 } 2361 }
2526 2362
2527 if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) 2363 if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700)