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. (...) " 
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.
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.
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.
(In reply to fafatheone from comment #0)
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.
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?
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.)
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.
Hey Radek! Any update on the yellow?
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.
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?
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.
Sorry, I don't think there's much we can do in the kernel driver.
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.
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.
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.
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.
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.
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².
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.