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;
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, "
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)
{
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);