1 /* From Linux kernel: drm_edid.c */ 2 /* 3 * Copyright (c) 2006 Luc Verhaegen (quirks list) 4 * Copyright (c) 2007-2008 Intel Corporation 5 * Jesse Barnes <jesse.barnes@intel.com> 6 * Copyright 2010 Red Hat, Inc. 7 * 8 * DDC probing routines (drm_ddc_read & drm_do_probe_ddc_edid) originally from 9 * FB layer. 10 * Copyright (C) 2006 Dennis Munsie <dmunsie@cecropia.com> 11 * 12 * Permission is hereby granted, free of charge, to any person obtaining a 13 * copy of this software and associated documentation files (the "Software"), 14 * to deal in the Software without restriction, including without limitation 15 * the rights to use, copy, modify, merge, publish, distribute, sub license, 16 * and/or sell copies of the Software, and to permit persons to whom the 17 * Software is furnished to do so, subject to the following conditions: 18 * 19 * The above copyright notice and this permission notice (including the 20 * next paragraph) shall be included in all copies or substantial portions 21 * of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 26 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 29 * DEALINGS IN THE SOFTWARE. 30 */ 31 32 #include <kms++/modedb.h> 33 34 #include <xf86drm.h> 35 36 namespace kms 37 { 38 #define DIV_ROUND(n, d) (((n) + (d) / 2) / (d)) 39 40 #define DRM_MODE(nm, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \ 41 .name = nm, .clock = (c), \ 42 .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), .htotal = (ht), .hskew = (hsk), \ 43 .vdisplay = (vd), .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), .vscan = (vs), \ 44 .vrefresh = DIV_ROUND(c * 1000, ht * vt) * (((f)&DRM_MODE_FLAG_INTERLACE) ? 2 : 1), \ 45 .flags = (f), .type = 0 46 47 /* 48 * Probably taken from CEA-861 spec. 49 * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c. 50 */ 51 const Videomode cea_modes[] = { 52 /* 1 - 640x480@60Hz */ 53 { 54 DRM_MODE("640x480", 25175, 640, 656, 55 752, 800, 0, 480, 490, 492, 525, 0, 56 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 57 }, 58 /* 2 - 720x480@60Hz */ 59 { 60 DRM_MODE("720x480", 27000, 720, 736, 61 798, 858, 0, 480, 489, 495, 525, 0, 62 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 63 }, 64 /* 3 - 720x480@60Hz */ 65 { 66 DRM_MODE("720x480", 27000, 720, 736, 67 798, 858, 0, 480, 489, 495, 525, 0, 68 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 69 }, 70 /* 4 - 1280x720@60Hz */ 71 { 72 DRM_MODE("1280x720", 74250, 1280, 1390, 73 1430, 1650, 0, 720, 725, 730, 750, 0, 74 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 75 }, 76 /* 5 - 1920x1080i@60Hz */ 77 { 78 DRM_MODE("1920x1080i", 74250, 1920, 2008, 79 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, 80 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 81 DRM_MODE_FLAG_INTERLACE), 82 }, 83 /* 6 - 720(1440)x480i@60Hz */ 84 { 85 DRM_MODE("720x480i", 13500, 720, 739, 86 801, 858, 0, 480, 488, 494, 525, 0, 87 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 88 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 89 }, 90 /* 7 - 720(1440)x480i@60Hz */ 91 { 92 DRM_MODE("720x480i", 13500, 720, 739, 93 801, 858, 0, 480, 488, 494, 525, 0, 94 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 95 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 96 }, 97 /* 8 - 720(1440)x240@60Hz */ 98 { 99 DRM_MODE("720x240", 13500, 720, 739, 100 801, 858, 0, 240, 244, 247, 262, 0, 101 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 102 DRM_MODE_FLAG_DBLCLK), 103 }, 104 /* 9 - 720(1440)x240@60Hz */ 105 { 106 DRM_MODE("720x240", 13500, 720, 739, 107 801, 858, 0, 240, 244, 247, 262, 0, 108 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 109 DRM_MODE_FLAG_DBLCLK), 110 }, 111 /* 10 - 2880x480i@60Hz */ 112 { 113 DRM_MODE("2880x480i", 54000, 2880, 2956, 114 3204, 3432, 0, 480, 488, 494, 525, 0, 115 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 116 DRM_MODE_FLAG_INTERLACE), 117 }, 118 /* 11 - 2880x480i@60Hz */ 119 { 120 DRM_MODE("2880x480i", 54000, 2880, 2956, 121 3204, 3432, 0, 480, 488, 494, 525, 0, 122 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 123 DRM_MODE_FLAG_INTERLACE), 124 }, 125 /* 12 - 2880x240@60Hz */ 126 { 127 DRM_MODE("2880x240", 54000, 2880, 2956, 128 3204, 3432, 0, 240, 244, 247, 262, 0, 129 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 130 }, 131 /* 13 - 2880x240@60Hz */ 132 { 133 DRM_MODE("2880x240", 54000, 2880, 2956, 134 3204, 3432, 0, 240, 244, 247, 262, 0, 135 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 136 }, 137 /* 14 - 1440x480@60Hz */ 138 { 139 DRM_MODE("1440x480", 54000, 1440, 1472, 140 1596, 1716, 0, 480, 489, 495, 525, 0, 141 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 142 }, 143 /* 15 - 1440x480@60Hz */ 144 { 145 DRM_MODE("1440x480", 54000, 1440, 1472, 146 1596, 1716, 0, 480, 489, 495, 525, 0, 147 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 148 }, 149 /* 16 - 1920x1080@60Hz */ 150 { 151 DRM_MODE("1920x1080", 148500, 1920, 2008, 152 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, 153 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 154 }, 155 /* 17 - 720x576@50Hz */ 156 { 157 DRM_MODE("720x576", 27000, 720, 732, 158 796, 864, 0, 576, 581, 586, 625, 0, 159 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 160 }, 161 /* 18 - 720x576@50Hz */ 162 { 163 DRM_MODE("720x576", 27000, 720, 732, 164 796, 864, 0, 576, 581, 586, 625, 0, 165 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 166 }, 167 /* 19 - 1280x720@50Hz */ 168 { 169 DRM_MODE("1280x720", 74250, 1280, 1720, 170 1760, 1980, 0, 720, 725, 730, 750, 0, 171 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 172 }, 173 /* 20 - 1920x1080i@50Hz */ 174 { 175 DRM_MODE("1920x1080i", 74250, 1920, 2448, 176 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, 177 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 178 DRM_MODE_FLAG_INTERLACE), 179 }, 180 /* 21 - 720(1440)x576i@50Hz */ 181 { 182 DRM_MODE("720x576i", 13500, 720, 732, 183 795, 864, 0, 576, 580, 586, 625, 0, 184 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 185 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 186 }, 187 /* 22 - 720(1440)x576i@50Hz */ 188 { 189 DRM_MODE("720x576i", 13500, 720, 732, 190 795, 864, 0, 576, 580, 586, 625, 0, 191 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 192 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 193 }, 194 /* 23 - 720(1440)x288@50Hz */ 195 { 196 DRM_MODE("720x288", 13500, 720, 732, 197 795, 864, 0, 288, 290, 293, 312, 0, 198 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 199 DRM_MODE_FLAG_DBLCLK), 200 }, 201 /* 24 - 720(1440)x288@50Hz */ 202 { 203 DRM_MODE("720x288", 13500, 720, 732, 204 795, 864, 0, 288, 290, 293, 312, 0, 205 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 206 DRM_MODE_FLAG_DBLCLK), 207 }, 208 /* 25 - 2880x576i@50Hz */ 209 { 210 DRM_MODE("2880x576i", 54000, 2880, 2928, 211 3180, 3456, 0, 576, 580, 586, 625, 0, 212 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 213 DRM_MODE_FLAG_INTERLACE), 214 }, 215 /* 26 - 2880x576i@50Hz */ 216 { 217 DRM_MODE("2880x576i", 54000, 2880, 2928, 218 3180, 3456, 0, 576, 580, 586, 625, 0, 219 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 220 DRM_MODE_FLAG_INTERLACE), 221 }, 222 /* 27 - 2880x288@50Hz */ 223 { 224 DRM_MODE("2880x288", 54000, 2880, 2928, 225 3180, 3456, 0, 288, 290, 293, 312, 0, 226 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 227 }, 228 /* 28 - 2880x288@50Hz */ 229 { 230 DRM_MODE("2880x288", 54000, 2880, 2928, 231 3180, 3456, 0, 288, 290, 293, 312, 0, 232 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 233 }, 234 /* 29 - 1440x576@50Hz */ 235 { 236 DRM_MODE("1440x576", 54000, 1440, 1464, 237 1592, 1728, 0, 576, 581, 586, 625, 0, 238 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 239 }, 240 /* 30 - 1440x576@50Hz */ 241 { 242 DRM_MODE("1440x576", 54000, 1440, 1464, 243 1592, 1728, 0, 576, 581, 586, 625, 0, 244 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 245 }, 246 /* 31 - 1920x1080@50Hz */ 247 { 248 DRM_MODE("1920x1080", 148500, 1920, 2448, 249 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, 250 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 251 }, 252 /* 32 - 1920x1080@24Hz */ 253 { 254 DRM_MODE("1920x1080", 74250, 1920, 2558, 255 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, 256 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 257 }, 258 /* 33 - 1920x1080@25Hz */ 259 { 260 DRM_MODE("1920x1080", 74250, 1920, 2448, 261 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, 262 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 263 }, 264 /* 34 - 1920x1080@30Hz */ 265 { 266 DRM_MODE("1920x1080", 74250, 1920, 2008, 267 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, 268 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 269 }, 270 /* 35 - 2880x480@60Hz */ 271 { 272 DRM_MODE("2880x480", 108000, 2880, 2944, 273 3192, 3432, 0, 480, 489, 495, 525, 0, 274 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 275 }, 276 /* 36 - 2880x480@60Hz */ 277 { 278 DRM_MODE("2880x480", 108000, 2880, 2944, 279 3192, 3432, 0, 480, 489, 495, 525, 0, 280 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 281 }, 282 /* 37 - 2880x576@50Hz */ 283 { 284 DRM_MODE("2880x576", 108000, 2880, 2928, 285 3184, 3456, 0, 576, 581, 586, 625, 0, 286 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 287 }, 288 /* 38 - 2880x576@50Hz */ 289 { 290 DRM_MODE("2880x576", 108000, 2880, 2928, 291 3184, 3456, 0, 576, 581, 586, 625, 0, 292 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 293 }, 294 /* 39 - 1920x1080i@50Hz */ 295 { 296 DRM_MODE("1920x1080i", 72000, 1920, 1952, 297 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, 298 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC | 299 DRM_MODE_FLAG_INTERLACE), 300 }, 301 /* 40 - 1920x1080i@100Hz */ 302 { 303 DRM_MODE("1920x1080i", 148500, 1920, 2448, 304 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, 305 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 306 DRM_MODE_FLAG_INTERLACE), 307 }, 308 /* 41 - 1280x720@100Hz */ 309 { 310 DRM_MODE("1280x720", 148500, 1280, 1720, 311 1760, 1980, 0, 720, 725, 730, 750, 0, 312 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 313 }, 314 /* 42 - 720x576@100Hz */ 315 { 316 DRM_MODE("720x576", 54000, 720, 732, 317 796, 864, 0, 576, 581, 586, 625, 0, 318 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 319 }, 320 /* 43 - 720x576@100Hz */ 321 { 322 DRM_MODE("720x576", 54000, 720, 732, 323 796, 864, 0, 576, 581, 586, 625, 0, 324 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 325 }, 326 /* 44 - 720(1440)x576i@100Hz */ 327 { 328 DRM_MODE("720x576i", 27000, 720, 732, 329 795, 864, 0, 576, 580, 586, 625, 0, 330 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 331 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 332 }, 333 /* 45 - 720(1440)x576i@100Hz */ 334 { 335 DRM_MODE("720x576i", 27000, 720, 732, 336 795, 864, 0, 576, 580, 586, 625, 0, 337 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 338 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 339 }, 340 /* 46 - 1920x1080i@120Hz */ 341 { 342 DRM_MODE("1920x1080i", 148500, 1920, 2008, 343 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, 344 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 345 DRM_MODE_FLAG_INTERLACE), 346 }, 347 /* 47 - 1280x720@120Hz */ 348 { 349 DRM_MODE("1280x720", 148500, 1280, 1390, 350 1430, 1650, 0, 720, 725, 730, 750, 0, 351 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 352 }, 353 /* 48 - 720x480@120Hz */ 354 { 355 DRM_MODE("720x480", 54000, 720, 736, 356 798, 858, 0, 480, 489, 495, 525, 0, 357 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 358 }, 359 /* 49 - 720x480@120Hz */ 360 { 361 DRM_MODE("720x480", 54000, 720, 736, 362 798, 858, 0, 480, 489, 495, 525, 0, 363 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 364 }, 365 /* 50 - 720(1440)x480i@120Hz */ 366 { 367 DRM_MODE("720x480i", 27000, 720, 739, 368 801, 858, 0, 480, 488, 494, 525, 0, 369 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 370 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 371 }, 372 /* 51 - 720(1440)x480i@120Hz */ 373 { 374 DRM_MODE("720x480i", 27000, 720, 739, 375 801, 858, 0, 480, 488, 494, 525, 0, 376 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 377 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 378 }, 379 /* 52 - 720x576@200Hz */ 380 { 381 DRM_MODE("720x576", 108000, 720, 732, 382 796, 864, 0, 576, 581, 586, 625, 0, 383 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 384 }, 385 /* 53 - 720x576@200Hz */ 386 { 387 DRM_MODE("720x576", 108000, 720, 732, 388 796, 864, 0, 576, 581, 586, 625, 0, 389 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 390 }, 391 /* 54 - 720(1440)x576i@200Hz */ 392 { 393 DRM_MODE("720x576i", 54000, 720, 732, 394 795, 864, 0, 576, 580, 586, 625, 0, 395 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 396 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 397 }, 398 /* 55 - 720(1440)x576i@200Hz */ 399 { 400 DRM_MODE("720x576i", 54000, 720, 732, 401 795, 864, 0, 576, 580, 586, 625, 0, 402 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 403 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 404 }, 405 /* 56 - 720x480@240Hz */ 406 { 407 DRM_MODE("720x480", 108000, 720, 736, 408 798, 858, 0, 480, 489, 495, 525, 0, 409 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 410 }, 411 /* 57 - 720x480@240Hz */ 412 { 413 DRM_MODE("720x480", 108000, 720, 736, 414 798, 858, 0, 480, 489, 495, 525, 0, 415 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 416 }, 417 /* 58 - 720(1440)x480i@240 */ 418 { 419 DRM_MODE("720x480i", 54000, 720, 739, 420 801, 858, 0, 480, 488, 494, 525, 0, 421 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 422 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 423 }, 424 /* 59 - 720(1440)x480i@240 */ 425 { 426 DRM_MODE("720x480i", 54000, 720, 739, 427 801, 858, 0, 480, 488, 494, 525, 0, 428 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 429 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), 430 }, 431 /* 60 - 1280x720@24Hz */ 432 { 433 DRM_MODE("1280x720", 59400, 1280, 3040, 434 3080, 3300, 0, 720, 725, 730, 750, 0, 435 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 436 }, 437 /* 61 - 1280x720@25Hz */ 438 { 439 DRM_MODE("1280x720", 74250, 1280, 3700, 440 3740, 3960, 0, 720, 725, 730, 750, 0, 441 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 442 }, 443 /* 62 - 1280x720@30Hz */ 444 { 445 DRM_MODE("1280x720", 74250, 1280, 3040, 446 3080, 3300, 0, 720, 725, 730, 750, 0, 447 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 448 }, 449 /* 63 - 1920x1080@120Hz */ 450 { 451 DRM_MODE("1920x1080", 297000, 1920, 2008, 452 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, 453 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 454 }, 455 /* 64 - 1920x1080@100Hz */ 456 { 457 DRM_MODE("1920x1080", 297000, 1920, 2448, 458 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, 459 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), 460 }, 461 /* TERMINATOR */ 462 {}, 463 }; 464 465 } // namespace kms 466