Bug 70721 - yoga 2 pro: pentile matrix display color rendering distorted
Summary: yoga 2 pro: pentile matrix display color rendering distorted
Alias: None
Product: Drivers
Classification: Unclassified
Component: Video(DRI - Intel) (show other bugs)
Hardware: x86-64 Linux
: P5 low
Assignee: Jani Nikula
Depends on:
Reported: 2014-02-17 20:00 UTC by Fabio Valentini
Modified: 2016-06-04 15:21 UTC (History)
8 users (show)

See Also:
Kernel Version: up to 3.14-rc2
Tree: Mainline
Regression: No

Color profile created with a ColorMulky Display (741.06 KB, application/octet-stream)
2015-12-12 00:00 UTC, Alexander E. Patrakov
ICC profile created in Windows (741.21 KB, application/octet-stream)
2015-12-12 09:13 UTC, Alexander E. Patrakov
ICC profile with reduced white point (740.79 KB, application/octet-stream)
2015-12-12 21:02 UTC, Alexander E. Patrakov

Description Fabio Valentini 2014-02-17 20:00:12 UTC
On the Lenovo Yoga 2 Pro RGBW pentile matrix display, color accuracy is bad, especially yellow, which looks more like puke green.

Lenovo has responded to this common problem and issued a firmware ("BIOS") update for this UEFI-based notebook, and released a new version of their power manager for Windows 8.1, which seems to "fix" the issue.

Even after the update to the new firmware, color accuracy on Linux is bad. No color profiles and gamma corrections can fix the greenish-brownish yellow.

A Lenovo representative writes in a comment to the official "fix" statement:

"(...)  However, this is really a two part solution - the BIOS updates the Embedded Controller, and then the updated power manager makes calls to some of the revised functions in the EC.   The BIOS update alone probably won't yield the results you are looking for.  One would need some equivalent routines running in linux. (...) " [1]

Graphics Hardware is: Intel HD 4400 (Haswell).

If you need any more information about the hardware or have something to test, I hope I can be of help.

[1] http://forums.lenovo.com/t5/Idea-Windows-based-Tablets-and/Yoga-2-Pro-Pentile-matrix-RGBW-characteristics-and-display-of/ta-p/1294793
Comment 1 Jani Nikula 2014-02-24 07:59:00 UTC
I'm not sure what we could do to fix this, and we don't know what Lenovo is doing in Windows. I'm thinking resolving this invalid (not our bug), but I'll leave this open for now, in case someone comes up with some ideas.
Comment 2 Chris Wilson 2014-02-24 12:20:58 UTC
The biggest issue with the pentile arrangement is that it breaks the assumption of subpixel layout used for rendering glyphs and the ilk. Make sure you disable full-hinting and subpixel rendering of fonts (in freetype all you want is grayscale filtering).

The rest of the colour balance should be solvable (at least improved) with the right gamma curves - but if it was that easy they would have already tuned their hw to mimic the typical response of an RGB panel. So it probably something in the way the interpret the RGB value to generate the W (and possibly the W having a hue of its own) that causes the accuracy to drift. At any rate the generic solution of using a colorimeter and colord to generate a 3D matrix to reduce color errors for every RGB value is still likely to work.
Comment 3 Jani Nikula 2014-02-24 12:37:33 UTC
(In reply to fafatheone from comment #0)
> http://forums.lenovo.com/t5/Idea-Windows-based-Tablets-and/Yoga-2-Pro-Pentile-matrix-RGBW-characteristics-and-display-of/ta-p/1294793

The previous workaround "In Energy Manager, click the rocket icon to enable Performance mode" also suggests this may be related to content adaptive backlight control either in the Windows driver or in the display panel itself.
Comment 4 Fabio Valentini 2014-02-24 14:17:10 UTC
Yes, subpixel rendering of fonts looks worse than greyscale only.

I can confirm that changing the gamma values (independently of each other, different combinations tried) using xgamma did not change the color #FFFF00 on display, not even slightly. Always looks like lime instead of yellow. Something else must be going wrong.

You think that using a calorimeter (like a ColorHug?) to create a color profile would help correct the inaccuracy? I would not want to spend €80+ on such a device and find out it was for naught.

But since it seems they did something on Windows to make color accuracy better, there must be something we could do on the linux side of things?

I contacted Lenovo customer support about the issue, but only got an unfriendly answer back, forwarding me to the "official fix" page.

Is there any help to be expected from Lenovo's side? I think it would be in their best interest to come up with a good solution for this, since they marketed this Ultrabook as a device for professional designers and such, but bad colors make it more or less useless for professionals ...

Should I try to get in contact with them regarding what exactly they did to improve color rendering?
Comment 5 Chris Wilson 2014-02-24 14:29:39 UTC
You can always ask Lenovo. As far as I know the backlight does not have the flexibility (in hue or pixel-level granularity) to be able to do fine color adjustment. The only nauseau inducing trick I can think of would be to vary the brightness level depending on content to enhance contrast and decreased perceived discrepancy.

With care, you should be able to use create a calibration profile that effectively maps every single RGB value to minimise the error. I don't think ColorHug is quite that good, but it should be sufficient to improve colour reproduction. Equally a profile generated by another Yoga2 Pro user would also be a significant step forward. (In theory it should be quite simple!)

Thinking to myself, what would be interesting would be to use a ColorHug to find the best gamma curves. (Those are done in hardware, the calibrated color correction requires a post-processing pass by the gPu.)
Comment 6 Radek Trzicky 2014-05-09 11:40:36 UTC
As I wrote on Lenovo forum a while ago, I see bad yellow color in X11 but on Lilo screen, curiously, I see yellow as yellow. I don't know what it means yet :-) In the afternoon I will test to switch off power management in KDE if it changes something.
Comment 7 Oscar Rydberg 2014-05-10 14:46:27 UTC
Hey Radek! Any update on the yellow?
Comment 8 Radek Trzicky 2014-05-12 19:18:59 UTC
Hello, no success. I tried some things but need to read some more documentation, I think :-)

And I think it was wishful thinking only... 

It seems to work (roughly) correct in text modes. Bash escape sequences ( echo -e \\e[1\;33mBlahblah )gives some yellow results if I switch to the console. It seems to be yellow in Konsole too... But if I hit the right place on the screen with KColorChooser, this color is #FFFF54 or something very similar.

Comment 9 Oscar Rydberg 2014-05-12 20:17:31 UTC
I tried an Ubuntu rescue terminal and wow to my surprise did "cat syslog" turn up very yellow on the black background!

Doing the same in a terminal window inside Ubuntu, just leaving the vertical icon bar on the left, Chrome icon looks mustardish and text looks indeed very yellow from 60cm.

However, closing in to 10cm, I'm not so sure anymore if it's just not an optical illusion. Tried simple comparison tests with a camera, but too much mirroring going on to get a measurable result.

I can definately see improvement on the same Chrome icon when Windows finishes loading drivers; up to some 60% of my desired yellow.

"Google Yellow" and "bestbuy.com" remain mustardy stories though, so unless Lenovo has some other trick up their sleeve I'm leaning towards being screwed. (Or rather, ignorant, as there was plenty of info around)

What documentation are you studying?
Comment 10 Radek Trzicky 2014-06-04 16:25:45 UTC
Hi Oscar,

I started to read something about color profiles and Linux but have got too much work.

But I think (or believe is better word?) it could be resolvable with mapping bad colors to "less bad" colors... But should it be manual work? In X server? I don't know now... I thought ICMP can help. I can get over some brightness if I get "right" colors...

OK, it's possible it's not resolvable, too. But I think Lenovo (or Samsung) cannot create so crappy piece of hardware we cannot use. 

Comment 11 Jani Nikula 2014-08-14 11:49:36 UTC
Sorry, I don't think there's much we can do in the kernel driver.
Comment 12 Adam Smith 2015-02-10 09:47:29 UTC
Hey Radek or Oscar,

(I mention you two because you seem to be the most invested in finding a solution to this problem)

Is there any chance you could provide an update on your progress in trying to fix this yellowing issue? It seems as though there is little chance of being helped by Lenovo on this matter, however the non-kernel related fixes that have been brainstormed seem promising.

Comment 13 mswal2846 2015-02-27 18:20:44 UTC
I would also be interested on any progress (or not) on this.  I just purchases a Yoga 2 Pro and am running Fedora 21 on it and would be more than willing to test anything out.

Comment 14 Alexander E. Patrakov 2015-12-12 00:00:21 UTC
Created attachment 197201 [details]
Color profile created with a ColorMulky Display

Here is an ICC profile obtained using a real colorimeter. See - it covers less than 70% of sRGB. So the problem is not really correctable. And anyway, full-screen color correction on linux is non-existent (actively eliminated due to the notion that it belongs in applications) outside of the "weston" compositor.
Comment 15 Alexander E. Patrakov 2015-12-12 09:13:14 UTC
Created attachment 197211 [details]
ICC profile created in Windows

I have reprofiled the display under Windows, with a different brightness. Result: more coverage of sRGB (81%, as opposed to 67% from the linux-based profile). So this is either depending on the screen brightness (will recheck later today) or Windows indeed has some magic pixie dust here.
Comment 16 Alexander E. Patrakov 2015-12-12 21:02:32 UTC
Created attachment 197231 [details]
ICC profile with reduced white point

It turns out that, by creating and installing an ICC profile with a reduced brightness (as compared to native), it is possible to improve on sRGB coverage. The attached profile loses 55% of the light, but improves sRGB coverage to 79.5%, which is quite close to what Windows achieves.
Comment 17 Alexander E. Patrakov 2015-12-12 21:10:59 UTC
It turns out that Windows is willing to lose not just 55%, but 66% of the light. The measured maximum brightness of the Windows display is 99.9 cd/m², while Linux, without any ICC profiles, produces 294 cd/m².
Comment 18 Alexander E. Patrakov 2015-12-12 22:05:46 UTC
Trying to mimic the exact amount of light that Windows is willing to lose has not improved sRGB coverage. So, the ICC profile from comment #16 is the final solution to this bug.

Note You need to log in before you can comment on or make changes to this bug.