diff options
author | nia <nia@NetBSD.org> | 2024-05-12 15:51:57 +0200 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2024-05-12 17:05:37 +0000 |
commit | 8cf3065812e7b8122d4d5983cfe6660154186534 (patch) | |
tree | 53760a48bebb5e65c251f2772303241425713b1a | |
parent | b25b3492c5868671faa7ef327da8f90df5e99e16 (diff) |
netbsd: Try getting the EDID via wscons if the DDC2 method fails.
Helps identifying displays on non-x86 hardware.
Patch from Michael Lorenz, autotools'ified by me.
Signed-off-by: Nia Alarie <nia@NetBSD.org>
Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-nv/-/merge_requests/19>
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/nv_setup.c | 28 |
2 files changed, 30 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index a282013..a6df24c 100644 --- a/configure.ac +++ b/configure.ac @@ -72,6 +72,8 @@ AM_CONDITIONAL(HAVE_XEXTPROTO_71, [ test "$HAVE_XEXTPROTO_71" = "yes" ]) save_CFLAGS="$CFLAGS" CFLAGS="$XORG_CFLAGS" +AC_CHECK_HEADERS(dev/wscons/wsconsio.h) + # PCI rework AC_CHECK_DECL(XSERVER_LIBPCIACCESS, [XSERVER_LIBPCIACCESS=yes],[XSERVER_LIBPCIACCESS=no], diff --git a/src/nv_setup.c b/src/nv_setup.c index 6a7c048..77f6c4a 100644 --- a/src/nv_setup.c +++ b/src/nv_setup.c @@ -25,8 +25,16 @@ #include "config.h" #endif +#include "xf86Priv.h" +#include "xf86Privstr.h" #include "nv_include.h" +#ifdef HAVE_DEV_WSCONS_WSCONSIO_H +#include <sys/time.h> +#include <sys/ioctl.h> +#include <dev/wscons/wsconsio.h> +#endif + /* * Override VGA I/O routines. */ @@ -234,6 +242,26 @@ NVProbeDDC (ScrnInfoPtr pScrn, int bus) #else MonInfo = xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn), pNv->I2C); #endif +#ifdef WSDISPLAYIO_GET_EDID + if (!MonInfo) { + /* ask wsdisplay */ + struct wsdisplayio_edid_info ei; + char *buffer; + xf86MonPtr tmp; + + buffer = malloc(1024); + ei.edid_data = buffer; + ei.buffer_size = 1024; + if (ioctl(xf86Info.consoleFd, WSDISPLAYIO_GET_EDID, &ei) != -1) { + xf86Msg(X_INFO, "got %d bytes worth of EDID from wsdisplay\n", + ei.data_size); + tmp = xf86InterpretEEDID(pScrn->scrnIndex, buffer); + tmp->flags |= MONITOR_EDID_COMPLETE_RAWDATA; + MonInfo = tmp; + } + free(buffer); + } +#endif if (MonInfo) { xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "DDC detected a %s:\n", MonInfo->features.input_type ? |