linux/drivers/platform/x86
Lukas Wunner 3e46304e74 apple-gmux: Track switch state
gmux has 3 switch registers:

* GMUX_PORT_SWITCH_DISPLAY switches the panel
* GMUX_PORT_SWITCH_DDC switches the panel's DDC lines
  (only on pre-retinas; on retinas this is a no-op)
* GMUX_PORT_SWITCH_EXTERNAL switches the external DP port(s)
  (only on models without Thunderbolt, i.e. introduced before 2011;
  those with Thunderbolt switch only HPD/AUX, not the main link)

Currently we switch all 3 registers in unison.

gmux does not preserve the switch state during suspend, so we currently
read GMUX_PORT_SWITCH_DISPLAY before suspend and restore all 3 registers
to this value on resume.

With the upcoming ->switch_ddc callback, GMUX_PORT_SWITCH_DDC may
temporarily contain a different value than the other 2 registers.
If we happen to suspend at this moment, we'll write an incorrect
value to GMUX_PORT_SWITCH_DDC on resume.

Also, on models with Thunderbolt the integrated GPU is unable to drive
the external DP port(s), so we want to keep GMUX_PORT_SWITCH_EXTERNAL
permanently switched to the discrete GPU on those machines.

Consequently we can no longer assume that GMUX_PORT_SWITCH_DISPLAY
represents the correct value for all 3 registers on suspend.

Track the state of all 3 registers: Add gmux_read_switch_state() and
gmux_write_switch_state(). Instead of reading the switch state on
every suspend, read it once on driver initialization so that we know
the current switch state all the time. (This allows us to use some
optimizations and shortcuts, e.g. we can skip switching DDC if we
know that it's already switched to the requested GPU.) Change the
->switchto callback to use gmux_write_switch_state().

Tested-by: Lukas Wunner <lukas@wunner.de>
    [MBP  9,1 2012  intel IVB + nvidia GK107  pre-retina  15"]
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/5679f414cb0ddf1654dcc359571f3764b275edf0.1452525860.git.lukas@wunner.de
2016-02-09 11:21:08 +01:00
..
acer-wmi.c acer-wmi: remove threeg and interface sysfs interfaces 2015-10-06 23:38:08 +01:00
acerhdf.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
alienware-wmi.c
amilo-rfkill.c
apple-gmux.c apple-gmux: Track switch state 2016-02-09 11:21:08 +01:00
asus-laptop.c asus-laptop: Add key found on Asus F3M 2015-08-10 21:24:23 -07:00
asus-nb-wmi.c asus-nb-wmi: Add wapf=4 quirk for X456UA/X456UF 2015-09-06 10:44:48 -07:00
asus-wireless.c asus-wireless: Add ACPI HID ATK4001 2016-01-19 17:35:46 -08:00
asus-wmi.c asus-wmi: drop to_platform_driver macro 2016-01-19 17:35:45 -08:00
asus-wmi.h
classmate-laptop.c classmate-laptop: Fix sparse warning (0 as NULL) 2015-02-07 12:12:00 -08:00
compal-laptop.c compal-laptop: Add charge control limit 2015-10-03 08:44:57 -07:00
dell-laptop.c dell-laptop: Do not cache hwswitch state 2015-07-06 15:35:23 -07:00
dell-rbtn.c dell-rbtn: Export notifier for other kernel modules 2015-06-10 22:04:11 -07:00
dell-rbtn.h dell-rbtn: Export notifier for other kernel modules 2015-06-10 22:04:11 -07:00
dell-smo8800.c dell-smo8800: Add more ACPI ids and change description of driver 2014-12-03 10:10:19 -08:00
dell-wmi-aio.c
dell-wmi.c platform-drivers-x86 for 4.5-1 2016-01-19 17:54:15 -08:00
eeepc-laptop.c eeepc-laptop: Port to new backlight interface selection API 2015-06-19 01:11:56 +02:00
eeepc-wmi.c
fujitsu-laptop.c fujitsu-laptop: Port to new backlight interface selection API 2015-06-19 01:12:01 +02:00
fujitsu-tablet.c Input: use more descriptive KEY_ROTATE_DISPLAY instead of KEY_DIRECTION 2015-03-06 17:18:16 -08:00
hdaps.c
hp_accel.c hp_accel: Add support for HP ZBook 15 2014-12-03 10:10:12 -08:00
hp-wireless.c hp-wireless: remove unneeded goto/label in hpwl_init 2015-08-25 23:34:15 -07:00
hp-wmi.c hp-wmi: limit hotkey enable 2015-09-17 18:14:11 -07:00
ibm_rtl.c move io-64-nonatomic*.h out of asm-generic 2015-10-15 00:21:07 +02:00
ideapad-laptop.c ideapad-laptop: Add Lenovo Yoga 700 to no_hw_rfkill dmi list 2016-01-24 10:15:01 -08:00
intel_ips.c move io-64-nonatomic*.h out of asm-generic 2015-10-15 00:21:07 +02:00
intel_ips.h
intel_menlow.c linux/thermal.h: rename KELVIN_TO_CELSIUS to DECI_KELVIN_TO_CELSIUS 2015-10-10 11:32:30 +08:00
intel_mid_powerbtn.c intel_mid_powerbtn: Remove misuse of IRQF_NO_SUSPEND flag 2015-10-03 09:40:30 -07:00
intel_mid_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
intel_oaktrail.c intel-oaktrail: Port to new backlight interface selection API 2015-06-19 01:12:11 +02:00
intel_pmc_ipc.c platform:x86: Add Intel telemetry platform device 2016-01-19 17:35:51 -08:00
intel_pmic_gpio.c gpio: change member .dev to .parent 2015-11-19 09:24:35 +01:00
intel_punit_ipc.c intel_punit_ipc: add NULL check for input parameters 2016-01-19 17:35:49 -08:00
intel_scu_ipc.c intel_scu_ipc: Protect dev member assignment on ->remove() 2015-10-15 08:23:30 -07:00
intel_scu_ipcutil.c
intel_telemetry_core.c platform/x86: Add Intel Telemetry Core Driver 2016-01-19 17:35:50 -08:00
intel_telemetry_debugfs.c intel_telemetry_debugfs: Fix unused warnings in telemetry debugfs 2016-01-24 10:14:53 -08:00
intel_telemetry_pltdrv.c platform:x86: Add Intel telemetry platform driver 2016-01-19 17:35:50 -08:00
intel-hid.c intel-hid: new hid event driver for hotkeys 2016-01-19 17:35:36 -08:00
intel-rst.c
intel-smartconnect.c
Kconfig surface pro 4: Add support for Surface Pro 4 Buttons 2016-01-19 17:35:52 -08:00
Makefile platform:x86: Add Intel Telemetry Debugfs interfaces 2016-01-19 17:35:51 -08:00
msi-laptop.c msi-laptop: Port to new backlight interface selection API 2015-06-19 01:12:16 +02:00
msi-wmi.c msi-wmi: Port to new backlight interface selection API 2015-06-19 01:12:20 +02:00
mxm-wmi.c
panasonic-laptop.c
pvpanic.c pvpanic: handle missing _STA correctly 2015-06-07 21:30:12 -07:00
samsung-laptop.c samsung-laptop: Port to new backlight interface selection API 2015-06-19 01:12:25 +02:00
samsung-q10.c
sony-laptop.c Keyboard backlight control for some Vaio Fit models 2016-01-19 15:49:37 -08:00
surfacepro3_button.c surface pro 4: fix compare_const_fl.cocci warnings 2016-01-19 17:35:52 -08:00
tc1100-wmi.c tc1100-wmi: fix build warning when CONFIG_PM not enabled 2016-01-19 17:35:47 -08:00
thinkpad_acpi.c More power management and ACPI updates for v4.5-rc1 2016-01-20 19:06:49 -08:00
topstar-laptop.c
toshiba_acpi.c toshiba_acpi: Fix keyboard backlight sysfs entries not being updated 2016-01-19 15:49:21 -08:00
toshiba_bluetooth.c toshiba_bluetooth: Add missing newline in toshiba_bluetooth_present function 2015-11-20 15:20:08 -08:00
toshiba_haps.c toshiba_haps: Make use of DEVICE_ATTR_{RW, WO} macros 2015-05-11 10:38:22 -07:00
toshiba-wmi.c platform/x86: Toshiba WMI Hotkey Driver 2015-10-03 10:07:08 -07:00
wmi.c wmi: Remove private %pUL implementation 2015-09-10 09:07:04 -07:00
xo1-rfkill.c
xo15-ebook.c