OSDN Git Service

radeon: fix fence race condition hopefully
[android-x86/external-libdrm.git] / linux-core / dvo_ivch.c
index 80b85c8..788b072 100644 (file)
@@ -186,28 +186,32 @@ static bool ivch_read(struct intel_dvo_device *dvo, int addr, uint16_t *data)
 {
        struct ivch_priv *priv = dvo->dev_priv;
        struct intel_i2c_chan *i2cbus = dvo->i2c_bus;
-       u8 out_buf[2];
+       u8 out_buf[1];
        u8 in_buf[2];
 
        struct i2c_msg msgs[] = {
                {
                        .addr = i2cbus->slave_addr,
-                       .flags = 0,
+                       .flags = I2C_M_RD,
+                       .len = 0,
+               },
+               {
+                       .addr = 0,
+                       .flags = I2C_M_NOSTART,
                        .len = 1,
                        .buf = out_buf,
                },
                {
                        .addr = i2cbus->slave_addr,
-                       .flags = I2C_M_RD,
+                       .flags = I2C_M_RD | I2C_M_NOSTART,
                        .len = 2,
                        .buf = in_buf,
                }
        };
 
        out_buf[0] = addr;
-       out_buf[1] = 0;
 
-       if (i2c_transfer(&i2cbus->adapter, msgs, 2) == 2) {
+       if (i2c_transfer(&i2cbus->adapter, msgs, 3) == 3) {
                *data = (in_buf[1] << 8) | in_buf[0];
                return true;
        };
@@ -261,7 +265,7 @@ static bool ivch_init(struct intel_dvo_device *dvo,
        dvo->i2c_bus = i2cbus;
        dvo->i2c_bus->slave_addr = dvo->slave_addr;
        dvo->dev_priv = priv;
-       priv->quiet = TRUE;
+       priv->quiet = true;
 
        if (!ivch_read(dvo, VR00, &temp))
                goto out;
@@ -317,13 +321,13 @@ static void ivch_dpms(struct intel_dvo_device *dvo, int mode)
        if (!ivch_read(dvo, VR01, &vr01))
                return;
 
-       if (mode == DPMSModeOn)
+       if (mode == DRM_MODE_DPMS_ON)
                backlight = 1;
        else
                backlight = 0;
        ivch_write(dvo, VR80, backlight);
 
-       if (mode == DPMSModeOn)
+       if (mode == DRM_MODE_DPMS_ON)
                vr01 |= VR01_LCD_ENABLE | VR01_DVO_ENABLE;
        else
                vr01 &= ~(VR01_LCD_ENABLE | VR01_DVO_ENABLE);
@@ -335,7 +339,7 @@ static void ivch_dpms(struct intel_dvo_device *dvo, int mode)
                if (!ivch_read(dvo, VR30, &vr30))
                        break;
 
-               if (((vr30 & VR30_PANEL_ON) != 0) == (mode == DPMSModeOn))
+               if (((vr30 & VR30_PANEL_ON) != 0) == (mode == DRM_MODE_DPMS_ON))
                        break;
                udelay(1000);
        }