Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46ea1688 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

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: default avatarBen Skeggs <bskeggs@redhat.com>
parent 6d8d1631
Loading
Loading
Loading
Loading
+27 −16
Original line number Diff line number Diff line
@@ -503,23 +503,30 @@ nouveau_fbcon_fini(struct drm_device *dev)
	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);

	if (drm->fbcon) {
		drm->fbcon->saved_flags = drm->fbcon->helper.fbdev->flags;
		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);
	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);
	if (drm->fbcon) {
		console_lock();
		if (state == 0)
			nouveau_fbcon_save_disable_accel(dev);
@@ -528,9 +535,13 @@ void nouveau_fbcon_set_suspend(struct drm_device *dev, int state)
			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);
	if (drm->fbcon) {
		nouveau_fbcon_zfill(dev, drm->fbcon);
	}
}