Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: Add missing MacBook Pro models with dual channel LVDS

Single channel LVDS maxes out at 112 MHz. The 15" pre-retina models
shipped with 1440x900 (106 MHz) by default or 1680x1050 (119 MHz)
as a BTO option, both versions used dual channel LVDS even though
the smaller one would have fit into a single channel.

Notes:
Bug report showing that the MacBookPro8,2 with 1440x900 uses dual
channel LVDS (this lead to it being hardcoded in intel_lvds.c by
Daniel Vetter with commit 618563e3945b9d0864154bab3c607865b557cecc):
https://bugzilla.kernel.org/show_bug.cgi?id=42842

If i915.lvds_channel_mode=2 is missing even though the machine needs
it, every other vertical line is white and consequently, only the left
half of the screen is visible (verified by myself on a MacBookPro9,1).

Forum posting concerning a MacBookPro6,2 with 1440x900, author is
using i915.lvds_channel_mode=2 on the kernel command line, proving
that the machine uses dual channels:
https://bbs.archlinux.org/viewtopic.php?id=185770

Chi Mei N154C6-L04 with 1440x900 is a replacement panel for all
MacBook Pro "A1286" models, and that model number encompasses the
MacBookPro6,2 / 8,2 / 9,1. Page 17 of the panel's datasheet shows it's
driven with dual channel LVDS:
http://www.ebay.com/itm/-/400690878560
http://www.everymac.com/ultimate-mac-lookup/?search_keywords=A1286
http://www.taopanel.com/chimei/datasheet/N154C6-L04.pdf

Those three 15" models, MacBookPro6,2 / 8,2 / 9,1, are the only ones
with i915 graphics and dual channel LVDS, so that list should be
complete. And the 8,2 is already in intel_lvds.c.

Possible motivation to use dual channel LVDS even on the 1440x900
models: Reduce the number of different parts, i.e. use identical logic
boards and display cabling on both versions and the only differing
component is the panel.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Cc: stable@vger.kernel.org
[Jani: included notes in the commit message for posterity]
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

authored by

Lukas Wunner and committed by
Jani Nikula
3916e3fd 6f317cfe

+17 -1
+17 -1
drivers/gpu/drm/i915/intel_lvds.c
··· 813 813 static const struct dmi_system_id intel_dual_link_lvds[] = { 814 814 { 815 815 .callback = intel_dual_link_lvds_callback, 816 - .ident = "Apple MacBook Pro (Core i5/i7 Series)", 816 + .ident = "Apple MacBook Pro 15\" (2010)", 817 + .matches = { 818 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), 819 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6,2"), 820 + }, 821 + }, 822 + { 823 + .callback = intel_dual_link_lvds_callback, 824 + .ident = "Apple MacBook Pro 15\" (2011)", 817 825 .matches = { 818 826 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), 819 827 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"), 828 + }, 829 + }, 830 + { 831 + .callback = intel_dual_link_lvds_callback, 832 + .ident = "Apple MacBook Pro 15\" (2012)", 833 + .matches = { 834 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), 835 + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,1"), 820 836 }, 821 837 }, 822 838 { } /* terminating entry */