diff options
Diffstat (limited to 'linux-core')
| -rw-r--r-- | linux-core/drm_crtc.c | 6 | ||||
| -rw-r--r-- | linux-core/drm_drv.c | 15 | ||||
| -rw-r--r-- | linux-core/intel_sdvo.c | 5 | 
3 files changed, 15 insertions, 11 deletions
| diff --git a/linux-core/drm_crtc.c b/linux-core/drm_crtc.c index 0fb5b9ae..437259d5 100644 --- a/linux-core/drm_crtc.c +++ b/linux-core/drm_crtc.c @@ -572,7 +572,7 @@ bool drm_initial_config(drm_device_t *dev, bool can_grow)  	/* bind analog output to one crtc */  	list_for_each_entry(output, &dev->mode_config.output_list, head) { -		struct drm_display_mode *des_mode; +		struct drm_display_mode *des_mode = NULL;  		if (list_empty(&output->modes))  			continue; @@ -582,6 +582,10 @@ bool drm_initial_config(drm_device_t *dev, bool can_grow)  			if (des_mode->flags & DRM_MODE_TYPE_PREFERRED)  				break;  		} + +		if (!des_mode) +			continue; +  		if (!strncmp(output->name, "VGA", 3)) {  			DRM_DEBUG("VGA preferred mode: %s\n", des_mode->name);  			drm_setup_output(output, vga_crtc, des_mode); diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c index 7bb8c659..5aa7137b 100644 --- a/linux-core/drm_drv.c +++ b/linux-core/drm_drv.c @@ -375,9 +375,6 @@ static void drm_cleanup(drm_device_t * dev)  	drm_lastclose(dev);  	drm_fence_manager_takedown(dev); -	if (!drm_fb_loaded) -		pci_disable_device(dev->pdev); -  	drm_ctxbitmap_cleanup(dev);  	if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) && dev->agp @@ -389,15 +386,16 @@ static void drm_cleanup(drm_device_t * dev)  		DRM_DEBUG("mtrr_del=%d\n", retval);  	} -        //	drm_bo_driver_finish(dev); - +	if (dev->driver->unload) +		dev->driver->unload(dev); +          	if (drm_core_has_AGP(dev) && dev->agp) {  		drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS);  		dev->agp = NULL;  	} -	if (dev->driver->unload) -		dev->driver->unload(dev); + +        //	drm_bo_driver_finish(dev);  	if (dev->maplist) {  		drm_free(dev->maplist, sizeof(*dev->maplist), DRM_MEM_MAPS);  		dev->maplist = NULL; @@ -406,6 +404,9 @@ static void drm_cleanup(drm_device_t * dev)  		drm_ht_remove(&dev->object_hash);  	} +	if (!drm_fb_loaded) +		pci_disable_device(dev->pdev); +  	drm_put_head(&dev->primary);  	if (drm_put_dev(dev))  		DRM_ERROR("Cannot unload module\n"); diff --git a/linux-core/intel_sdvo.c b/linux-core/intel_sdvo.c index 6f592f8a..5dbfb8eb 100644 --- a/linux-core/intel_sdvo.c +++ b/linux-core/intel_sdvo.c @@ -70,10 +70,9 @@ static void intel_sdvo_write_sdvox(struct drm_output *output, u32 val)  	int i;  	if (sdvo_priv->output_device == SDVOB) -		bval = I915_READ(SDVOB); -	else  		cval = I915_READ(SDVOC); -	 +	else +		bval = I915_READ(SDVOB);  	/*  	 * Write the registers twice for luck. Sometimes,  	 * writing them only once doesn't appear to 'stick'. | 
