summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Verhaegen <libv@skynet.be>2005-10-18 14:51:10 +0000
committerLuc Verhaegen <libv@skynet.be>2005-10-18 14:51:10 +0000
commit96de2cc67fe2b436b2d5e0258c6d37f350eae4ea (patch)
tree6c742d7addd491de39964b7242203230810e8224
parent9d5dcbc18211486a8cef2768f42b11cf6011d799 (diff)
[devel-tv_more_flexible_i2c_detection]
- Use a table so that different addresses can be matched to the same devices. - Combine TVDetect and TVInit. Move basic I2CDev handling up. - Remove general TVEncoder ids and go for (tv)driver local enums.
-rw-r--r--src/via_bios.h29
-rw-r--r--src/via_ch7xxx.c91
-rw-r--r--src/via_mode.c152
-rw-r--r--src/via_vt162x.c195
4 files changed, 209 insertions, 258 deletions
diff --git a/src/via_bios.h b/src/via_bios.h
index e3d96e0..33797ed 100644
--- a/src/via_bios.h
+++ b/src/via_bios.h
@@ -46,14 +46,6 @@
#define TVOUTPUT_YCBCR 0x08
#define TVOUTPUT_SC 0x16
-#define VIA_NONETV 0x00
-#define VIA_VT1621 0x01 /* TV2PLUS */
-#define VIA_VT1622 0x02 /* TV3 */
-#define VIA_VT1623 0x03 /* also VT1622A */
-#define VIA_VT1625 0x04
-
-#define VIA_CH7011 0x10
-
#define VIA_TVNORMAL 0
#define VIA_TVOVER 1
@@ -102,16 +94,18 @@ typedef struct _VIABIOSINFO {
int resY;
/* TV entries */
- int TVEncoder;
int TVOutput;
Bool TVActive;
- I2CDevPtr TVI2CDev;
int TVType;
Bool TVDotCrawl;
int TVDeflicker;
- CARD8 TVRegs[0xFF];
- /* TV Callbacks */
+ /* encoder internal use only */
+ I2CDevPtr TVI2CDev;
+ int TVEncoder;
+ CARD8 TVRegs[0xFF];
+
+ /* Actual TV Callbacks */
void (*TVSave) (ScrnInfoPtr pScrn);
void (*TVRestore) (ScrnInfoPtr pScrn);
Bool (*TVDACSense) (ScrnInfoPtr pScrn);
@@ -120,7 +114,6 @@ typedef struct _VIABIOSINFO {
void (*TVPower) (ScrnInfoPtr pScrn, Bool On);
DisplayModePtr TVModes;
void (*TVPrintRegs) (ScrnInfoPtr pScrn);
-
} VIABIOSInfoRec, *VIABIOSInfoPtr;
/* Function prototypes */
@@ -145,12 +138,8 @@ void ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode);
void ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode);
void ViaDisablePrimaryFIFO(ScrnInfoPtr pScrn);
-/* via_vt162x.c */
-I2CDevPtr ViaVT162xDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address);
-void ViaVT162xInit(ScrnInfoPtr pScrn);
-
-/* via_ch7xxx.c */
-I2CDevPtr ViaCH7xxxDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address);
-void ViaCH7xxxInit(ScrnInfoPtr pScrn);
+/* tv encoders: via_vt162x.c and via_ch7xxx.c */
+Bool ViaVT162xInit(ScrnInfoPtr pScrn, I2CDevPtr pDev);
+Bool ViaCH7xxxInit(ScrnInfoPtr pScrn, I2CDevPtr pDev);
#endif /* _VIA_BIOS_H_ */
diff --git a/src/via_ch7xxx.c b/src/via_ch7xxx.c
index ee4c36b..4dcd13c 100644
--- a/src/via_ch7xxx.c
+++ b/src/via_ch7xxx.c
@@ -27,52 +27,11 @@
#include "via_id.h"
/*
- *
+ *
*/
-I2CDevPtr
-ViaCH7xxxDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address)
-{
- VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo;
- I2CDevPtr pDev = xf86CreateI2CDevRec();
- CARD8 buf;
-
- VIAFUNC(pScrn->scrnIndex);
-
- pDev->DevName = "CH7xxx";
- pDev->SlaveAddr = Address;
- pDev->pI2CBus = pBus;
-
- if (!xf86I2CDevInit(pDev)) {
- xf86DestroyI2CDevRec(pDev, TRUE);
- return NULL;
- }
-
- if (!xf86I2CReadByte(pDev, 0x4B, &buf)) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to read from %s Slave %d.\n",
- pBus->BusName, Address);
- xf86DestroyI2CDevRec(pDev, TRUE);
- return NULL;
- }
-
- switch (buf) {
- case 0x17:
- xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
- "Detected Chrontel CH7011 TV Encoder\n");
- pBIOSInfo->TVEncoder = VIA_CH7011;
- pDev->DevName = "CH7011";
- break;
- default:
- pBIOSInfo->TVEncoder = VIA_NONETV;
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Unknown TV Encoder found at %s %X (device id: 0x%02X).\n",
- pBus->BusName, Address, buf);
- xf86DestroyI2CDevRec(pDev,TRUE);
- pDev = NULL;
- break;
- }
-
- return pDev;
-}
+enum CH7xxxDevices {
+ CH7011
+};
/*
*
@@ -421,25 +380,41 @@ CH7xxxTVPower(ScrnInfoPtr pScrn, Bool On)
/*
*
*/
-void
-ViaCH7xxxInit(ScrnInfoPtr pScrn)
+Bool
+ViaCH7xxxInit(ScrnInfoPtr pScrn, I2CDevPtr pDev)
{
VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo;
+ CARD8 buf;
VIAFUNC(pScrn->scrnIndex);
- switch (pBIOSInfo->TVEncoder) {
- case VIA_CH7011:
+ if (!xf86I2CReadByte(pDev, 0x4B, &buf)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to read from %s Slave %d.\n",
+ pDev->pI2CBus->BusName, pDev->SlaveAddr);
+ return FALSE;
+ }
+
+ switch (buf) {
+ case 0x17:
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "Detected Chrontel CH7011 TV Encoder\n");
+ pDev->DevName = "CH7011";
+
+ pBIOSInfo->TVI2CDev = pDev;
+ pBIOSInfo->TVEncoder = CH7011;
pBIOSInfo->TVSave = CH7011Save;
- pBIOSInfo->TVRestore = CH7011Restore;
- pBIOSInfo->TVDACSense = CH7011DACSense;
- pBIOSInfo->TVModeValid = CH7011TVModeValid;
- pBIOSInfo->TVMode = CH7011TVMode;
- pBIOSInfo->TVPower = CH7xxxTVPower;
- pBIOSInfo->TVModes = CH7011TVModes;
- pBIOSInfo->TVPrintRegs = CH7xxxPrintRegs;
- break;
+ pBIOSInfo->TVRestore = CH7011Restore;
+ pBIOSInfo->TVDACSense = CH7011DACSense;
+ pBIOSInfo->TVModeValid = CH7011TVModeValid;
+ pBIOSInfo->TVMode = CH7011TVMode;
+ pBIOSInfo->TVPower = CH7xxxTVPower;
+ pBIOSInfo->TVModes = CH7011TVModes;
+ pBIOSInfo->TVPrintRegs = CH7xxxPrintRegs;
+
+ return TRUE;
default:
- break;
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unknown TV Encoder found at %s %X.\n",
+ pDev->pI2CBus->BusName, pDev->SlaveAddr);
+ return FALSE;
}
}
diff --git a/src/via_mode.c b/src/via_mode.c
index ce55674..ceb848b 100644
--- a/src/via_mode.c
+++ b/src/via_mode.c
@@ -46,44 +46,47 @@
*
*/
+static struct {
+ CARD8 Address;
+ char * Name;
+ Bool (*Init) (ScrnInfoPtr pScrn, I2CDevPtr pDev);
+} ViaI2CDevices[] = {
+ {0x40, "VT162x", ViaVT162xInit},
+ {0x42, "VT162x", ViaVT162xInit},
+ {0xEA, "CH7xxx", ViaCH7xxxInit},
+ {0xEC, "CH7xxx", ViaCH7xxxInit},
+ {0x00, NULL, NULL}
+};
+
/*
*
*/
static Bool
-ViaTVDetect(ScrnInfoPtr pScrn)
+ViaTVScanBus(ScrnInfoPtr pScrn, I2CBusPtr pI2CBus)
{
- VIAPtr pVia = VIAPTR(pScrn);
- VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ int i;
VIAFUNC(pScrn->scrnIndex);
- /* preset some pBIOSInfo TV related values -- move up */
- pBIOSInfo->TVEncoder = VIA_NONETV;
- pBIOSInfo->TVI2CDev = NULL;
- pBIOSInfo->TVSave = NULL;
- pBIOSInfo->TVRestore = NULL;
- pBIOSInfo->TVDACSense = NULL;
- pBIOSInfo->TVModeValid = NULL;
- pBIOSInfo->TVMode = NULL;
- pBIOSInfo->TVPower = NULL;
- pBIOSInfo->TVModes = NULL;
- pBIOSInfo->TVPrintRegs = NULL;
-
- if (pVia->pI2CBus2) {
- if (xf86I2CProbeAddress(pVia->pI2CBus2, 0x40))
- pBIOSInfo->TVI2CDev = ViaVT162xDetect(pScrn, pVia->pI2CBus2, 0x40);
- else if (xf86I2CProbeAddress(pVia->pI2CBus2, 0xEC))
- pBIOSInfo->TVI2CDev = ViaCH7xxxDetect(pScrn, pVia->pI2CBus2, 0xEC);
- }
- if (!pBIOSInfo->TVI2CDev && pVia->pI2CBus3) {
- if (xf86I2CProbeAddress(pVia->pI2CBus3, 0x40))
- pBIOSInfo->TVI2CDev = ViaVT162xDetect(pScrn, pVia->pI2CBus3, 0x40);
- else if (xf86I2CProbeAddress(pVia->pI2CBus3, 0xEC))
- ViaDebug(pScrn->scrnIndex, "We have chrontel on 3!\n");
- }
+ for (i = 0; ViaI2CDevices[i].Init; i++)
+ if (xf86I2CProbeAddress(pI2CBus, ViaI2CDevices[i].Address)) {
+ I2CDevPtr pDev = xf86CreateI2CDevRec();
+
+ pDev->DevName = ViaI2CDevices[i].Name;
+ pDev->SlaveAddr = ViaI2CDevices[i].Address;
+ pDev->pI2CBus = pI2CBus;
+
+ if (!xf86I2CDevInit(pDev)) {
+ xf86DestroyI2CDevRec(pDev, TRUE);
+ return FALSE;
+ }
+
+ if (ViaI2CDevices[i].Init(pScrn, pDev))
+ return TRUE;
+ else
+ xf86DestroyI2CDevRec(pDev,TRUE);
+ }
- if (pBIOSInfo->TVI2CDev)
- return TRUE;
return FALSE;
}
@@ -93,58 +96,61 @@ ViaTVDetect(ScrnInfoPtr pScrn)
static Bool
ViaTVInit(ScrnInfoPtr pScrn)
{
- VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo;
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
VIAFUNC(pScrn->scrnIndex);
- switch (pBIOSInfo->TVEncoder){
- case VIA_VT1621:
- case VIA_VT1622:
- case VIA_VT1623:
- ViaVT162xInit(pScrn);
- break;
- case VIA_CH7011:
- ViaCH7xxxInit(pScrn);
- break;
- default:
- return FALSE;
- break;
- }
-
- if (!pBIOSInfo->TVSave || !pBIOSInfo->TVRestore ||
- !pBIOSInfo->TVDACSense || !pBIOSInfo->TVModeValid ||
- !pBIOSInfo->TVMode || !pBIOSInfo->TVPower ||
- !pBIOSInfo->TVModes || !pBIOSInfo->TVPrintRegs) {
-
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaTVInit: TVEncoder was not "
- "properly initialised.");
-
- xf86DestroyI2CDevRec(pBIOSInfo->TVI2CDev, TRUE);
- pBIOSInfo->TVI2CDev = NULL;
- pBIOSInfo->TVOutput = TVOUTPUT_NONE;
- pBIOSInfo->TVEncoder = VIA_NONETV;
- pBIOSInfo->TVI2CDev = NULL;
- pBIOSInfo->TVSave = NULL;
- pBIOSInfo->TVRestore = NULL;
- pBIOSInfo->TVDACSense = NULL;
- pBIOSInfo->TVModeValid = NULL;
- pBIOSInfo->TVMode = NULL;
- pBIOSInfo->TVPower = NULL;
- pBIOSInfo->TVModes = NULL;
- pBIOSInfo->TVPrintRegs = NULL;
+ /* preset some pBIOSInfo TV related values -- move up */
+ pBIOSInfo->TVI2CDev = NULL;
+ pBIOSInfo->TVEncoder = -1;
+ pBIOSInfo->TVSave = NULL;
+ pBIOSInfo->TVRestore = NULL;
+ pBIOSInfo->TVDACSense = NULL;
+ pBIOSInfo->TVModeValid = NULL;
+ pBIOSInfo->TVMode = NULL;
+ pBIOSInfo->TVPower = NULL;
+ pBIOSInfo->TVModes = NULL;
+ pBIOSInfo->TVPrintRegs = NULL;
- return FALSE;
- }
+ if ((pVia->pI2CBus2 && ViaTVScanBus(pScrn, pVia->pI2CBus2)) ||
+ (pVia->pI2CBus3 && ViaTVScanBus(pScrn, pVia->pI2CBus3))) {
- /* Save now */
- pBIOSInfo->TVSave(pScrn);
+ if (!pBIOSInfo->TVSave || !pBIOSInfo->TVRestore ||
+ !pBIOSInfo->TVDACSense || !pBIOSInfo->TVModeValid ||
+ !pBIOSInfo->TVMode || !pBIOSInfo->TVPower ||
+ !pBIOSInfo->TVModes || !pBIOSInfo->TVPrintRegs) {
+
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "%s: TVEncoder was not "
+ "properly initialised.", __FUNCTION__);
+
+ xf86DestroyI2CDevRec(pBIOSInfo->TVI2CDev, TRUE);
+ pBIOSInfo->TVI2CDev = NULL;
+ pBIOSInfo->TVOutput = TVOUTPUT_NONE;
+ pBIOSInfo->TVSave = NULL;
+ pBIOSInfo->TVRestore = NULL;
+ pBIOSInfo->TVDACSense = NULL;
+ pBIOSInfo->TVModeValid = NULL;
+ pBIOSInfo->TVMode = NULL;
+ pBIOSInfo->TVPower = NULL;
+ pBIOSInfo->TVModes = NULL;
+ pBIOSInfo->TVPrintRegs = NULL;
+
+ return FALSE;
+ }
+ /* Save now */
+ pBIOSInfo->TVSave(pScrn);
+
#ifdef HAVE_DEBUG
- if (VIAPTR(pScrn)->PrintTVRegs)
- pBIOSInfo->TVPrintRegs(pScrn);
+ if (VIAPTR(pScrn)->PrintTVRegs)
+ pBIOSInfo->TVPrintRegs(pScrn);
#endif
- return TRUE;
+ return TRUE;
+ }
+
+ return FALSE;
}
void
@@ -245,7 +251,7 @@ ViaOutputsDetect(ScrnInfoPtr pScrn)
}
/* TV encoder */
- if (ViaTVDetect(pScrn) && ViaTVInit(pScrn)) {
+ if (ViaTVInit(pScrn)) {
if (!pBIOSInfo->TVOutput) /* Config might've set this already */
ViaTVDACSense(pScrn);
} else if (pVia->Id && (pVia->Id->Outputs & VIA_DEVICE_TV)) {
diff --git a/src/via_vt162x.c b/src/via_vt162x.c
index 413eac1..e0b4e6e 100644
--- a/src/via_vt162x.c
+++ b/src/via_vt162x.c
@@ -31,6 +31,15 @@
/*
*
*/
+enum VT162xDevices {
+ VT1621,
+ VT1622,
+ VT1623
+};
+
+/*
+ *
+ */
static void
VT162xPrintRegs(ScrnInfoPtr pScrn)
{
@@ -50,77 +59,6 @@ VT162xPrintRegs(ScrnInfoPtr pScrn)
}
/*
- *
- */
-I2CDevPtr
-ViaVT162xDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address)
-{
- VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo;
- I2CDevPtr pDev = xf86CreateI2CDevRec();
- CARD8 buf;
-
- VIAFUNC(pScrn->scrnIndex);
-
- pDev->DevName = "VT162x";
- pDev->SlaveAddr = Address;
- pDev->pI2CBus = pBus;
-
- if (!xf86I2CDevInit(pDev)) {
- xf86DestroyI2CDevRec(pDev, TRUE);
- return NULL;
- }
-
- if (!xf86I2CReadByte(pDev, 0x1B, &buf)) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to read from %s Slave %d.\n",
- pBus->BusName, Address);
- xf86DestroyI2CDevRec(pDev, TRUE);
- return NULL;
- }
-
- switch (buf) {
- case 0x02:
- xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
- "Detected VIA Technologies VT1621 TV Encoder\n");
- pBIOSInfo->TVEncoder = VIA_VT1621;
- pDev->DevName = "VT1621";
- break;
- case 0x03:
- xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
- "Detected VIA Technologies VT1622 TV Encoder\n");
- pBIOSInfo->TVEncoder = VIA_VT1622;
- pDev->DevName = "VT1622";
- break;
- case 0x10:
- xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
- "Detected VIA Technologies VT1622A/VT1623 TV Encoder\n");
- pBIOSInfo->TVEncoder = VIA_VT1623;
- pDev->DevName = "VT1623";
- break;
- case 0x50:
- xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
- "Detected VIA Technologies VT1625 TV Encoder\n");
-#if 0
- pBIOSInfo->TVEncoder = VIA_VT1625;
- pDev->DevName = "VT1625";
-#else
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VT1625 is not supported yet.\n");
- xf86DestroyI2CDevRec(pDev, TRUE);
- pDev = NULL;
-#endif
- break;
- default:
- pBIOSInfo->TVEncoder = VIA_NONETV;
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Unknown TV Encoder found at %s %X.\n", pBus->BusName, Address);
- xf86DestroyI2CDevRec(pDev,TRUE);
- pDev = NULL;
- break;
- }
-
- return pDev;
-}
-
-/*
*
*/
static void
@@ -318,7 +256,7 @@ VT1622ModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode)
VIAFUNC(pScrn->scrnIndex);
- if (pBIOSInfo->TVEncoder == VIA_VT1622)
+ if (pBIOSInfo->TVEncoder == VT1622)
Table = VT1622Table;
else
Table = VT1623Table;
@@ -444,7 +382,7 @@ VT1622Mode(ScrnInfoPtr pScrn, DisplayModePtr mode)
VIAFUNC(pScrn->scrnIndex);
- if (pBIOSInfo->TVEncoder == VIA_VT1622)
+ if (pBIOSInfo->TVEncoder == VT1622)
Table = VT1622Table[VT1622ModeIndex(pScrn, mode)];
else /* VT1622A/VT1623 */
Table = VT1623Table[VT1622ModeIndex(pScrn, mode)];
@@ -549,45 +487,88 @@ VT1622Power(ScrnInfoPtr pScrn, Bool On)
/*
*
*/
-void
-ViaVT162xInit(ScrnInfoPtr pScrn)
+Bool
+ViaVT162xInit(ScrnInfoPtr pScrn, I2CDevPtr pDev)
{
VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo;
+ CARD8 buf;
VIAFUNC(pScrn->scrnIndex);
- switch (pBIOSInfo->TVEncoder) {
- case VIA_VT1621:
- pBIOSInfo->TVSave = VT162xSave;
- pBIOSInfo->TVRestore = VT162xRestore;
- pBIOSInfo->TVDACSense = VT1621DACSense;
- pBIOSInfo->TVModeValid = VT1621ModeValid;
- pBIOSInfo->TVMode = VT1621Mode;
- pBIOSInfo->TVPower = VT1621Power;
- pBIOSInfo->TVModes = VT1621Modes;
- pBIOSInfo->TVPrintRegs = VT162xPrintRegs;
- break;
- case VIA_VT1622:
- pBIOSInfo->TVSave = VT162xSave;
- pBIOSInfo->TVRestore = VT162xRestore;
- pBIOSInfo->TVDACSense = VT1622DACSense;
- pBIOSInfo->TVModeValid = VT1622ModeValid;
- pBIOSInfo->TVMode = VT1622Mode;
- pBIOSInfo->TVPower = VT1622Power;
- pBIOSInfo->TVModes = VT1622Modes;
- pBIOSInfo->TVPrintRegs = VT162xPrintRegs;
- break;
- case VIA_VT1623:
- pBIOSInfo->TVSave = VT162xSave;
- pBIOSInfo->TVRestore = VT162xRestore;
- pBIOSInfo->TVDACSense = VT1622DACSense;
- pBIOSInfo->TVModeValid = VT1622ModeValid;
- pBIOSInfo->TVMode = VT1622Mode;
- pBIOSInfo->TVPower = VT1622Power;
- pBIOSInfo->TVModes = VT1623Modes;
- pBIOSInfo->TVPrintRegs = VT162xPrintRegs;
- break;
+ if (!xf86I2CReadByte(pDev, 0x1B, &buf)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unable to read from %s Slave %d.\n",
+ pDev->pI2CBus->BusName, pDev->SlaveAddr);
+ return FALSE;
+ }
+
+ switch (buf) {
+ case 0x02:
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "Detected VIA Technologies VT1621 TV Encoder\n");
+ pDev->DevName = "VT1621";
+
+ pBIOSInfo->TVI2CDev = pDev;
+ pBIOSInfo->TVEncoder = VT1621;
+ pBIOSInfo->TVSave = VT162xSave;
+ pBIOSInfo->TVRestore = VT162xRestore;
+ pBIOSInfo->TVDACSense = VT1621DACSense;
+ pBIOSInfo->TVModeValid = VT1621ModeValid;
+ pBIOSInfo->TVMode = VT1621Mode;
+ pBIOSInfo->TVPower = VT1621Power;
+ pBIOSInfo->TVModes = VT1621Modes;
+ pBIOSInfo->TVPrintRegs = VT162xPrintRegs;
+
+ return TRUE;
+ case 0x03:
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "Detected VIA Technologies VT1622 TV Encoder\n");
+ pDev->DevName = "VT1622";
+
+ pBIOSInfo->TVI2CDev = pDev;
+ pBIOSInfo->TVEncoder = VT1622;
+ pBIOSInfo->TVSave = VT162xSave;
+ pBIOSInfo->TVRestore = VT162xRestore;
+ pBIOSInfo->TVDACSense = VT1622DACSense;
+ pBIOSInfo->TVModeValid = VT1622ModeValid;
+ pBIOSInfo->TVMode = VT1622Mode;
+ pBIOSInfo->TVPower = VT1622Power;
+ pBIOSInfo->TVModes = VT1622Modes;
+ pBIOSInfo->TVPrintRegs = VT162xPrintRegs;
+
+ return TRUE;
+ case 0x10:
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "Detected VIA Technologies VT1622A/VT1623 TV Encoder\n");
+ pDev->DevName = "VT1623";
+
+ pBIOSInfo->TVI2CDev = pDev;
+ pBIOSInfo->TVEncoder = VT1623;
+ pBIOSInfo->TVSave = VT162xSave;
+ pBIOSInfo->TVRestore = VT162xRestore;
+ pBIOSInfo->TVDACSense = VT1622DACSense;
+ pBIOSInfo->TVModeValid = VT1622ModeValid;
+ pBIOSInfo->TVMode = VT1622Mode;
+ pBIOSInfo->TVPower = VT1622Power;
+ pBIOSInfo->TVModes = VT1623Modes;
+ pBIOSInfo->TVPrintRegs = VT162xPrintRegs;
+
+ return TRUE;
+ case 0x50:
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "Detected VIA Technologies VT1625 TV Encoder\n");
+#if 0
+ pDev->DevName = "VT1625";
+
+ ...
+
+ return TRUE;
+#else
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VT1625 is not supported yet.\n");
+ return FALSE;
+#endif
default:
- break;
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unknown TV Encoder found at %s %X.\n",
+ pDev->pI2CBus->BusName, pDev->SlaveAddr);
+ return FALSE;
}
}