@@ -470,6 +470,52 @@ INTERNAL void drmp_restore_brightness(surfman_plugin_t *plugin)
470470 backlight_restore (backlight );
471471}
472472
473+ INTERNAL void drmp_dpms_on (surfman_plugin_t * plugin )
474+ {
475+ (void ) plugin ;
476+ struct drm_device * d ;
477+ struct drm_monitor * m ;
478+ int rc ;
479+
480+ DRM_DBG ("%s, dpms on" , __FUNCTION__ );
481+
482+ list_for_each_entry (d , & devices , l ) {
483+ drm_device_set_master (d );
484+ list_for_each_entry (m , & (d -> monitors ), l_dev ) {
485+ rc = drm_monitor_dpms_on (m );
486+ if (rc ) {
487+ DRM_DBG ("%s, dpms on failed for monitor at conn=%d, enc=%d, "
488+ "crtc=%d - %s" , __FUNCTION__ , m -> connector , m -> encoder ,
489+ m -> crtc , strerror (rc ));
490+ }
491+ }
492+ drm_device_drop_master (d );
493+ }
494+ }
495+
496+ INTERNAL void drmp_dpms_off (surfman_plugin_t * plugin )
497+ {
498+ (void ) plugin ;
499+ struct drm_device * d ;
500+ struct drm_monitor * m ;
501+ int rc ;
502+
503+ DRM_DBG ("%s, dpms off" , __FUNCTION__ );
504+
505+ list_for_each_entry (d , & devices , l ) {
506+ drm_device_set_master (d );
507+ list_for_each_entry (m , & (d -> monitors ), l_dev ) {
508+ rc = drm_monitor_dpms_off (m );
509+ if (rc ) {
510+ DRM_DBG ("%s, dpms off failed for monitor at conn=%d, enc=%d, "
511+ "crtc=%d - %s" , __FUNCTION__ , m -> connector , m -> encoder ,
512+ m -> crtc , strerror (rc ));
513+ }
514+ }
515+ drm_device_drop_master (d );
516+ }
517+ }
518+
473519#define OPTIONAL (NULL)
474520#define REQUIRED ((void*)0xDEADBEEF)
475521/* Surfman plugin interface. */
@@ -504,6 +550,11 @@ surfman_plugin_t surfman_plugin = {
504550 .increase_brightness = drmp_increase_brightness ,
505551 .decrease_brightness = drmp_decrease_brightness ,
506552 .restore_brightness = drmp_restore_brightness ,
553+
554+ /* DPMS mode management. */
555+ .dpms_on = drmp_dpms_on ,
556+ .dpms_off = drmp_dpms_off ,
557+
507558 .options = {
508559 64 , /* libDRM requires a 64 bytes alignment (not 64bit ;). */
509560 0 /* TODO: SURFMAN_FEATURE_NEED_REFRESH triggers a cache-incohrency with xenfb2
0 commit comments