diff --git a/src/displaylink.c b/src/displaylink.c index 6302f48..7feb959 100644 --- a/src/displaylink.c +++ b/src/displaylink.c @@ -50,6 +50,7 @@ TODO: #include "xf86RAC.h" #include "fbdevhw.h" +#include "randrstr.h" // prototypes (as fbdev) @@ -68,6 +69,28 @@ static Bool DisplayLinkDriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op, static void DLBlockHandler(pointer data, OSTimePtr pTimeout, pointer pRead); static void DLWakeupHandler(pointer data, int i, pointer LastSelectMask); +// RandR +#ifdef RANDR_10_INTERFACE +static Bool DLRRSetConfigProc(ScreenPtr pScreen, Rotation rotation, int rate, RRScreenSizePtr pSize); +#endif /* RANDR_10_INTERFACE */ +#if RANDR_12_INTERFACE +static Bool DLRRScreenSetSizeProc(ScreenPtr pScreen, CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight); +static Bool DLRRCrtcSetProc(ScreenPtr pScreen, RRCrtcPtr crtc, RRModePtr mode, int x, int y, Rotation rotation, int numOutputs, RROutputPtr *outputs); +static Bool DLRRCrtcSetGammaProc(ScreenPtr pScreen, RRCrtcPtr crtc); +static Bool DLRRCrtcGetGammaProc(ScreenPtr pScreen, RRCrtcPtr crtc); +static Bool DLRROutputSetPropertyProc(ScreenPtr pScreen, RROutputPtr output, Atom property, RRPropertyValuePtr value); +static Bool DLRROutputValidateModeProc(ScreenPtr pScreen, RROutputPtr output, RRModePtr mode); +static void DLRRModeDestroyProc(ScreenPtr pScreen, RRModePtr mode); +#endif /* RANDR_12_INTERFACE */ +#if RANDR_13_INTERFACE +static Bool DLRROutputGetPropertyProc(ScreenPtr pScreen, RROutputPtr output, Atom property); +static Bool DLRRGetPanningProc(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea, BoxPtr trackingArea, INT16 *border); +static Bool DLRRSetPanningProc(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea, BoxPtr trackingArea, INT16 *border); +#endif /* RANDR_13_INTERFACE */ +static Bool DLRRGetInfoProc(ScreenPtr pScreen, Rotation *rotations); +static Bool DLRRCloseScreenProc(int i, ScreenPtr pScreen); + + static int pix24bpp = 0; @@ -459,6 +482,7 @@ DisplayLinkScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) int init_picture = 0; int ret, flags; int type; + rrScrPrivPtr pScrPriv; if (NULL == (fPtr->fbmem = fbdevHWMapVidmem(pScrn))) { @@ -548,6 +572,36 @@ DisplayLinkScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) xf86CrtcScreenInit (pScreen); pScreen->SaveScreen = fbdevHWSaveScreenWeak(); + + /* This should probably be done earlier and if it fails there's no cleanup being done... */ + if (!RRScreenInit(pScreen)) + return FALSE; + + /* Get private screen pointer (and again, no cleanup being done if this fails...) */ + pScrPriv = (rrScrPrivPtr)dixLookupPrivate(&(pScreen->devPrivates), rrPrivKey); + if (pScrPriv == NULL) + return FALSE; + + /* Setup function pointers */ +#if RANDR_10_INTERFACE + pScrPriv->rrSetConfig = &DLRRSetConfigProc; +#endif /* RANDR_10_INTERFACE */ +#if RANDR_12_INTERFACE + pScrPriv->rrScreenSetSize = &DLRRScreenSetSizeProc; + pScrPriv->rrCrtcSet = &DLRRCrtcSetProc; + pScrPriv->rrCrtcSetGamma = &DLRRCrtcSetGammaProc; + /*pScrPriv->rrCrtcGetGamma = &DLRRCrtcGetGammaProc;*/ + pScrPriv->rrOutputSetProperty = &DLRROutputSetPropertyProc; + pScrPriv->rrOutputValidateMode = &DLRROutputValidateModeProc; + pScrPriv->rrModeDestroy = &DLRRModeDestroyProc; +#endif /* RANDR_12_INTERFACE */ +#if RANDR_13_INTERFACE + pScrPriv->rrOutputGetProperty = &DLRROutputGetPropertyProc; + pScrPriv->rrGetPanning = &DLRRGetPanningProc; + pScrPriv->rrSetPanning = &DLRRSetPanningProc; +#endif /* RANDR_13_INTERFACE */ + pScrPriv->rrGetInfo = &DLRRGetInfoProc; + pScrPriv->CloseScreen = &DLRRCloseScreenProc; /* Wrap the current CloseScreen function */ fPtr->CloseScreen = pScreen->CloseScreen; @@ -650,3 +704,98 @@ DLWakeupHandler(pointer data, int i, pointer LastSelectMask) { } +// RandR +#ifdef RANDR_10_INTERFACE +static Bool +DLRRSetConfigProc(ScreenPtr pScreen, Rotation rotation, int rate, RRScreenSizePtr pSize) +{ + /* What goes here? */ + return TRUE; +} +#endif /* RANDR_10_INTERFACE */ + +#if RANDR_12_INTERFACE +static Bool DLRRScreenSetSizeProc(ScreenPtr pScreen, CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRRCrtcSetProc(ScreenPtr pScreen, RRCrtcPtr crtc, RRModePtr mode, int x, int y, Rotation rotation, int numOutputs, RROutputPtr *outputs) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRRCrtcSetGammaProc(ScreenPtr pScreen, RRCrtcPtr crtc) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRRCrtcGetGammaProc(ScreenPtr pScreen, RRCrtcPtr crtc) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRROutputSetPropertyProc(ScreenPtr pScreen, RROutputPtr output, Atom property, RRPropertyValuePtr value) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRROutputValidateModeProc(ScreenPtr pScreen, RROutputPtr output, RRModePtr mode) +{ + /* What goes here? */ + return TRUE; +} + +static void +DLRRModeDestroyProc(ScreenPtr pScreen, RRModePtr mode) +{ + /* What goes here? */ +} +#endif /* RANDR_12_INTERFACE */ + +#if RANDR_13_INTERFACE +static Bool +DLRROutputGetPropertyProc(ScreenPtr pScreen, RROutputPtr output, Atom property) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRRGetPanningProc(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea, BoxPtr trackingArea, INT16 *border) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRRSetPanningProc(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea, BoxPtr trackingArea, INT16 *border) +{ + /* What goes here? */ + return TRUE; +} +#endif /* RANDR_13_INTERFACE */ + +static Bool +DLRRGetInfoProc(ScreenPtr pScreen, Rotation *rotations) +{ + /* What goes here? */ + return TRUE; +} + +static Bool +DLRRCloseScreenProc(int i, ScreenPtr pScreen) +{ + /* What goes here? */ + return TRUE; +}