summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Nettleton <jon.nettleton@gmail.com>2010-05-04 14:22:31 +0000
committerJon Nettleton <jon.nettleton@gmail.com>2010-05-04 14:22:31 +0000
commit33cfdd7cb9557b3a31435d9f1d45ed674d00b727 (patch)
tree1845e419a91fa8715ac803ed7b017c84c6a331c8
parentfae166880411a79779380dff9fe5f22cc410d9b1 (diff)
Add option I2CDevices
-rw-r--r--ChangeLog12
-rw-r--r--src/via_bios.h5
-rw-r--r--src/via_driver.c14
-rw-r--r--src/via_driver.h2
-rw-r--r--src/via_i2c.c15
5 files changed, 45 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 65b9e82..b1cd85c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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) {