uint32_t tmp = I915_READ(PORT_DFT2_G4X);
 
                tmp |= DC_BALANCE_RESET_VLV;
-               if (pipe == PIPE_A)
+               switch (pipe) {
+               case PIPE_A:
                        tmp |= PIPE_A_SCRAMBLE_RESET;
-               else
+                       break;
+               case PIPE_B:
                        tmp |= PIPE_B_SCRAMBLE_RESET;
-
+                       break;
+               case PIPE_C:
+                       tmp |= PIPE_C_SCRAMBLE_RESET;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                I915_WRITE(PORT_DFT2_G4X, tmp);
        }
 
        struct drm_i915_private *dev_priv = dev->dev_private;
        uint32_t tmp = I915_READ(PORT_DFT2_G4X);
 
-       if (pipe == PIPE_A)
+       switch (pipe) {
+       case PIPE_A:
                tmp &= ~PIPE_A_SCRAMBLE_RESET;
-       else
+               break;
+       case PIPE_B:
                tmp &= ~PIPE_B_SCRAMBLE_RESET;
+               break;
+       case PIPE_C:
+               tmp &= ~PIPE_C_SCRAMBLE_RESET;
+               break;
+       default:
+               return;
+       }
        if (!(tmp & PIPE_SCRAMBLE_RESET_MASK))
                tmp &= ~DC_BALANCE_RESET_VLV;
        I915_WRITE(PORT_DFT2_G4X, tmp);
 
 #define   DC_BALANCE_RESET                     (1 << 25)
 #define PORT_DFT2_G4X          (dev_priv->info.display_mmio_offset + 0x61154)
 #define   DC_BALANCE_RESET_VLV                 (1 << 31)
-#define   PIPE_SCRAMBLE_RESET_MASK             (0x3 << 0)
+#define   PIPE_SCRAMBLE_RESET_MASK             ((1 << 14) | (0x3 << 0))
+#define   PIPE_C_SCRAMBLE_RESET                        (1 << 14) /* chv */
 #define   PIPE_B_SCRAMBLE_RESET                        (1 << 1)
 #define   PIPE_A_SCRAMBLE_RESET                        (1 << 0)