compositor-drm: Cache the DPMS property on drm_output

This avoids one drmModeGetConnector() call every time the DPMS mode is
set. That call can take hundreds of milliseconds due to DDC.
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 4222e57..27d4d02 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -145,6 +145,7 @@
 	uint32_t connector_id;
 	drmModeCrtcPtr original_crtc;
 	struct drm_edid edid;
+	drmModePropertyPtr dpms_prop;
 
 	int vblank_pending;
 	int page_flip_pending;
@@ -1054,6 +1055,8 @@
 	if (output->backlight)
 		backlight_destroy(output->backlight);
 
+	drmModeFreeProperty(output->dpms_prop);
+
 	/* Turn off hardware cursor */
 	drmModeSetCursor(c->drm.fd, output->crtc_id, 0, 0, 0);
 
@@ -1365,23 +1368,12 @@
 	struct drm_output *output = (struct drm_output *) output_base;
 	struct weston_compositor *ec = output_base->compositor;
 	struct drm_compositor *c = (struct drm_compositor *) ec;
-	drmModeConnectorPtr connector;
-	drmModePropertyPtr prop;
 
-	connector = drmModeGetConnector(c->drm.fd, output->connector_id);
-	if (!connector)
+	if (!output->dpms_prop)
 		return;
 
-	prop = drm_get_prop(c->drm.fd, connector, "DPMS");
-	if (!prop) {
-		drmModeFreeConnector(connector);
-		return;
-	}
-
-	drmModeConnectorSetProperty(c->drm.fd, connector->connector_id,
-				    prop->prop_id, level);
-	drmModeFreeProperty(prop);
-	drmModeFreeConnector(connector);
+	drmModeConnectorSetProperty(c->drm.fd, output->connector_id,
+				    output->dpms_prop->prop_id, level);
 }
 
 static const char *connector_type_names[] = {
@@ -1813,6 +1805,7 @@
 	ec->connector_allocator |= (1 << output->connector_id);
 
 	output->original_crtc = drmModeGetCrtc(ec->drm.fd, output->crtc_id);
+	output->dpms_prop = drm_get_prop(ec->drm.fd, connector, "DPMS");
 
 	/* Get the current mode on the crtc that's currently driving
 	 * this connector. */