summaryrefslogtreecommitdiff
path: root/src/via_ch7xxx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/via_ch7xxx.c')
-rw-r--r--src/via_ch7xxx.c91
1 files changed, 33 insertions, 58 deletions
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;
}
}