diff --git a/src/i830_crt.c b/src/i830_crt.c index 2e70eb8..febe830 100644 --- a/src/i830_crt.c +++ b/src/i830_crt.c @@ -426,15 +426,20 @@ i830_get_edid(xf86OutputPtr output, int gpio_reg, char *gpio_str) { I830OutputPrivatePtr intel_output = output->driver_private; xf86MonPtr edid_mon = NULL; - + I2CBusPtr save_gpioa; /* Set up the DDC bus. */ - if (gpio_reg != GPIOA) + if (gpio_reg != GPIOA) { + save_gpioa = intel_output->pDDCBus; I830I2CInit(output->scrn, &intel_output->pDDCBus, gpio_reg, gpio_str); + } edid_mon = xf86OutputGetEDID (output, intel_output->pDDCBus); if (!edid_mon || DIGITAL(edid_mon->features.input_type)) { - xf86DestroyI2CBusRec(intel_output->pDDCBus, TRUE, TRUE); + if (gpio_reg != GPIOA) { + xf86DestroyI2CBusRec(intel_output->pDDCBus, TRUE, TRUE); + intel_output->pDDCBus = save_gpioa; + } if (edid_mon) { xfree(edid_mon); edid_mon = NULL;