aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2010-09-18 19:47:28 -0400
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2010-09-23 22:15:16 -0400
commit7f0e153e2c0b15aa7427ad4ac550640e1e2e9c33 (patch)
tree98f82deced910e6dcc9cc9bde3fb139d699261f8
parente029ab0d02b94d633d8e82a46dfdb7fd94a62216 (diff)
viafb: add function to change sync polarity per device
At the moment only the sync polarity for CRT is handled but there are also bits for controlling the sync polarity for other output devices. Add a function to change those similar to the other output device functions. There is no runtime change yet as the code still handles only CRT. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: Joseph Chan <JosephChan@via.com.tw>
-rw-r--r--drivers/video/via/hw.c24
-rw-r--r--drivers/video/via/hw.h5
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
1154void 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
1154u32 via_parse_odev(char *input, char **end) 1172u32 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);
913void via_set_source(u32 devices, u8 iga); 917void via_set_source(u32 devices, u8 iga);
914void via_set_state(u32 devices, u8 state); 918void via_set_state(u32 devices, u8 state);
919void via_set_sync_polarity(u32 devices, u8 polarity);
915u32 via_parse_odev(char *input, char **end); 920u32 via_parse_odev(char *input, char **end);
916void via_odev_to_seq(struct seq_file *m, u32 odev); 921void via_odev_to_seq(struct seq_file *m, u32 odev);
917void init_ad9389(void); 922void init_ad9389(void);