diff options
author | Jon Nettleton <jon.nettleton@gmail.com> | 2010-05-04 14:22:31 +0000 |
---|---|---|
committer | Jon Nettleton <jon.nettleton@gmail.com> | 2010-05-04 14:22:31 +0000 |
commit | 33cfdd7cb9557b3a31435d9f1d45ed674d00b727 (patch) | |
tree | 1845e419a91fa8715ac803ed7b017c84c6a331c8 | |
parent | fae166880411a79779380dff9fe5f22cc410d9b1 (diff) |
Add option I2CDevices
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | src/via_bios.h | 5 | ||||
-rw-r--r-- | src/via_driver.c | 14 | ||||
-rw-r--r-- | src/via_driver.h | 2 | ||||
-rw-r--r-- | src/via_i2c.c | 15 |
5 files changed, 45 insertions, 3 deletions
@@ -1,3 +1,15 @@ +2010-05-04 Jon Nettleton <jon.nettleton@gmail.com> + + Add an undocumented option which allows certain I2C buses + to be probed at startup. This allows workarounds for custom + chipset makers that have used the VX855 I2C buses for other + purposes. + + * src/via_bios.h: + * src/via_driver.c: (VIASetupDefaultOptions), (VIAPreInit): + * src/via_driver.h: + * src/via_i2c.c: + 2010-05-04 Jon Nettleton <jon.nettleton@gmail.com> Improve 2d performance on chipsets that don't have diff --git a/src/via_bios.h b/src/via_bios.h index 06809b9..cf8ba88 100644 --- a/src/via_bios.h +++ b/src/via_bios.h @@ -82,6 +82,11 @@ #define VIA_DEVICE_TV 0x04 #define VIA_DEVICE_DFP 0x08 +#define VIA_I2C_NONE 0x00 +#define VIA_I2C_BUS1 0x01 +#define VIA_I2C_BUS2 0x02 +#define VIA_I2C_BUS3 0x04 + /* System Memory CLK */ #define VIA_MEM_SDR66 0x00 #define VIA_MEM_SDR100 0x01 diff --git a/src/via_driver.c b/src/via_driver.c index 9dea66c..c3000ae 100644 --- a/src/via_driver.c +++ b/src/via_driver.c @@ -219,6 +219,7 @@ typedef enum OPTION_ROTATE, OPTION_VIDEORAM, OPTION_ACTIVEDEVICE, + OPTION_I2CDEVICES, OPTION_BUSWIDTH, OPTION_CENTER, OPTION_PANELSIZE, @@ -278,6 +279,7 @@ static OptionInfoRec VIAOptions[] = { {OPTION_MODE_SWITCH_METHOD, "ModeSwitchMethod", OPTV_ANYSTR, {0}, FALSE}, {OPTION_MAX_DRIMEM, "MaxDRIMem", OPTV_INTEGER, {0}, FALSE}, {OPTION_AGPMEM, "AGPMem", OPTV_INTEGER, {0}, FALSE}, + {OPTION_I2CDEVICES, "I2CDevices", OPTV_ANYSTR, {0}, FALSE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; @@ -693,6 +695,7 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn) pVia->maxDriSize = 0; pVia->agpMem = AGP_SIZE / 1024; pVia->ActiveDevice = 0x00; + pVia->I2CDevices = 0x00; pVia->VideoEngine = VIDEO_ENGINE_CLE; #ifdef HAVE_DEBUG pVia->PrintVGARegs = FALSE; @@ -1558,6 +1561,17 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) pVia->videoRambytes = pScrn->videoRam << 10; + /* I2CDevices Option for I2C Initialization */ + //pVia->I2CDevices = 0x00; + if ((s = xf86GetOptValString(VIAOptions, OPTION_I2CDEVICES))) { + if (strstr(s, "Bus1")) + pVia->I2CDevices |= VIA_I2C_BUS1; + if (strstr(s, "Bus2")) + pVia->I2CDevices |= VIA_I2C_BUS2; + if (strstr(s, "Bus3")) + pVia->I2CDevices |= VIA_I2C_BUS3; + } + if (!xf86LoadSubModule(pScrn, "i2c")) { VIAFreeRec(pScrn); return FALSE; diff --git a/src/via_driver.h b/src/via_driver.h index 25af449..1f6d441 100644 --- a/src/via_driver.h +++ b/src/via_driver.h @@ -414,6 +414,8 @@ typedef struct _VIA { void *cursorMap; CARD32 cursorOffset; + CARD8 I2CDevices; /* Option */ + #ifdef HAVE_DEBUG Bool disableXvBWCheck; Bool DumpVGAROM; diff --git a/src/via_i2c.c b/src/via_i2c.c index 80bc5de..2f3cd21 100644 --- a/src/via_i2c.c +++ b/src/via_i2c.c @@ -365,9 +365,18 @@ ViaI2CInit(ScrnInfoPtr pScrn) DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaI2CInit\n")); - pVia->pI2CBus1 = ViaI2CBus1Init(pScrn->scrnIndex); - pVia->pI2CBus2 = ViaI2CBus2Init(pScrn->scrnIndex); - pVia->pI2CBus3 = ViaI2CBus3Init(pScrn->scrnIndex); + if (!pVia->I2CDevices) { + pVia->pI2CBus1 = ViaI2CBus1Init(pScrn->scrnIndex); + pVia->pI2CBus2 = ViaI2CBus2Init(pScrn->scrnIndex); + pVia->pI2CBus3 = ViaI2CBus3Init(pScrn->scrnIndex); + } else { + if (pVia->I2CDevices & VIA_I2C_BUS1) + pVia->pI2CBus1 = ViaI2CBus1Init(pScrn->scrnIndex); + if (pVia->I2CDevices & VIA_I2C_BUS2) + pVia->pI2CBus2 = ViaI2CBus2Init(pScrn->scrnIndex); + if (pVia->I2CDevices & VIA_I2C_BUS3) + pVia->pI2CBus3 = ViaI2CBus3Init(pScrn->scrnIndex); + } #ifdef HAVE_DEBUG if (pVia->I2CScan) { |