#endif
static int
-_tbm_sprd_open_drm()
+_tbm_sprd_open_drm(void)
{
- int fd = -1;
+#ifdef HAVE_UDEV
+ struct udev_device *drm_device = NULL;
+ struct udev_list_entry *entry = NULL;
+ struct udev_enumerate *e;
+ const char *filepath;
+ struct udev *udev;
+ struct stat s;
+#endif
+ int fd;
fd = drmOpen(SPRD_DRM_NAME, NULL);
- if (fd < 0) {
- TBM_SPRD_LOG("[libtbm-sprd:%d] "
- "warning %s:%d fail to open drm\n",
- getpid(), __FUNCTION__, __LINE__);
- }
+ if (fd != -1)
+ return fd;
#ifdef HAVE_UDEV
- if (fd < 0) {
- struct udev *udev = NULL;
- struct udev_enumerate *e = NULL;
- struct udev_list_entry *entry = NULL;
- struct udev_device *device = NULL, *drm_device = NULL, *device_parent = NULL;
- const char *filepath;
- struct stat s;
- int ret;
-
- TBM_SPRD_LOG("[libtbm-sprd:%d] "
- "%s:%d search drm-device by udev\n",
- getpid(), __FUNCTION__, __LINE__);
-
- udev = udev_new();
- if (!udev) {
- TBM_SPRD_LOG("udev_new() failed.\n");
- return -1;
- }
+ TBM_SPRD_LOG("[libtbm-sprd:%d] warning %s:%d fail to open drm, "
+ "so search drm-device by udev\n",
+ getpid(), __FUNCTION__, __LINE__);
+
+ udev = udev_new();
+ if (!udev) {
+ TBM_SPRD_LOG("udev_new() failed.\n");
+ return -1;
+ }
- e = udev_enumerate_new(udev);
- udev_enumerate_add_match_subsystem(e, "drm");
- udev_enumerate_add_match_sysname(e, "card[0-9]*");
- udev_enumerate_scan_devices(e);
-
- udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
- device = udev_device_new_from_syspath(udev_enumerate_get_udev(e),
- udev_list_entry_get_name(entry));
- device_parent = udev_device_get_parent(device);
- /* Not need unref device_parent. device_parent and device have same refcnt */
- if (device_parent) {
- if (strcmp(udev_device_get_sysname(device_parent), "sprd-drm") == 0) {
- drm_device = device;
- DBG("[%s] Found render device: '%s' (%s)\n",
- _target_name(),
- udev_device_get_syspath(drm_device),
- udev_device_get_sysname(device_parent));
- break;
- }
+ e = udev_enumerate_new(udev);
+ udev_enumerate_add_match_subsystem(e, "drm");
+ udev_enumerate_add_match_sysname(e, "card[0-9]*");
+ udev_enumerate_scan_devices(e);
+
+ udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
+ struct udev_device *device, *device_parent;
+
+ device = udev_device_new_from_syspath(udev_enumerate_get_udev(e),
+ udev_list_entry_get_name(entry));
+ device_parent = udev_device_get_parent(device);
+ /* Not need unref device_parent. device_parent and device have same refcnt */
+ if (device_parent) {
+ if (strcmp(udev_device_get_sysname(device_parent), "sprd-drm") == 0) {
+ drm_device = device;
+ DBG("[%s] Found render device: '%s' (%s)\n",
+ _target_name(),
+ udev_device_get_syspath(drm_device),
+ udev_device_get_sysname(device_parent));
+ break;
}
- udev_device_unref(device);
}
+ udev_device_unref(device);
+ }
- udev_enumerate_unref(e);
+ udev_enumerate_unref(e);
- /* Get device file path. */
- filepath = udev_device_get_devnode(drm_device);
- if (!filepath) {
- TBM_SPRD_LOG("udev_device_get_devnode() failed.\n");
- udev_device_unref(drm_device);
- udev_unref(udev);
- return -1;
- }
+ /* Get device file path. */
+ filepath = udev_device_get_devnode(drm_device);
+ if (!filepath) {
+ TBM_SPRD_LOG("udev_device_get_devnode() failed.\n");
+ udev_device_unref(drm_device);
+ udev_unref(udev);
+ return -1;
+ }
- /* Open DRM device file and check validity. */
- fd = open(filepath, O_RDWR | O_CLOEXEC);
- if (fd < 0) {
- TBM_SPRD_LOG("open(%s, O_RDWR | O_CLOEXEC) failed.\n");
- udev_device_unref(drm_device);
- udev_unref(udev);
- return -1;
- }
+ udev_device_unref(drm_device);
+ udev_unref(udev);
- ret = fstat(fd, &s);
- if (ret) {
- TBM_SPRD_LOG("fstat() failed %s.\n");
- close(fd);
- udev_device_unref(drm_device);
- udev_unref(udev);
- return -1;
- }
+ /* Open DRM device file and check validity. */
+ fd = open(filepath, O_RDWR | O_CLOEXEC);
+ if (fd < 0) {
+ TBM_SPRD_LOG("open(%s, O_RDWR | O_CLOEXEC) failed.\n");
+ return -1;
+ }
- udev_device_unref(drm_device);
- udev_unref(udev);
+ if (fstat(fd, &s)) {
+ TBM_SPRD_LOG("fstat() failed %s.\n");
+ close(fd);
+ return -1;
}
+#else
+ TBM_SPRD_LOG("[libtbm-sprd:%d] warning %s:%d fail to open drm\n",
+ getpid(), __FUNCTION__, __LINE__);
#endif
return fd;