Display-EDID verändern

Aus ThinkPad-Wiki

WORK IN PROGRESS WORK IN PROGRESS WORK IN PROGRESS

Thinkpads überprüfen beim starten ob das verbaute Display auch tatsächlich ein originales ist.
Bei einem Wechsel auf ein nicht-Lenovo Display wird dieses als solches erkannt und kann nicht genutzt werden.
Um eine Nutzung dennoch zu ermöglichen muss die EDID des Display angepasst werden um ein Lonovofabrikat vorzutäuschen.

Vorraussetzungen

  • Das alte Display ist noch eingebaut oder dessen EDID bekannt
  • Ein funktionierender externer Monitor
  • Generelle Kompatibilität zwischen Display und ThinkPad
  • Fals die Modifikation unter Windows erfolgt benötigt man noch eine registrierte Version von PowerStrip(~$30)

Vorgehen unter Windows

Vorgehen unter Linux

Achtung Gefahr!

Ich möchte an dieser Stelle ausdrücklich dadrauf hinweisen das bei Fehlern in den kommenden Kommandos schwerwiegende Schäden an der restlichen Hardware entstehen können!
Bei Unklarheiten unbedingt beim Techniker oder Forum des Vertrauens nachfragen und nicht einfach drauf los doktoren!
Die Modifikation, oder der Versuch der Modifikation, erfolgt ausdrücklich auf eigene Gefahr!

Benötigte Pakete

Um die EDID zu verändern werden folgende Pakete benötigt:

  • i2c-tools
  • lm-sensors

Diese lassen sich unter Ubuntu/LiuxMint bequem per apt-get installieren:

sudo apt-get install i2c-tools lm-sensors

Identifizierung des SMBus und Display-RAM

Jetzt gilt es den Vorhandenen SMBus Controller zu identifizieren.
Am einfachsten geht dies durch das starten des sonsor-detect Scripts von lm-sensors.

$ sudo /usr/sbin/sensors-detect
(...)
Do you want to probe the I2C/SMBus adapters now? (YES/no): 
Using driver `i2c-i801' for device 0000:00:1f.3: Intel ICH9
(...)

In diesem Fall wird ein I2C/SMBus gefunden und der passende Treiber als i2c-i801 identifiziert.


Da das Script den Treiber am Ende wieder entlädt muss dieser erneut geladen werden. Hinzu kommt noch ein Modul das von den i2c-tools benötigt wird.

sudo modprobe i2c-i801
sudo modprobe i2c-dev

Jetzt wird die Bus-Nummer des Displays am gefundenen SMBus ermittelt:

$ sudo i2cdetect -l
i2c-0	i2c       	i915 gmbus disabled             	I2C adapter
i2c-1	i2c       	i915 gmbus ssc                  	I2C adapter
i2c-2	i2c       	i915 GPIOB                      	I2C adapter
i2c-3	i2c       	i915 gmbus vga                  	I2C adapter
i2c-4	i2c       	i915 GPIOA                      	I2C adapter
i2c-5	i2c       	i915 gmbus panel                	I2C adapter
i2c-6	i2c       	i915 GPIOC                      	I2C adapter
i2c-7	i2c       	i915 gmbus dpc                  	I2C adapter
i2c-8	i2c       	i915 GPIOD                      	I2C adapter
i2c-9	i2c       	i915 gmbus dpb                  	I2C adapter
i2c-10	i2c       	i915 GPIOE                      	I2C adapter
i2c-11	i2c       	i915 gmbus reserved             	I2C adapter
i2c-12	i2c       	i915 gmbus dpd                  	I2C adapter
i2c-13	i2c       	i915 GPIOF                      	I2C adapter
i2c-14	i2c       	DPDDC-B                         	I2C adapter
i2c-15	i2c       	DPDDC-D                         	I2C adapter
i2c-16	smbus     	SMBus I801 adapter at 1c00      	SMBus adapter

Hier sitzt das Panel am Bus nummer 5

Die letzte fehlende Information ist die Adresse des EPROM's an diesem Port:

$ sudo i2cdetect 5
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-5.
I will probe address range 0x03-0x77.
Continue? [Y/n] Y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --   

Damit haben wir alles zusammen und können das Display an Bus 5 und Adresse 0x50 ansprechen.
Fals hier mehrere Adressen gefunden werden, so kann man diese einzeln Auslesen und an der Ausgabe erkennen ob es sich um die EDID des Display handelt(siehe nächster Abschnitt).

Auslesen der EDID-Iformationen

Anpassen der EDID-Informationen

Neuberechnung der EDID-Checksum

Schreiben der veränderten EDID-Informationen