-static int tegra_open_render_node(void)
-{
- drmDevicePtr *devices, device;
- int err, render = -ENOENT, fd;
- unsigned int num, i;
-
- err = drmGetDevices2(0, NULL, 0);
- if (err < 0)
- return err;
-
- num = err;
-
- devices = calloc(num, sizeof(*devices));
- if (!devices)
- return -ENOMEM;
-
- err = drmGetDevices2(0, devices, num);
- if (err < 0) {
- render = err;
- goto free;
- }
-
- for (i = 0; i < num; i++) {
- device = devices[i];
-
- if ((device->available_nodes & (1 << DRM_NODE_RENDER)) &&
- (device->bustype == DRM_BUS_PLATFORM)) {
- drmVersionPtr version;
-
- fd = open(device->nodes[DRM_NODE_RENDER], O_RDWR | O_CLOEXEC);
- if (fd < 0)
- continue;
-
- version = drmGetVersion(fd);
- if (!version) {
- close(fd);
- continue;
- }
-
- if (strcmp(version->name, "nouveau") != 0) {
- close(fd);
- continue;
- }
-
- drmFreeVersion(version);
- render = fd;
- break;
- }
- }
-
- drmFreeDevices(devices, num);
-
-free:
- free(devices);
- return render;
-}
-