summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@gnugeneration.com>2016-12-31 21:48:43 -0800
committerVito Caputo <vcaputo@gnugeneration.com>2016-12-31 21:48:43 -0800
commitc65e092d27a0b82b6e295493a0fb5f4bca9ccba5 (patch)
tree01bbbf2de7988a9fc3ee8c9b64444565cbd0c3fc
parent7f8b26c6c317b1a4d020b2bb2569f8b1b552d8e8 (diff)
drmsetup: add mode selection
Rather than using whatever the existing drm_crtc->mode is, present all modes on the chosen connector and let the user pick.
-rw-r--r--drmsetup.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drmsetup.c b/drmsetup.c
index 5ec832b..3670974 100644
--- a/drmsetup.c
+++ b/drmsetup.c
@@ -83,7 +83,7 @@ void drm_setup(int *res_drm_fd, uint32_t *res_crtc_id, uint32_t *res_connector_i
drmModeEncoderPtr drm_enc;
drmModeCrtcPtr drm_crtc;
char dev[256];
- int connector_num;
+ int connector_num, mode_num;
pexit_if(!drmAvailable(),
"drm unavailable");
@@ -110,6 +110,7 @@ void drm_setup(int *res_drm_fd, uint32_t *res_crtc_id, uint32_t *res_connector_i
pexit_if(!(drm_res = drmModeGetResources(drm_fd)),
"unable to get drm resources");
+ printf("\nConnectors\n");
connected = 0;
for (i = 0; i < drm_res->count_connectors; i++) {
@@ -125,9 +126,8 @@ void drm_setup(int *res_drm_fd, uint32_t *res_crtc_id, uint32_t *res_connector_i
connected++;
- printf("%i: Connector [%x]: %s [%s%s%s]\n",
- i, (int)drm_res->connectors[i],
- connector_type_name(drm_con->connector_type),
+ printf(" %i: %s (%s%s%s)\n",
+ i, connector_type_name(drm_con->connector_type),
connection_type_name(drm_con->connection),
drm_con->encoder_id ? " via " : "",
drm_con->encoder_id ? encoder_type_name(drm_enc->encoder_type) : "");
@@ -136,7 +136,7 @@ void drm_setup(int *res_drm_fd, uint32_t *res_crtc_id, uint32_t *res_connector_i
exit_if(!connected,
"No connectors available, try different card or my bug?");
- ask_num(&connector_num, drm_res->count_connectors, "Connector", 0); // TODO default?
+ ask_num(&connector_num, drm_res->count_connectors, "Select connector", 0); // TODO default?
pexit_if(!(drm_con = drmModeGetConnector(drm_fd, drm_res->connectors[connector_num])),
"unable to get connector %x", (int)drm_res->connectors[connector_num]);
@@ -149,5 +149,14 @@ void drm_setup(int *res_drm_fd, uint32_t *res_crtc_id, uint32_t *res_connector_i
*res_drm_fd = drm_fd;
*res_crtc_id = drm_crtc->crtc_id;
*res_connector_id = drm_con->connector_id;
- *res_mode = &drm_crtc->mode;
+
+ printf("\nModes\n");
+ for (i = 0; i < drm_con->count_modes; i++) {
+ printf(" %i: %s @ %"PRIu32"Hz\n",
+ i, drm_con->modes[i].name,
+ drm_con->modes[i].vrefresh);
+ }
+ ask_num(&mode_num, drm_con->count_modes, "Select mode", 0); // TODO default to &drm_crtc->mode?
+
+ *res_mode = &drm_con->modes[mode_num];
}
© All Rights Reserved