Lines Matching refs:output
179 if (xf86_config->output[o]->crtc == crtc)
199 xf86OutputPtr output = xf86_config->output[o];
201 if (output->crtc == crtc)
203 switch (output->subpixel_order) {
210 subpixel_order = output->subpixel_order;
309 * adjust it according to limitations or output properties, and also
313 xf86OutputPtr output = xf86_config->output[i];
315 if (output->crtc != crtc)
318 if (!output->funcs->mode_fixup(output, mode, adjusted_mode)) {
332 xf86OutputPtr output = xf86_config->output[i];
334 if (output->crtc != crtc)
337 /* Disable the output as the first thing we do. */
338 output->funcs->prepare(output);
343 /* Set up the DPLL and any output state that needs to adjust or depend
349 xf86OutputPtr output = xf86_config->output[i];
350 if (output->crtc == crtc)
351 output->funcs->mode_set(output, mode, adjusted_mode);
363 xf86OutputPtr output = xf86_config->output[i];
364 if (output->crtc == crtc)
365 output->funcs->commit(output);
481 xf86OutputSetMonitor (xf86OutputPtr output)
486 if (!output->name)
489 free(output->options);
491 output->options = xnfalloc (sizeof (xf86OutputOptions));
492 memcpy (output->options, xf86OutputOptions, sizeof (xf86OutputOptions));
494 XNFasprintf(&option_name, "monitor-%s", output->name);
495 monitor = xf86findOptionValue (output->scrn->options, option_name);
497 monitor = output->name;
499 xf86MarkOptionUsedByName (output->scrn->options, option_name);
501 output->conf_monitor = xf86findMonitor (monitor,
506 if (!output->conf_monitor && output->use_screen_monitor)
507 output->conf_monitor = xf86findMonitor (output->scrn->monitor->id,
509 if (output->conf_monitor)
511 xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
513 output->name, output->conf_monitor->mon_identifier);
514 xf86ProcessOptions (output->scrn->scrnIndex,
515 output->conf_monitor->mon_option_lst,
516 output->options);
519 xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
521 output->name);
525 xf86OutputEnabled (xf86OutputPtr output, Bool strict)
529 /* check to see if this output was enabled in the config file */
530 if (xf86GetOptValBool (output->options, OPTION_ENABLE, &enable) && enable)
532 xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
533 "Output %s enabled by config file\n", output->name);
536 /* or if this output was disabled in the config file */
537 if (xf86GetOptValBool (output->options, OPTION_DISABLE, &disable) && disable)
539 xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
540 "Output %s disabled by config file\n", output->name);
546 enable = output->status == XF86OutputStatusConnected;
550 enable = output->status != XF86OutputStatusDisconnected;
553 xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
554 "Output %s %sconnected\n", output->name, enable ? "" : "dis");
559 xf86OutputIgnored (xf86OutputPtr output)
561 return xf86ReturnOptValBool (output->options, OPTION_IGNORE, FALSE);
572 xf86OutputInitialRotation (xf86OutputPtr output)
574 char *rotate_name = xf86GetOptValString (output->options,
579 if (output->initial_rotation)
580 return output->initial_rotation;
595 xf86OutputPtr output, *outputs;
605 output = calloc(sizeof (xf86OutputRec) + len, 1);
606 if (!output)
608 output->scrn = scrn;
609 output->funcs = funcs;
612 output->name = (char *) (output + 1);
613 strcpy (output->name, name);
615 output->subpixel_order = SubPixelUnknown;
617 * Use the old per-screen monitor section for the first output
619 output->use_screen_monitor = (xf86_config->num_output == 0);
621 output->randr_output = NULL;
625 xf86OutputSetMonitor (output);
626 if (xf86OutputIgnored (output))
628 free(output);
634 if (xf86_config->output)
635 outputs = realloc(xf86_config->output,
641 free(output);
645 xf86_config->output = outputs;
647 if (xf86GetOptValBool (output->options, OPTION_PRIMARY, &primary) && primary)
649 memmove(xf86_config->output + 1, xf86_config->output,
651 xf86_config->output[0] = output;
655 xf86_config->output[xf86_config->num_output] = output;
660 return output;
664 xf86OutputRename (xf86OutputPtr output, const char *name)
671 if (output->name && output->name != (char *) (output + 1))
672 free(output->name);
673 output->name = newname;
674 xf86OutputSetMonitor (output);
675 if (xf86OutputIgnored (output))
681 xf86OutputUseScreenMonitor (xf86OutputPtr output, Bool use_screen_monitor)
683 if (use_screen_monitor != output->use_screen_monitor)
685 output->use_screen_monitor = use_screen_monitor;
686 xf86OutputSetMonitor (output);
691 xf86OutputDestroy (xf86OutputPtr output)
693 ScrnInfoPtr scrn = output->scrn;
697 (*output->funcs->destroy) (output);
698 while (output->probed_modes)
699 xf86DeleteMode (&output->probed_modes, output->probed_modes);
701 if (xf86_config->output[o] == output)
703 memmove (&xf86_config->output[o],
704 &xf86_config->output[o+1],
709 if (output->name && output->name != (char *) (output + 1))
710 free(output->name);
711 free(output);
750 xf86OutputPtr output = config->output[o];
752 output->randr_output = NULL;
822 xf86DefaultMode (xf86OutputPtr output, int width, int height)
830 mm_height = output->mm_height;
836 for (mode = output->probed_modes; mode; mode = mode->next)
843 if (xf86ModeWidth (mode, output->initial_rotation) > width ||
844 xf86ModeHeight (mode, output->initial_rotation) > height)
863 xf86ClosestMode (xf86OutputPtr output,
874 for (mode = output->probed_modes; mode; mode = mode->next)
879 if (xf86ModeWidth (mode, output->initial_rotation) > width ||
880 xf86ModeHeight (mode, output->initial_rotation) > height)
884 if (output->initial_rotation == match_rotation &&
888 dx = xf86ModeWidth (match, match_rotation) - xf86ModeWidth (mode, output->initial_rotation);
889 dy = xf86ModeHeight (match, match_rotation) - xf86ModeHeight (mode, output->initial_rotation);
901 xf86OutputHasPreferredMode (xf86OutputPtr output, int width, int height)
905 for (mode = output->probed_modes; mode; mode = mode->next)
907 if (xf86ModeWidth (mode, output->initial_rotation) > width ||
908 xf86ModeHeight (mode, output->initial_rotation) > height)
918 xf86OutputHasUserPreferredMode (xf86OutputPtr output)
920 DisplayModePtr mode, first = output->probed_modes;
939 xf86OutputPtr output;
949 output = config->output[n];
952 * Compute score with this output disabled
966 if (output->status == XF86OutputStatusConnected)
969 if (xf86OutputHasPreferredMode (output, width, height))
972 * Select a crtc for this output and
978 if ((output->possible_crtcs & (1 << c)) == 0)
983 * Check to see if some other output is
996 config->output[o]->initial_rotation == config->output[n]->initial_rotation &&
997 config->output[o]->initial_x == config->output[n]->initial_x &&
998 config->output[o]->initial_y == config->output[n]->initial_y)
1000 if ((output->possible_clones & (1 << o)) == 0)
1053 xf86OutputPtr output = config->output[o];
1056 if (output->possible_crtcs & (1 << s))
1059 for (mode = output->probed_modes; mode; mode = mode->next)
1101 xf86OutputPtr output = config->output[o];
1110 position = xf86GetOptValString (output->options,
1120 relative_name = xf86GetOptValString (output->options,
1128 modes[o] = xf86OutputHasUserPreferredMode(output);
1145 xf86OutputPtr output = config->output[o];
1147 output->initial_x = output->initial_y = POSITION_UNSET;
1163 xf86OutputPtr output = config->output[o];
1170 if (output->initial_x != POSITION_UNSET)
1172 position = xf86GetOptValString (output->options,
1182 output->initial_x = x;
1183 output->initial_y = y;
1189 output->name);
1190 output->initial_x = output->initial_y = 0;
1203 relative_name = xf86GetOptValString (output->options,
1214 xf86OutputPtr out_rel = config->output[or];
1222 relative = config->output[or];
1228 relative = config->output[or];
1235 "Cannot position output %s relative to unknown output %s\n",
1236 output->name, relative_name);
1237 output->initial_x = 0;
1238 output->initial_y = 0;
1245 "Cannot position output %s relative to output %s without modes\n",
1246 output->name, relative_name);
1247 output->initial_x = 0;
1248 output->initial_y = 0;
1257 output->initial_x = relative->initial_x;
1258 output->initial_y = relative->initial_y;
1261 output->initial_y += xf86ModeHeight (modes[or], relative->initial_rotation);
1264 output->initial_x += xf86ModeWidth (modes[or], relative->initial_rotation);
1268 output->initial_y -= xf86ModeHeight (modes[o], output->initial_rotation);
1272 output->initial_x -= xf86ModeWidth (modes[o], output->initial_rotation);
1282 output->initial_x = 0;
1283 output->initial_y = 0;
1292 xf86OutputPtr output = config->output[o];
1293 if (output->initial_x == POSITION_UNSET)
1297 output->name);
1298 output->initial_x = output->initial_y = 0;
1312 xf86OutputPtr output = config->output[o];
1314 if (output->initial_x < min_x)
1315 min_x = output->initial_x;
1316 if (output->initial_y < min_y)
1317 min_y = output->initial_y;
1322 xf86OutputPtr output = config->output[o];
1324 output->initial_x -= min_x;
1325 output->initial_y -= min_y;
1338 xf86OutputPtr output = config->output[o];
1339 char *panning = xf86GetOptValString (output->options, OPTION_PANNING);
1344 memset (&output->initialTotalArea, 0, sizeof(BoxRec));
1345 memset (&output->initialTrackingArea, 0, sizeof(BoxRec));
1346 memset (output->initialBorder, 0, 4*sizeof(INT16));
1356 output->initialBorder[0] = brdr[0];
1357 output->initialBorder[1] = brdr[1];
1358 output->initialBorder[2] = brdr[2];
1359 output->initialBorder[3] = brdr[3];
1362 output->initialTrackingArea.x1 = track_left;
1363 output->initialTrackingArea.y1 = track_top;
1364 output->initialTrackingArea.x2 = track_left + track_width;
1365 output->initialTrackingArea.y2 = track_top + track_height;
1368 output->initialTotalArea.x1 = left;
1369 output->initialTotalArea.y1 = top;
1372 output->initialTotalArea.x2 = output->initialTotalArea.x1 + width;
1373 output->initialTotalArea.y2 = output->initialTotalArea.y1 + height;
1377 "Broken panning specification '%s' for output %s in config file\n",
1378 panning, output->name);
1406 DisplayModePtr output = NULL, i, o, n, *op, prev;
1413 for (op = &output; (o = *op); op = &o->next)
1420 for (o = output; o && (n = o->next); o = n)
1432 for (o = output; o; o = o->next)
1437 return output;
1441 preferredMode(ScrnInfoPtr pScrn, xf86OutputPtr output)
1446 preferred_mode = xf86GetOptValString (output->options,
1556 /* Probe the list of modes for each output. */
1559 xf86OutputPtr output = config->output[o];
1574 while (output->probed_modes != NULL)
1575 xf86DeleteMode(&output->probed_modes, output->probed_modes);
1580 output->status = (*output->funcs->detect)(output);
1582 if (output->status == XF86OutputStatusDisconnected &&
1583 !xf86ReturnOptValBool(output->options, OPTION_ENABLE, FALSE))
1585 xf86OutputSetEDID (output, NULL);
1591 conf_monitor = output->conf_monitor;
1614 output_modes = (*output->funcs->get_modes) (output);
1620 if (!xf86GetOptValBool(output->options, OPTION_DEFAULT_MODES,
1624 edid_monitor = output->MonInfo;
1646 if (xf86GetOptValFreq (output->options, OPTION_MIN_CLOCK,
1649 if (xf86GetOptValFreq (output->options, OPTION_MAX_CLOCK,
1688 * Check output and config modes against sync range from config file
1707 output->probed_modes = NULL;
1708 output->probed_modes = xf86ModesAdd (output->probed_modes, config_modes);
1709 output->probed_modes = xf86ModesAdd (output->probed_modes, output_modes);
1710 output->probed_modes = xf86ModesAdd (output->probed_modes, default_modes);
1716 xf86ValidateModesSize (scrn, output->probed_modes,
1720 int flags = (output->interlaceAllowed ? V_INTERLACE : 0) |
1721 (output->doubleScanAllowed ? V_DBLSCAN : 0);
1722 xf86ValidateModesFlags (scrn, output->probed_modes, flags);
1726 * Check all modes against output
1728 for (mode = output->probed_modes; mode != NULL; mode = mode->next)
1730 mode->status = (*output->funcs->mode_valid)(output, mode);
1732 xf86PruneInvalidModes(scrn, &output->probed_modes, debug_modes);
1734 output->probed_modes = xf86SortModes (output->probed_modes);
1737 preferred_mode = preferredMode(scrn, output);
1741 for (mode = output->probed_modes; mode; mode = mode->next)
1745 if (mode != output->probed_modes)
1751 mode->next = output->probed_modes;
1752 output->probed_modes->prev = mode;
1754 output->probed_modes = mode;
1762 output->initial_rotation = xf86OutputInitialRotation (output);
1765 if (output->probed_modes != NULL) {
1767 "Printing probed modes for output %s\n",
1768 output->name);
1771 "No remaining probed modes for output %s\n",
1772 output->name);
1775 for (mode = output->probed_modes; mode != NULL; mode = mode->next)
1791 * Copy one of the output mode lists to the ScrnInfo record
1820 xf86OutputPtr output = NULL, test = NULL;
1827 test = config->output[o];
1839 if (!output) {
1840 output = test;
1845 output = test;
1852 output = test;
1860 if (!output)
1864 test = config->output[o];
1870 if (!output) {
1871 output = test;
1873 } else if (test->probed_modes->HDisplay < output->probed_modes->HDisplay) {
1874 output = test;
1883 /* Don't change the compat output when no valid outputs found */
1884 output = config->output[config->compat_output];
1887 return output;
1894 xf86OutputPtr output;
1898 output = SetCompatOutput(config);
1900 if (!output)
1903 crtc = output->crtc;
1909 /* Set scrn->modes to the mode list for the 'compat' output */
1910 scrn->modes = xf86DuplicateModes(scrn, output->probed_modes);
1952 any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], TRUE);
1959 any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], FALSE);
2014 while ((mode = nextAspectMode(config->output[o], mode, aspect))) {
2017 test = xf86OutputFindClosestMode(config->output[p], mode);
2055 Rotation r = config->output[p]->initial_rotation;
2057 if ((preferred[p] = xf86OutputHasPreferredMode(config->output[p],
2065 xf86OutputPtr output = config->output[o];
2069 for (mode = output->probed_modes; mode; mode = mode->next) {
2070 Rotation r = output->initial_rotation;
2108 if (config->output[p]->mm_height)
2109 aspect = (float)config->output[p]->mm_width /
2110 (float)config->output[p]->mm_height;
2138 xf86OutputPtr output;
2146 output = config->output[o];
2147 if (output->mm_height)
2148 aspects[o] = (float)output->mm_width / (float)output->mm_height;
2155 output = config->output[o];
2177 modes[o] = xf86OutputFindClosestMode(config->output[o], guess);
2198 default_mode = xf86DefaultMode (config->output[o], width, height);
2208 target_rotation = config->output[o]->initial_rotation;
2216 /* Fill in other output modes */
2219 modes[o] = xf86ClosestMode(config->output[o], target_mode,
2237 if (xf86OutputHasUserPreferredMode(config->output[o]))
2306 xf86OutputSetInitialGamma(xf86OutputPtr output)
2308 XF86ConfMonitorPtr mon = output->conf_monitor;
2314 if (!output->crtc)
2330 /* This avoids setting gamma 1.0 in case another cloned output on this crtc has a specific gamma. */
2332 xf86DrvMsg(output->scrn->scrnIndex, X_INFO, "Output %s wants gamma correction (%.1f, %.1f, %.1f)\n", output->name, gamma_red, gamma_green, gamma_blue);
2333 return xf86CrtcSetInitialGamma(output->crtc, gamma_red, gamma_green, gamma_blue);
2412 config->output[o]->name);
2416 config->output[o]->name, modes[o]->name);
2420 * Set the position of each output
2426 * Set initial panning of each output
2431 * Assign CRTCs to fit output configuration
2460 xf86OutputPtr output = config->output[o];
2467 crtc->desiredRotation = output->initial_rotation;
2468 crtc->desiredX = output->initial_x;
2469 crtc->desiredY = output->initial_y;
2472 memcpy (&crtc->panningTotalArea, &output->initialTotalArea, sizeof(BoxRec));
2473 memcpy (&crtc->panningTrackingArea, &output->initialTrackingArea, sizeof(BoxRec));
2474 memcpy (crtc->panningBorder, output->initialBorder, 4*sizeof(INT16));
2475 output->crtc = crtc;
2476 if (!xf86OutputSetInitialGamma(output))
2477 xf86DrvMsg (scrn->scrnIndex, X_WARNING, "Initial gamma correction for output %s: failed.\n", output->name);
2479 output->crtc = NULL;
2534 * Check the CRTC we're going to map each output to vs. it's current
2535 * CRTC. If they don't match, we have to disable the output and the CRTC
2545 xf86OutputPtr output = config->output[o];
2548 if (!output->funcs->get_crtc ||
2549 output->crtc != (*output->funcs->get_crtc)(output) ||
2550 output->crtc == NULL)
2552 (*output->funcs->dpms)(output, DPMSModeOff);
2565 xf86OutputPtr output = NULL;
2570 output = config->output[o];
2571 if (output->crtc == crtc)
2574 if (!output->funcs->get_crtc) {
2578 if ((*output->funcs->get_crtc)(output) == crtc)
2615 xf86OutputPtr output = NULL;
2626 output = xf86CompatOutput(scrn);
2630 if (config->output[o]->crtc == crtc)
2632 output = config->output[o];
2637 if (!output)
2644 DisplayModePtr mode = xf86OutputFindClosestMode (output, scrn->currentMode);
2669 * In the current world order, there are lists of modes per output, which may
2679 xf86OutputFindClosestMode (xf86OutputPtr output, DisplayModePtr desired)
2683 for (scan = output->probed_modes; scan != NULL; scan = scan->next)
2736 * output. Then, find similar modes for the other outputs, as with the
2751 * Let the compat output drive the final mode selection
2770 xf86OutputPtr output = config->output[o];
2774 if (output->crtc != crtc)
2779 output_mode = xf86OutputFindClosestMode (output, crtc_mode);
2781 output->crtc = NULL;
2784 crtc_mode = xf86OutputFindClosestMode (output, desired);
2827 xf86OutputPtr output = config->output[i];
2828 if (output->crtc != NULL)
2829 (*output->funcs->dpms) (output, mode);
2841 xf86OutputPtr output = config->output[i];
2842 if (output->crtc != NULL)
2843 (*output->funcs->dpms) (output, mode);
2878 xf86OutputPtr output = xf86_config->output[o];
2879 if (!output->crtc)
2880 (*output->funcs->dpms)(output, DPMSModeOff);
2909 xf86OutputSetEDIDProperty (xf86OutputPtr output, void *data, int data_len)
2914 if (output->randr_output == NULL)
2918 RRChangeOutputProperty(output->randr_output, edid_atom, XA_INTEGER, 8,
2921 RRDeleteOutputProperty(output->randr_output, edid_atom);
2929 xf86OutputPtr output;
2944 p->output->MonInfo->features.hsize,
2945 p->output->MonInfo->features.vsize);
2950 p->output->mm_width = det_mon->section.d_timings.h_size;
2951 p->output->mm_height = det_mon->section.d_timings.v_size;
2957 * Set the EDID information for the specified output
2960 xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
2962 ScrnInfoPtr scrn = output->scrn;
2969 free(output->MonInfo);
2971 output->MonInfo = edid_mon;
2972 output->mm_width = 0;
2973 output->mm_height = 0;
2976 xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
2977 output->name);
2981 /* Set the DDC properties for the 'compat' output */
2982 if (output == xf86CompatOutput(scrn))
2986 /* Set the RandR output properties */
2997 xf86OutputSetEDIDProperty (output, edid_mon ? edid_mon->rawData : NULL, size);
3003 p.output = output;
3010 if ((!output->mm_width || !output->mm_height) &&
3013 output->mm_width = edid_mon->features.hsize * 10;
3014 output->mm_height = edid_mon->features.vsize * 10;
3021 * stored in 'output'
3024 xf86OutputGetEDIDModes (xf86OutputPtr output)
3026 ScrnInfoPtr scrn = output->scrn;
3027 xf86MonPtr edid_mon = output->MonInfo;
3036 xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus)
3038 ScrnInfoPtr scrn = output->scrn;