소스 검색

Kernel: Fix a long-standing problem with GMBus in Intel Grahpics code

Thanks to Andrew Kaster, which gave a review back in October, about a
big PR I opened (#15502), I managed to figure out why we always had a
problem with the first byte being read into the EDID buffer with the
GMBus code. It turns out that this simple invalid cast was making the
entire problem and using the correct AK::Array::data() method fixed this
notorious long standing problem for good.
Liav A 2 년 전
부모
커밋
ddc5c41253
1개의 변경된 파일1개의 추가작업 그리고 5개의 파일을 삭제
  1. 1 5
      Kernel/Graphics/Intel/NativeDisplayConnector.cpp

+ 1 - 5
Kernel/Graphics/Intel/NativeDisplayConnector.cpp

@@ -418,11 +418,7 @@ void IntelNativeDisplayConnector::gmbus_read_edid()
     {
         SpinlockLocker control_lock(m_control_lock);
         gmbus_write(DDC2_I2C_ADDRESS, 0);
-        gmbus_read(DDC2_I2C_ADDRESS, (u8*)&crt_edid_bytes, sizeof(crt_edid_bytes));
-        // FIXME: It seems like the returned EDID is almost correct,
-        // but the first byte is set to 0xD0 instead of 0x00.
-        // For now, this "hack" works well enough.
-        crt_edid_bytes[0] = 0x0;
+        gmbus_read(DDC2_I2C_ADDRESS, crt_edid_bytes.data(), crt_edid_bytes.size());
     }
     set_edid_bytes(crt_edid_bytes);
 }