#define PFIT_AUTO_RATIOS 0x61238
 
 /* Backlight control */
-#define BLC_PWM_CTL            0x61254
-#define   BACKLIGHT_MODULATION_FREQ_SHIFT              (17)
 #define BLC_PWM_CTL2           0x61250 /* 965+ only */
-#define   BLM_COMBINATION_MODE (1 << 30)
+#define   BLM_PWM_ENABLE               (1 << 31)
+#define   BLM_COMBINATION_MODE         (1 << 30) /* gen4 only */
+#define   BLM_PIPE_SELECT              (1 << 29)
+#define   BLM_PIPE_SELECT_IVB          (3 << 29)
+#define   BLM_PIPE_A                   (0 << 29)
+#define   BLM_PIPE_B                   (1 << 29)
+#define   BLM_PIPE_C                   (2 << 29) /* ivb + */
+#define   BLM_PIPE(pipe)               ((pipe) << 29)
+#define   BLM_POLARITY_I965            (1 << 28) /* gen4 only */
+#define   BLM_PHASE_IN_INTERUPT_STATUS (1 << 26)
+#define   BLM_PHASE_IN_ENABLE          (1 << 25)
+#define   BLM_PHASE_IN_INTERUPT_ENABL  (1 << 24)
+#define   BLM_PHASE_IN_TIME_BASE_SHIFT (16)
+#define   BLM_PHASE_IN_TIME_BASE_MASK  (0xff << 16)
+#define   BLM_PHASE_IN_COUNT_SHIFT     (8)
+#define   BLM_PHASE_IN_COUNT_MASK      (0xff << 8)
+#define   BLM_PHASE_IN_INCR_SHIFT      (0)
+#define   BLM_PHASE_IN_INCR_MASK       (0xff << 0)
+#define BLC_PWM_CTL            0x61254
 /*
  * This is the most significant 15 bits of the number of backlight cycles in a
  * complete cycle of the modulated backlight control.
  *
  * The actual value is this field multiplied by two.
  */
-#define   BACKLIGHT_MODULATION_FREQ_MASK               (0x7fff << 17)
-#define   BLM_LEGACY_MODE                              (1 << 16)
+#define   BACKLIGHT_MODULATION_FREQ_SHIFT      (17)
+#define   BACKLIGHT_MODULATION_FREQ_MASK       (0x7fff << 17)
+#define   BLM_LEGACY_MODE                      (1 << 16) /* gen2 only */
 /*
  * This is the number of cycles out of the backlight modulation cycle for which
  * the backlight is on.
 
 #define BLC_HIST_CTL           0x61260
 
+/* New registers for PCH-split platforms. Safe where new bits show up, the
+ * register layout machtes with gen4 BLC_PWM_CTL[12]. */
+#define BLC_PWM_CPU_CTL2       0x48250
+#define BLC_PWM_CPU_CTL                0x48254
+
+/* PCH CTL1 is totally different, all but the below bits are reserved. CTL2 is
+ * like the normal CTL from gen4 and earlier. Hooray for confusing naming. */
+#define BLC_PWM_PCH_CTL1       0xc8250
+#define   BLM_PCH_PWM_ENABLE                   (1 << 30)
+#define   BLM_PCH_OVERRIDE_ENABLE              (1 << 30)
+#define   BLM_PCH_POLARITY                     (1 << 29)
+#define BLC_PWM_PCH_CTL2       0xc8254
+
 /* TV port control */
 #define TV_CTL                 0x68000
 /** Enables the TV encoder */
 #define PCH_LVDS       0xe1180
 #define  LVDS_DETECTED (1 << 1)
 
-#define BLC_PWM_CPU_CTL2       0x48250
-#define  PWM_ENABLE            (1 << 31)
-#define  PWM_PIPE_A            (0 << 29)
-#define  PWM_PIPE_B            (1 << 29)
-#define BLC_PWM_CPU_CTL                0x48254
-
-#define BLC_PWM_PCH_CTL1       0xc8250
-#define  PWM_PCH_ENABLE                (1 << 31)
-#define  PWM_POLARITY_ACTIVE_LOW       (1 << 29)
-#define  PWM_POLARITY_ACTIVE_HIGH      (0 << 29)
-#define  PWM_POLARITY_ACTIVE_LOW2      (1 << 28)
-#define  PWM_POLARITY_ACTIVE_HIGH2     (0 << 28)
-
-#define BLC_PWM_PCH_CTL2       0xc8254
-
 #define PCH_PP_STATUS          0xc7200
 #define PCH_PP_CONTROL         0xc7204
 #define  PANEL_UNLOCK_REGS     (0xabcd << 16)
 
 
                /* make sure PWM is enabled and locked to the LVDS pipe */
                pwm = I915_READ(BLC_PWM_CPU_CTL2);
-               if (pipe == 0 && (pwm & PWM_PIPE_B))
-                       I915_WRITE(BLC_PWM_CPU_CTL2, pwm & ~PWM_ENABLE);
+               if (pipe == 0 && (pwm & BLM_PIPE_B))
+                       I915_WRITE(BLC_PWM_CPU_CTL2, pwm & ~BLM_PWM_ENABLE);
                if (pipe)
-                       pwm |= PWM_PIPE_B;
+                       pwm |= BLM_PIPE_B;
                else
-                       pwm &= ~PWM_PIPE_B;
-               I915_WRITE(BLC_PWM_CPU_CTL2, pwm | PWM_ENABLE);
+                       pwm &= ~BLM_PIPE_B;
+               I915_WRITE(BLC_PWM_CPU_CTL2, pwm | BLM_PWM_ENABLE);
 
                pwm = I915_READ(BLC_PWM_PCH_CTL1);
-               pwm |= PWM_PCH_ENABLE;
+               pwm |= BLM_PCH_PWM_ENABLE;
                I915_WRITE(BLC_PWM_PCH_CTL1, pwm);
                /*
                 * Unlock registers and just