diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/via/hw.c | 24 | ||||
-rw-r--r-- | drivers/video/via/hw.h | 5 |
2 files changed, 26 insertions, 3 deletions
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index 132d811525ed..d6bbb0a05c3e 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
@@ -1151,6 +1151,24 @@ void via_set_state(u32 devices, u8 state) | |||
1151 | set_lvds2_state(state); | 1151 | set_lvds2_state(state); |
1152 | } | 1152 | } |
1153 | 1153 | ||
1154 | void via_set_sync_polarity(u32 devices, u8 polarity) | ||
1155 | { | ||
1156 | if (polarity & ~(VIA_HSYNC_NEGATIVE | VIA_VSYNC_NEGATIVE)) { | ||
1157 | printk(KERN_WARNING "viafb: Unsupported polarity: %d\n", | ||
1158 | polarity); | ||
1159 | return; | ||
1160 | } | ||
1161 | |||
1162 | if (devices & VIA_CRT) | ||
1163 | via_write_misc_reg_mask(polarity << 6, 0xC0); | ||
1164 | if (devices & VIA_DVP1) | ||
1165 | via_write_reg_mask(VIACR, 0x9B, polarity << 5, 0x60); | ||
1166 | if (devices & VIA_LVDS1) | ||
1167 | via_write_reg_mask(VIACR, 0x99, polarity << 5, 0x60); | ||
1168 | if (devices & VIA_LVDS2) | ||
1169 | via_write_reg_mask(VIACR, 0x97, polarity << 5, 0x60); | ||
1170 | } | ||
1171 | |||
1154 | u32 via_parse_odev(char *input, char **end) | 1172 | u32 via_parse_odev(char *input, char **end) |
1155 | { | 1173 | { |
1156 | char *ptr = input; | 1174 | char *ptr = input; |
@@ -2026,10 +2044,10 @@ void viafb_fill_crtc_timing(struct crt_mode_table *crt_table, | |||
2026 | 2044 | ||
2027 | /* update polarity for CRT timing */ | 2045 | /* update polarity for CRT timing */ |
2028 | if (crt_table[index].h_sync_polarity == NEGATIVE) | 2046 | if (crt_table[index].h_sync_polarity == NEGATIVE) |
2029 | polarity |= BIT6; | 2047 | polarity |= VIA_HSYNC_NEGATIVE; |
2030 | if (crt_table[index].v_sync_polarity == NEGATIVE) | 2048 | if (crt_table[index].v_sync_polarity == NEGATIVE) |
2031 | polarity |= BIT7; | 2049 | polarity |= VIA_VSYNC_NEGATIVE; |
2032 | via_write_misc_reg_mask(polarity, BIT6 | BIT7); | 2050 | via_set_sync_polarity(VIA_CRT, polarity); |
2033 | 2051 | ||
2034 | if (set_iga == IGA1) { | 2052 | if (set_iga == IGA1) { |
2035 | viafb_unlock_crt(); | 2053 | viafb_unlock_crt(); |
diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h index b067cbb45ebf..ad6f9b1cf40e 100644 --- a/drivers/video/via/hw.h +++ b/drivers/video/via/hw.h | |||
@@ -47,6 +47,10 @@ | |||
47 | #define VIA_STATE_SUSPEND 2 | 47 | #define VIA_STATE_SUSPEND 2 |
48 | #define VIA_STATE_OFF 3 | 48 | #define VIA_STATE_OFF 3 |
49 | 49 | ||
50 | /* VIA output device sync polarity */ | ||
51 | #define VIA_HSYNC_NEGATIVE 0x01 | ||
52 | #define VIA_VSYNC_NEGATIVE 0x02 | ||
53 | |||
50 | /*************************************************** | 54 | /*************************************************** |
51 | * Definition IGA1 Design Method of CRTC Registers * | 55 | * Definition IGA1 Design Method of CRTC Registers * |
52 | ****************************************************/ | 56 | ****************************************************/ |
@@ -912,6 +916,7 @@ void viafb_load_reg(int timing_value, int viafb_load_reg_num, | |||
912 | int io_type); | 916 | int io_type); |
913 | void via_set_source(u32 devices, u8 iga); | 917 | void via_set_source(u32 devices, u8 iga); |
914 | void via_set_state(u32 devices, u8 state); | 918 | void via_set_state(u32 devices, u8 state); |
919 | void via_set_sync_polarity(u32 devices, u8 polarity); | ||
915 | u32 via_parse_odev(char *input, char **end); | 920 | u32 via_parse_odev(char *input, char **end); |
916 | void via_odev_to_seq(struct seq_file *m, u32 odev); | 921 | void via_odev_to_seq(struct seq_file *m, u32 odev); |
917 | void init_ad9389(void); | 922 | void init_ad9389(void); |