diff options
Diffstat (limited to 'src/via_ch7xxx.c')
-rw-r--r-- | src/via_ch7xxx.c | 91 |
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; } } |