drm/i915: fix gpio register detection logic for BIOS without VBT
authorShaohua Li <shaohua.li@intel.com>
Wed, 18 Nov 2009 07:15:02 +0000 (15:15 +0800)
committerEric Anholt <eric@anholt.net>
Tue, 1 Dec 2009 00:10:56 +0000 (16:10 -0800)
if no VBT is present, crt_ddc_bus will be left at 0, and cause us
to use that for the GPIO register offset. That's never a valid register
offset, so let the "undefined" value be 0 instead of -1.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
[anholt: clarified the commit message a bit]

drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/intel_bios.c
drivers/gpu/drm/i915/intel_crt.c

index dcc061cdc9a5f90a8bd55088ac2a6ce822220873..13ede75ff6ce93ee32238700c6c230b869ec6cfc 100644 (file)
@@ -266,7 +266,7 @@ typedef struct drm_i915_private {
 
        struct notifier_block lid_notifier;
 
-       int crt_ddc_bus; /* -1 = unknown, else GPIO to use for CRT DDC */
+       int crt_ddc_bus; /* 0 = unknown, else GPIO to use for CRT DDC */
        struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */
        int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
        int num_fence_regs; /* 8 on pre-965, 16 otherwise */
index 10806cd5e4d385719eee18e388251aebb30a726d..800d13bd9e6abf98a5978889db9162d656cf8348 100644 (file)
@@ -283,10 +283,6 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
                GPIOF,
        };
 
-       /* Set sensible defaults in case we can't find the general block
-          or it is the wrong chipset */
-       dev_priv->crt_ddc_bus = -1;
-
        general = find_section(bdb, BDB_GENERAL_DEFINITIONS);
        if (general) {
                u16 block_size = get_blocksize(general);
index 0864a2c40856181aa035cff406cd6e5ed3f01e72..477a61c5402bd558fda68c7e1dffd5c88267ed0a 100644 (file)
@@ -526,7 +526,7 @@ void intel_crt_init(struct drm_device *dev)
        else {
                i2c_reg = GPIOA;
                /* Use VBT information for CRT DDC if available */
-               if (dev_priv->crt_ddc_bus != -1)
+               if (dev_priv->crt_ddc_bus != 0)
                        i2c_reg = dev_priv->crt_ddc_bus;
        }
        intel_output->ddc_bus = intel_i2c_create(dev, i2c_reg, "CRTDDC_A");