Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / nouveau / nv04_dac.c
index ea3627041ecf8e7eb4a59199d8c1c7e1e64fd437..e000455e06d0154000b97d6883614afa8ff5aa98 100644 (file)
@@ -74,14 +74,14 @@ static int sample_load_twice(struct drm_device *dev, bool sense[2])
                 * use a 10ms timeout (guards against crtc being inactive, in
                 * which case blank state would never change)
                 */
-               if (!nouveau_wait_until(dev, 10000000, NV_PRMCIO_INP0__COLOR,
-                                       0x00000001, 0x00000000))
+               if (!nouveau_wait_eq(dev, 10000000, NV_PRMCIO_INP0__COLOR,
+                                    0x00000001, 0x00000000))
                        return -EBUSY;
-               if (!nouveau_wait_until(dev, 10000000, NV_PRMCIO_INP0__COLOR,
-                                       0x00000001, 0x00000001))
+               if (!nouveau_wait_eq(dev, 10000000, NV_PRMCIO_INP0__COLOR,
+                                    0x00000001, 0x00000001))
                        return -EBUSY;
-               if (!nouveau_wait_until(dev, 10000000, NV_PRMCIO_INP0__COLOR,
-                                       0x00000001, 0x00000000))
+               if (!nouveau_wait_eq(dev, 10000000, NV_PRMCIO_INP0__COLOR,
+                                    0x00000001, 0x00000000))
                        return -EBUSY;
 
                udelay(100);
@@ -291,6 +291,8 @@ uint32_t nv17_dac_sample_load(struct drm_encoder *encoder)
        msleep(5);
 
        sample = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset);
+       /* do it again just in case it's a residual current */
+       sample &= NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset);
 
        temp = NVReadRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL);
        NVWriteRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL,
@@ -343,22 +345,13 @@ static void nv04_dac_prepare(struct drm_encoder *encoder)
 {
        struct drm_encoder_helper_funcs *helper = encoder->helper_private;
        struct drm_device *dev = encoder->dev;
-       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int head = nouveau_crtc(encoder->crtc)->index;
-       struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg;
 
        helper->dpms(encoder, DRM_MODE_DPMS_OFF);
 
        nv04_dfp_disable(dev, head);
-
-       /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f)
-        * at LCD__INDEX which we don't alter
-        */
-       if (!(crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] & 0x44))
-               crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] = 0;
 }
 
-
 static void nv04_dac_mode_set(struct drm_encoder *encoder,
                              struct drm_display_mode *mode,
                              struct drm_display_mode *adjusted_mode)