Skip to content

Commit

Permalink
staging: gma500: Skip bogus LVDS VBT mode and check for LVDS before a…
Browse files Browse the repository at this point in the history
…dding backlight

On the Fit-PC2 the VBT reports an invalid fixed panel mode for LVDS, this gets
in the way for SDVO. This patch makes VBT parsing skip the invalid mode. When
there is no LVDS output the backlight support crashes so the patch also checks
for this before enabling it.

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Patrik Jakobsson authored and Greg Kroah-Hartman committed Jun 7, 2011
1 parent d3ac077 commit 3ab8be5
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
15 changes: 14 additions & 1 deletion drivers/staging/gma500/psb_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
unsigned long irqflags;
int ret = -ENOMEM;
uint32_t tt_pages;
struct drm_connector *connector;
struct psb_intel_output *psb_intel_output;

dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
if (dev_priv == NULL)
Expand Down Expand Up @@ -663,7 +665,18 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
drm_kms_helper_poll_init(dev);
}

ret = psb_backlight_init(dev);
/* Only add backlight support if we have LVDS output */
list_for_each_entry(connector, &dev->mode_config.connector_list,
head) {
psb_intel_output = to_psb_intel_output(connector);

switch (psb_intel_output->type) {
case INTEL_OUTPUT_LVDS:
ret = psb_backlight_init(dev);
break;
}
}

if (ret)
return ret;
#if 0
Expand Down
13 changes: 9 additions & 4 deletions drivers/staging/gma500/psb_intel_bios.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,15 @@ static void parse_lfp_panel_data(struct drm_psb_private *dev_priv,

fill_detail_timing_data(panel_fixed_mode, dvo_timing);

dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;

DRM_DEBUG("Found panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
if (panel_fixed_mode->htotal > 0 && panel_fixed_mode->vtotal > 0) {
dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;
DRM_DEBUG("Found panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
} else {
DRM_DEBUG("Ignoring bogus LVDS VBT mode.\n");
dev_priv->lvds_vbt = 0;
kfree(panel_fixed_mode);
}

return;
}
Expand Down

0 comments on commit 3ab8be5

Please sign in to comment.