diff --git src/via_bios.h src/via_bios.h
index 06809b9..cf8ba88 100644
--- src/via_bios.h
+++ 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 src/via_driver.c src/via_driver.c
index 9dea66c..c3000ae 100644
--- src/via_driver.c
+++ 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 src/via_driver.h src/via_driver.h
index 25af449..1f6d441 100644
--- src/via_driver.h
+++ 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 src/via_i2c.c src/via_i2c.c
index 80bc5de..2f3cd21 100644
--- src/via_i2c.c
+++ 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) {