View Single Post
Old 08-20-2026, 12:38 PM   #9
marcoramos888
Junior Member
marcoramos888 will become famous soon enoughmarcoramos888 will become famous soon enoughmarcoramos888 will become famous soon enoughmarcoramos888 will become famous soon enoughmarcoramos888 will become famous soon enoughmarcoramos888 will become famous soon enough
 
Posts: 6
Karma: 606
Join Date: Sep 2025
Device: Kobo libra h2o
Vcom

I initially thought the issue was caused by an incorrect VCOM value, but it turned out that **VCOM wasn't the main problem — the screen waveform was wrong**.

My original Libra 2 screen was:

`B168 V / VD1400-GOB / ED070KH3 C1-A7Y`

The replacement screen is:

`B044 V / VD1400-GOB / ED070KH3 U3-ZAY`

However, the Kobo was still loading the C1 waveform:

`400_B168_HH5601_ED070KH3C1_VD1400-GOB_TC`

I found a Libra 2 Rev E SD card image containing the correct U3 waveform:

`400_B036_HH2D01_ED070KH3U3_VD1400-GOB_TCB`

The waveform is stored directly on the microSD, starting at offset `0x700000`. In my case it was exactly `2,126,905` bytes.

I extracted it from the Rev E image and wrote only the waveform area to my existing microSD, so I didn't have to replace the bootloader, partitions, firmware, etc.

**Extract the U3 waveform from the SD image:**

```powershell
python -c "p=r'C:\path\to\Libra2-rev-E.img'; out=r'C:\path\to\waveform-U3.bin'; f=open(p,'rb'); f.seek(0x700000); d=f.read(2126905); open(out,'wb').write(d); print('written:',len(d),'bytes')"
```

**Back up the existing waveform on the Kobo:**

```sh
dd if=/dev/mmcblk0 of=/mnt/onboard/waveform-C1-original.bin \
bs=1 skip=$((0x700000)) count=2126905
sync
```

**Write the U3 waveform:**

```sh
dd if=/mnt/onboard/waveform-U3.bin of=/dev/mmcblk0 \
bs=1 seek=$((0x700000)) count=2126905 conv=notrunc
sync
```

**Verify it byte-for-byte:**

```sh
dd if=/dev/mmcblk0 bs=1 skip=$((0x700000)) count=2126905 2>/dev/null \
| cmp - /mnt/onboard/waveform-U3.bin
```

After rebooting, I confirmed the correct waveform was loaded with:

```sh
dmesg | grep -i ED070KH3
```

which now reports the `ED070KH3U3` waveform.

After fixing the waveform, I only needed a **small VCOM adjustment** and the display became perfect.

For reference, the VCOM bytes are at offset `0x80037`.

**Read the current VCOM:**

```sh
dd if=/dev/mmcblk0 bs=1 skip=$((0x80037)) count=2 2>/dev/null | od -An -tx1
```

**Example: set VCOM to `FF6A` (-1.50 V):**

```sh
printf '\xff\x6a' | dd of=/dev/mmcblk0 \
bs=1 seek=$((0x80037)) count=2 conv=notrunc
sync
```

So, in short: **if you replace a Libra 2 screen and get severe ghosting, background darkening, or strange artifacts, don't assume VCOM is the problem. Check whether the replacement panel revision (C1/U3/etc.) matches the waveform being loaded by the Kobo.** In my case, changing from the C1 waveform to the correct U3 waveform fixed the real problem, and then VCOM only needed a small final adjustment.
marcoramos888 is offline   Reply With Quote