xf86-video-ati: Branch 'master' - 10 commits
Dave Airlie
airlied at kemper.freedesktop.org
Sun Dec 21 22:00:14 PST 2008
man/radeon.man | 6 ++
src/AtomBios/includes/atombios.h | 11 +++
src/atombios_crtc.c | 2
src/atombios_output.c | 53 +++++++++++++++---
src/radeon.h | 3 -
src/radeon_atombios.c | 109 +++++++++++++++++++++++++++------------
src/radeon_atombios.h | 6 +-
src/radeon_driver.c | 1
8 files changed, 144 insertions(+), 47 deletions(-)
New commits:
commit 4d009d14c9c72f6e1bc8100ec8d9b8037ee4e514
Merge: d52882d... 4e96278...
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Dec 22 16:00:01 2008 +1000
Merge branch 'atom-tvout'
commit 4e96278b581e296c1203d97a6d7aa3bff3977222
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Dec 22 15:58:35 2008 +1000
atombios/tv: add an option to enable atom tv-out for users.
This code is still experimental but we will allow users to enable it for experimental reasons
diff --git a/man/radeon.man b/man/radeon.man
index f8526df..19ffb94 100644
--- a/man/radeon.man
+++ b/man/radeon.man
@@ -550,6 +550,12 @@ controller has passed the destination region. It reduces tearing at the cost
of performance.
The default is
.B off.
+.TP
+.BI "Option \*qATOMTvOut\*q \*q" boolean \*q
+This option enables experimental TV-out support for r500 and r600 atombios chips.
+tv-out is experimental and may not function on these chips as well as hoped for.
+The default is
+.B off.
.SH SEE ALSO
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
diff --git a/src/radeon.h b/src/radeon.h
index 818ec4d..f7f9c09 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -205,7 +205,8 @@ typedef enum {
OPTION_IGNORE_LID_STATUS,
OPTION_DEFAULT_TVDAC_ADJ,
OPTION_INT10,
- OPTION_EXA_VSYNC
+ OPTION_EXA_VSYNC,
+ OPTION_ATOM_TVOUT
} RADEONOpts;
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index c9c7ae2..3cd7eae 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1572,6 +1572,10 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn)
ATOM_CONNECTOR_OBJECT_TABLE *con_obj;
ATOM_INTEGRATED_SYSTEM_INFO_V2 *igp_obj = NULL;
int i, j;
+ Bool enable_tv = FALSE;
+
+ if (xf86ReturnOptValBool(info->Options, OPTION_ATOM_TVOUT, FALSE))
+ enable_tv = TRUE;
atomDataPtr = info->atomBIOS->atomDataPtr;
if (!rhdAtomGetTableRevisionAndSize((ATOM_COMMON_TABLE_HEADER *)(atomDataPtr->Object_Header), &crev, &frev, &size))
@@ -1702,7 +1706,10 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn)
if (info->BiosConnector[i].ConnectorType == CONNECTOR_DIN ||
info->BiosConnector[i].ConnectorType == CONNECTOR_STV ||
info->BiosConnector[i].ConnectorType == CONNECTOR_CTV)
- info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
+ if (enable_tv)
+ info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
+ else
+ info->BiosConnector[i].valid = FALSE;
else
info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_CRT1_INDEX);
info->BiosConnector[i].DACType = DAC_PRIMARY;
@@ -1715,7 +1722,10 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn)
if (info->BiosConnector[i].ConnectorType == CONNECTOR_DIN ||
info->BiosConnector[i].ConnectorType == CONNECTOR_STV ||
info->BiosConnector[i].ConnectorType == CONNECTOR_CTV)
- info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
+ if (enable_tv)
+ info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
+ else
+ info->BiosConnector[i].valid = FALSE;
else
info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_CRT2_INDEX);
info->BiosConnector[i].DACType = DAC_TVDAC;
@@ -1978,6 +1988,10 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn)
atomDataTablesPtr atomDataPtr;
uint8_t crev, frev;
int i, j;
+ Bool enable_tv = FALSE;
+
+ if (xf86ReturnOptValBool(info->Options, OPTION_ATOM_TVOUT, FALSE))
+ enable_tv = TRUE;
atomDataPtr = info->atomBIOS->atomDataPtr;
@@ -1998,20 +2012,16 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn)
continue;
}
-#if 1
- if (i == ATOM_DEVICE_CV_INDEX) {
+ if (!enable_tv && (i == ATOM_DEVICE_CV_INDEX)) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Skipping Component Video\n");
info->BiosConnector[i].valid = FALSE;
continue;
}
-#endif
-#if 1
- if (i == ATOM_DEVICE_TV1_INDEX) {
+ if (!enable_tv && (i == ATOM_DEVICE_TV1_INDEX)) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Skipping TV-Out\n");
info->BiosConnector[i].valid = FALSE;
continue;
}
-#endif
info->BiosConnector[i].valid = TRUE;
info->BiosConnector[i].load_detection = TRUE;
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index d414854..e53edbb 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -192,6 +192,7 @@ static const OptionInfoRec RADEONOptions[] = {
{ OPTION_DEFAULT_TVDAC_ADJ, "DefaultTVDACAdj", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_INT10, "Int10", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_EXA_VSYNC, "EXAVSync", OPTV_BOOLEAN, {0}, FALSE },
+ { OPTION_ATOM_TVOUT, "ATOMTVOut", OPTV_BOOLEAN, {0}, FALSE },
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
commit 435d996949185201a97493e131f9920a32863acd
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:50:48 2008 +1000
radeon: tv timings have crev/frev wrong way around for some reason.
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index 64e7937..c9c7ae2 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1916,7 +1916,7 @@ RADEONATOMGetTVTimings(ScrnInfoPtr pScrn, int index, SET_CRTC_TIMING_PARAMETERS_
atomDataPtr = info->atomBIOS->atomDataPtr;
if (!rhdAtomGetTableRevisionAndSize(
(ATOM_COMMON_TABLE_HEADER *)(atomDataPtr->AnalogTV_Info.base),
- &frev,&crev,NULL)) {
+ &crev,&frev,NULL)) {
return FALSE;
}
commit b9549e89cbdf8fff4aa7bd9f3adfb7d5732508cc
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:40:53 2008 +1000
atombios: re-enable TV dpms
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 945cefc..3030a10 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -845,8 +845,8 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
/*ErrorF("AGD: cv dpms\n");*/
if (radeon_output->devices & ATOM_DEVICE_CV_SUPPORT)
atombios_device_dpms(output, ATOM_DEVICE_CV_SUPPORT, mode);
- } else if (0 /*radeon_output->MonType == MT_STV ||
- radeon_output->MonType == MT_CTV*/) {
+ } else if (radeon_output->MonType == MT_STV ||
+ radeon_output->MonType == MT_CTV) {
/*ErrorF("AGD: tv dpms\n");*/
if (radeon_output->devices & ATOM_DEVICE_TV1_SUPPORT)
atombios_device_dpms(output, ATOM_DEVICE_TV1_SUPPORT, mode);
commit db85ff2e0c52a030546c0cc8ed0b851418f3e045
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:37:17 2008 +1000
atom/r600: re-enable TV outputs
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index 76ae2ac..64e7937 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1702,8 +1702,7 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn)
if (info->BiosConnector[i].ConnectorType == CONNECTOR_DIN ||
info->BiosConnector[i].ConnectorType == CONNECTOR_STV ||
info->BiosConnector[i].ConnectorType == CONNECTOR_CTV)
- //info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
- info->BiosConnector[i].valid = FALSE;
+ info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
else
info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_CRT1_INDEX);
info->BiosConnector[i].DACType = DAC_PRIMARY;
@@ -1716,8 +1715,7 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn)
if (info->BiosConnector[i].ConnectorType == CONNECTOR_DIN ||
info->BiosConnector[i].ConnectorType == CONNECTOR_STV ||
info->BiosConnector[i].ConnectorType == CONNECTOR_CTV)
- //info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
- info->BiosConnector[i].valid = FALSE;
+ info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_TV1_INDEX);
else
info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_CRT2_INDEX);
info->BiosConnector[i].DACType = DAC_TVDAC;
commit ff7b52c9a48f2e417acf6bec3b72546ad9b33471
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:36:38 2008 +1000
radeon: use latest atombios constants for TV encoders in set_crtc_source
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 48f8b74..945cefc 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -946,11 +946,11 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
crtc_src_param2.ucEncodeMode = ATOM_ENCODER_MODE_LVDS;
} else if (OUTPUT_IS_TV) {
if (radeon_output->devices & ATOM_DEVICE_TV1_SUPPORT)
- crtc_src_param2.ucEncoderID = ATOM_DEVICE_TV1_INDEX;
+ crtc_src_param2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
crtc_src_param2.ucEncodeMode = ATOM_ENCODER_MODE_TV;
} else if (radeon_output->MonType == MT_CV) {
if (radeon_output->devices & ATOM_DEVICE_CV_SUPPORT)
- crtc_src_param2.ucEncoderID = ATOM_DEVICE_CV_INDEX;
+ crtc_src_param2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
crtc_src_param2.ucEncodeMode = ATOM_ENCODER_MODE_CV;
}
commit 1e0c7d3f0bf6be67b976fdea8fa2df0b4b16435f
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:35:06 2008 +1000
atom: spc3 only requires ucEncoderMode for DIG outputs
diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index 93bf94f..9a8594a 100644
--- a/src/atombios_crtc.c
+++ b/src/atombios_crtc.c
@@ -325,13 +325,11 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode, int pll_flags)
spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1;
else if (radeon_output->DACType == DAC_TVDAC)
spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2;
- spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_TV;
} else if (radeon_output->MonType == MT_CV) {
if (radeon_output->DACType == DAC_PRIMARY)
spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1;
else if (radeon_output->DACType == DAC_TVDAC)
spc3_ptr->ucTransmitterId = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2;
- spc3_ptr->ucEncoderMode = ATOM_ENCODER_MODE_CV;
}
ptr = &spc_param;
commit 105cfd0b8696347ef71ad9daa941abb308bd6c2c
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:31:15 2008 +1000
atom/tv: enable scaler can set the TV output scaler up.
Add the tv standard to the scaler enable for TV use.
diff --git a/src/atombios_output.c b/src/atombios_output.c
index cf258ac..48f8b74 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -613,9 +613,44 @@ atombios_output_scaler_setup(xf86OutputPtr output, DisplayModePtr mode)
AtomBiosArgRec data;
unsigned char *space;
+ memset(&disp_data, 0, sizeof(disp_data));
+
disp_data.ucScaler = radeon_crtc->crtc_id;
- if (radeon_output->Flags & RADEON_USE_RMX) {
+ if (OUTPUT_IS_TV) {
+ switch (radeon_output->tvStd) {
+ case TV_STD_NTSC:
+ disp_data.ucTVStandard = ATOM_TV_NTSC;
+ break;
+ case TV_STD_PAL:
+ disp_data.ucTVStandard = ATOM_TV_PAL;
+ break;
+ case TV_STD_PAL_M:
+ disp_data.ucTVStandard = ATOM_TV_PALM;
+ break;
+ case TV_STD_PAL_60:
+ disp_data.ucTVStandard = ATOM_TV_PAL60;
+ break;
+ case TV_STD_NTSC_J:
+ disp_data.ucTVStandard = ATOM_TV_NTSCJ;
+ break;
+ case TV_STD_SCART_PAL:
+ disp_data.ucTVStandard = ATOM_TV_PAL; /* ??? */
+ break;
+ case TV_STD_SECAM:
+ disp_data.ucTVStandard = ATOM_TV_SECAM;
+ break;
+ case TV_STD_PAL_CN:
+ disp_data.ucTVStandard = ATOM_TV_PALCN;
+ break;
+ default:
+ disp_data.ucTVStandard = ATOM_TV_NTSC;
+ break;
+ }
+ disp_data.ucEnable = SCALER_ENABLE_MULTITAP_MODE;
+ ErrorF("Using TV scaler %x %x\n", disp_data.ucTVStandard, disp_data.ucEnable);
+
+ } else if (radeon_output->Flags & RADEON_USE_RMX) {
ErrorF("Using RMX\n");
if (radeon_output->rmx_type == RMX_FULL)
disp_data.ucEnable = ATOM_SCALER_EXPANSION;
commit 2a768abbd2f18abe203571213260bccc225f70fd
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:29:07 2008 +1000
atom/tv: fixup the tv out default if bios doesn't specify
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 396af31..cf258ac 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -62,11 +62,6 @@ atombios_output_dac1_setup(xf86OutputPtr output, DisplayModePtr mode)
disp_data.ucDacStandard = ATOM_DAC1_CV;
else if (OUTPUT_IS_TV) {
switch (radeon_output->tvStd) {
- case TV_STD_NTSC:
- case TV_STD_NTSC_J:
- case TV_STD_PAL_60:
- disp_data.ucDacStandard = ATOM_DAC1_NTSC;
- break;
case TV_STD_PAL:
case TV_STD_PAL_M:
case TV_STD_SCART_PAL:
@@ -74,6 +69,9 @@ atombios_output_dac1_setup(xf86OutputPtr output, DisplayModePtr mode)
case TV_STD_PAL_CN:
disp_data.ucDacStandard = ATOM_DAC1_PAL;
break;
+ case TV_STD_NTSC:
+ case TV_STD_NTSC_J:
+ case TV_STD_PAL_60:
default:
disp_data.ucDacStandard = ATOM_DAC1_NTSC;
break;
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index 7a15c8e..76ae2ac 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1848,10 +1848,6 @@ RADEONGetATOMTVInfo(xf86OutputPtr output)
return FALSE;
switch(tv_info->ucTV_BootUpDefaultStandard) {
- case NTSC_SUPPORT:
- radeon_output->default_tvStd = TV_STD_NTSC;
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Default TV standard: NTSC\n");
- break;
case NTSCJ_SUPPORT:
radeon_output->default_tvStd = TV_STD_NTSC_J;
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Default TV standard: NTSC-J\n");
@@ -1868,6 +1864,11 @@ RADEONGetATOMTVInfo(xf86OutputPtr output)
radeon_output->default_tvStd = TV_STD_PAL_60;
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Default TV standard: PAL-60\n");
break;
+ default:
+ case NTSC_SUPPORT:
+ radeon_output->default_tvStd = TV_STD_NTSC;
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Default TV standard: NTSC\n");
+ break;
}
radeon_output->tvStd = radeon_output->default_tvStd;
commit b7fdd5da08bfec705691363b8890699c794dce53
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Dec 17 11:24:56 2008 +1000
atombios: fixup parsing of TV tables on r500 and r600 cards.
The TV tables changed between for later cards.
diff --git a/src/AtomBios/includes/atombios.h b/src/AtomBios/includes/atombios.h
index 9932b09..7a3afa8 100644
--- a/src/AtomBios/includes/atombios.h
+++ b/src/AtomBios/includes/atombios.h
@@ -2495,6 +2495,17 @@ typedef struct _ATOM_ANALOG_TV_INFO
ATOM_MODE_TIMING aModeTimings[MAX_SUPPORTED_TV_TIMING];
}ATOM_ANALOG_TV_INFO;
+#define MAX_SUPPORTED_TV_TIMING_V1_2 3
+
+typedef struct _ATOM_ANALOG_TV_INFO_V1_2
+{
+ ATOM_COMMON_TABLE_HEADER sHeader;
+ UCHAR ucTV_SupportedStandard;
+ UCHAR ucTV_BootUpDefaultStandard;
+ UCHAR ucExt_TV_ASIC_ID;
+ UCHAR ucExt_TV_ASIC_SlaveAddr;
+ ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_TV_TIMING];
+}ATOM_ANALOG_TV_INFO_V1_2;
/**************************************************************************/
// VRAM usage and their defintions
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index d612572..7a15c8e 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -321,7 +321,7 @@ rhdAtomAnalyzeMasterDataTable(unsigned char *base,
SET_DATA_TABLE(DAC_Info);
SET_DATA_TABLE_VERS(LVDS_Info);
SET_DATA_TABLE(TMDS_Info);
- SET_DATA_TABLE(AnalogTV_Info);
+ SET_DATA_TABLE_VERS(AnalogTV_Info);
SET_DATA_TABLE_VERS(SupportedDevicesInfo);
SET_DATA_TABLE(GPIO_I2C_Info);
SET_DATA_TABLE(VRAM_UsageByFirmware);
@@ -1842,7 +1842,7 @@ RADEONGetATOMTVInfo(xf86OutputPtr output)
RADEONOutputPrivatePtr radeon_output = output->driver_private;
ATOM_ANALOG_TV_INFO *tv_info;
- tv_info = info->atomBIOS->atomDataPtr->AnalogTV_Info;
+ tv_info = info->atomBIOS->atomDataPtr->AnalogTV_Info.AnalogTV_Info;
if (!tv_info)
return FALSE;
@@ -1909,29 +1909,63 @@ RADEONATOMGetTVTimings(ScrnInfoPtr pScrn, int index, SET_CRTC_TIMING_PARAMETERS_
{
RADEONInfoPtr info = RADEONPTR(pScrn);
ATOM_ANALOG_TV_INFO *tv_info;
+ ATOM_ANALOG_TV_INFO_V1_2 *tv_info_v1_2;
+ ATOM_DTD_FORMAT *dtd_timings;
+ atomDataTablesPtr atomDataPtr;
+ uint8_t crev, frev;
- tv_info = info->atomBIOS->atomDataPtr->AnalogTV_Info;
-
- if (index > MAX_SUPPORTED_TV_TIMING)
+ atomDataPtr = info->atomBIOS->atomDataPtr;
+ if (!rhdAtomGetTableRevisionAndSize(
+ (ATOM_COMMON_TABLE_HEADER *)(atomDataPtr->AnalogTV_Info.base),
+ &frev,&crev,NULL)) {
return FALSE;
+ }
- crtc_timing->usH_Total = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Total);
- crtc_timing->usH_Disp = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Disp);
- crtc_timing->usH_SyncStart = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart);
- crtc_timing->usH_SyncWidth = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncWidth);
+ switch(crev) {
+ case 1:
+ tv_info = atomDataPtr->AnalogTV_Info.AnalogTV_Info;
+
+ if (index > MAX_SUPPORTED_TV_TIMING)
+ return FALSE;
+
+ crtc_timing->usH_Total = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Total);
+ crtc_timing->usH_Disp = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Disp);
+ crtc_timing->usH_SyncStart = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart);
+ crtc_timing->usH_SyncWidth = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncWidth);
+
+ crtc_timing->usV_Total = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Total);
+ crtc_timing->usV_Disp = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Disp);
+ crtc_timing->usV_SyncStart = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart);
+ crtc_timing->usV_SyncWidth = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncWidth);
+
+ crtc_timing->susModeMiscInfo = tv_info->aModeTimings[index].susModeMiscInfo;
+
+ crtc_timing->ucOverscanRight = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanRight);
+ crtc_timing->ucOverscanLeft = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanLeft);
+ crtc_timing->ucOverscanBottom = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanBottom);
+ crtc_timing->ucOverscanTop = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanTop);
+ *pixel_clock = le16_to_cpu(tv_info->aModeTimings[index].usPixelClock) * 10;
+ break;
+ case 2:
+ tv_info_v1_2 = atomDataPtr->AnalogTV_Info.AnalogTV_Info_v1_2;
+ if (index > MAX_SUPPORTED_TV_TIMING_V1_2)
+ return FALSE;
- crtc_timing->usV_Total = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Total);
- crtc_timing->usV_Disp = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Disp);
- crtc_timing->usV_SyncStart = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart);
- crtc_timing->usV_SyncWidth = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncWidth);
+ dtd_timings = &tv_info_v1_2->aModeTimings[index];
+ crtc_timing->usH_Total = le16_to_cpu(dtd_timings->usHActive) + le16_to_cpu(dtd_timings->usHBlanking_Time);
+ crtc_timing->usH_Disp = le16_to_cpu(dtd_timings->usHActive);
+ crtc_timing->usH_SyncStart = le16_to_cpu(dtd_timings->usHActive) + le16_to_cpu(dtd_timings->usHSyncOffset);
+ crtc_timing->usH_SyncWidth = le16_to_cpu(dtd_timings->usHSyncWidth);
- crtc_timing->susModeMiscInfo = tv_info->aModeTimings[index].susModeMiscInfo;
+ crtc_timing->usV_Total = le16_to_cpu(dtd_timings->usVActive) + le16_to_cpu(dtd_timings->usVBlanking_Time);
+ crtc_timing->usV_Disp = le16_to_cpu(dtd_timings->usVActive);
+ crtc_timing->usV_SyncStart = le16_to_cpu(dtd_timings->usVActive) + le16_to_cpu(dtd_timings->usVSyncOffset);
+ crtc_timing->usV_SyncWidth = le16_to_cpu(dtd_timings->usVSyncWidth);
- crtc_timing->ucOverscanRight = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanRight);
- crtc_timing->ucOverscanLeft = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanLeft);
- crtc_timing->ucOverscanBottom = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanBottom);
- crtc_timing->ucOverscanTop = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanTop);
- *pixel_clock = le16_to_cpu(tv_info->aModeTimings[index].usPixelClock) * 10;
+ crtc_timing->susModeMiscInfo.usAccess = le16_to_cpu(dtd_timings->susModeMiscInfo.usAccess);
+ *pixel_clock = le16_to_cpu(dtd_timings->usPixClk) * 10;
+ break;
+ }
return TRUE;
}
diff --git a/src/radeon_atombios.h b/src/radeon_atombios.h
index fbe8dd5..a016359 100644
--- a/src/radeon_atombios.h
+++ b/src/radeon_atombios.h
@@ -199,7 +199,11 @@ typedef struct _atomDataTables
ATOM_LVDS_INFO_V12 *LVDS_Info_v12;
} LVDS_Info;
ATOM_TMDS_INFO *TMDS_Info;
- ATOM_ANALOG_TV_INFO *AnalogTV_Info;
+ union {
+ void *base;
+ ATOM_ANALOG_TV_INFO *AnalogTV_Info;
+ ATOM_ANALOG_TV_INFO_V1_2 *AnalogTV_Info_v1_2;
+ } AnalogTV_Info;
union {
void *base;
ATOM_SUPPORTED_DEVICES_INFO *SupportedDevicesInfo;
More information about the xorg-commit
mailing list