]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/video/via/hw.c
Merge branch 'modules' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux...
[mv-sheeva.git] / drivers / video / via / hw.c
index 1628a5f93dc22b5977ba564257126a39d139d6aa..b996803ae2c18b1c85efd5a1ba99b98c3293e9d6 100644 (file)
@@ -18,7 +18,8 @@
  * Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-#include "via-core.h"
+
+#include <linux/via-core.h>
 #include "global.h"
 
 static struct pll_map pll_value[] = {
@@ -624,102 +625,6 @@ void viafb_set_iga_path(void)
        }
 }
 
-void via_set_primary_address(u32 addr)
-{
-       DEBUG_MSG(KERN_DEBUG "via_set_primary_address(0x%08X)\n", addr);
-       via_write_reg(VIACR, 0x0D, addr & 0xFF);
-       via_write_reg(VIACR, 0x0C, (addr >> 8) & 0xFF);
-       via_write_reg(VIACR, 0x34, (addr >> 16) & 0xFF);
-       via_write_reg_mask(VIACR, 0x48, (addr >> 24) & 0x1F, 0x1F);
-}
-
-void via_set_secondary_address(u32 addr)
-{
-       DEBUG_MSG(KERN_DEBUG "via_set_secondary_address(0x%08X)\n", addr);
-       /* secondary display supports only quadword aligned memory */
-       via_write_reg_mask(VIACR, 0x62, (addr >> 2) & 0xFE, 0xFE);
-       via_write_reg(VIACR, 0x63, (addr >> 10) & 0xFF);
-       via_write_reg(VIACR, 0x64, (addr >> 18) & 0xFF);
-       via_write_reg_mask(VIACR, 0xA3, (addr >> 26) & 0x07, 0x07);
-}
-
-void via_set_primary_pitch(u32 pitch)
-{
-       DEBUG_MSG(KERN_DEBUG "via_set_primary_pitch(0x%08X)\n", pitch);
-       /* spec does not say that first adapter skips 3 bits but old
-        * code did it and seems to be reasonable in analogy to 2nd adapter
-        */
-       pitch = pitch >> 3;
-       via_write_reg(VIACR, 0x13, pitch & 0xFF);
-       via_write_reg_mask(VIACR, 0x35, (pitch >> (8 - 5)) & 0xE0, 0xE0);
-}
-
-void via_set_secondary_pitch(u32 pitch)
-{
-       DEBUG_MSG(KERN_DEBUG "via_set_secondary_pitch(0x%08X)\n", pitch);
-       pitch = pitch >> 3;
-       via_write_reg(VIACR, 0x66, pitch & 0xFF);
-       via_write_reg_mask(VIACR, 0x67, (pitch >> 8) & 0x03, 0x03);
-       via_write_reg_mask(VIACR, 0x71, (pitch >> (10 - 7)) & 0x80, 0x80);
-}
-
-void via_set_primary_color_depth(u8 depth)
-{
-       u8 value;
-
-       DEBUG_MSG(KERN_DEBUG "via_set_primary_color_depth(%d)\n", depth);
-       switch (depth) {
-       case 8:
-               value = 0x00;
-               break;
-       case 15:
-               value = 0x04;
-               break;
-       case 16:
-               value = 0x14;
-               break;
-       case 24:
-               value = 0x0C;
-               break;
-       case 30:
-               value = 0x08;
-               break;
-       default:
-               printk(KERN_WARNING "via_set_primary_color_depth: "
-                       "Unsupported depth: %d\n", depth);
-               return;
-       }
-
-       via_write_reg_mask(VIASR, 0x15, value, 0x1C);
-}
-
-void via_set_secondary_color_depth(u8 depth)
-{
-       u8 value;
-
-       DEBUG_MSG(KERN_DEBUG "via_set_secondary_color_depth(%d)\n", depth);
-       switch (depth) {
-       case 8:
-               value = 0x00;
-               break;
-       case 16:
-               value = 0x40;
-               break;
-       case 24:
-               value = 0xC0;
-               break;
-       case 30:
-               value = 0x80;
-               break;
-       default:
-               printk(KERN_WARNING "via_set_secondary_color_depth: "
-                       "Unsupported depth: %d\n", depth);
-               return;
-       }
-
-       via_write_reg_mask(VIACR, 0x67, value, 0xC0);
-}
-
 static void set_color_register(u8 index, u8 red, u8 green, u8 blue)
 {
        outb(0xFF, 0x3C6); /* bit mask of palette */
@@ -1104,16 +1009,12 @@ void viafb_load_reg(int timing_value, int viafb_load_reg_num,
 void viafb_write_regx(struct io_reg RegTable[], int ItemNum)
 {
        int i;
-       unsigned char RegTemp;
 
        /*DEBUG_MSG(KERN_INFO "Table Size : %x!!\n",ItemNum ); */
 
-       for (i = 0; i < ItemNum; i++) {
-               outb(RegTable[i].index, RegTable[i].port);
-               RegTemp = inb(RegTable[i].port + 1);
-               RegTemp = (RegTemp & (~RegTable[i].mask)) | RegTable[i].value;
-               outb(RegTemp, RegTable[i].port + 1);
-       }
+       for (i = 0; i < ItemNum; i++)
+               via_write_reg_mask(RegTable[i].port, RegTable[i].index,
+                       RegTable[i].value, RegTable[i].mask);
 }
 
 void viafb_load_fetch_count_reg(int h_addr, int bpp_byte, int set_iga)
@@ -1494,8 +1395,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);
 
@@ -1568,8 +1467,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,
@@ -1813,6 +1711,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;
@@ -1841,20 +1740,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();
@@ -2223,13 +2113,11 @@ 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++) {
-               outb(i, VIASR);
-               outb(VPIT.SR[i - 1], VIASR + 1);
-       }
+       for (i = 1; i <= StdSR; i++)
+               via_write_reg(VIASR, i, VPIT.SR[i - 1]);
 
        viafb_write_reg_mask(0x15, VIASR, 0xA2, 0xA2);
        viafb_set_iga_path();
@@ -2238,10 +2126,8 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
        viafb_fill_crtc_timing(crt_timing, vmode_tbl, video_bpp / 8, IGA1);
 
        /* Write Graphic Controller */
-       for (i = 0; i < StdGR; i++) {
-               outb(i, VIAGR);
-               outb(VPIT.GR[i], VIAGR + 1);
-       }
+       for (i = 0; i < StdGR; i++)
+               via_write_reg(VIAGR, i, VPIT.GR[i]);
 
        /* Write Attribute Controller */
        for (i = 0; i < StdAR; i++) {