mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-05 02:38:20 +00:00
drm/nouveau/fbcon: bracket entrypoints with a per-device enabled check
We don't necessarily have fbcon on all devices these days. Fixes suspend on (at least) Quadro NVS 450. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
6d8d163132
commit
46ea16884c
@ -503,34 +503,45 @@ nouveau_fbcon_fini(struct drm_device *dev)
|
|||||||
drm->fbcon = NULL;
|
drm->fbcon = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nouveau_fbcon_save_disable_accel(struct drm_device *dev)
|
void
|
||||||
|
nouveau_fbcon_save_disable_accel(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||||
|
if (drm->fbcon) {
|
||||||
drm->fbcon->saved_flags = drm->fbcon->helper.fbdev->flags;
|
drm->fbcon->saved_flags = drm->fbcon->helper.fbdev->flags;
|
||||||
drm->fbcon->helper.fbdev->flags |= FBINFO_HWACCEL_DISABLED;
|
drm->fbcon->helper.fbdev->flags |= FBINFO_HWACCEL_DISABLED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void nouveau_fbcon_restore_accel(struct drm_device *dev)
|
void
|
||||||
|
nouveau_fbcon_restore_accel(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||||
drm->fbcon->helper.fbdev->flags = drm->fbcon->saved_flags;
|
if (drm->fbcon) {
|
||||||
|
drm->fbcon->helper.fbdev->flags = drm->fbcon->saved_flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void nouveau_fbcon_set_suspend(struct drm_device *dev, int state)
|
void
|
||||||
|
nouveau_fbcon_set_suspend(struct drm_device *dev, int state)
|
||||||
{
|
{
|
||||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||||
console_lock();
|
if (drm->fbcon) {
|
||||||
if (state == 0)
|
console_lock();
|
||||||
nouveau_fbcon_save_disable_accel(dev);
|
if (state == 0)
|
||||||
fb_set_suspend(drm->fbcon->helper.fbdev, state);
|
nouveau_fbcon_save_disable_accel(dev);
|
||||||
if (state == 1)
|
fb_set_suspend(drm->fbcon->helper.fbdev, state);
|
||||||
nouveau_fbcon_restore_accel(dev);
|
if (state == 1)
|
||||||
console_unlock();
|
nouveau_fbcon_restore_accel(dev);
|
||||||
|
console_unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void nouveau_fbcon_zfill_all(struct drm_device *dev)
|
void
|
||||||
|
nouveau_fbcon_zfill_all(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||||
nouveau_fbcon_zfill(dev, drm->fbcon);
|
if (drm->fbcon) {
|
||||||
|
nouveau_fbcon_zfill(dev, drm->fbcon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user