Merge remote branch 'anholt/drm-intel-next' into drm-linus
authorDave Airlie <airlied@redhat.com>
Tue, 8 Dec 2009 04:03:47 +0000 (14:03 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 8 Dec 2009 04:03:47 +0000 (14:03 +1000)
This merges the upstream Intel tree and fixes up numerous conflicts
due to patches merged into Linus tree later in -rc cycle.

Conflicts:
drivers/char/agp/intel-agp.c
drivers/gpu/drm/drm_dp_i2c_helper.c
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_suspend.c

14 files changed:
1  2 
drivers/char/agp/intel-agp.c
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_dp_i2c_helper.c
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_suspend.c
drivers/gpu/drm/i915/intel_crt.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_dp.c
include/drm/drm.h
include/drm/drmP.h
include/drm/drm_crtc.h
include/drm/i915_drm.h

index 3cb56a049e249eed3eac9abb7d0e0c012fae067c,37cb4e2b2328e9c8eecad122e9b1bd47551a4c6c..37678550b3eb50386f214c89d7d1c5bbc64fe9c4
  #define PCI_DEVICE_ID_INTEL_G45_IG          0x2E22
  #define PCI_DEVICE_ID_INTEL_G41_HB          0x2E30
  #define PCI_DEVICE_ID_INTEL_G41_IG          0x2E32
- #define PCI_DEVICE_ID_INTEL_IGDNG_D_HB            0x0040
- #define PCI_DEVICE_ID_INTEL_IGDNG_D_IG            0x0042
- #define PCI_DEVICE_ID_INTEL_IGDNG_M_HB            0x0044
- #define PCI_DEVICE_ID_INTEL_IGDNG_MA_HB           0x0062
- #define PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB    0x006a
- #define PCI_DEVICE_ID_INTEL_IGDNG_M_IG            0x0046
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB         0x0040
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG         0x0042
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB         0x0044
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB        0x0062
++#define PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB    0x006a
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG         0x0046
  
  /* cover 915 and 945 variants */
  #define IS_I915 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_E7221_HB || \
                agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB || \
                agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G41_HB || \
                agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_B43_HB || \
-               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_D_HB || \
-               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_M_HB || \
-               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB || \
-               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB)
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB || \
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB || \
 -              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB)
++              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB || \
++              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB)
  
  extern int agp_memory_reserved;
  
@@@ -1357,10 -1361,9 +1357,10 @@@ static void intel_i965_get_gtt_range(in
        case PCI_DEVICE_ID_INTEL_G45_HB:
        case PCI_DEVICE_ID_INTEL_G41_HB:
        case PCI_DEVICE_ID_INTEL_B43_HB:
-       case PCI_DEVICE_ID_INTEL_IGDNG_D_HB:
-       case PCI_DEVICE_ID_INTEL_IGDNG_M_HB:
-       case PCI_DEVICE_ID_INTEL_IGDNG_MA_HB:
-       case PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB:
+       case PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB:
+       case PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB:
+       case PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB:
++      case PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB:
                *gtt_offset = *gtt_size = MB(2);
                break;
        default:
@@@ -2356,14 -2359,12 +2356,14 @@@ static const struct intel_driver_descri
            "B43", NULL, &intel_i965_driver },
        { PCI_DEVICE_ID_INTEL_G41_HB, PCI_DEVICE_ID_INTEL_G41_IG, 0,
            "G41", NULL, &intel_i965_driver },
-       { PCI_DEVICE_ID_INTEL_IGDNG_D_HB, PCI_DEVICE_ID_INTEL_IGDNG_D_IG, 0,
-           "IGDNG/D", NULL, &intel_i965_driver },
-       { PCI_DEVICE_ID_INTEL_IGDNG_M_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
-           "IGDNG/M", NULL, &intel_i965_driver },
-       { PCI_DEVICE_ID_INTEL_IGDNG_MA_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
-           "IGDNG/MA", NULL, &intel_i965_driver },
-       { PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
-           "IGDNG/MC2", NULL, &intel_i965_driver },
+       { PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB, PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG, 0,
+           "Ironlake/D", NULL, &intel_i965_driver },
+       { PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB, PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG, 0,
+           "Ironlake/M", NULL, &intel_i965_driver },
+       { PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB, PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG, 0,
+           "Ironlake/MA", NULL, &intel_i965_driver },
++      { PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB, PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG, 0,
++          "Ironlake/MC2", NULL, &intel_i965_driver },
        { 0, 0, 0, NULL, NULL, NULL }
  };
  
@@@ -2562,10 -2558,9 +2562,10 @@@ static struct pci_device_id agp_intel_p
        ID(PCI_DEVICE_ID_INTEL_G45_HB),
        ID(PCI_DEVICE_ID_INTEL_G41_HB),
        ID(PCI_DEVICE_ID_INTEL_B43_HB),
-       ID(PCI_DEVICE_ID_INTEL_IGDNG_D_HB),
-       ID(PCI_DEVICE_ID_INTEL_IGDNG_M_HB),
-       ID(PCI_DEVICE_ID_INTEL_IGDNG_MA_HB),
-       ID(PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB),
+       ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB),
+       ID(PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB),
+       ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB),
++      ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB),
        { }
  };
  
Simple merge
index f1c7c856e9db7b32d73598920c8e7247ee0e11f1,0000000000000000000000000000000000000000..548887c8506fa018139c2d83b29a50fd90c2b436
mode 100644,000000..100644
--- /dev/null
@@@ -1,209 -1,0 +1,209 @@@
-       DRM_DEBUG("dp_aux_xfer return %d\n", ret);
 +/*
 + * Copyright © 2009 Keith Packard
 + *
 + * Permission to use, copy, modify, distribute, and sell this software and its
 + * documentation for any purpose is hereby granted without fee, provided that
 + * the above copyright notice appear in all copies and that both that copyright
 + * notice and this permission notice appear in supporting documentation, and
 + * that the name of the copyright holders not be used in advertising or
 + * publicity pertaining to distribution of the software without specific,
 + * written prior permission.  The copyright holders make no representations
 + * about the suitability of this software for any purpose.  It is provided "as
 + * is" without express or implied warranty.
 + *
 + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 + * OF THIS SOFTWARE.
 + */
 +
 +#include <linux/kernel.h>
 +#include <linux/module.h>
 +#include <linux/delay.h>
 +#include <linux/slab.h>
 +#include <linux/init.h>
 +#include <linux/errno.h>
 +#include <linux/sched.h>
 +#include <linux/i2c.h>
 +#include "drm_dp_helper.h"
 +#include "drmP.h"
 +
 +/* Run a single AUX_CH I2C transaction, writing/reading data as necessary */
 +static int
 +i2c_algo_dp_aux_transaction(struct i2c_adapter *adapter, int mode,
 +                          uint8_t write_byte, uint8_t *read_byte)
 +{
 +      struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
 +      int ret;
 +      
 +      ret = (*algo_data->aux_ch)(adapter, mode,
 +                                 write_byte, read_byte);
 +      return ret;
 +}
 +
 +/*
 + * I2C over AUX CH
 + */
 +
 +/*
 + * Send the address. If the I2C link is running, this 'restarts'
 + * the connection with the new address, this is used for doing
 + * a write followed by a read (as needed for DDC)
 + */
 +static int
 +i2c_algo_dp_aux_address(struct i2c_adapter *adapter, u16 address, bool reading)
 +{
 +      struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
 +      int mode = MODE_I2C_START;
 +      int ret;
 +
 +      if (reading)
 +              mode |= MODE_I2C_READ;
 +      else
 +              mode |= MODE_I2C_WRITE;
 +      algo_data->address = address;
 +      algo_data->running = true;
 +      ret = i2c_algo_dp_aux_transaction(adapter, mode, 0, NULL);
 +      return ret;
 +}
 +
 +/*
 + * Stop the I2C transaction. This closes out the link, sending
 + * a bare address packet with the MOT bit turned off
 + */
 +static void
 +i2c_algo_dp_aux_stop(struct i2c_adapter *adapter, bool reading)
 +{
 +      struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
 +      int mode = MODE_I2C_STOP;
 +
 +      if (reading)
 +              mode |= MODE_I2C_READ;
 +      else
 +              mode |= MODE_I2C_WRITE;
 +      if (algo_data->running) {
 +              (void) i2c_algo_dp_aux_transaction(adapter, mode, 0, NULL);
 +              algo_data->running = false;
 +      }
 +}
 +
 +/*
 + * Write a single byte to the current I2C address, the
 + * the I2C link must be running or this returns -EIO
 + */
 +static int
 +i2c_algo_dp_aux_put_byte(struct i2c_adapter *adapter, u8 byte)
 +{
 +      struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
 +      int ret;
 +
 +      if (!algo_data->running)
 +              return -EIO;
 +
 +      ret = i2c_algo_dp_aux_transaction(adapter, MODE_I2C_WRITE, byte, NULL);
 +      return ret;
 +}
 +
 +/*
 + * Read a single byte from the current I2C address, the
 + * I2C link must be running or this returns -EIO
 + */
 +static int
 +i2c_algo_dp_aux_get_byte(struct i2c_adapter *adapter, u8 *byte_ret)
 +{
 +      struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
 +      int ret;
 +
 +      if (!algo_data->running)
 +              return -EIO;
 +
 +      ret = i2c_algo_dp_aux_transaction(adapter, MODE_I2C_READ, 0, byte_ret);
 +      return ret;
 +}
 +
 +static int
 +i2c_algo_dp_aux_xfer(struct i2c_adapter *adapter,
 +                   struct i2c_msg *msgs,
 +                   int num)
 +{
 +      int ret = 0;
 +      bool reading = false;
 +      int m;
 +      int b;
 +
 +      for (m = 0; m < num; m++) {
 +              u16 len = msgs[m].len;
 +              u8 *buf = msgs[m].buf;
 +              reading = (msgs[m].flags & I2C_M_RD) != 0;
 +              ret = i2c_algo_dp_aux_address(adapter, msgs[m].addr, reading);
 +              if (ret < 0)
 +                      break;
 +              if (reading) {
 +                      for (b = 0; b < len; b++) {
 +                              ret = i2c_algo_dp_aux_get_byte(adapter, &buf[b]);
 +                              if (ret < 0)
 +                                      break;
 +                      }
 +              } else {
 +                      for (b = 0; b < len; b++) {
 +                              ret = i2c_algo_dp_aux_put_byte(adapter, buf[b]);
 +                              if (ret < 0)
 +                                      break;
 +                      }
 +              }
 +              if (ret < 0)
 +                      break;
 +      }
 +      if (ret >= 0)
 +              ret = num;
 +      i2c_algo_dp_aux_stop(adapter, reading);
++      DRM_DEBUG_KMS("dp_aux_xfer return %d\n", ret);
 +      return ret;
 +}
 +
 +static u32
 +i2c_algo_dp_aux_functionality(struct i2c_adapter *adapter)
 +{
 +      return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
 +             I2C_FUNC_SMBUS_READ_BLOCK_DATA |
 +             I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
 +             I2C_FUNC_10BIT_ADDR;
 +}
 +
 +static const struct i2c_algorithm i2c_dp_aux_algo = {
 +      .master_xfer    = i2c_algo_dp_aux_xfer,
 +      .functionality  = i2c_algo_dp_aux_functionality,
 +};
 +
 +static void
 +i2c_dp_aux_reset_bus(struct i2c_adapter *adapter)
 +{
 +      (void) i2c_algo_dp_aux_address(adapter, 0, false);
 +      (void) i2c_algo_dp_aux_stop(adapter, false);
 +                                         
 +}
 +
 +static int
 +i2c_dp_aux_prepare_bus(struct i2c_adapter *adapter)
 +{
 +      adapter->algo = &i2c_dp_aux_algo;
 +      adapter->retries = 3;
 +      i2c_dp_aux_reset_bus(adapter);
 +      return 0;
 +}
 +
 +int
 +i2c_dp_aux_add_bus(struct i2c_adapter *adapter)
 +{
 +      int error;
 +      
 +      error = i2c_dp_aux_prepare_bus(adapter);
 +      if (error)
 +              return error;
 +      error = i2c_add_adapter(adapter);
 +      return error;
 +}
 +EXPORT_SYMBOL(i2c_dp_aux_add_bus);
Simple merge
Simple merge
index aa7fd82aa6eb343afa3fdb4b7088104f311f00d9,a31c9d5e29f32a1da1592ea8b1a9b69e708532db..ae17c4b45b31e68681e076b55c18d2fdfc60f9b3
@@@ -254,20 -273,16 +273,21 @@@ irqreturn_t ironlake_irq_handler(struc
  {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        int ret = IRQ_NONE;
-       u32 de_iir, gt_iir, de_ier;
-       u32 new_de_iir, new_gt_iir;
 -      u32 de_iir, gt_iir, pch_iir;
++      u32 de_iir, gt_iir, de_ier, pch_iir;
+       u32 new_de_iir, new_gt_iir, new_pch_iir;
        struct drm_i915_master_private *master_priv;
  
 +      /* disable master interrupt before clearing iir  */
 +      de_ier = I915_READ(DEIER);
 +      I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
 +      (void)I915_READ(DEIER);
 +
        de_iir = I915_READ(DEIIR);
        gt_iir = I915_READ(GTIIR);
+       pch_iir = I915_READ(SDEIIR);
  
        for (;;) {
-               if (de_iir == 0 && gt_iir == 0)
+               if (de_iir == 0 && gt_iir == 0 && pch_iir == 0)
                        break;
  
                ret = IRQ_HANDLED;
                        DRM_WAKEUP(&dev_priv->irq_queue);
                }
  
+               if (de_iir & DE_GSE)
+                       ironlake_opregion_gse_intr(dev);
+               /* check event from PCH */
+               if ((de_iir & DE_PCH_EVENT) &&
+                       (pch_iir & SDE_HOTPLUG_MASK)) {
+                       queue_work(dev_priv->wq, &dev_priv->hotplug_work);
+               }
                de_iir = new_de_iir;
                gt_iir = new_gt_iir;
+               pch_iir = new_pch_iir;
        }
  
 +      I915_WRITE(DEIER, de_ier);
 +      (void)I915_READ(DEIER);
 +
        return ret;
  }
  
index 6eec8171a44e55f6000ec5545b8f4733c4cbe86a,402a7eb2922c25cc1750fcc03d6070e36932067c..ab35e81b7cbff00075292a8def11226a00bbc496
@@@ -239,11 -239,6 +239,11 @@@ static void i915_save_modeset_reg(struc
        if (drm_core_check_feature(dev, DRIVER_MODESET))
                return;
  
-       if (IS_IGDNG(dev)) {
++      if (IS_IRONLAKE(dev)) {
 +              dev_priv->savePCH_DREF_CONTROL = I915_READ(PCH_DREF_CONTROL);
 +              dev_priv->saveDISP_ARB_CTL = I915_READ(DISP_ARB_CTL);
 +      }
 +
        /* Pipe & plane A info */
        dev_priv->savePIPEACONF = I915_READ(PIPEACONF);
        dev_priv->savePIPEASRC = I915_READ(PIPEASRC);
        dev_priv->saveVTOTAL_A = I915_READ(VTOTAL_A);
        dev_priv->saveVBLANK_A = I915_READ(VBLANK_A);
        dev_priv->saveVSYNC_A = I915_READ(VSYNC_A);
-       if (!IS_IGDNG(dev))
+       if (!IS_IRONLAKE(dev))
                dev_priv->saveBCLRPAT_A = I915_READ(BCLRPAT_A);
  
-       if (IS_IGDNG(dev)) {
+       if (IS_IRONLAKE(dev)) {
 +              dev_priv->savePIPEA_DATA_M1 = I915_READ(PIPEA_DATA_M1);
 +              dev_priv->savePIPEA_DATA_N1 = I915_READ(PIPEA_DATA_N1);
 +              dev_priv->savePIPEA_LINK_M1 = I915_READ(PIPEA_LINK_M1);
 +              dev_priv->savePIPEA_LINK_N1 = I915_READ(PIPEA_LINK_N1);
 +
                dev_priv->saveFDI_TXA_CTL = I915_READ(FDI_TXA_CTL);
                dev_priv->saveFDI_RXA_CTL = I915_READ(FDI_RXA_CTL);
  
        dev_priv->saveVTOTAL_B = I915_READ(VTOTAL_B);
        dev_priv->saveVBLANK_B = I915_READ(VBLANK_B);
        dev_priv->saveVSYNC_B = I915_READ(VSYNC_B);
-       if (!IS_IGDNG(dev))
+       if (!IS_IRONLAKE(dev))
                dev_priv->saveBCLRPAT_B = I915_READ(BCLRPAT_B);
  
-       if (IS_IGDNG(dev)) {
+       if (IS_IRONLAKE(dev)) {
 +              dev_priv->savePIPEB_DATA_M1 = I915_READ(PIPEB_DATA_M1);
 +              dev_priv->savePIPEB_DATA_N1 = I915_READ(PIPEB_DATA_N1);
 +              dev_priv->savePIPEB_LINK_M1 = I915_READ(PIPEB_LINK_M1);
 +              dev_priv->savePIPEB_LINK_N1 = I915_READ(PIPEB_LINK_N1);
 +
                dev_priv->saveFDI_TXB_CTL = I915_READ(FDI_TXB_CTL);
                dev_priv->saveFDI_RXB_CTL = I915_READ(FDI_RXB_CTL);
  
@@@ -385,11 -368,6 +385,11 @@@ static void i915_restore_modeset_reg(st
                fpb1_reg = FPB1;
        }
  
-       if (IS_IGDNG(dev)) {
++      if (IS_IRONLAKE(dev)) {
 +              I915_WRITE(PCH_DREF_CONTROL, dev_priv->savePCH_DREF_CONTROL);
 +              I915_WRITE(DISP_ARB_CTL, dev_priv->saveDISP_ARB_CTL);
 +      }
 +
        /* Pipe & plane A info */
        /* Prime the clock */
        if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) {
        I915_WRITE(VTOTAL_A, dev_priv->saveVTOTAL_A);
        I915_WRITE(VBLANK_A, dev_priv->saveVBLANK_A);
        I915_WRITE(VSYNC_A, dev_priv->saveVSYNC_A);
-       if (!IS_IGDNG(dev))
+       if (!IS_IRONLAKE(dev))
                I915_WRITE(BCLRPAT_A, dev_priv->saveBCLRPAT_A);
  
-       if (IS_IGDNG(dev)) {
+       if (IS_IRONLAKE(dev)) {
 +              I915_WRITE(PIPEA_DATA_M1, dev_priv->savePIPEA_DATA_M1);
 +              I915_WRITE(PIPEA_DATA_N1, dev_priv->savePIPEA_DATA_N1);
 +              I915_WRITE(PIPEA_LINK_M1, dev_priv->savePIPEA_LINK_M1);
 +              I915_WRITE(PIPEA_LINK_N1, dev_priv->savePIPEA_LINK_N1);
 +
                I915_WRITE(FDI_RXA_CTL, dev_priv->saveFDI_RXA_CTL);
                I915_WRITE(FDI_TXA_CTL, dev_priv->saveFDI_TXA_CTL);
  
        /* Actually enable it */
        I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B);
        DRM_UDELAY(150);
-       if (IS_I965G(dev) && !IS_IGDNG(dev))
 -      if (IS_I965G(dev))
++      if (IS_I965G(dev) && !IS_IRONLAKE(dev))
                I915_WRITE(DPLL_B_MD, dev_priv->saveDPLL_B_MD);
        DRM_UDELAY(150);
  
        I915_WRITE(VTOTAL_B, dev_priv->saveVTOTAL_B);
        I915_WRITE(VBLANK_B, dev_priv->saveVBLANK_B);
        I915_WRITE(VSYNC_B, dev_priv->saveVSYNC_B);
-       if (!IS_IGDNG(dev))
+       if (!IS_IRONLAKE(dev))
                I915_WRITE(BCLRPAT_B, dev_priv->saveBCLRPAT_B);
  
-       if (IS_IGDNG(dev)) {
+       if (IS_IRONLAKE(dev)) {
 +              I915_WRITE(PIPEB_DATA_M1, dev_priv->savePIPEB_DATA_M1);
 +              I915_WRITE(PIPEB_DATA_N1, dev_priv->savePIPEB_DATA_N1);
 +              I915_WRITE(PIPEB_LINK_M1, dev_priv->savePIPEB_LINK_M1);
 +              I915_WRITE(PIPEB_LINK_N1, dev_priv->savePIPEB_LINK_N1);
 +
                I915_WRITE(FDI_RXB_CTL, dev_priv->saveFDI_RXB_CTL);
                I915_WRITE(FDI_TXB_CTL, dev_priv->saveFDI_TXB_CTL);
  
Simple merge
Simple merge
index 63424d5db9c6f928f992e5fe4127c46c56632a68,632f1b44c28a83af873bd5dd5410ec0d0409ac3c..4e7aa8b7b938ba36ea101b4284a577c60b7145c0
@@@ -33,8 -33,9 +33,9 @@@
  #include "intel_drv.h"
  #include "i915_drm.h"
  #include "i915_drv.h"
 -#include "intel_dp.h"
 +#include "drm_dp_helper.h"
  
  #define DP_LINK_STATUS_SIZE   6
  #define DP_LINK_CHECK_TIMEOUT (10 * 1000)
  
@@@ -390,69 -391,9 +391,69 @@@ intel_dp_i2c_aux_ch(struct i2c_adapter 
                                                     struct intel_dp_priv,
                                                     adapter);
        struct intel_output *intel_output = dp_priv->intel_output;
 +      uint16_t address = algo_data->address;
 +      uint8_t msg[5];
 +      uint8_t reply[2];
 +      int msg_bytes;
 +      int reply_bytes;
 +      int ret;
 +
 +      /* Set up the command byte */
 +      if (mode & MODE_I2C_READ)
 +              msg[0] = AUX_I2C_READ << 4;
 +      else
 +              msg[0] = AUX_I2C_WRITE << 4;
 +
 +      if (!(mode & MODE_I2C_STOP))
 +              msg[0] |= AUX_I2C_MOT << 4;
  
 -      return intel_dp_aux_ch(intel_output,
 -                             send, send_bytes, recv, recv_bytes);
 +      msg[1] = address >> 8;
 +      msg[2] = address;
 +
 +      switch (mode) {
 +      case MODE_I2C_WRITE:
 +              msg[3] = 0;
 +              msg[4] = write_byte;
 +              msg_bytes = 5;
 +              reply_bytes = 1;
 +              break;
 +      case MODE_I2C_READ:
 +              msg[3] = 0;
 +              msg_bytes = 4;
 +              reply_bytes = 2;
 +              break;
 +      default:
 +              msg_bytes = 3;
 +              reply_bytes = 1;
 +              break;
 +      }
 +
 +      for (;;) {
 +        ret = intel_dp_aux_ch(intel_output,
 +                              msg, msg_bytes,
 +                              reply, reply_bytes);
 +              if (ret < 0) {
-                       DRM_DEBUG("aux_ch failed %d\n", ret);
++                      DRM_DEBUG_KMS("aux_ch failed %d\n", ret);
 +                      return ret;
 +              }
 +              switch (reply[0] & AUX_I2C_REPLY_MASK) {
 +              case AUX_I2C_REPLY_ACK:
 +                      if (mode == MODE_I2C_READ) {
 +                              *read_byte = reply[1];
 +                      }
 +                      return reply_bytes - 1;
 +              case AUX_I2C_REPLY_NACK:
-                       DRM_DEBUG("aux_ch nack\n");
++                      DRM_DEBUG_KMS("aux_ch nack\n");
 +                      return -EREMOTEIO;
 +              case AUX_I2C_REPLY_DEFER:
-                       DRM_DEBUG("aux_ch defer\n");
++                      DRM_DEBUG_KMS("aux_ch defer\n");
 +                      udelay(100);
 +                      break;
 +              default:
 +                      DRM_ERROR("aux_ch invalid reply 0x%02x\n", reply[0]);
 +                      return -EREMOTEIO;
 +              }
 +      }
  }
  
  static int
Simple merge
Simple merge
Simple merge
Simple merge