1d722e3fbSopenharmony_ci/* 2d722e3fbSopenharmony_ci * \file modedemo.c 3d722e3fbSopenharmony_ci * Test program to dump DRM kernel mode setting related information. 4d722e3fbSopenharmony_ci * Queries the kernel for all available information and dumps it to stdout. 5d722e3fbSopenharmony_ci * 6d722e3fbSopenharmony_ci * \author Jakob Bornecrantz <wallbraker@gmail.com> 7d722e3fbSopenharmony_ci */ 8d722e3fbSopenharmony_ci 9d722e3fbSopenharmony_ci/* 10d722e3fbSopenharmony_ci * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. 11d722e3fbSopenharmony_ci * Copyright (c) 2007-2008 Jakob Bornecrantz <wallbraker@gmail.com> 12d722e3fbSopenharmony_ci * 13d722e3fbSopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 14d722e3fbSopenharmony_ci * copy of this software and associated documentation files (the "Software"), 15d722e3fbSopenharmony_ci * to deal in the Software without restriction, including without limitation 16d722e3fbSopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 17d722e3fbSopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 18d722e3fbSopenharmony_ci * Software is furnished to do so, subject to the following conditions: 19d722e3fbSopenharmony_ci * 20d722e3fbSopenharmony_ci * The above copyright notice and this permission notice shall be included in 21d722e3fbSopenharmony_ci * all copies or substantial portions of the Software. 22d722e3fbSopenharmony_ci * 23d722e3fbSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24d722e3fbSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25d722e3fbSopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26d722e3fbSopenharmony_ci * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27d722e3fbSopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28d722e3fbSopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 29d722e3fbSopenharmony_ci * IN THE SOFTWARE. 30d722e3fbSopenharmony_ci * 31d722e3fbSopenharmony_ci */ 32d722e3fbSopenharmony_ci 33d722e3fbSopenharmony_ci#include <assert.h> 34d722e3fbSopenharmony_ci#include <stdio.h> 35d722e3fbSopenharmony_ci#include <stdlib.h> 36d722e3fbSopenharmony_ci#include <stdint.h> 37d722e3fbSopenharmony_ci#include <unistd.h> 38d722e3fbSopenharmony_ci#include <string.h> 39d722e3fbSopenharmony_ci#include <inttypes.h> 40d722e3fbSopenharmony_ci 41d722e3fbSopenharmony_ci#include "xf86drm.h" 42d722e3fbSopenharmony_ci#include "xf86drmMode.h" 43d722e3fbSopenharmony_ci 44d722e3fbSopenharmony_ci#include "util/common.h" 45d722e3fbSopenharmony_ci#include "util/kms.h" 46d722e3fbSopenharmony_ci 47d722e3fbSopenharmony_ciint current; 48d722e3fbSopenharmony_ciint connectors; 49d722e3fbSopenharmony_ciint full_props; 50d722e3fbSopenharmony_ciint edid; 51d722e3fbSopenharmony_ciint modes; 52d722e3fbSopenharmony_ciint full_modes; 53d722e3fbSopenharmony_ciint encoders; 54d722e3fbSopenharmony_ciint crtcs; 55d722e3fbSopenharmony_ciint fbs; 56d722e3fbSopenharmony_cichar *module_name; 57d722e3fbSopenharmony_ci 58d722e3fbSopenharmony_cistatic int printMode(struct drm_mode_modeinfo *mode) 59d722e3fbSopenharmony_ci{ 60d722e3fbSopenharmony_ci if (full_modes) { 61d722e3fbSopenharmony_ci printf("Mode: %s\n", mode->name); 62d722e3fbSopenharmony_ci printf("\tclock : %i\n", mode->clock); 63d722e3fbSopenharmony_ci printf("\thdisplay : %i\n", mode->hdisplay); 64d722e3fbSopenharmony_ci printf("\thsync_start : %i\n", mode->hsync_start); 65d722e3fbSopenharmony_ci printf("\thsync_end : %i\n", mode->hsync_end); 66d722e3fbSopenharmony_ci printf("\thtotal : %i\n", mode->htotal); 67d722e3fbSopenharmony_ci printf("\thskew : %i\n", mode->hskew); 68d722e3fbSopenharmony_ci printf("\tvdisplay : %i\n", mode->vdisplay); 69d722e3fbSopenharmony_ci printf("\tvsync_start : %i\n", mode->vsync_start); 70d722e3fbSopenharmony_ci printf("\tvsync_end : %i\n", mode->vsync_end); 71d722e3fbSopenharmony_ci printf("\tvtotal : %i\n", mode->vtotal); 72d722e3fbSopenharmony_ci printf("\tvscan : %i\n", mode->vscan); 73d722e3fbSopenharmony_ci printf("\tvrefresh : %i\n", mode->vrefresh); 74d722e3fbSopenharmony_ci printf("\tflags : %i\n", mode->flags); 75d722e3fbSopenharmony_ci } else { 76d722e3fbSopenharmony_ci printf("Mode: \"%s\" %ix%i %i\n", mode->name, 77d722e3fbSopenharmony_ci mode->hdisplay, mode->vdisplay, mode->vrefresh); 78d722e3fbSopenharmony_ci } 79d722e3fbSopenharmony_ci return 0; 80d722e3fbSopenharmony_ci} 81d722e3fbSopenharmony_ci 82d722e3fbSopenharmony_cistatic int printProperty(int fd, drmModeResPtr res, drmModePropertyPtr props, uint64_t value) 83d722e3fbSopenharmony_ci{ 84d722e3fbSopenharmony_ci const char *name = NULL; 85d722e3fbSopenharmony_ci int j; 86d722e3fbSopenharmony_ci 87d722e3fbSopenharmony_ci printf("Property: %s\n", props->name); 88d722e3fbSopenharmony_ci printf("\tid : %i\n", props->prop_id); 89d722e3fbSopenharmony_ci printf("\tflags : %i\n", props->flags); 90d722e3fbSopenharmony_ci printf("\tcount_values : %d\n", props->count_values); 91d722e3fbSopenharmony_ci 92d722e3fbSopenharmony_ci 93d722e3fbSopenharmony_ci if (props->count_values) { 94d722e3fbSopenharmony_ci printf("\tvalues :"); 95d722e3fbSopenharmony_ci for (j = 0; j < props->count_values; j++) 96d722e3fbSopenharmony_ci printf(" %" PRIu64, props->values[j]); 97d722e3fbSopenharmony_ci printf("\n"); 98d722e3fbSopenharmony_ci } 99d722e3fbSopenharmony_ci 100d722e3fbSopenharmony_ci 101d722e3fbSopenharmony_ci printf("\tcount_enums : %d\n", props->count_enums); 102d722e3fbSopenharmony_ci 103d722e3fbSopenharmony_ci if (props->flags & DRM_MODE_PROP_BLOB) { 104d722e3fbSopenharmony_ci drmModePropertyBlobPtr blob; 105d722e3fbSopenharmony_ci 106d722e3fbSopenharmony_ci blob = drmModeGetPropertyBlob(fd, value); 107d722e3fbSopenharmony_ci if (blob) { 108d722e3fbSopenharmony_ci printf("blob is %d length, %08X\n", blob->length, *(uint32_t *)blob->data); 109d722e3fbSopenharmony_ci drmModeFreePropertyBlob(blob); 110d722e3fbSopenharmony_ci } else { 111d722e3fbSopenharmony_ci printf("error getting blob %" PRIu64 "\n", value); 112d722e3fbSopenharmony_ci } 113d722e3fbSopenharmony_ci 114d722e3fbSopenharmony_ci } else { 115d722e3fbSopenharmony_ci for (j = 0; j < props->count_enums; j++) { 116d722e3fbSopenharmony_ci printf("\t\t%" PRIu64" = %s\n", (uint64_t)props->enums[j].value, props->enums[j].name); 117d722e3fbSopenharmony_ci if (props->enums[j].value == value) 118d722e3fbSopenharmony_ci name = props->enums[j].name; 119d722e3fbSopenharmony_ci } 120d722e3fbSopenharmony_ci 121d722e3fbSopenharmony_ci if (props->count_enums && name) { 122d722e3fbSopenharmony_ci printf("\tcon_value : %s\n", name); 123d722e3fbSopenharmony_ci } else { 124d722e3fbSopenharmony_ci printf("\tcon_value : %" PRIu64 "\n", value); 125d722e3fbSopenharmony_ci } 126d722e3fbSopenharmony_ci } 127d722e3fbSopenharmony_ci 128d722e3fbSopenharmony_ci return 0; 129d722e3fbSopenharmony_ci} 130d722e3fbSopenharmony_ci 131d722e3fbSopenharmony_cistatic int printConnector(int fd, drmModeResPtr res, drmModeConnectorPtr connector, uint32_t id) 132d722e3fbSopenharmony_ci{ 133d722e3fbSopenharmony_ci int i = 0; 134d722e3fbSopenharmony_ci struct drm_mode_modeinfo *mode = NULL; 135d722e3fbSopenharmony_ci drmModePropertyPtr props; 136d722e3fbSopenharmony_ci const char *connector_type_name = NULL; 137d722e3fbSopenharmony_ci 138d722e3fbSopenharmony_ci connector_type_name = util_lookup_connector_type_name(connector->connector_type); 139d722e3fbSopenharmony_ci 140d722e3fbSopenharmony_ci if (connector_type_name) 141d722e3fbSopenharmony_ci printf("Connector: %s-%d\n", connector_type_name, 142d722e3fbSopenharmony_ci connector->connector_type_id); 143d722e3fbSopenharmony_ci else 144d722e3fbSopenharmony_ci printf("Connector: %d-%d\n", connector->connector_type, 145d722e3fbSopenharmony_ci connector->connector_type_id); 146d722e3fbSopenharmony_ci printf("\tid : %i\n", id); 147d722e3fbSopenharmony_ci printf("\tencoder id : %i\n", connector->encoder_id); 148d722e3fbSopenharmony_ci printf("\tconn : %s\n", util_lookup_connector_status_name(connector->connection)); 149d722e3fbSopenharmony_ci printf("\tsize : %ix%i (mm)\n", connector->mmWidth, connector->mmHeight); 150d722e3fbSopenharmony_ci printf("\tcount_modes : %i\n", connector->count_modes); 151d722e3fbSopenharmony_ci printf("\tcount_props : %i\n", connector->count_props); 152d722e3fbSopenharmony_ci if (connector->count_props) { 153d722e3fbSopenharmony_ci printf("\tprops :"); 154d722e3fbSopenharmony_ci for (i = 0; i < connector->count_props; i++) 155d722e3fbSopenharmony_ci printf(" %i", connector->props[i]); 156d722e3fbSopenharmony_ci printf("\n"); 157d722e3fbSopenharmony_ci } 158d722e3fbSopenharmony_ci 159d722e3fbSopenharmony_ci printf("\tcount_encoders : %i\n", connector->count_encoders); 160d722e3fbSopenharmony_ci if (connector->count_encoders) { 161d722e3fbSopenharmony_ci printf("\tencoders :"); 162d722e3fbSopenharmony_ci for (i = 0; i < connector->count_encoders; i++) 163d722e3fbSopenharmony_ci printf(" %i", connector->encoders[i]); 164d722e3fbSopenharmony_ci printf("\n"); 165d722e3fbSopenharmony_ci } 166d722e3fbSopenharmony_ci 167d722e3fbSopenharmony_ci if (modes) { 168d722e3fbSopenharmony_ci for (i = 0; i < connector->count_modes; i++) { 169d722e3fbSopenharmony_ci mode = (struct drm_mode_modeinfo *)&connector->modes[i]; 170d722e3fbSopenharmony_ci printMode(mode); 171d722e3fbSopenharmony_ci } 172d722e3fbSopenharmony_ci } 173d722e3fbSopenharmony_ci 174d722e3fbSopenharmony_ci if (full_props) { 175d722e3fbSopenharmony_ci for (i = 0; i < connector->count_props; i++) { 176d722e3fbSopenharmony_ci props = drmModeGetProperty(fd, connector->props[i]); 177d722e3fbSopenharmony_ci if (props) { 178d722e3fbSopenharmony_ci printProperty(fd, res, props, connector->prop_values[i]); 179d722e3fbSopenharmony_ci drmModeFreeProperty(props); 180d722e3fbSopenharmony_ci } 181d722e3fbSopenharmony_ci } 182d722e3fbSopenharmony_ci } 183d722e3fbSopenharmony_ci 184d722e3fbSopenharmony_ci return 0; 185d722e3fbSopenharmony_ci} 186d722e3fbSopenharmony_ci 187d722e3fbSopenharmony_cistatic int printEncoder(int fd, drmModeResPtr res, drmModeEncoderPtr encoder, uint32_t id) 188d722e3fbSopenharmony_ci{ 189d722e3fbSopenharmony_ci const char *encoder_name; 190d722e3fbSopenharmony_ci 191d722e3fbSopenharmony_ci encoder_name = util_lookup_encoder_type_name(encoder->encoder_type); 192d722e3fbSopenharmony_ci if (encoder_name) 193d722e3fbSopenharmony_ci printf("Encoder: %s\n", encoder_name); 194d722e3fbSopenharmony_ci else 195d722e3fbSopenharmony_ci printf("Encoder\n"); 196d722e3fbSopenharmony_ci printf("\tid :%i\n", id); 197d722e3fbSopenharmony_ci printf("\tcrtc_id :%d\n", encoder->crtc_id); 198d722e3fbSopenharmony_ci printf("\ttype :%d\n", encoder->encoder_type); 199d722e3fbSopenharmony_ci printf("\tpossible_crtcs :0x%x\n", encoder->possible_crtcs); 200d722e3fbSopenharmony_ci printf("\tpossible_clones :0x%x\n", encoder->possible_clones); 201d722e3fbSopenharmony_ci return 0; 202d722e3fbSopenharmony_ci} 203d722e3fbSopenharmony_ci 204d722e3fbSopenharmony_cistatic int printCrtc(int fd, drmModeResPtr res, drmModeCrtcPtr crtc, uint32_t id) 205d722e3fbSopenharmony_ci{ 206d722e3fbSopenharmony_ci printf("Crtc\n"); 207d722e3fbSopenharmony_ci printf("\tid : %i\n", id); 208d722e3fbSopenharmony_ci printf("\tx : %i\n", crtc->x); 209d722e3fbSopenharmony_ci printf("\ty : %i\n", crtc->y); 210d722e3fbSopenharmony_ci printf("\twidth : %i\n", crtc->width); 211d722e3fbSopenharmony_ci printf("\theight : %i\n", crtc->height); 212d722e3fbSopenharmony_ci printf("\tmode : %p\n", &crtc->mode); 213d722e3fbSopenharmony_ci printf("\tgamma size : %d\n", crtc->gamma_size); 214d722e3fbSopenharmony_ci 215d722e3fbSopenharmony_ci return 0; 216d722e3fbSopenharmony_ci} 217d722e3fbSopenharmony_ci 218d722e3fbSopenharmony_cistatic int printFrameBuffer(int fd, drmModeResPtr res, drmModeFBPtr fb) 219d722e3fbSopenharmony_ci{ 220d722e3fbSopenharmony_ci printf("Framebuffer\n"); 221d722e3fbSopenharmony_ci printf("\thandle : %i\n", fb->handle); 222d722e3fbSopenharmony_ci printf("\twidth : %i\n", fb->width); 223d722e3fbSopenharmony_ci printf("\theight : %i\n", fb->height); 224d722e3fbSopenharmony_ci printf("\tpitch : %i\n", fb->pitch); 225d722e3fbSopenharmony_ci printf("\tbpp : %i\n", fb->bpp); 226d722e3fbSopenharmony_ci printf("\tdepth : %i\n", fb->depth); 227d722e3fbSopenharmony_ci printf("\tbuffer_id : %i\n", fb->handle); 228d722e3fbSopenharmony_ci 229d722e3fbSopenharmony_ci return 0; 230d722e3fbSopenharmony_ci} 231d722e3fbSopenharmony_ci 232d722e3fbSopenharmony_cistatic int printRes(int fd, drmModeResPtr res) 233d722e3fbSopenharmony_ci{ 234d722e3fbSopenharmony_ci int i; 235d722e3fbSopenharmony_ci drmModeFBPtr fb; 236d722e3fbSopenharmony_ci drmModeCrtcPtr crtc; 237d722e3fbSopenharmony_ci drmModeEncoderPtr encoder; 238d722e3fbSopenharmony_ci drmModeConnectorPtr connector; 239d722e3fbSopenharmony_ci 240d722e3fbSopenharmony_ci printf("Resources\n\n"); 241d722e3fbSopenharmony_ci 242d722e3fbSopenharmony_ci printf("count_connectors : %i\n", res->count_connectors); 243d722e3fbSopenharmony_ci printf("count_encoders : %i\n", res->count_encoders); 244d722e3fbSopenharmony_ci printf("count_crtcs : %i\n", res->count_crtcs); 245d722e3fbSopenharmony_ci printf("count_fbs : %i\n", res->count_fbs); 246d722e3fbSopenharmony_ci 247d722e3fbSopenharmony_ci printf("\n"); 248d722e3fbSopenharmony_ci 249d722e3fbSopenharmony_ci if (connectors) { 250d722e3fbSopenharmony_ci for (i = 0; i < res->count_connectors; i++) { 251d722e3fbSopenharmony_ci connector = (current ? drmModeGetConnectorCurrent : drmModeGetConnector) (fd, res->connectors[i]); 252d722e3fbSopenharmony_ci 253d722e3fbSopenharmony_ci if (!connector) 254d722e3fbSopenharmony_ci printf("Could not get connector %i\n", res->connectors[i]); 255d722e3fbSopenharmony_ci else { 256d722e3fbSopenharmony_ci printConnector(fd, res, connector, res->connectors[i]); 257d722e3fbSopenharmony_ci drmModeFreeConnector(connector); 258d722e3fbSopenharmony_ci } 259d722e3fbSopenharmony_ci } 260d722e3fbSopenharmony_ci printf("\n"); 261d722e3fbSopenharmony_ci } 262d722e3fbSopenharmony_ci 263d722e3fbSopenharmony_ci 264d722e3fbSopenharmony_ci if (encoders) { 265d722e3fbSopenharmony_ci for (i = 0; i < res->count_encoders; i++) { 266d722e3fbSopenharmony_ci encoder = drmModeGetEncoder(fd, res->encoders[i]); 267d722e3fbSopenharmony_ci 268d722e3fbSopenharmony_ci if (!encoder) 269d722e3fbSopenharmony_ci printf("Could not get encoder %i\n", res->encoders[i]); 270d722e3fbSopenharmony_ci else { 271d722e3fbSopenharmony_ci printEncoder(fd, res, encoder, res->encoders[i]); 272d722e3fbSopenharmony_ci drmModeFreeEncoder(encoder); 273d722e3fbSopenharmony_ci } 274d722e3fbSopenharmony_ci } 275d722e3fbSopenharmony_ci printf("\n"); 276d722e3fbSopenharmony_ci } 277d722e3fbSopenharmony_ci 278d722e3fbSopenharmony_ci if (crtcs) { 279d722e3fbSopenharmony_ci for (i = 0; i < res->count_crtcs; i++) { 280d722e3fbSopenharmony_ci crtc = drmModeGetCrtc(fd, res->crtcs[i]); 281d722e3fbSopenharmony_ci 282d722e3fbSopenharmony_ci if (!crtc) 283d722e3fbSopenharmony_ci printf("Could not get crtc %i\n", res->crtcs[i]); 284d722e3fbSopenharmony_ci else { 285d722e3fbSopenharmony_ci printCrtc(fd, res, crtc, res->crtcs[i]); 286d722e3fbSopenharmony_ci drmModeFreeCrtc(crtc); 287d722e3fbSopenharmony_ci } 288d722e3fbSopenharmony_ci } 289d722e3fbSopenharmony_ci printf("\n"); 290d722e3fbSopenharmony_ci } 291d722e3fbSopenharmony_ci 292d722e3fbSopenharmony_ci if (fbs) { 293d722e3fbSopenharmony_ci for (i = 0; i < res->count_fbs; i++) { 294d722e3fbSopenharmony_ci fb = drmModeGetFB(fd, res->fbs[i]); 295d722e3fbSopenharmony_ci 296d722e3fbSopenharmony_ci if (!fb) 297d722e3fbSopenharmony_ci printf("Could not get fb %i\n", res->fbs[i]); 298d722e3fbSopenharmony_ci else { 299d722e3fbSopenharmony_ci printFrameBuffer(fd, res, fb); 300d722e3fbSopenharmony_ci drmModeFreeFB(fb); 301d722e3fbSopenharmony_ci } 302d722e3fbSopenharmony_ci } 303d722e3fbSopenharmony_ci } 304d722e3fbSopenharmony_ci 305d722e3fbSopenharmony_ci return 0; 306d722e3fbSopenharmony_ci} 307d722e3fbSopenharmony_ci 308d722e3fbSopenharmony_cistatic void args(int argc, char **argv) 309d722e3fbSopenharmony_ci{ 310d722e3fbSopenharmony_ci int defaults = 1; 311d722e3fbSopenharmony_ci int i; 312d722e3fbSopenharmony_ci 313d722e3fbSopenharmony_ci fbs = 0; 314d722e3fbSopenharmony_ci edid = 0; 315d722e3fbSopenharmony_ci crtcs = 0; 316d722e3fbSopenharmony_ci modes = 0; 317d722e3fbSopenharmony_ci encoders = 0; 318d722e3fbSopenharmony_ci full_modes = 0; 319d722e3fbSopenharmony_ci full_props = 0; 320d722e3fbSopenharmony_ci connectors = 0; 321d722e3fbSopenharmony_ci current = 0; 322d722e3fbSopenharmony_ci 323d722e3fbSopenharmony_ci module_name = argv[1]; 324d722e3fbSopenharmony_ci 325d722e3fbSopenharmony_ci for (i = 2; i < argc; i++) { 326d722e3fbSopenharmony_ci if (strcmp(argv[i], "-fb") == 0) { 327d722e3fbSopenharmony_ci fbs = 1; 328d722e3fbSopenharmony_ci defaults = 0; 329d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-crtcs") == 0) { 330d722e3fbSopenharmony_ci crtcs = 1; 331d722e3fbSopenharmony_ci defaults = 0; 332d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-cons") == 0) { 333d722e3fbSopenharmony_ci connectors = 1; 334d722e3fbSopenharmony_ci modes = 1; 335d722e3fbSopenharmony_ci defaults = 0; 336d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-modes") == 0) { 337d722e3fbSopenharmony_ci connectors = 1; 338d722e3fbSopenharmony_ci modes = 1; 339d722e3fbSopenharmony_ci defaults = 0; 340d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-full") == 0) { 341d722e3fbSopenharmony_ci connectors = 1; 342d722e3fbSopenharmony_ci modes = 1; 343d722e3fbSopenharmony_ci full_modes = 1; 344d722e3fbSopenharmony_ci defaults = 0; 345d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-props") == 0) { 346d722e3fbSopenharmony_ci connectors = 1; 347d722e3fbSopenharmony_ci full_props = 1; 348d722e3fbSopenharmony_ci defaults = 0; 349d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-edids") == 0) { 350d722e3fbSopenharmony_ci connectors = 1; 351d722e3fbSopenharmony_ci edid = 1; 352d722e3fbSopenharmony_ci defaults = 0; 353d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-encoders") == 0) { 354d722e3fbSopenharmony_ci encoders = 1; 355d722e3fbSopenharmony_ci defaults = 0; 356d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-v") == 0) { 357d722e3fbSopenharmony_ci fbs = 1; 358d722e3fbSopenharmony_ci edid = 1; 359d722e3fbSopenharmony_ci crtcs = 1; 360d722e3fbSopenharmony_ci modes = 1; 361d722e3fbSopenharmony_ci encoders = 1; 362d722e3fbSopenharmony_ci full_modes = 1; 363d722e3fbSopenharmony_ci full_props = 1; 364d722e3fbSopenharmony_ci connectors = 1; 365d722e3fbSopenharmony_ci defaults = 0; 366d722e3fbSopenharmony_ci } else if (strcmp(argv[i], "-current") == 0) { 367d722e3fbSopenharmony_ci current = 1; 368d722e3fbSopenharmony_ci } 369d722e3fbSopenharmony_ci } 370d722e3fbSopenharmony_ci 371d722e3fbSopenharmony_ci if (defaults) { 372d722e3fbSopenharmony_ci fbs = 1; 373d722e3fbSopenharmony_ci edid = 1; 374d722e3fbSopenharmony_ci crtcs = 1; 375d722e3fbSopenharmony_ci modes = 1; 376d722e3fbSopenharmony_ci encoders = 1; 377d722e3fbSopenharmony_ci full_modes = 0; 378d722e3fbSopenharmony_ci full_props = 0; 379d722e3fbSopenharmony_ci connectors = 1; 380d722e3fbSopenharmony_ci } 381d722e3fbSopenharmony_ci} 382d722e3fbSopenharmony_ci 383d722e3fbSopenharmony_ciint main(int argc, char **argv) 384d722e3fbSopenharmony_ci{ 385d722e3fbSopenharmony_ci int fd; 386d722e3fbSopenharmony_ci drmModeResPtr res; 387d722e3fbSopenharmony_ci 388d722e3fbSopenharmony_ci if (argc == 1) { 389d722e3fbSopenharmony_ci printf("Please add modulename as first argument\n"); 390d722e3fbSopenharmony_ci return 1; 391d722e3fbSopenharmony_ci } 392d722e3fbSopenharmony_ci 393d722e3fbSopenharmony_ci args(argc, argv); 394d722e3fbSopenharmony_ci 395d722e3fbSopenharmony_ci printf("Starting test\n"); 396d722e3fbSopenharmony_ci 397d722e3fbSopenharmony_ci fd = drmOpen(module_name, NULL); 398d722e3fbSopenharmony_ci 399d722e3fbSopenharmony_ci if (fd < 0) { 400d722e3fbSopenharmony_ci printf("Failed to open the card fd (%d)\n",fd); 401d722e3fbSopenharmony_ci return 1; 402d722e3fbSopenharmony_ci } 403d722e3fbSopenharmony_ci 404d722e3fbSopenharmony_ci res = drmModeGetResources(fd); 405d722e3fbSopenharmony_ci if (res == 0) { 406d722e3fbSopenharmony_ci printf("Failed to get resources from card\n"); 407d722e3fbSopenharmony_ci drmClose(fd); 408d722e3fbSopenharmony_ci return 1; 409d722e3fbSopenharmony_ci } 410d722e3fbSopenharmony_ci 411d722e3fbSopenharmony_ci printRes(fd, res); 412d722e3fbSopenharmony_ci 413d722e3fbSopenharmony_ci drmModeFreeResources(res); 414d722e3fbSopenharmony_ci 415d722e3fbSopenharmony_ci printf("Ok\n"); 416d722e3fbSopenharmony_ci 417d722e3fbSopenharmony_ci return 0; 418d722e3fbSopenharmony_ci} 419