Installing a QXGA display in a R/T60 or 61

From ThinkWiki
Jump to: navigation, search

For 15.0" machines, you can install a QXGA (2048x1536) panel, the highest resolution panel ever sold for any laptop.

Compatibility

All 15.0" 60 machines - R60e, R60, T60, T60p

Possibly all 15.0" 61 machines - R61i, R61 (has anyone tested this?)

Frankenstein machines using a 60/61 15.0" chassis and a 60/61 14.1" standard screen motherboard (T61p motherboard in T60p case is most common, but others may work)

Frankenstein machines using a 60/61 15.0" chassis and a 60/61 15.4" standard screen motherboard (requires power sanding down four parts of the chassis. The HDD and DVD drives will stick out of the chassis, so upgrade to a mSATA SSD and don't use those drives)

Additional hardware necessary

If you have an XGA machine, I would recommend buying the SXGA+/UXGA inverter for your model. For the R6x machines, this is 41W1467. For the T60, this is 42T0079. Obviously, you'll need to buy the screen, which goes under several different part numbers, I'll list them in the next question. Otherwise, no additional hardware is needed - unlike the R5x and T4x machines, the 6x machines use the same cable and hinges for all screens, and uses an EDID ROM chip on the LCD to detect the screen resolution and that the panel is a Lenovo panel (which will have to be worked around.)

Compatible screen part numbers

There are two different screens that are otherwise identical, that will work for this. IDTech part numbers are listed first, followed by IBM part numbers. IAQX10N, 07N2890 IAQX10S, 92P6684

IAQX10S is the panel that IBM used in the R50p equipped with this screen. I believe the IAQX10N was used by NEC in the Versa Pro VA20S/AE (way back in 2002) and possibly a certain configuration of the LaVie G Type C in 2005. The IAQX10N is what's flooded the market - if you don't mind a refurbished panel, you can get one as low as $59. New ones are as low as $139. Either one will work, though, so if you've got a cheap IAQX10S (or even an old one from a R50p that you want to move over,) go for it.

EDID ROM info

Most monitors have a ROM containing Extended Display Information Data, or EDID. This information is used by the machine that the monitor is connected to, so as to provide resolution, timing, and manufacturer information. The R5x and T4x machines stored this information in the BIOS, I believe, and used a set of resistors in the LCD cable to choose which EDID the system would operate with.

The 6x machines change this. They store the EDID info in a chip on the LCD that's meant for this purpose, and also have a vendor string in the LCD. The purpose of that vendor string is to identify the LCD panel as a Lenovo genuine panel, and the machine refuses to recognize the LCD if it's not Lenovo.

Here is the current EDID data as of 2009-06-22, created by cirthix from the thinkpads.com forum with some information from Troels, also from there:

EDID BYTES:
0x   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    ------------------------------------------------
00 | 00 FF FF FF FF FF FF 00 30 AE 49 40 00 00 00 00
10 | 00 13 01 03 80 1E 16 78 EA BD 30 91 54 4F 8B 26
20 | 21 50 54 21 08 00 81 80 A9 40 01 01 01 01 01 01
30 | 01 01 01 01 01 01 29 40 00 50 80 00 05 60 20 10
40 | 13 00 30 E4 10 00 00 19 29 40 00 40 80 00 05 60
50 | 20 10 13 00 30 E4 10 00 00 19 00 00 00 0F 00 A9
60 | 43 32 A9 43 28 14 02 00 09 E5 00 00 00 00 00 FE
70 | 00 49 41 51 58 31 30 4E 20 51 58 47 41 0A 00 10

Directions

Note: These directions were not performed on a machine equipped with WWAN. It may be different on such a machine. If in doubt, follow the procedure listed in the Hardware Maintenance Manual instead.

Preparation

Windows:

  1. Purchase and install a copy of PowerStrip, make sure that it works, and that you can access the registered features.
  2. Put the contents of the EDID data into a file named qxga.dat.
NOTE!
This is not always necessary. I bought a panel, popped it into my T60, and it just worked. I had already purchased PowerStrip by this point, so $30 down the drain. Also, be aware that purchasing PowerStrip is a royal pain. First, although it is an on-line purchase, it is not instant. You are e-mailed a registration key later. Second, newer versions of PowerStrip lock away the EDID update functionality. You need to e-mail the company that makes it who will send you a special PIN code to activate. You will have a pretty substantial turnaround time to get it working (buy power strip, get e-mailed registration, e-mail asking for PIN, get e-mailed back a PIN).

Linux:

Use i2c-dump from the i2c-tools package.

You may check the current content with i2cdump -r 0-127 2 0x50' first. Afterwards, use i2cset -y 2 0x50 <offset> <value> to change the bytes that differ. This method may be a bit more complex for some users (i don't know how easy it is with powerstrip though), but has the advantage that it doesn't cost anything.

NOTE!
On my T60p with a IAQX10N, the i2c commands needed to look at bank 1 rather than 2, i.e. i2cdump -f -r 0-127 1 0x50; It's also necessary to modprobe the relevant i2c modules (such as i2c-dev). The i2cset process works but it is quite painstaking and needs to be carefully checked. See below for a program that automates the process.

Procedure

This is a simpler procedure than would be mentioned by the HMM. Except for the parts about running PowerStrip and an external monitor, these directions would be sufficient to replace a shattered LCD with another identical LCD, as well.

  1. Remove the three round screw covers and screws on the LCD bezel.
  2. GENTLY pop the LCD bezel loose. Set it aside.
  3. Now that the bezel is removed, you can lift the inverter up out of its well, and unplug the LCD from the inverter.
  4. Remove the three rectangular screw covers and screws on each side of the LCD.
  5. Being careful to note cable routing, slowly lift the LCD out of the cover, grabbing it from the bottom first, so as to clear the latches.
  6. As soon as you can remove the cable from the back, STOP removing the LCD, and remove the tape, going from the top of the LCD to the bottom. Unplug by pulling down on the cable, carefully. You'll probably end up disengaging the ThinkLight, note how it goes into its holder. That's fine. If you didn't disengage it, go ahead and do so - it'll give you more cable to work with.
  7. Now the old LCD is free. You'll need to remove the two rails from the old LCD, being sure to note the orientation.
  8. Install the rails on the new LCD in the same orientation.
  9. Here comes the fiddly part. Take the LCD cable, and fold it in an S shape (NOT SHARPLY, though) so that the ThinkLight cable is higher than it would be, plug it into the LCD, and tape it down.
  10. At this point, plug in an external monitor, power on the machine, and press Fn-F7 immediately to switch to the external monitor. Boot into Windows. Start PowerStrip, go to Options, and Monitor information. Go to Options at the bottom of the dialog, and select Update EDID. You will get a dialog saying "EEPROM Found:" and a monitor name. Be careful to not reflash your external monitor, which will most likely be the first thing that comes up - hit no, and reflash the other monitor that will come up (make sure it actually is different.) Use the qxga.dat file you made during preparation.
  11. Now that the monitor's reflashed, shut the machine down, unplug the external monitor, and power back up. You should have a working display at this point. Either way, power the machine off. If you don't have a working display, make sure all connections are intact. If it's still not working, and the backlight is off, shine a flashlight at the LCD, to see if there's an image. If the backlight is on, try flashing the LCD again.
  12. Insert the ThinkLight back into its holder - I believe you need to insert the back of it first. Make sure the LCD is fully installed, and that the inverter and all cables are in place.
  13. Insert the screws that go on each side. You may have to push down slightly on the LCD to get the screw holes to line up.
  14. Power the machine up again, and make sure it it's working. Yes, you're checking again. And make sure the inverter is lined up.
  15. If all is good, go ahead and install the bezel. Be sure ALL the clips all around the LCD are clipped in, screw it down, and reinstall all the screw covers. Congratulations, you're done!

BIOS vs OS

If the Panel is not flashed with the new EDID, the BIOS will not display anything useful, but will show garbage: RGB vertical stripes. However, if the OS boots, it may still be able to use the panel from within X. (This is my experience on a T60p (converting a failed 1600x1200 panel to 2048x1536), with Ubuntu Lucid; I then flashed the EDID in order to have a usable BIOS)

EDID ROM Update Program

Save the EDID bytes into a text file called edidRom.txt and run the following Python program from the same directory. Make sure to update lines 22 and 23 to reflect your i2cset command. The program will parse the edidRom.txt contents, convert the values into decimals, and apply the updates to each position. The column and row position labels are ignored. The program is written specifically for the EDID data format posted above and assumes each offset is one after the previous offset.

from subprocess import call

def buildCommands(romFile, command):
    edid = open(romFile);
    edid.readline(); #skips header line (EDID BYTES:)
    edid.readline(); #skips column offsets (0x   00 01...)
    edid.readline(); #skips the --------------... line
    values = [];
    for line in edid:
        parts = line.split(' ');
        if(len(parts) != 18):
            print('Unknown format on line: ' + line);
            return [];
        values.extend(parts[2:]);
    commands = [];
    for i, value in enumerate(values):
        commands.append(command + str(hex(i)) + ' ' + str(int(value, 16)));
    return commands;

if __name__ == '__main__':
    romFile = 'edidRom.txt'; #path to EDID ROM file.  WARNING: File is assumed to start from offset 00 and increase by one from there.
    command = 'sudo i2cset -y 2 0x50 '; #partial command to update the EDID ROM.  The offset and value will be appended automatically based on the ROM file.
    command = 'echo MAKE SURE THE COMMAND ABOVE IS CORRECT THEN DELETE THIS LINE.';
    commands = buildCommands(romFile, command)
    print('----- Commands -----');
    print('\n'.join(commands));
    run = raw_input('WARNING: These commands may damage your hardware.  Make sure they are correct.\n\tRun the above commands? (y/n): ');
    if run == 'y' or run == 'Y':
        for cmd in commands:
            call(cmd.split(' '));
    print('Done');
    pass

See Also

The Complete 6x-series QXGA Thread on thinkpads.com