drm: add drm_device_get_by_name support
authorMark Yao <mark.yao@rock-chips.com>
Fri, 5 May 2017 07:24:43 +0000 (15:24 +0800)
committerMark Yao <mark.yao@rock-chips.com>
Wed, 10 May 2017 07:28:18 +0000 (15:28 +0800)
Change-Id: Ifbd0f403ca2302e9329a16d7b69db5ee056cadf7
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/gpu/drm/drm_drv.c
include/drm/drmP.h

index 54625bcd42e909f349132d95a4979556b7d23cc0..63bd9decd4c227b5d587f2b50044f5c5606d503c 100644 (file)
@@ -417,6 +417,28 @@ void drm_minor_release(struct drm_minor *minor)
        drm_dev_unref(minor->dev);
 }
 
+struct drm_device *drm_device_get_by_name(const char *name)
+{
+       int i;
+
+       for (i = 0; i < 64; i++) {
+               struct drm_minor *minor;
+
+               minor = drm_minor_acquire(i + DRM_MINOR_CONTROL);
+               if (IS_ERR(minor))
+                       continue;
+               if (!minor->dev || !minor->dev->driver ||
+                   !minor->dev->driver->name)
+                       continue;
+               if (!name)
+                       return minor->dev;
+               if (!strcmp(name, minor->dev->driver->name))
+                       return minor->dev;
+       }
+
+       return NULL;
+}
+
 /**
  * DOC: driver instance overview
  *
index 24ddc4b798b0fb3d2ed911246e95653e1e424f48..418d5fcd598e04763bd0a95125dba9f65311ff91 100644 (file)
@@ -1127,6 +1127,14 @@ int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...);
 
 struct drm_minor *drm_minor_acquire(unsigned int minor_id);
 void drm_minor_release(struct drm_minor *minor);
+#ifdef CONFIG_DRM
+struct drm_device *drm_device_get_by_name(const char *name);
+#else
+static inline struct drm_device *drm_device_get_by_name(const char *name)
+{
+       return NULL;
+}
+#endif
 
 /*@}*/