diff options
-rw-r--r-- | drivers/staging/gma500/psb_drv.c | 15 | ||||
-rw-r--r-- | drivers/staging/gma500/psb_intel_bios.c | 13 |
2 files changed, 23 insertions, 5 deletions
diff --git a/drivers/staging/gma500/psb_drv.c b/drivers/staging/gma500/psb_drv.c index 1c45c11a774e..aa87b1b6a44a 100644 --- a/drivers/staging/gma500/psb_drv.c +++ b/drivers/staging/gma500/psb_drv.c | |||
@@ -542,6 +542,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) | |||
542 | unsigned long irqflags; | 542 | unsigned long irqflags; |
543 | int ret = -ENOMEM; | 543 | int ret = -ENOMEM; |
544 | uint32_t tt_pages; | 544 | uint32_t tt_pages; |
545 | struct drm_connector *connector; | ||
546 | struct psb_intel_output *psb_intel_output; | ||
545 | 547 | ||
546 | dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); | 548 | dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); |
547 | if (dev_priv == NULL) | 549 | if (dev_priv == NULL) |
@@ -663,7 +665,18 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) | |||
663 | drm_kms_helper_poll_init(dev); | 665 | drm_kms_helper_poll_init(dev); |
664 | } | 666 | } |
665 | 667 | ||
666 | ret = psb_backlight_init(dev); | 668 | /* Only add backlight support if we have LVDS output */ |
669 | list_for_each_entry(connector, &dev->mode_config.connector_list, | ||
670 | head) { | ||
671 | psb_intel_output = to_psb_intel_output(connector); | ||
672 | |||
673 | switch (psb_intel_output->type) { | ||
674 | case INTEL_OUTPUT_LVDS: | ||
675 | ret = psb_backlight_init(dev); | ||
676 | break; | ||
677 | } | ||
678 | } | ||
679 | |||
667 | if (ret) | 680 | if (ret) |
668 | return ret; | 681 | return ret; |
669 | #if 0 | 682 | #if 0 |
diff --git a/drivers/staging/gma500/psb_intel_bios.c b/drivers/staging/gma500/psb_intel_bios.c index 48ac8ba7f40b..417965da5e24 100644 --- a/drivers/staging/gma500/psb_intel_bios.c +++ b/drivers/staging/gma500/psb_intel_bios.c | |||
@@ -154,10 +154,15 @@ static void parse_lfp_panel_data(struct drm_psb_private *dev_priv, | |||
154 | 154 | ||
155 | fill_detail_timing_data(panel_fixed_mode, dvo_timing); | 155 | fill_detail_timing_data(panel_fixed_mode, dvo_timing); |
156 | 156 | ||
157 | dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode; | 157 | if (panel_fixed_mode->htotal > 0 && panel_fixed_mode->vtotal > 0) { |
158 | 158 | dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode; | |
159 | DRM_DEBUG("Found panel mode in BIOS VBT tables:\n"); | 159 | DRM_DEBUG("Found panel mode in BIOS VBT tables:\n"); |
160 | drm_mode_debug_printmodeline(panel_fixed_mode); | 160 | drm_mode_debug_printmodeline(panel_fixed_mode); |
161 | } else { | ||
162 | DRM_DEBUG("Ignoring bogus LVDS VBT mode.\n"); | ||
163 | dev_priv->lvds_vbt = 0; | ||
164 | kfree(panel_fixed_mode); | ||
165 | } | ||
161 | 166 | ||
162 | return; | 167 | return; |
163 | } | 168 | } |