diff --git a/common/hw-gfx-gma-i2c.adb b/common/hw-gfx-gma-i2c.adb
index 4b58dde..d8cdf44 100644
--- a/common/hw-gfx-gma-i2c.adb
+++ b/common/hw-gfx-gma-i2c.adb
@@ -71,6 +71,22 @@
 
    GMBUS5_2BYTE_INDEX_ENABLE        : constant :=   1 * 2 ** 31;
 
+   GMBUS_Regs : constant array (0 .. 5) of Registers.Registers_Index :=
+     (if Config.Has_PCH_GMBUS then
+        (0 => Registers.PCH_GMBUS0,
+         1 => Registers.PCH_GMBUS1,
+         2 => Registers.PCH_GMBUS2,
+         3 => Registers.PCH_GMBUS3,
+         4 => Registers.PCH_GMBUS4,
+         5 => Registers.PCH_GMBUS5)
+      else
+        (0 => Registers.GMCH_GMBUS0,
+         1 => Registers.GMCH_GMBUS1,
+         2 => Registers.GMCH_GMBUS2,
+         3 => Registers.GMCH_GMBUS3,
+         4 => Registers.GMCH_GMBUS4,
+         5 => Registers.GMCH_GMBUS5));
+
    function GMBUS1_TOTAL_BYTE_COUNT
      (Count : HW.GFX.I2C.Transfer_Length)
       return Word32 is
@@ -109,7 +125,7 @@
    is
       GMBUS2 : Word32;
    begin
-      Registers.Read (Registers.PCH_GMBUS2, GMBUS2);
+      Registers.Read (GMBUS_Regs (2), GMBUS2);
       Result := (GMBUS2 and (GMBUS2_HARDWARE_WAIT_PHASE or
                               GMBUS2_SLAVE_STALL_TIMEOUT_ERROR or
                               GMBUS2_GMBUS_INTERRUPT_STATUS or
@@ -120,9 +136,9 @@
    begin
       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
 
-      Registers.Write (Registers.PCH_GMBUS1, GMBUS1_SOFTWARE_CLEAR_INTERRUPT);
-      Registers.Write (Registers.PCH_GMBUS1, 0);
-      Registers.Write (Registers.PCH_GMBUS0, GMBUS0_PIN_PAIR_SELECT_NONE);
+      Registers.Write (GMBUS_Regs (1), GMBUS1_SOFTWARE_CLEAR_INTERRUPT);
+      Registers.Write (GMBUS_Regs (1), 0);
+      Registers.Write (GMBUS_Regs (0), GMBUS0_PIN_PAIR_SELECT_NONE);
 
       GMBUS_Ready (Success);
    end Reset_GMBUS;
@@ -138,7 +154,7 @@
       end if;
 
       -- TODO: Refactor + check for timeout.
-      Registers.Wait_Unset_Mask (Registers.PCH_GMBUS2, GMBUS2_INUSE);
+      Registers.Wait_Unset_Mask (GMBUS_Regs (2), GMBUS2_INUSE);
 
       GMBUS_Ready (Success);
       if not Success then
@@ -147,14 +163,14 @@
 
       if Success then
          Registers.Write
-           (Register => Registers.PCH_GMBUS0,
+           (Register => GMBUS_Regs (0),
             Value    => GMBUS0_GMBUS_RATE_SELECT_100KHZ or
                         GMBUS0_PIN_PAIR_SELECT (Port));
          Registers.Write
-           (Register => Registers.PCH_GMBUS4,
+           (Register => GMBUS_Regs (4),
             Value    => 0);
          Registers.Write
-           (Register => Registers.PCH_GMBUS5,
+           (Register => GMBUS_Regs (5),
             Value    => 0);
       end if;
    end Init_GMBUS;
@@ -164,10 +180,10 @@
    begin
       pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
 
-      Registers.Write (Registers.PCH_GMBUS0, GMBUS0_PIN_PAIR_SELECT_NONE);
+      Registers.Write (GMBUS_Regs (0), GMBUS0_PIN_PAIR_SELECT_NONE);
 
       -- Clear INUSE. TODO: Don't do it, if timeout occured (see above).
-      Registers.Write (Registers.PCH_GMBUS2, GMBUS2_INUSE);
+      Registers.Write (GMBUS_Regs (2), GMBUS2_INUSE);
 
       if Config.Ungate_GMBUS_Unit_Level then
          Registers.Unset_Mask
@@ -196,7 +212,7 @@
       Init_GMBUS (Port, Success);
       if Success then
          Registers.Write
-           (Register => Registers.PCH_GMBUS1,
+           (Register => GMBUS_Regs (1),
             Value    => GMBUS1_SOFTWARE_READY or
                         GMBUS1_BUS_CYCLE_INDEX or
                         GMBUS1_BUS_CYCLE_WAIT or
@@ -206,17 +222,17 @@
 
          while Success and then Transfered < Length loop
             Registers.Wait_Set_Mask
-              (Register => Registers.PCH_GMBUS2,
+              (Register => GMBUS_Regs (2),
                Mask     => GMBUS2_HARDWARE_READY,
                TOut_MS  => 55);
 
-            Registers.Read (Registers.PCH_GMBUS2, GMBUS2);
+            Registers.Read (GMBUS_Regs (2), GMBUS2);
             Success :=  (GMBUS2 and GMBUS2_HARDWARE_READY) /= 0 and
                         (GMBUS2 and GMBUS2_NAK_INDICATOR) = 0;
             if Success then
                Current := GFX.I2C.Transfer_Length'Min (Length, Transfered + 4);
 
-               Registers.Read (Registers.PCH_GMBUS3, GMBUS3);
+               Registers.Read (GMBUS_Regs (3), GMBUS3);
                for I in Transfered .. Current - 1 loop
                   Data (I) := Byte (GMBUS3 and 16#ff#);
                   GMBUS3 := Shift_Right (GMBUS3, 8);
@@ -226,13 +242,13 @@
          end loop;
          if Success then
             Registers.Wait_Set_Mask
-              (Register => Registers.PCH_GMBUS2,
+              (Register => GMBUS_Regs (2),
                Mask     => GMBUS2_HARDWARE_WAIT_PHASE);
             Registers.Write
-              (Register => Registers.PCH_GMBUS1,
+              (Register => GMBUS_Regs (1),
                Value    => GMBUS1_SOFTWARE_READY or GMBUS1_BUS_CYCLE_STOP);
             Registers.Wait_Unset_Mask
-              (Register => Registers.PCH_GMBUS2,
+              (Register => GMBUS_Regs (2),
                Mask     => GMBUS2_GMBUS_ACTIVE);
          end if;
       end if;
