Lines Matching refs:output
172 if (xf86_config->output[o]->crtc == crtc)
191 * Return whether the output is leased by a client
195 xf86OutputIsLeased(xf86OutputPtr output)
198 if (!output->randr_output)
200 return RROutputIsLeased(output->randr_output);
216 xf86OutputPtr output = xf86_config->output[o];
218 if (output->crtc == crtc) {
219 switch (output->subpixel_order) {
226 subpixel_order = output->subpixel_order;
325 * adjust it according to limitations or output properties, and also
329 xf86OutputPtr output = xf86_config->output[i];
331 if (output->crtc != crtc)
334 if (!output->funcs->mode_fixup(output, mode, adjusted_mode)) {
348 xf86OutputPtr output = xf86_config->output[i];
350 if (output->crtc != crtc)
353 /* Disable the output as the first thing we do. */
354 output->funcs->prepare(output);
359 /* Set up the DPLL and any output state that needs to adjust or depend
364 xf86OutputPtr output = xf86_config->output[i];
366 if (output->crtc == crtc)
367 output->funcs->mode_set(output, mode, adjusted_mode);
378 xf86OutputPtr output = xf86_config->output[i];
380 if (output->crtc == crtc)
381 output->funcs->commit(output);
514 xf86OutputSetMonitor(xf86OutputPtr output)
519 if (!output->name)
522 free(output->options);
524 output->options = xnfalloc(sizeof(xf86OutputOptions));
525 memcpy(output->options, xf86OutputOptions, sizeof(xf86OutputOptions));
527 XNFasprintf(&option_name, "monitor-%s", output->name);
528 monitor = xf86findOptionValue(output->scrn->options, option_name);
530 monitor = output->name;
532 xf86MarkOptionUsedByName(output->scrn->options, option_name);
534 output->conf_monitor = xf86findMonitor(monitor,
539 if (!output->conf_monitor && output->use_screen_monitor)
540 output->conf_monitor = xf86findMonitor(output->scrn->monitor->id,
542 if (output->conf_monitor) {
543 xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
545 output->name, output->conf_monitor->mon_identifier);
546 xf86ProcessOptions(output->scrn->scrnIndex,
547 output->conf_monitor->mon_option_lst,
548 output->options);
551 xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
552 "Output %s has no monitor section\n", output->name);
556 xf86OutputForceEnabled(xf86OutputPtr output)
560 if (xf86GetOptValBool(output->options, OPTION_ENABLE, &enable) && enable)
566 xf86OutputEnabled(xf86OutputPtr output, Bool strict)
570 /* check to see if this output was enabled in the config file */
571 if (xf86GetOptValBool(output->options, OPTION_ENABLE, &enable) && enable) {
572 xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
573 "Output %s enabled by config file\n", output->name);
576 /* or if this output was disabled in the config file */
577 if (xf86GetOptValBool(output->options, OPTION_DISABLE, &disable) && disable) {
578 xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
579 "Output %s disabled by config file\n", output->name);
585 enable = output->status == XF86OutputStatusConnected && !output->non_desktop;
589 enable = output->status != XF86OutputStatusDisconnected;
592 xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
593 "Output %s %sconnected\n", output->name, enable ? "" : "dis");
598 xf86OutputIgnored(xf86OutputPtr output)
600 return xf86ReturnOptValBool(output->options, OPTION_IGNORE, FALSE);
611 xf86OutputInitialRotation(xf86OutputPtr output)
613 const char *rotate_name = xf86GetOptValString(output->options,
618 if (output->initial_rotation)
619 return output->initial_rotation;
633 xf86OutputPtr output, *outputs;
643 output = calloc(sizeof(xf86OutputRec) + len, 1);
644 if (!output)
646 output->scrn = scrn;
647 output->funcs = funcs;
649 output->name = (char *) (output + 1);
650 strcpy(output->name, name);
652 output->subpixel_order = SubPixelUnknown;
654 * Use the old per-screen monitor section for the first output
656 output->use_screen_monitor = (xf86_config->num_output == 0);
658 output->randr_output = NULL;
661 xf86OutputSetMonitor(output);
662 if (xf86OutputIgnored(output)) {
663 free(output);
668 if (xf86_config->output)
669 outputs = reallocarray(xf86_config->output,
676 free(output);
680 xf86_config->output = outputs;
682 if (xf86GetOptValBool(output->options, OPTION_PRIMARY, &primary) && primary) {
683 memmove(xf86_config->output + 1, xf86_config->output,
685 xf86_config->output[0] = output;
688 xf86_config->output[xf86_config->num_output] = output;
693 return output;
697 xf86OutputRename(xf86OutputPtr output, const char *name)
704 if (output->name && output->name != (char *) (output + 1))
705 free(output->name);
706 output->name = newname;
707 xf86OutputSetMonitor(output);
708 if (xf86OutputIgnored(output))
714 xf86OutputUseScreenMonitor(xf86OutputPtr output, Bool use_screen_monitor)
716 if (use_screen_monitor != output->use_screen_monitor) {
717 output->use_screen_monitor = use_screen_monitor;
718 xf86OutputSetMonitor(output);
723 xf86OutputDestroy(xf86OutputPtr output)
725 ScrnInfoPtr scrn = output->scrn;
729 (*output->funcs->destroy) (output);
730 while (output->probed_modes)
731 xf86DeleteMode(&output->probed_modes, output->probed_modes);
733 if (xf86_config->output[o] == output) {
734 memmove(&xf86_config->output[o],
735 &xf86_config->output[o + 1],
740 if (output->name && output->name != (char *) (output + 1))
741 free(output->name);
742 free(output);
781 xf86OutputPtr output = config->output[o];
783 output->randr_output = NULL;
863 xf86DefaultMode(xf86OutputPtr output, int width, int height)
871 mm_height = output->mm_height;
877 for (mode = output->probed_modes; mode; mode = mode->next) {
883 if (xf86ModeWidth(mode, output->initial_rotation) > width ||
884 xf86ModeHeight(mode, output->initial_rotation) > height)
902 xf86ClosestMode(xf86OutputPtr output,
913 for (mode = output->probed_modes; mode; mode = mode->next) {
917 if (xf86ModeWidth(mode, output->initial_rotation) > width ||
918 xf86ModeHeight(mode, output->initial_rotation) > height)
922 if (output->initial_rotation == match_rotation &&
927 output->
930 output->
942 xf86OutputHasPreferredMode(xf86OutputPtr output, int width, int height)
946 for (mode = output->probed_modes; mode; mode = mode->next) {
947 if (xf86ModeWidth(mode, output->initial_rotation) > width ||
948 xf86ModeHeight(mode, output->initial_rotation) > height)
958 xf86OutputHasUserPreferredMode(xf86OutputPtr output)
960 DisplayModePtr mode, first = output->probed_modes;
976 xf86OutputPtr output;
985 output = config->output[n];
988 * Compute score with this output disabled
1001 if (output->status == XF86OutputStatusConnected)
1004 if (xf86OutputHasPreferredMode(output, width, height))
1007 * Select a crtc for this output and
1012 if ((output->possible_crtcs & (1 << c)) == 0)
1017 * Check to see if some other output is
1029 config->output[o]->initial_rotation ==
1030 config->output[n]->initial_rotation &&
1031 config->output[o]->initial_x == config->output[n]->initial_x &&
1032 config->output[o]->initial_y == config->output[n]->initial_y) {
1033 if ((output->possible_clones & (1 << o)) == 0)
1085 xf86OutputPtr output = config->output[o];
1088 if (output->possible_crtcs & (1 << s)) {
1091 for (mode = output->probed_modes; mode;
1136 xf86OutputPtr output = config->output[o];
1146 position = xf86GetOptValString(output->options, OPTION_POSITION);
1154 relative_name = xf86GetOptValString(output->options, relation);
1161 modes[o] = xf86OutputHasUserPreferredMode(output);
1179 xf86OutputPtr output = config->output[o];
1181 if (output->initial_x || output->initial_y)
1186 xf86OutputPtr output = config->output[o];
1188 output->initial_x = output->initial_y = POSITION_UNSET;
1202 xf86OutputPtr output = config->output[o];
1209 if (output->initial_x != POSITION_UNSET)
1211 position = xf86GetOptValString(output->options, OPTION_POSITION);
1219 output->initial_x = x;
1220 output->initial_y = y;
1225 output->name);
1226 output->initial_x = output->initial_y = 0;
1238 relative_name = xf86GetOptValString(output->options, relation);
1247 xf86OutputPtr out_rel = config->output[or];
1253 relative = config->output[or];
1258 relative = config->output[or];
1264 "Cannot position output %s relative to unknown output %s\n",
1265 output->name, relative_name);
1266 output->initial_x = 0;
1267 output->initial_y = 0;
1273 "Cannot position output %s relative to output %s without modes\n",
1274 output->name, relative_name);
1275 output->initial_x = 0;
1276 output->initial_y = 0;
1284 output->initial_x = relative->initial_x;
1285 output->initial_y = relative->initial_y;
1288 output->initial_y +=
1292 output->initial_x +=
1297 output->initial_y -=
1298 xf86ModeHeight(modes[o], output->initial_rotation);
1302 output->initial_x -=
1303 xf86ModeWidth(modes[o], output->initial_rotation);
1313 output->initial_x = 0;
1314 output->initial_y = 0;
1321 xf86OutputPtr output = config->output[o];
1323 if (output->initial_x == POSITION_UNSET) {
1326 output->name);
1327 output->initial_x = output->initial_y = 0;
1340 xf86OutputPtr output = config->output[o];
1342 if (output->initial_x < min_x)
1343 min_x = output->initial_x;
1344 if (output->initial_y < min_y)
1345 min_y = output->initial_y;
1349 xf86OutputPtr output = config->output[o];
1351 output->initial_x -= min_x;
1352 output->initial_y -= min_y;
1364 xf86OutputPtr output = config->output[o];
1365 const char *panning = xf86GetOptValString(output->options, OPTION_PANNING);
1370 memset(&output->initialTotalArea, 0, sizeof(BoxRec));
1371 memset(&output->initialTrackingArea, 0, sizeof(BoxRec));
1372 memset(output->initialBorder, 0, 4 * sizeof(INT16));
1382 output->initialBorder[0] = brdr[0];
1383 output->initialBorder[1] = brdr[1];
1384 output->initialBorder[2] = brdr[2];
1385 output->initialBorder[3] = brdr[3];
1388 output->initialTrackingArea.x1 = track_left;
1389 output->initialTrackingArea.y1 = track_top;
1390 output->initialTrackingArea.x2 = track_left + track_width;
1391 output->initialTrackingArea.y2 = track_top + track_height;
1394 output->initialTotalArea.x1 = left;
1395 output->initialTotalArea.y1 = top;
1398 output->initialTotalArea.x2 = output->initialTotalArea.x1 + width;
1399 output->initialTotalArea.y2 = output->initialTotalArea.y1 + height;
1403 "Broken panning specification '%s' for output %s in config file\n",
1404 panning, output->name);
1432 DisplayModePtr output = NULL, i, o, n, *op, prev;
1438 for (op = &output; (o = *op); op = &o->next)
1445 for (o = output; o && (n = o->next); o = n) {
1455 for (o = output; o; o = o->next) {
1459 return output;
1463 preferredMode(ScrnInfoPtr pScrn, xf86OutputPtr output)
1468 preferred_mode = xf86GetOptValString(output->options,
1520 * specification order is free. An output mode is matched at most
1522 * Thus a repeat mode name specification matches the next output mode
1532 processZoomModes(xf86OutputPtr output)
1537 zoom_modes = xf86GetOptValString(output->options, OPTION_ZOOM_MODES);
1547 for (mode = output->probed_modes; mode; mode = mode->next)
1664 /* Probe the list of modes for each output. */
1666 xf86OutputPtr output = config->output[o];
1680 while (output->probed_modes != NULL)
1681 xf86DeleteMode(&output->probed_modes, output->probed_modes);
1686 output->status = (*output->funcs->detect) (output);
1688 if (output->status == XF86OutputStatusDisconnected &&
1689 !xf86ReturnOptValBool(output->options, OPTION_ENABLE, FALSE)) {
1690 xf86OutputSetEDID(output, NULL);
1696 conf_monitor = output->conf_monitor;
1720 output_modes = (*output->funcs->get_modes) (output);
1726 if (!xf86GetOptValBool(output->options, OPTION_DEFAULT_MODES,
1730 edid_monitor = output->MonInfo;
1759 if (xf86GetOptValFreq(output->options, OPTION_MIN_CLOCK,
1762 if (xf86GetOptValFreq(output->options, OPTION_MAX_CLOCK,
1798 * Check output and config modes against sync range from config file
1817 output->probed_modes = NULL;
1818 output->probed_modes = xf86ModesAdd(output->probed_modes, config_modes);
1819 output->probed_modes = xf86ModesAdd(output->probed_modes, output_modes);
1820 output->probed_modes =
1821 xf86ModesAdd(output->probed_modes, default_modes);
1827 xf86ValidateModesSize(scrn, output->probed_modes, maxX, maxY, 0);
1830 int flags = (output->interlaceAllowed ? V_INTERLACE : 0) |
1831 (output->doubleScanAllowed ? V_DBLSCAN : 0);
1832 xf86ValidateModesFlags(scrn, output->probed_modes, flags);
1836 * Check all modes against output
1838 for (mode = output->probed_modes; mode != NULL; mode = mode->next)
1840 mode->status = (*output->funcs->mode_valid) (output, mode);
1842 xf86PruneInvalidModes(scrn, &output->probed_modes, debug_modes);
1844 output->probed_modes = xf86SortModes(output->probed_modes);
1847 preferred_mode = preferredMode(scrn, output);
1850 for (mode = output->probed_modes; mode; mode = mode->next) {
1852 if (mode != output->probed_modes) {
1857 mode->next = output->probed_modes;
1858 output->probed_modes->prev = mode;
1860 output->probed_modes = mode;
1869 processZoomModes(output);
1871 output->initial_rotation = xf86OutputInitialRotation(output);
1874 if (output->probed_modes != NULL) {
1876 "Printing probed modes for output %s\n",
1877 output->name);
1881 "No remaining probed modes for output %s\n",
1882 output->name);
1885 for (mode = output->probed_modes; mode != NULL; mode = mode->next) {
1899 * Copy one of the output mode lists to the ScrnInfo record
1924 xf86OutputPtr output = NULL, test = NULL;
1933 test = config->output[o];
1945 if (!output) {
1946 output = test;
1952 output = test;
1960 output = test;
1968 if (!output) {
1970 test = config->output[o];
1976 if (!output) {
1977 output = test;
1981 output->probed_modes->HDisplay) {
1982 output = test;
1992 /* Don't change the compat output when no valid outputs found */
1993 output = config->output[config->compat_output];
1997 if (!output && config->num_output) {
1999 output = config->output[config->compat_output];
2002 return output;
2009 xf86OutputPtr output;
2013 output = SetCompatOutput(config);
2015 if (!output)
2018 crtc = output->crtc;
2024 /* Set scrn->modes to the mode list for the 'compat' output */
2025 scrn->modes = xf86DuplicateModes(scrn, output->probed_modes);
2074 any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], TRUE);
2082 xf86OutputEnabled(config->output[o], FALSE);
2137 while ((mode = nextAspectMode(config->output[o], mode, aspect))) {
2140 test = xf86OutputFindClosestMode(config->output[p], mode);
2193 xf86OutputHasPreferredMode(config->output[o], width, height);
2209 xf86OutputHasPreferredMode(config->output[o], width, height);
2214 if (config->output[o]->tile_info.group_id) {
2219 config->output[o]->initial_x = w;
2230 struct xf86CrtcTileInfo *tile_info = &config->output[o]->tile_info, *this_tile;
2247 xf86OutputHasPreferredMode(config->output[ot], width, height);
2248 if (!config->output[ot]->tile_info.group_id)
2251 this_tile = &config->output[ot]->tile_info;
2259 config->output[ot]->initial_x = cur_x;
2260 config->output[ot]->initial_y = cur_y;
2292 Rotation r = config->output[p]->initial_rotation;
2295 if ((preferred[p] = xf86OutputHasPreferredMode(config->output[p],
2303 xf86OutputPtr output = config->output[o];
2310 * output as well. This catches the common case of identical
2315 mode = xf86OutputHasPreferredMode(output, pref_width,
2322 for (mode = output->probed_modes; mode; mode = mode->next) {
2323 Rotation ir = output->initial_rotation;
2361 if (config->output[p]->mm_height)
2362 aspect = (float) config->output[p]->mm_width /
2363 (float) config->output[p]->mm_height;
2393 xf86OutputPtr output;
2401 output = config->output[o];
2402 if (output->mm_height)
2403 aspects[o] = (float) output->mm_width / (float) output->mm_height;
2410 output = config->output[o];
2433 modes[o] = xf86OutputFindClosestMode(config->output[o], guess);
2453 default_mode = xf86DefaultMode(config->output[o], width, height);
2463 target_rotation = config->output[o]->initial_rotation;
2471 /* Fill in other output modes */
2474 modes[o] = xf86ClosestMode(config->output[o], target_mode,
2491 if (xf86OutputHasUserPreferredMode(config->output[o]))
2609 config->output[o]->name);
2613 config->output[o]->name, modes[o]->name,
2614 config->output[o]->initial_x,
2615 config->output[o]->initial_y);
2619 * Set the position of each output
2625 * Set initial panning of each output
2630 * Assign CRTCs to fit output configuration
2653 xf86OutputPtr output = config->output[o];
2659 crtc->desiredRotation = output->initial_rotation;
2660 crtc->desiredX = output->initial_x;
2661 crtc->desiredY = output->initial_y;
2664 memcpy(&crtc->panningTotalArea, &output->initialTotalArea,
2666 memcpy(&crtc->panningTrackingArea, &output->initialTrackingArea,
2668 memcpy(crtc->panningBorder, output->initialBorder,
2670 output->crtc = crtc;
2673 output->crtc = NULL;
2740 * Check the CRTC we're going to map each output to vs. its current
2741 * CRTC. If they don't match, we have to disable the output and the CRTC
2751 xf86OutputPtr output = config->output[o];
2753 if (xf86OutputIsLeased(output))
2758 if (!output->funcs->get_crtc ||
2759 output->crtc != (*output->funcs->get_crtc) (output) ||
2760 output->crtc == NULL)
2762 (*output->funcs->dpms) (output, DPMSModeOff);
2775 xf86OutputPtr output = NULL;
2783 output = config->output[o];
2784 if (output->crtc == crtc)
2787 if (!output->funcs->get_crtc) {
2791 if ((*output->funcs->get_crtc) (output) == crtc)
2830 xf86OutputPtr output = NULL;
2841 output = xf86CompatOutput(scrn);
2844 if (config->output[o]->crtc == crtc) {
2845 output = config->output[o];
2850 if (!output)
2857 xf86OutputFindClosestMode(output, scrn->currentMode);
2878 if (config->output[o]->crtc == crtc)
2879 config->output[o]->crtc = NULL;
2890 * In the current world order, there are lists of modes per output, which may
2900 xf86OutputFindClosestMode(xf86OutputPtr output, DisplayModePtr desired)
2904 for (scan = output->probed_modes; scan != NULL; scan = scan->next) {
2953 * output. Then, find similar modes for the other outputs, as with the
2968 * Let the compat output drive the final mode selection
2985 xf86OutputPtr output = config->output[o];
2989 if (output->crtc != crtc)
2993 output_mode = xf86OutputFindClosestMode(output, crtc_mode);
2995 output->crtc = NULL;
2998 crtc_mode = xf86OutputFindClosestMode(output, desired);
3038 xf86OutputPtr output = config->output[i];
3040 if (!xf86OutputIsLeased(output) && output->crtc != NULL)
3041 (*output->funcs->dpms) (output, mode);
3054 xf86OutputPtr output = config->output[i];
3056 if (!xf86OutputIsLeased(output) && output->crtc != NULL)
3057 (*output->funcs->dpms) (output, mode);
3091 xf86OutputPtr output = xf86_config->output[o];
3093 if (!output->crtc)
3094 (*output->funcs->dpms) (output, DPMSModeOff);
3127 xf86OutputSetEDIDProperty(xf86OutputPtr output, void *data, int data_len)
3132 if (output->randr_output == NULL)
3136 RRChangeOutputProperty(output->randr_output, edid_atom, XA_INTEGER, 8,
3140 RRDeleteOutputProperty(output->randr_output, edid_atom);
3148 xf86OutputSetTileProperty(xf86OutputPtr output)
3153 if (output->randr_output == NULL)
3156 if (output->tile_info.group_id != 0) {
3157 RRChangeOutputProperty(output->randr_output, tile_atom, XA_INTEGER, 32,
3158 PropModeReplace, TILE_PROP_NUM_ITEMS, (uint32_t *)&output->tile_info, FALSE, TRUE);
3161 RRDeleteOutputProperty(output->randr_output, tile_atom);
3169 xf86OutputPtr output;
3186 p->output->MonInfo->features.hsize,
3187 p->output->MonInfo->features.vsize);
3198 p->output->mm_width = det_mon->section.d_timings.h_size;
3199 p->output->mm_height = det_mon->section.d_timings.v_size;
3202 xf86DrvMsg(p->output->scrn->scrnIndex, X_WARNING,
3204 "consider adding a quirk\n", p->output->name,
3231 xf86OutputSetTile(xf86OutputPtr output, struct xf86CrtcTileInfo *tile_info)
3234 output->tile_info = *tile_info;
3236 memset(&output->tile_info, 0, sizeof(output->tile_info));
3238 xf86OutputSetTileProperty(output);
3243 * Set the EDID information for the specified output
3246 xf86OutputSetEDID(xf86OutputPtr output, xf86MonPtr edid_mon)
3248 ScrnInfoPtr scrn = output->scrn;
3256 free(output->MonInfo);
3258 output->MonInfo = edid_mon;
3259 output->mm_width = 0;
3260 output->mm_height = 0;
3263 xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
3264 output->name);
3268 /* Set the DDC properties for the 'compat' output */
3270 if (output == xf86CompatOutput(scrn) && !scrn->is_gpu)
3274 /* Set the RandR output properties */
3285 xf86OutputSetEDIDProperty(output, edid_mon ? edid_mon->rawData : NULL,
3293 p.output = output;
3299 if ((!output->mm_width || !output->mm_height) &&
3301 output->mm_width = edid_mon->features.hsize * 10;
3302 output->mm_height = edid_mon->features.vsize * 10;
3309 * stored in 'output'
3312 xf86OutputGetEDIDModes(xf86OutputPtr output)
3314 ScrnInfoPtr scrn = output->scrn;
3315 xf86MonPtr edid_mon = output->MonInfo;
3324 xf86OutputGetEDID(xf86OutputPtr output, I2CBusPtr pDDCBus)
3326 ScrnInfoPtr scrn = output->scrn;