]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
viafb: improve misc register handling
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
Sat, 17 Apr 2010 19:44:55 +0000 (19:44 +0000)
committerJonathan Corbet <corbet@lwn.net>
Fri, 7 May 2010 23:17:39 +0000 (17:17 -0600)
viafb: improve misc register handling

This patch improves the misc register handling by adding a modify
function for this to via_io.h and moving expanded definitions of the
relevant ports there. The code was changed to use those to improve
readability.

Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
drivers/video/via/hw.c
drivers/video/via/share.h
drivers/video/via/via_io.h

index b2bb24e23f330fdcb5af72d3acbd47714fe951ca..e356fe8d8a90f521442ec1763b2f5076b7232441 100644 (file)
@@ -1394,8 +1394,6 @@ u32 viafb_get_clk_value(int clk)
 /* Set VCLK*/
 void viafb_set_vclock(u32 CLK, int set_iga)
 {
-       unsigned char RegTemp;
-
        /* H.W. Reset : ON */
        viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7);
 
@@ -1468,8 +1466,7 @@ void viafb_set_vclock(u32 CLK, int set_iga)
        }
 
        /* Fire! */
-       RegTemp = inb(VIARMisc);
-       outb(RegTemp | (BIT2 + BIT3), VIAWMisc);
+       via_write_misc_reg_mask(0x0C, 0x0C); /* select external clock */
 }
 
 void viafb_load_crtc_timing(struct display_timing device_timing,
@@ -1713,6 +1710,7 @@ void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
        int index = 0;
        int h_addr, v_addr;
        u32 pll_D_N;
+       u8 polarity = 0;
 
        for (i = 0; i < video_mode->mode_array; i++) {
                index = i;
@@ -1741,20 +1739,11 @@ void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
        v_addr = crt_reg.ver_addr;
 
        /* update polarity for CRT timing */
-       if (crt_table[index].h_sync_polarity == NEGATIVE) {
-               if (crt_table[index].v_sync_polarity == NEGATIVE)
-                       outb((inb(VIARMisc) & (~(BIT6 + BIT7))) |
-                            (BIT6 + BIT7), VIAWMisc);
-               else
-                       outb((inb(VIARMisc) & (~(BIT6 + BIT7))) | (BIT6),
-                            VIAWMisc);
-       } else {
-               if (crt_table[index].v_sync_polarity == NEGATIVE)
-                       outb((inb(VIARMisc) & (~(BIT6 + BIT7))) | (BIT7),
-                            VIAWMisc);
-               else
-                       outb((inb(VIARMisc) & (~(BIT6 + BIT7))), VIAWMisc);
-       }
+       if (crt_table[index].h_sync_polarity == NEGATIVE)
+               polarity |= BIT6;
+       if (crt_table[index].v_sync_polarity == NEGATIVE)
+               polarity |= BIT7;
+       via_write_misc_reg_mask(polarity, BIT6 | BIT7);
 
        if (set_iga == IGA1) {
                viafb_unlock_crt();
@@ -2123,7 +2112,7 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
 
        /* Fill VPIT Parameters */
        /* Write Misc Register */
-       outb(VPIT.Misc, VIAWMisc);
+       outb(VPIT.Misc, VIA_MISC_REG_WRITE);
 
        /* Write Sequencer */
        for (i = 1; i <= StdSR; i++)
index f974c73335222bf7303e0d9ac80dd436732f6625..861b4142efadcb674d7d9d9d0de7fc6ea4863aa9 100644 (file)
@@ -45,8 +45,6 @@
 
 /* standard VGA IO port
 */
-#define VIARMisc    0x3CC
-#define VIAWMisc    0x3C2
 #define VIAStatus   0x3DA
 #define VIACR       0x3D4
 #define VIASR       0x3C4
index e1c1093def0073913c7be2ee5714a18c31304785..a3d2aca655405dcc1a1d759c2a89cc03af2c8bd3 100644 (file)
@@ -29,6 +29,9 @@
 #include <linux/types.h>
 #include <linux/io.h>
 
+#define VIA_MISC_REG_READ      0x03CC
+#define VIA_MISC_REG_WRITE     0x03C2
+
 /*
  * Indexed port operations.  Note that these are all multi-op
  * functions; every invocation will be racy if you're not holding
@@ -55,4 +58,10 @@ static inline void via_write_reg_mask(u16 port, u8 index, u8 data, u8 mask)
        outb((data & mask) | (old & ~mask), port + 1);
 }
 
+static inline void via_write_misc_reg_mask(u8 data, u8 mask)
+{
+       u8 old = inb(VIA_MISC_REG_READ);
+       outb((data & mask) | (old & ~mask), VIA_MISC_REG_WRITE);
+}
+
 #endif /* __VIA_IO_H__ */