drm/i915: constify harder
[deliverable/linux.git] / drivers / gpu / drm / i915 / i915_debugfs.c
index 5137f8f97b8a65e0cdd0291b188a4f1bef2c9370..5fce5d89b68a79c00af6eb42d46dedc336afd287 100644 (file)
@@ -1768,6 +1768,15 @@ struct pipe_crc_info {
 
 static int i915_pipe_crc_open(struct inode *inode, struct file *filep)
 {
+       struct pipe_crc_info *info = inode->i_private;
+       struct drm_i915_private *dev_priv = info->dev->dev_private;
+       struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe];
+
+       if (!atomic_dec_and_test(&pipe_crc->available)) {
+               atomic_inc(&pipe_crc->available);
+               return -EBUSY; /* already open */
+       }
+
        filep->private_data = inode->i_private;
 
        return 0;
@@ -1775,6 +1784,12 @@ static int i915_pipe_crc_open(struct inode *inode, struct file *filep)
 
 static int i915_pipe_crc_release(struct inode *inode, struct file *filep)
 {
+       struct pipe_crc_info *info = inode->i_private;
+       struct drm_i915_private *dev_priv = info->dev->dev_private;
+       struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[info->pipe];
+
+       atomic_inc(&pipe_crc->available); /* release the device */
+
        return 0;
 }
 
@@ -1894,7 +1909,7 @@ static int i915_pipe_crc_create(struct dentry *root, struct drm_minor *minor,
        return drm_add_fake_info_node(minor, ent, info);
 }
 
-static const char *pipe_crc_sources[] = {
+static const char * const pipe_crc_sources[] = {
        "none",
        "plane1",
        "plane2",
@@ -1934,9 +1949,6 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe,
        struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe];
        u32 val;
 
-
-       return -ENODEV;
-
        if (!IS_IVYBRIDGE(dev))
                return -ENODEV;
 
@@ -2042,7 +2054,7 @@ enum intel_pipe_crc_object {
        PIPE_CRC_OBJECT_PIPE,
 };
 
-static const char *pipe_crc_objects[] = {
+static const char * const pipe_crc_objects[] = {
        "pipe",
 };
 
@@ -2684,6 +2696,7 @@ void intel_display_crc_init(struct drm_device *dev)
        for (i = 0; i < INTEL_INFO(dev)->num_pipes; i++) {
                struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[i];
 
+               atomic_set(&pipe_crc->available, 1);
                init_waitqueue_head(&pipe_crc->wq);
        }
 }
This page took 0.028799 seconds and 5 git commands to generate.