staging/xgifb: Remove duplicated code from XGINew_DDRSizing340
authorPeter Huewe <peterhuewe@gmx.de>
Wed, 13 Jun 2012 22:21:44 +0000 (00:21 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 14 Jun 2012 00:15:41 +0000 (17:15 -0700)
Since XGINew_SetDRAMSize20Reg now handles both cases we can remove
the code duplication in XGINew_DDRSizing340.

Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/xgifb/vb_init.c

index 726c33561bd1f8f4030aca6fd32b300a3f0ec7ee..512284c3de91882335399ad7f824ee14a3965c57 100644 (file)
@@ -893,52 +893,38 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension,
 static int XGINew_DDRSizing340(struct xgi_hw_device_info *HwDeviceExtension,
                struct vb_device_info *pVBInfo)
 {
-       int i;
-       unsigned short memsize, addr;
+       u8 i, size;
+       unsigned short memsize, start_addr;
+       const unsigned short (*dram_table)[5];
 
        xgifb_reg_set(pVBInfo->P3c4, 0x15, 0x00); /* noninterleaving */
        xgifb_reg_set(pVBInfo->P3c4, 0x1C, 0x00); /* nontiling */
        XGINew_CheckChannel(HwDeviceExtension, pVBInfo);
 
        if (HwDeviceExtension->jChipType >= XG20) {
-               for (i = 0; i < 12; i++) {
-                       XGINew_SetDRAMSizingType(i,
-                                                XGINew_DDRDRAM_TYPE20,
-                                                pVBInfo);
-                       memsize = XGINew_SetDRAMSize20Reg(i,
-                                                         XGINew_DDRDRAM_TYPE20,
-                                                         pVBInfo);
-                       if (memsize == 0)
-                               continue;
-
-                       addr = memsize + (pVBInfo->ram_channel - 2) + 20;
-                       if ((HwDeviceExtension->ulVideoMemorySize - 1) <
-                           (unsigned long) (1 << addr))
-                               continue;
-
-                       if (XGINew_ReadWriteRest(addr, 5, pVBInfo) == 1)
-                               return 1;
-               }
+               dram_table = XGINew_DDRDRAM_TYPE20;
+               size = ARRAY_SIZE(XGINew_DDRDRAM_TYPE20);
+               start_addr = 5;
        } else {
-               for (i = 0; i < 4; i++) {
-                       XGINew_SetDRAMSizingType(i,
-                                                XGINew_DDRDRAM_TYPE340,
-                                                pVBInfo);
-                       memsize = XGINew_SetDRAMSize20Reg(i,
-                                                       XGINew_DDRDRAM_TYPE340,
-                                                       pVBInfo);
-
-                       if (memsize == 0)
-                               continue;
-
-                       addr = memsize + (pVBInfo->ram_channel - 2) + 20;
-                       if ((HwDeviceExtension->ulVideoMemorySize - 1) <
-                           (unsigned long) (1 << addr))
-                               continue;
-
-                       if (XGINew_ReadWriteRest(addr, 9, pVBInfo) == 1)
-                               return 1;
-               }
+               dram_table = XGINew_DDRDRAM_TYPE340;
+               size = ARRAY_SIZE(XGINew_DDRDRAM_TYPE340);
+               start_addr = 9;
+       }
+
+       for (i = 0; i < size; i++) {
+               XGINew_SetDRAMSizingType(i, dram_table, pVBInfo);
+               memsize = XGINew_SetDRAMSize20Reg(i, dram_table, pVBInfo);
+
+               if (memsize == 0)
+                       continue;
+
+               memsize += (pVBInfo->ram_channel - 2) + 20;
+               if ((HwDeviceExtension->ulVideoMemorySize - 1) <
+                       (unsigned long) (1 << memsize))
+                       continue;
+
+               if (XGINew_ReadWriteRest(memsize, start_addr, pVBInfo) == 1)
+                       return 1;
        }
        return 0;
 }