summaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video')
-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 132d811..d6bbb0a 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)
set_lvds2_state(state);
}
+void via_set_sync_polarity(u32 devices, u8 polarity)
+{
+ if (polarity & ~(VIA_HSYNC_NEGATIVE | VIA_VSYNC_NEGATIVE)) {
+ printk(KERN_WARNING "viafb: Unsupported polarity: %d\n",
+ polarity);
+ return;
+ }
+
+ if (devices & VIA_CRT)
+ via_write_misc_reg_mask(polarity << 6, 0xC0);
+ if (devices & VIA_DVP1)
+ via_write_reg_mask(VIACR, 0x9B, polarity << 5, 0x60);
+ if (devices & VIA_LVDS1)
+ via_write_reg_mask(VIACR, 0x99, polarity << 5, 0x60);
+ if (devices & VIA_LVDS2)
+ via_write_reg_mask(VIACR, 0x97, polarity << 5, 0x60);
+}
+
u32 via_parse_odev(char *input, char **end)
{
char *ptr = input;
@@ -2026,10 +2044,10 @@ void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
/* update polarity for CRT timing */
if (crt_table[index].h_sync_polarity == NEGATIVE)
- polarity |= BIT6;
+ polarity |= VIA_HSYNC_NEGATIVE;
if (crt_table[index].v_sync_polarity == NEGATIVE)
- polarity |= BIT7;
- via_write_misc_reg_mask(polarity, BIT6 | BIT7);
+ polarity |= VIA_VSYNC_NEGATIVE;
+ via_set_sync_polarity(VIA_CRT, polarity);
if (set_iga == IGA1) {
viafb_unlock_crt();
diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h
index b067cbb..ad6f9b1 100644
--- a/drivers/video/via/hw.h
+++ b/drivers/video/via/hw.h
@@ -47,6 +47,10 @@
#define VIA_STATE_SUSPEND 2
#define VIA_STATE_OFF 3
+/* VIA output device sync polarity */
+#define VIA_HSYNC_NEGATIVE 0x01
+#define VIA_VSYNC_NEGATIVE 0x02
+
/***************************************************
* Definition IGA1 Design Method of CRTC Registers *
****************************************************/
@@ -912,6 +916,7 @@ void viafb_load_reg(int timing_value, int viafb_load_reg_num,
int io_type);
void via_set_source(u32 devices, u8 iga);
void via_set_state(u32 devices, u8 state);
+void via_set_sync_polarity(u32 devices, u8 polarity);
u32 via_parse_odev(char *input, char **end);
void via_odev_to_seq(struct seq_file *m, u32 odev);
void init_ad9389(void);
OpenPOWER on IntegriCloud