2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-27 14:43:58 +08:00
linux-next/drivers/gpu/drm/nouveau
Hans de Goede 3a6536c51d drm/nouveau: Intercept ACPI_VIDEO_NOTIFY_PROBE
Various notebooks with nvidia GPUs generate an ACPI_VIDEO_NOTIFY_PROBE
acpi-video event when an external device gets plugged in (and again on
modesets on that connector), the default behavior in the acpi-video
driver for this is to send a KEY_SWITCHVIDEOMODE evdev event, which
causes e.g. gnome-settings-daemon to ask us to rescan the connectors
(good), but also causes g-s-d to switch to mirror mode on a newly plugged
monitor rather then using the monitor to extend the desktop (bad)
as KEY_SWITCHVIDEOMODE is supposed to switch between extend the desktop
vs mirror mode.

More troublesome are the repeated ACPI_VIDEO_NOTIFY_PROBE events on
changing the mode on the connector, which cause g-s-d to switch
between mirror/extend mode, which causes a new ACPI_VIDEO_NOTIFY_PROBE
event and we end up with an endless loop.

This commit fixes this by adding an acpi notifier block handler to
nouveau_display.c to intercept ACPI_VIDEO_NOTIFY_PROBE and:

1) Wake-up runtime suspended GPUs and call drm_helper_hpd_irq_event()
   on them, this is necessary in some cases for the GPU to detect connector
   hotplug events while runtime suspended
2) Return NOTIFY_BAD to stop acpi-video from emitting a bogus
   KEY_SWITCHVIDEOMODE key-press event

There already is another acpi notifier block handler registered in
drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.c, but that is not
suitable since that one gets unregistered on runtime suspend, and
we also want to intercept ACPI_VIDEO_NOTIFY_PROBE when runtime suspended.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2016-11-17 09:50:37 +10:00
..
dispnv04 drm/nouveau: add missing header dependencies 2016-11-07 14:04:35 +10:00
include drm/nouveau/pmu/gp102: initial implementation 2016-11-17 09:50:37 +10:00
nvif drm/nouveau: silence sparse warnings about symbols not being marked static 2016-11-07 14:04:40 +10:00
nvkm drm/nouveau/devinit/gm200: drop pmu reset sequence 2016-11-17 09:50:37 +10:00
Kbuild drm/nouveau/drm/nouveau: add a LED driver for the NVIDIA logo 2016-10-12 17:29:29 +10:00
Kconfig drm/nouveau: make fbdev support really optional 2016-07-15 10:28:40 -04:00
nouveau_abi16.c drm/nouveau/core: recognise GP100 chipset 2016-07-14 11:53:25 +10:00
nouveau_abi16.h drm/nouveau/abi16: implement limited interoperability with usif/nvif 2015-11-03 15:02:18 +10:00
nouveau_acpi.c drm/nouveau/acpi: fix check for power resources support 2016-11-01 14:52:03 +10:00
nouveau_acpi.h drm/nouveau/device: remove pci/platform_device from common struct 2015-08-28 12:40:49 +10:00
nouveau_backlight.c drm/nouveau/kms: add Maxwell to backlight initialization 2016-10-12 17:29:32 +10:00
nouveau_bios.c drm/nouveau/kms: lvds panel strap moved again on maxwell 2016-11-07 14:04:14 +10:00
nouveau_bios.h drm/nouveau/nouveau: bios pointers may be unaligned, use proper accessors 2016-10-12 17:29:02 +10:00
nouveau_bo.c Merge tag 'topic/drm-misc-2016-10-27' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2016-10-28 11:33:52 +10:00
nouveau_bo.h drm/nouveau: finalise nvkm namespace switch (no binary change) 2015-01-22 12:18:07 +10:00
nouveau_chan.c drm/nouveau/fifo/gp100: initial support 2016-07-14 11:53:25 +10:00
nouveau_chan.h drm/nouveau: remove unnecessary usage of object handles 2015-11-03 15:02:18 +10:00
nouveau_connector.c drm/nouveau/kms/nv50: initial support for DP 1.2 multi-stream 2016-11-07 14:05:03 +10:00
nouveau_connector.h drm/nouveau/kms/nv50: remove code to support non-atomic connector properties 2016-11-07 14:05:01 +10:00
nouveau_crtc.h drm/nouveau/kms/nv50: remove code to support non-atomic connector properties 2016-11-07 14:05:01 +10:00
nouveau_debugfs.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_debugfs.h drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_display.c drm/nouveau: Intercept ACPI_VIDEO_NOTIFY_PROBE 2016-11-17 09:50:37 +10:00
nouveau_display.h drm/nouveau/kms/nv50: remove code to create ctxdma for every framebuffer 2016-11-07 14:05:02 +10:00
nouveau_dma.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_dma.h drm/nouveau/nvif: simplify and tidy library interfaces 2015-08-28 12:40:32 +10:00
nouveau_dp.c drm/nouveau/kms/nv50: initial support for DP 1.2 multi-stream 2016-11-07 14:05:03 +10:00
nouveau_drm.c drm/nouveau/kms: move drm_crtc_force_disable_all() earlier 2016-11-07 14:04:45 +10:00
nouveau_drv.h drm/nouveau: Intercept ACPI_VIDEO_NOTIFY_PROBE 2016-11-17 09:50:37 +10:00
nouveau_encoder.h drm/nouveau/kms/nv50: initial support for DP 1.2 multi-stream 2016-11-07 14:05:03 +10:00
nouveau_fbcon.c drm/nouveau/kms: never call drm_helper_disable_unused_functions() with atomic 2016-11-07 14:04:49 +10:00
nouveau_fbcon.h drm/nouveau/fbcon: refcount the drm_framebuffer 2016-11-07 14:04:44 +10:00
nouveau_fence.c drm/nouveau: fix nv84 fence context leak 2016-11-07 14:04:37 +10:00
nouveau_fence.h drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nouveau_gem.c drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized 2016-11-07 14:04:36 +10:00
nouveau_gem.h drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_hwmon.c drm/nouveau/hwmon: add in_min and in_max 2016-07-14 11:53:25 +10:00
nouveau_hwmon.h
nouveau_ioc32.c
nouveau_ioctl.h
nouveau_led.c drm/nouveau/drm/nouveau: add a LED driver for the NVIDIA logo 2016-10-12 17:29:29 +10:00
nouveau_led.h drm/nouveau/drm/nouveau: add a LED driver for the NVIDIA logo 2016-10-12 17:29:29 +10:00
nouveau_nvif.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_platform.c drm/nouveau/tegra: acquire and enable reference clock if needed 2016-04-06 16:06:51 +10:00
nouveau_platform.h drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_prime.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_reg.h
nouveau_sgdma.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_ttm.c drm/drivers: add support for using the arch wc mapping API. 2016-10-26 16:48:01 +10:00
nouveau_ttm.h
nouveau_usif.c drm/fence: add fence to drm_pending_event 2016-06-03 00:01:59 +02:00
nouveau_usif.h
nouveau_vga.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_vga.h
nv04_fbcon.c drm/nouveau/fbcon: make use of drm_fb_helper.dev 2016-11-07 14:04:43 +10:00
nv04_fence.c dma-buf: Rename struct fence to dma_fence 2016-10-25 14:40:39 +02:00
nv10_fence.c drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv10_fence.h drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv17_fence.c dma-buf: Rename struct fence to dma_fence 2016-10-25 14:40:39 +02:00
nv50_display.c drm/nouveau/kms/nv50: avoid touching DP_MSTM_CTRL if !DP_MST_CAP 2016-11-17 09:50:35 +10:00
nv50_display.h drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv50_fbcon.c drm/nouveau/fbcon: make use of drm_fb_helper.fb 2016-11-07 14:04:44 +10:00
nv50_fence.c drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv84_fence.c drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nvc0_fbcon.c drm/nouveau/fbcon: make use of drm_fb_helper.fb 2016-11-07 14:04:44 +10:00
nvc0_fence.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00