SOURCES: xorg-driver-video-ati-trunk.patch (NEW) - added latest ch...
wrobell
wrobell at pld-linux.org
Sun Sep 9 12:38:22 CEST 2007
Author: wrobell Date: Sun Sep 9 10:38:22 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- added latest changes from driver's git repository (fix few driver bugs)
---- Files affected:
SOURCES:
xorg-driver-video-ati-trunk.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/xorg-driver-video-ati-trunk.patch
diff -u /dev/null SOURCES/xorg-driver-video-ati-trunk.patch:1.1
--- /dev/null Sun Sep 9 12:38:22 2007
+++ SOURCES/xorg-driver-video-ati-trunk.patch Sun Sep 9 12:38:17 2007
@@ -0,0 +1,829 @@
+diff --git a/man/radeon.man b/man/radeon.man
+index 88665bf..8217262 100644
+--- a/man/radeon.man
++++ b/man/radeon.man
+@@ -397,6 +397,20 @@ driver defaults for each chip.
+ The default is
+ .B off
+ .TP
++.BI "Option \*qMacModel\*q \*q" string \*q
++.br
++Used to specify Mac models for connector tables and quirks. Only valid
++ on PowerPC.
++.br
++ibook \-\- ibooks
++.br
++powerbook-duallink \-\- Powerbooks with dual link DVI
++.br
++powerbook \-\- Powerbooks with single link DVI
++.br
++The default value is
++.B undefined.
++.TP
+
+ .SH SEE ALSO
+ __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
+diff --git a/src/radeon.h b/src/radeon.h
+index 53fb5f7..4c99511 100644
+--- a/src/radeon.h
++++ b/src/radeon.h
+@@ -152,7 +152,11 @@ typedef enum {
+ OPTION_CONSTANTDPI,
+ OPTION_CONNECTORTABLE,
+ OPTION_DRI,
+- OPTION_DEFAULT_CONNECTOR_TABLE
++ OPTION_DEFAULT_CONNECTOR_TABLE,
++#if defined(__powerpc__)
++ OPTION_MAC_MODEL,
++#endif
++ OPTION_DEFAULT_TMDS_PLL
+ } RADEONOpts;
+
+
+@@ -422,6 +426,14 @@ typedef enum {
+ CHIP_ERRATA_PLL_DELAY = 0x00000004
+ } RADEONErrata;
+
++#if defined(__powerpc__)
++typedef enum {
++ RADEON_MAC_IBOOK = 0x00000001,
++ RADEON_MAC_POWERBOOK_DL = 0x00000002,
++ RADEON_MAC_POWERBOOK = 0x00000004
++} RADEONMacModel;
++#endif
++
+ typedef enum {
+ CARD_PCI,
+ CARD_AGP,
+@@ -799,6 +811,11 @@ typedef struct {
+ Bool crtc2_on;
+
+ Bool InternalTVOut;
++ int tvdac_use_count;
++
++#if defined(__powerpc__)
++ RADEONMacModel MacModel;
++#endif
+
+ Rotation rotation;
+ void (*PointerMoved)(int, int, int);
+diff --git a/src/radeon_bios.c b/src/radeon_bios.c
+index 1ef0ff4..b24c481 100644
+--- a/src/radeon_bios.c
++++ b/src/radeon_bios.c
+@@ -879,23 +879,6 @@ Bool RADEONGetTMDSInfoFromBIOS (xf86OutputPtr output)
+ }
+ return TRUE;
+ }
+-
+- /* revision 4 has some problem as it appears in RV280,
+- comment it off for now, use default instead */
+- /*
+- else if (RADEON_BIOS8(tmp) == 4) {
+- int stride = 0;
+- n = RADEON_BIOS8(tmp + 5) + 1;
+- if (n > 4) n = 4;
+- for (i=0; i<n; i++) {
+- radeon_output->tmds_pll[i].value = RADEON_BIOS32(tmp+stride+0x08);
+- radeon_output->tmds_pll[i].freq = RADEON_BIOS16(tmp+stride+0x10);
+- if (i == 0) stride += 10;
+- else stride += 6;
+- }
+- return TRUE;
+- }
+- */
+ }
+ }
+ return FALSE;
+diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
+index e976e2c..47e46f3 100644
+--- a/src/radeon_crtc.c
++++ b/src/radeon_crtc.c
+@@ -680,7 +680,15 @@ RADEONInitPLLRegisters(ScrnInfoPtr pScrn, RADEONInfoPtr info,
+ save->post_div);
+
+ save->ppll_ref_div = pll->reference_div;
++
++#if defined(__powerpc__)
++ /* apparently programming this otherwise causes a hang??? */
++ if (info->MacModel == RADEON_MAC_IBOOK)
++ save->ppll_div_3 = 0x000600ad;
++ else
++#endif
+ save->ppll_div_3 = (save->feedback_div | (post_div->bitvalue << 16));
++
+ save->htotal_cntl = 0;
+
+ save->vclk_ecp_cntl = (info->SavedReg.vclk_ecp_cntl &
+diff --git a/src/radeon_cursor.c b/src/radeon_cursor.c
+index f19f2bc..3e60d23 100644
+--- a/src/radeon_cursor.c
++++ b/src/radeon_cursor.c
+@@ -98,12 +98,22 @@ radeon_crtc_show_cursor (xf86CrtcPtr crtc)
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ unsigned char *RADEONMMIO = info->MMIO;
+
++#ifdef XF86DRI
++ if (info->CPStarted && pScrn->pScreen) DRILock(pScrn->pScreen, 0);
++#endif
++
++ RADEON_SYNC(info, pScrn);
++
+ if (crtc_id == 0)
+ OUTREGP(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_CUR_EN | 2 << 20,
+ ~(RADEON_CRTC_CUR_EN | RADEON_CRTC_CUR_MODE_MASK));
+ else if (crtc_id == 1)
+ OUTREGP(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_CUR_EN | 2 << 20,
+ ~(RADEON_CRTC2_CUR_EN | RADEON_CRTC2_CUR_MODE_MASK));
++
++#ifdef XF86DRI
++ if (info->CPStarted && pScrn->pScreen) DRIUnlock(pScrn->pScreen);
++#endif
+ }
+
+ void
+@@ -115,12 +125,20 @@ radeon_crtc_hide_cursor (xf86CrtcPtr crtc)
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ unsigned char *RADEONMMIO = info->MMIO;
+
++#ifdef XF86DRI
++ if (info->CPStarted && pScrn->pScreen) DRILock(pScrn->pScreen, 0);
++#endif
++
++ RADEON_SYNC(info, pScrn);
++
+ if (crtc_id == 0)
+ OUTREGP(RADEON_CRTC_GEN_CNTL, 0, ~RADEON_CRTC_CUR_EN);
+ else if (crtc_id == 1)
+ OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~RADEON_CRTC2_CUR_EN);
+
+-
++#ifdef XF86DRI
++ if (info->CPStarted && pScrn->pScreen) DRIUnlock(pScrn->pScreen);
++#endif
+ }
+
+ void
+diff --git a/src/radeon_display.c b/src/radeon_display.c
+index ed45d79..fa80e10 100644
+--- a/src/radeon_display.c
++++ b/src/radeon_display.c
+@@ -373,6 +373,7 @@ void RADEONEnableDisplay(xf86OutputPtr output, BOOL bEnable)
+ tmp |= RADEON_TV_ON;
+ OUTREG(RADEON_TV_MASTER_CNTL, tmp);
+ tv_dac_change = 2;
++ radeon_output->tv_on = TRUE;
+ }
+ } else {
+ ErrorF("disable montype: %d\n", radeon_output->MonType);
+@@ -431,6 +432,7 @@ void RADEONEnableDisplay(xf86OutputPtr output, BOOL bEnable)
+ tmp &= ~RADEON_TV_ON;
+ OUTREG(RADEON_TV_MASTER_CNTL, tmp);
+ tv_dac_change = 2;
++ radeon_output->tv_on = FALSE;
+ }
+ }
+
+diff --git a/src/radeon_driver.c b/src/radeon_driver.c
+index 158e1e4..14d31bd 100644
+--- a/src/radeon_driver.c
++++ b/src/radeon_driver.c
+@@ -187,6 +187,10 @@ static const OptionInfoRec RADEONOptions[] = {
+ { OPTION_DRI, "DRI", OPTV_BOOLEAN, {0}, FALSE },
+ { OPTION_CONNECTORTABLE, "ConnectorTable", OPTV_STRING, {0}, FALSE },
+ { OPTION_DEFAULT_CONNECTOR_TABLE, "DefaultConnectorTable", OPTV_BOOLEAN, {0}, FALSE },
++ { OPTION_DEFAULT_TMDS_PLL, "DefaultTMDSPLL", OPTV_BOOLEAN, {0}, FALSE },
++#if defined(__powerpc__)
++ { OPTION_MAC_MODEL, "MacModel", OPTV_STRING, {0}, FALSE },
++#endif
+ { -1, NULL, OPTV_NONE, {0}, FALSE }
+ };
+
+@@ -2688,30 +2692,28 @@ _X_EXPORT Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
+ crtc_max_X = pScrn->display->virtualX;
+ crtc_max_Y = pScrn->display->virtualY;
+ if (info->allowColorTiling) {
+- if (crtc_max_X > info->MaxSurfaceWidth)
+- crtc_max_X = info->MaxSurfaceWidth;
+- if (crtc_max_Y > info->MaxLines)
+- crtc_max_Y = info->MaxLines;
+- } else {
+- if (crtc_max_X > 8192)
+- crtc_max_X = 8192;
+- if (crtc_max_Y > 8192)
+- crtc_max_Y = 8192;
++ if (crtc_max_X > info->MaxSurfaceWidth ||
++ crtc_max_Y > info->MaxLines) {
++ info->allowColorTiling = FALSE;
++ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
++ "Requested desktop size exceeds surface limts for tiling, ColorTiling disabled\n");
++ }
+ }
++ if (crtc_max_X > 8192)
++ crtc_max_X = 8192;
++ if (crtc_max_Y > 8192)
++ crtc_max_Y = 8192;
+ } else {
+- if (pScrn->videoRam < 16384) {
++ if (pScrn->videoRam <= 16384) {
+ crtc_max_X = 1600;
+ crtc_max_Y = 1200;
+- } else if (pScrn->videoRam <= 32768) {
+- crtc_max_X = 2048;
+- crtc_max_Y = 1200;
+- } else if (pScrn->videoRam > 32768) {
++ } else {
+ if (IS_R300_VARIANT) {
+ crtc_max_X = 2560;
+- crtc_max_Y = 2048;
++ crtc_max_Y = 1200;
+ } else {
+ crtc_max_X = 2048;
+- crtc_max_Y = 2048;
++ crtc_max_Y = 1200;
+ }
+ }
+ }
+@@ -2719,6 +2721,9 @@ _X_EXPORT Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
+ crtc_max_X, crtc_max_Y);
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "For a larger or smaller max desktop size, add a Virtual line to your xorg.conf\n");
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
++ "If you are having trouble with 3D, "
++ "reduce the desktop size by adjusting the Virtual line to your xorg.conf\n");
+
+ /*xf86CrtcSetSizeRange (pScrn, 320, 200, info->MaxSurfaceWidth, info->MaxLines);*/
+ xf86CrtcSetSizeRange (pScrn, 320, 200, crtc_max_X, crtc_max_Y);
+@@ -4566,6 +4571,12 @@ void RADEONRestorePLLRegisters(ScrnInfoPtr pScrn,
+ unsigned char *RADEONMMIO = info->MMIO;
+ CARD8 pllGain;
+
++#if defined(__powerpc__)
++ /* apparently restoring the pll causes a hang??? */
++ if (info->MacModel == RADEON_MAC_IBOOK)
++ return;
++#endif
++
+ pllGain = RADEONComputePLLGain(info->pll.reference_freq,
+ restore->ppll_ref_div & RADEON_PPLL_REF_DIV_MASK,
+ restore->ppll_div_3 & RADEON_PPLL_FB3_DIV_MASK);
+@@ -5219,6 +5230,7 @@ static void RADEONSavePLL2Registers(ScrnInfoPtr pScrn, RADEONSavePtr save)
+ >> 16));
+ }
+
++#if 0
+ /* Read palette data */
+ static void RADEONSavePalette(ScrnInfoPtr pScrn, RADEONSavePtr save)
+ {
+@@ -5238,6 +5250,7 @@ static void RADEONSavePalette(ScrnInfoPtr pScrn, RADEONSavePtr save)
+ for (i = 0; i < 256; i++) save->palette[i] = INPAL_NEXT();
+ save->palette_valid = TRUE;
+ }
++#endif
+
+ /* Save state that defines current video mode */
+ static void RADEONSaveMode(ScrnInfoPtr pScrn, RADEONSavePtr save)
+diff --git a/src/radeon_modes.c b/src/radeon_modes.c
+index a5e1cc4..687e388 100644
+--- a/src/radeon_modes.c
++++ b/src/radeon_modes.c
+@@ -289,47 +289,47 @@ RADEONProbeOutputModes(xf86OutputPtr output)
+ #endif
+ ErrorF("in RADEONProbeOutputModes\n");
+
+-
+- if (radeon_output->type == OUTPUT_DVI || radeon_output->type == OUTPUT_VGA) {
+- edid_mon = xf86OutputGetEDID (output, radeon_output->pI2CBus);
+- xf86OutputSetEDID (output, edid_mon);
++ if (output->status == XF86OutputStatusConnected) {
++ if (radeon_output->type == OUTPUT_DVI || radeon_output->type == OUTPUT_VGA) {
++ edid_mon = xf86OutputGetEDID (output, radeon_output->pI2CBus);
++ xf86OutputSetEDID (output, edid_mon);
+
+- modes = xf86OutputGetEDIDModes (output);
+- return modes;
+- }
+- if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) {
+- modes = RADEONTVModes(output);
+- return modes;
+- }
+- if (radeon_output->type == OUTPUT_LVDS) {
+- /* okay we got DDC info */
+- if (output->MonInfo) {
+- /* Debug info for now, at least */
+- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EDID for output %d\n", radeon_output->num);
+- xf86PrintEDID(output->MonInfo);
++ modes = xf86OutputGetEDIDModes (output);
++ return modes;
++ }
++ if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) {
++ modes = RADEONTVModes(output);
++ return modes;
++ }
++ if (radeon_output->type == OUTPUT_LVDS) {
++ /* okay we got DDC info */
++ if (output->MonInfo) {
++ /* Debug info for now, at least */
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EDID for output %d\n", radeon_output->num);
++ xf86PrintEDID(output->MonInfo);
+
+- modes = xf86DDCGetModes(pScrn->scrnIndex, output->MonInfo);
++ modes = xf86DDCGetModes(pScrn->scrnIndex, output->MonInfo);
+
+- for (mode = modes; mode != NULL; mode = mode->next) {
+- if (mode->Flags & V_DBLSCAN) {
+- if ((mode->CrtcHDisplay >= 1024) || (mode->CrtcVDisplay >= 768))
+- mode->status = MODE_CLOCK_RANGE;
++ for (mode = modes; mode != NULL; mode = mode->next) {
++ if (mode->Flags & V_DBLSCAN) {
++ if ((mode->CrtcHDisplay >= 1024) || (mode->CrtcVDisplay >= 768))
++ mode->status = MODE_CLOCK_RANGE;
++ }
+ }
+- }
+- xf86PruneInvalidModes(pScrn, &modes, TRUE);
++ xf86PruneInvalidModes(pScrn, &modes, TRUE);
+
+- /* do some physcial size stuff */
+- }
++ /* do some physcial size stuff */
++ }
+
+- if (modes == NULL) {
+- RADEONValidateFPModes(output, pScrn->display->modes, &modes);
++ if (modes == NULL) {
++ RADEONValidateFPModes(output, pScrn->display->modes, &modes);
++ }
+ }
+ }
+
+ if (modes) {
+ xf86ValidateModesUserConfig(pScrn, modes);
+- xf86PruneInvalidModes(pScrn, &modes,
+- FALSE);
++ xf86PruneInvalidModes(pScrn, &modes, FALSE);
+ }
+
+ return modes;
+diff --git a/src/radeon_output.c b/src/radeon_output.c
+index c2b749a..40d8873 100644
+--- a/src/radeon_output.c
++++ b/src/radeon_output.c
+@@ -152,6 +152,7 @@ static RADEONMonitorType radeon_detect_tv(ScrnInfoPtr pScrn);
+ static RADEONMonitorType radeon_detect_primary_dac(ScrnInfoPtr pScrn, Bool color);
+ static RADEONMonitorType radeon_detect_tv_dac(ScrnInfoPtr pScrn, Bool color);
+ static RADEONMonitorType radeon_detect_ext_dac(ScrnInfoPtr pScrn);
++static void RADEONGetTMDSInfoFromTable(xf86OutputPtr output);
+
+ void RADEONPrintPortMap(ScrnInfoPtr pScrn)
+ {
+@@ -535,21 +536,29 @@ void RADEONConnectorFindMonitor(ScrnInfoPtr pScrn, xf86OutputPtr output)
+
+ if (radeon_output->MonType == MT_UNKNOWN) {
+ if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) {
+- if (info->InternalTVOut)
+- radeon_output->MonType = radeon_detect_tv(pScrn);
++ if (info->InternalTVOut) {
++ if (radeon_output->load_detection)
++ radeon_output->MonType = radeon_detect_tv(pScrn);
++ else
++ radeon_output->MonType = MT_NONE;
++ }
+ } else {
+ radeon_output->MonType = RADEONDisplayDDCConnected(pScrn, output);
+ if (!radeon_output->MonType) {
+ if (radeon_output->type == OUTPUT_LVDS || radeon_output->type == OUTPUT_DVI)
+ radeon_output->MonType = RADEONPortCheckNonDDC(pScrn, output);
+ if (!radeon_output->MonType) {
+- if (radeon_output->DACType == DAC_PRIMARY)
+- radeon_output->MonType = radeon_detect_primary_dac(pScrn, TRUE);
+- else if (radeon_output->DACType == DAC_TVDAC) {
+- if (info->ChipFamily == CHIP_FAMILY_R200)
+- radeon_output->MonType = radeon_detect_ext_dac(pScrn);
+- else
+- radeon_output->MonType = radeon_detect_tv_dac(pScrn, TRUE);
++ if (radeon_output->DACType == DAC_PRIMARY) {
++ if (radeon_output->load_detection)
++ radeon_output->MonType = radeon_detect_primary_dac(pScrn, TRUE);
++ } else if (radeon_output->DACType == DAC_TVDAC) {
++ if (radeon_output->load_detection) {
++ if (info->ChipFamily == CHIP_FAMILY_R200)
++ radeon_output->MonType = radeon_detect_ext_dac(pScrn);
++ else
++ radeon_output->MonType = radeon_detect_tv_dac(pScrn, TRUE);
++ } else
++ radeon_output->MonType = MT_NONE;
+ }
+ }
+ }
+@@ -1564,8 +1573,10 @@ radeon_set_backlight_level(xf86OutputPtr output, int level)
+ }
+
+ static Atom backlight_atom;
++static Atom tmds_pll_atom;
+ static Atom rmx_atom;
+ static Atom monitor_type_atom;
++static Atom load_detection_atom;
+ static Atom tv_hsize_atom;
+ static Atom tv_hpos_atom;
+ static Atom tv_vpos_atom;
+@@ -1606,6 +1617,66 @@ radeon_create_resources(xf86OutputPtr output)
+ }
+ }
+
++ if (radeon_output->DACType == DAC_PRIMARY ||
++ radeon_output->DACType == DAC_TVDAC) {
++ load_detection_atom = MAKE_ATOM("load_detection");
++
++ range[0] = 0; /* off */
++ range[1] = 1; /* on */
++ err = RRConfigureOutputProperty(output->randr_output, load_detection_atom,
++ FALSE, TRUE, FALSE, 2, range);
++ if (err != 0) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "RRConfigureOutputProperty error, %d\n", err);
++ }
++
++ if (radeon_output->DACType == DAC_PRIMARY)
++ data = 1; /* primary dac, only drives vga */
++ else if (radeon_output->DACType == DAC_TVDAC &&
++ info->tvdac_use_count < 2)
++ data = 1; /* only one output with tvdac */
++ else
++ data = 0; /* shared tvdac between vga/dvi/tv */
++
++ err = RRChangeOutputProperty(output->randr_output, load_detection_atom,
++ XA_INTEGER, 32, PropModeReplace, 1, &data,
++ FALSE, TRUE);
++ if (err != 0) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "RRChangeOutputProperty error, %d\n", err);
++ }
++ }
++
++ if (radeon_output->type == OUTPUT_DVI &&
++ radeon_output->TMDSType == TMDS_INT) {
++ tmds_pll_atom = MAKE_ATOM("tmds_pll");
++
++ err = RRConfigureOutputProperty(output->randr_output, tmds_pll_atom,
++ FALSE, FALSE, FALSE, 0, NULL);
++ if (err != 0) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "RRConfigureOutputProperty error, %d\n", err);
++ }
++ /* Set the current value of the property */
++#if defined(__powerpc__)
++ s = "driver";
++#else
++ s = "bios";
++#endif
++ if (xf86ReturnOptValBool(info->Options, OPTION_DEFAULT_TMDS_PLL, FALSE)) {
++ s = "driver";
++ }
++
++ err = RRChangeOutputProperty(output->randr_output, tmds_pll_atom,
++ XA_STRING, 8, PropModeReplace, strlen(s), (pointer)s,
++ FALSE, FALSE);
++ if (err != 0) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "RRChangeOutputProperty error, %d\n", err);
++ }
++
++ }
++
+ /* RMX control - fullscreen, centered, keep ratio */
+ /* actually more of a crtc property as only crtc1 has rmx */
+ if (radeon_output->type == OUTPUT_LVDS ||
+@@ -1619,7 +1690,7 @@ radeon_create_resources(xf86OutputPtr output)
+ "RRConfigureOutputProperty error, %d\n", err);
+ }
+ /* Set the current value of the property */
+- s = "fill";
++ s = "full";
+ err = RRChangeOutputProperty(output->randr_output, rmx_atom,
+ XA_STRING, 8, PropModeReplace, strlen(s), (pointer)s,
+ FALSE, FALSE);
+@@ -1730,7 +1801,27 @@ radeon_create_resources(xf86OutputPtr output)
+ "RRConfigureOutputProperty error, %d\n", err);
+ }
+ /* Set the current value of the backlight property */
+- s = "default";
++ switch (radeon_output->default_tvStd) {
++ case TV_STD_PAL:
++ s = "pal";
++ break;
++ case TV_STD_PAL_M:
++ s = "pal-m";
++ break;
++ case TV_STD_PAL_60:
++ s = "pal-60";
++ break;
++ case TV_STD_NTSC_J:
++ s = "ntsc-j";
++ break;
++ case TV_STD_SCART_PAL:
++ s = "scart-pal";
++ break;
++ case TV_STD_NTSC:
++ default:
++ s = "ntsc";
++ break;
++ }
+ err = RRChangeOutputProperty(output->randr_output, tv_std_atom,
+ XA_STRING, 8, PropModeReplace, strlen(s), (pointer)s,
+ FALSE, FALSE);
+@@ -1766,6 +1857,19 @@ radeon_set_property(xf86OutputPtr output, Atom property,
+
+ radeon_set_backlight_level(output, val);
+
++ } else if (property == load_detection_atom) {
++ if (value->type != XA_INTEGER ||
++ value->format != 32 ||
++ value->size != 1) {
++ return FALSE;
++ }
++
++ val = *(INT32 *)value->data;
++ if (val < 0 || val > 1)
++ return FALSE;
++
++ radeon_output->load_detection = val;
++
+ } else if (property == rmx_atom) {
+ xf86CrtcPtr crtc = output->crtc;
+ RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private;
+@@ -1785,6 +1889,20 @@ radeon_set_property(xf86OutputPtr output, Atom property,
+ } else {
+ return FALSE;
+ }
++ } else if (property == tmds_pll_atom) {
++ const char *s;
++ if (value->type != XA_STRING || value->format != 8)
++ return FALSE;
++ s = (char*)value->data;
++ if (value->size == strlen("bios") && !strncmp("bios", s, strlen("bios"))) {
++ if (!RADEONGetTMDSInfoFromBIOS(output))
++ RADEONGetTMDSInfoFromTable(output);
++ return TRUE;
++ } else if (value->size == strlen("driver") && !strncmp("driver", s, strlen("driver"))) {
++ RADEONGetTMDSInfoFromTable(output);
++ return TRUE;
++ }
++ return FALSE;
+ } else if (property == monitor_type_atom) {
+ const char *s;
+ if (value->type != XA_STRING || value->format != 8)
+@@ -1813,7 +1931,8 @@ radeon_set_property(xf86OutputPtr output, Atom property,
+ return FALSE;
+
+ radeon_output->hSize = val;
+- /*RADEONUpdateHVPosition(output, NULL);*/
++ if (radeon_output->tv_on)
++ RADEONUpdateHVPosition(output, &output->crtc->mode);
+ return TRUE;
+ } else if (property == tv_hpos_atom) {
+ if (value->type != XA_INTEGER ||
+@@ -1827,7 +1946,8 @@ radeon_set_property(xf86OutputPtr output, Atom property,
+ return FALSE;
+
+ radeon_output->hPos = val;
+- /*RADEONUpdateHVPosition(output, NULL);*/
++ if (radeon_output->tv_on)
<<Diff was trimmed, longer than 597 lines>>
More information about the pld-cvs-commit
mailing list