diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2016-06-14 17:59:31 +0200 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2016-06-14 18:11:00 +0200 |
commit | a18ce726195dcd1c5d3055c3c7423f60545fd1f7 (patch) | |
tree | fbb364149830912df2a0b6b1d220b9c3ef178944 | |
parent | a6783c65943af7ff695c3769e2fd7597b9181e52 (diff) | |
download | kmsfbwrap-a18ce726195dcd1c5d3055c3c7423f60545fd1f7.tar.gz kmsfbwrap-a18ce726195dcd1c5d3055c3c7423f60545fd1f7.tar.xz |
add fallback-connector support
This allows to add a fallback-connector parameter to windesc that
is used in place of the primary connector if it doesn't have any
modes.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
-rw-r--r-- | src/kmsfb-manage.c | 17 | ||||
-rw-r--r-- | src/kmsfb.h | 2 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/kmsfb-manage.c b/src/kmsfb-manage.c index 82eeb57..754d22f 100644 --- a/src/kmsfb-manage.c +++ b/src/kmsfb-manage.c @@ -189,6 +189,14 @@ static int kms_data_val_set(struct kms_data *kd, const char *key, const char *va kd->connector_name = value; kd->connector = 0; } + } else if (!strcmp(key, "fallback-connector")) { + char *end; + + kd->fallback_connector = strtoul(value, &end, 0); + if (end == value) { + kd->fallback_connector_name = value; + kd->fallback_connector = 0; + } } else if (!strcmp(key, "encoder")) kd->encoder = strtoul(value, NULL, 0); else if (!strcmp(key, "3d")) @@ -1059,6 +1067,11 @@ static int create_window(struct drm_resource *res, const char *in) } drmcon = drm_find_connector(res, kd.connector, kd.connector_name); + if (drmcon && (drmcon->num_modes == 0)) { + kd.connector = kd.fallback_connector; + kd.connector_name = kd.fallback_connector_name; + drmcon = drm_find_connector(res, kd.connector, kd.connector_name); + } if (!drmcon) { if (kd.connector) { printf("specified connector %d does not exist\n", @@ -1069,7 +1082,8 @@ static int create_window(struct drm_resource *res, const char *in) } return -1; } - if (!kd.connector && !kd.connector_name) { + if ((!kd.connector && !kd.connector_name) || kd.fallback_connector || + kd.fallback_connector_name) { print("using connector %d (%s)\n", drmcon->id, drm_connector_name(drmcon)); } @@ -1615,6 +1629,7 @@ static void usage(const char *prgname) " recognized variables for <windesc>:\n" " fbid [required]: ID of the FB created with -f\n" " connector, encoder, crtc [required]: chain of DRM object IDs onto which the window should be bound\n" + " fallback-connector [optional]: used in place of connector if it has no modes\n" " xres, yres [optional]: resolution of the window (default: full resolution of referenced FB)\n" " xofs, yofs [optional]: offset in pixels into the FB\n" " fps [optional]: select a frame rate in Hz\n" diff --git a/src/kmsfb.h b/src/kmsfb.h index 3cdc2c1..29a586d 100644 --- a/src/kmsfb.h +++ b/src/kmsfb.h @@ -96,6 +96,8 @@ struct kms_data { uint32_t plane; uint32_t connector; const char *connector_name; + uint32_t fallback_connector; + const char *fallback_connector_name; uint32_t encoder; struct kms_fb *kms_fb; |