Refactor connector in lease config
[src/drm-lease-manager.git] / drm-lease-manager / lease-manager.c
index b339037..177a241 100644 (file)
@@ -343,7 +343,8 @@ static struct lease *lease_create(struct lm *lm,
                goto err;
        }
 
-       int nconnectors = config->cnames > 0 ? config->cnames : config->ncids;
+       int nconnectors =
+           config->nconnectors > 0 ? config->nconnectors : config->ncids;
        int nobjects = lm->drm_plane_resource->count_planes +
                       nconnectors * DRM_OBJECTS_PER_CONNECTOR;
 
@@ -356,8 +357,8 @@ static struct lease *lease_create(struct lm *lm,
        for (int i = 0; i < nconnectors; i++) {
                uint32_t cid;
 
-               if (config->cnames > 0) {
-                       char *connector_name = config->connector_names[i];
+               if (config->nconnectors > 0) {
+                       char *connector_name = config->connectors[i].name;
 
                        if (!drm_find_connector(lm, connector_name, &cid)) {
                                WARN_LOG("Lease: %s, "
@@ -515,6 +516,29 @@ err:
        return NULL;
 }
 
+static struct lm *drm_find_drm_device(const char *device)
+{
+       drmDevicePtr devices[64];
+       int ndevs;
+       struct lm *lm = NULL;
+
+       if (device)
+               return drm_device_get_resources(device);
+
+       ndevs = drmGetDevices2(0, devices, 64);
+
+       for (int i = 0; i < ndevs; i++) {
+               lm = drm_device_get_resources(
+                   devices[i]->nodes[DRM_NODE_PRIMARY]);
+               if (lm)
+                       break;
+       }
+
+       drmFreeDevices(devices, ndevs);
+
+       return lm;
+}
+
 static int lm_create_leases(struct lm *lm, int num_leases,
                            const struct lease_config *configs)
 {
@@ -544,10 +568,12 @@ struct lm *lm_create_with_config(const char *device, int num_leases,
                                 struct lease_config *configs)
 {
        struct lease_config *default_configs = NULL;
-       struct lm *lm = drm_device_get_resources(device);
+       struct lm *lm = drm_find_drm_device(device);
 
-       if (!lm)
+       if (!lm) {
+               ERROR_LOG("No available DRM device found\n");
                return NULL;
+       }
 
        if (configs == NULL || num_leases == 0) {
                num_leases = create_default_lease_configs(lm, &default_configs);