Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

DRM: Armada: implement lastclose() for fbhelper

Call drm_fb_helper_restore_fbdev_mode() upon last close so that in the
event of the X server crashing, we have some kind of mode restored.

Reviewed-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

+17 -1
+1
drivers/gpu/drm/armada/armada_drm.h
··· 103 103 extern const struct drm_mode_config_funcs armada_drm_mode_config_funcs; 104 104 105 105 int armada_fbdev_init(struct drm_device *); 106 + void armada_fbdev_lastclose(struct drm_device *); 106 107 void armada_fbdev_fini(struct drm_device *); 107 108 108 109 int armada_overlay_plane_create(struct drm_device *, unsigned long);
+6 -1
drivers/gpu/drm/armada/armada_drv.c
··· 321 321 DRM_UNLOCKED), 322 322 }; 323 323 324 + static void armada_drm_lastclose(struct drm_device *dev) 325 + { 326 + armada_fbdev_lastclose(dev); 327 + } 328 + 324 329 static const struct file_operations armada_drm_fops = { 325 330 .owner = THIS_MODULE, 326 331 .llseek = no_llseek, ··· 342 337 .open = NULL, 343 338 .preclose = NULL, 344 339 .postclose = NULL, 345 - .lastclose = NULL, 340 + .lastclose = armada_drm_lastclose, 346 341 .unload = armada_drm_unload, 347 342 .get_vblank_counter = drm_vblank_count, 348 343 .enable_vblank = armada_drm_enable_vblank,
+10
drivers/gpu/drm/armada/armada_fbdev.c
··· 177 177 return ret; 178 178 } 179 179 180 + void armada_fbdev_lastclose(struct drm_device *dev) 181 + { 182 + struct armada_private *priv = dev->dev_private; 183 + 184 + drm_modeset_lock_all(dev); 185 + if (priv->fbdev) 186 + drm_fb_helper_restore_fbdev_mode(priv->fbdev); 187 + drm_modeset_unlock_all(dev); 188 + } 189 + 180 190 void armada_fbdev_fini(struct drm_device *dev) 181 191 { 182 192 struct armada_private *priv = dev->dev_private;