diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index b15ddbd65e7b..a8971c4eb9f0 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -30,9 +30,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include -#include #include -#include #include #include @@ -1637,10 +1635,6 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper) strcpy(fb_helper->fb->comm, "[fbcon]"); - /* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */ - if (dev_is_pci(dev->dev)) - vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info); - return 0; } diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c index 49a1ac4f5491..337cc9fc31b1 100644 --- a/drivers/gpu/drm/i915/display/intel_fbdev.c +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c @@ -589,11 +589,8 @@ static int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv) static void intel_fbdev_client_unregister(struct drm_client_dev *client) { struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); - struct drm_device *dev = fb_helper->dev; - struct pci_dev *pdev = to_pci_dev(dev->dev); if (fb_helper->info) { - vga_switcheroo_client_fb_set(pdev, NULL); drm_fb_helper_unregister_info(fb_helper); } else { drm_fb_helper_unprepare(fb_helper); @@ -620,7 +617,6 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client) { struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); struct drm_device *dev = client->dev; - struct pci_dev *pdev = to_pci_dev(dev->dev); int ret; if (dev->fb_helper) @@ -634,8 +630,6 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client) if (ret) goto err_drm_fb_helper_fini; - vga_switcheroo_client_fb_set(pdev, fb_helper->info); - return 0; err_drm_fb_helper_fini: diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c index fb70de29545c..a197ba2f2717 100644 --- a/drivers/gpu/drm/radeon/radeon_fbdev.c +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c @@ -300,10 +300,8 @@ static void radeon_fbdev_client_unregister(struct drm_client_dev *client) { struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); struct drm_device *dev = fb_helper->dev; - struct radeon_device *rdev = dev->dev_private; if (fb_helper->info) { - vga_switcheroo_client_fb_set(rdev->pdev, NULL); drm_helper_force_disable_all(dev); drm_fb_helper_unregister_info(fb_helper); } else { @@ -325,7 +323,6 @@ static int radeon_fbdev_client_hotplug(struct drm_client_dev *client) { struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); struct drm_device *dev = client->dev; - struct radeon_device *rdev = dev->dev_private; int ret; if (dev->fb_helper) @@ -342,8 +339,6 @@ static int radeon_fbdev_client_hotplug(struct drm_client_dev *client) if (ret) goto err_drm_fb_helper_fini; - vga_switcheroo_client_fb_set(rdev->pdev, fb_helper->info); - return 0; err_drm_fb_helper_fini: diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 1fc1e47ae2b4..e681066736de 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -65,6 +65,7 @@ #include #include #include +#include #include #include #include @@ -77,6 +78,7 @@ #include #include /* For counting font checksums */ #include +#include #include #include "fbcon.h" @@ -2894,6 +2896,9 @@ void fbcon_fb_unregistered(struct fb_info *info) console_lock(); + if (info->device && dev_is_pci(info->device)) + vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL); + fbcon_registered_fb[info->node] = NULL; fbcon_num_registered_fb--; @@ -3027,6 +3032,10 @@ static int do_fb_registered(struct fb_info *info) } } + /* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */ + if (info->device && dev_is_pci(info->device)) + vga_switcheroo_client_fb_set(to_pci_dev(info->device), info); + return ret; }