diff options
author | Ian Romanick <idr@us.ibm.com> | 2008-06-11 17:12:50 -0700 |
---|---|---|
committer | Ian Romanick <idr@us.ibm.com> | 2008-06-11 17:12:50 -0700 |
commit | e3ef053f834ab2e4ec9aab50b399d9c1ffbcf242 (patch) | |
tree | 01e38a42e149af4db4a220d12a562982a44c3699 | |
parent | 44893ae0d9d3bfe22216e98d31f46fce03a84e65 (diff) |
Enable per-output I2C interface
-rw-r--r-- | src/xg47_outputs.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/xg47_outputs.c b/src/xg47_outputs.c index a2b72cd..2421d9f 100644 --- a/src/xg47_outputs.c +++ b/src/xg47_outputs.c @@ -35,6 +35,11 @@ #include "xgi.h" #include "xgi_regs.h" +struct xg47_crtc_private { + I2CBusPtr pI2C; +}; + + static int xg47_output_mode_valid(xf86OutputPtr output, DisplayModePtr mode); static Bool xg47_output_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, @@ -47,7 +52,7 @@ static void xg47_output_commit(xf86OutputPtr output); static void xg47_output_mode_set(xf86OutputPtr output, DisplayModePtr mode, DisplayModePtr adjusted_mode); -static void xg47_output_dpms(xf86OutputPtr output, int mode); +static void xg47_vga_dpms(xf86OutputPtr output, int mode); static xf86OutputStatus xg47_output_detect(xf86OutputPtr output); @@ -59,8 +64,8 @@ static void xg47_output_destroy(xf86OutputPtr output); static DisplayModePtr xg47_output_get_modes(xf86OutputPtr output); -static const xf86OutputFuncsRec xg47_output_funcs = { - .dpms = xg47_output_dpms, +static const xf86OutputFuncsRec xg47_vga_funcs = { + .dpms = xg47_vga_dpms, .save = xg47_output_save, .restore = xg47_output_restore, .mode_valid = xg47_output_mode_valid, @@ -75,7 +80,7 @@ static const xf86OutputFuncsRec xg47_output_funcs = { void -xg47_output_dpms(xf86OutputPtr output, int mode) +xg47_vga_dpms(xf86OutputPtr output, int mode) { ScrnInfoPtr pScrn = output->scrn; XGIPtr pXGI = XGIPTR(pScrn); @@ -105,9 +110,10 @@ xg47_output_dpms(xf86OutputPtr output, int mode) xf86OutputStatus xg47_output_detect(xf86OutputPtr output) { - XGIPtr pXGI = XGIPTR(output->scrn); + struct xg47_crtc_private *xg47_output = + (struct xg47_crtc_private *) output->driver_private; - return (xf86I2CProbeAddress(pXGI->pI2C, 0xA0)) + return (xf86I2CProbeAddress(xg47_output->pI2C, 0xA0)) ? XF86OutputStatusConnected : XF86OutputStatusUnknown; } @@ -172,9 +178,11 @@ static DisplayModePtr xg47_output_get_modes(xf86OutputPtr output) { XGIPtr pXGI = XGIPTR(output->scrn); + struct xg47_crtc_private *xg47_output = + (struct xg47_crtc_private *) output->driver_private; xf86MonPtr mon; - mon = xf86OutputGetEDID(output, pXGI->pI2C); + mon = xf86OutputGetEDID(output, xg47_output->pI2C); xf86OutputSetEDID(output, mon); return xf86OutputGetEDIDModes(output); @@ -188,14 +196,19 @@ xg47_OutputDac1Init(ScrnInfoPtr scrn, Bool primary) { XGIPtr pXGI = XGIPTR(scrn); xf86OutputPtr output; + struct xg47_crtc_private *xg47_output; const char *const name = (primary) ? "VGA" : "VGA1"; - output = xf86OutputCreate(scrn, &xg47_output_funcs, name); + output = xf86OutputCreate(scrn, &xg47_vga_funcs, name); if (!output) { return NULL; } + xg47_output = xnfcalloc(sizeof(*xg47_output), 1); + xg47_output->pI2C = pXGI->pI2C; + + output->driver_private = xg47_output; return output; } |