Commit 2c35cd01 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
  drm/radeon/kms: only warn on mipmap size checks in r600 cs checker (v2)
  drm/radeon/kms: force legacy pll algo for RV620 LVDS
  drm: fix race between driver loading and userspace open.
  drm: Use a nondestructive mode for output detect when polling (v2)
  drm/radeon/kms: fix the colorbuffer CS checker for r300-r500
  drm/radeon/kms: increase lockup detection interval to 10 sec for r100-r500
  drm/radeon/kms/evergreen: fix backend setup
  drm: Use a nondestructive mode for output detect when polling
  drm/radeon: add some missing copyright headers
  drm: Only decouple the old_fb from the crtc is we call mode_set*
  drm/radeon/kms: don't enable underscan with interlaced modes
  drm/radeon/kms: add connector table for Mac x800
  drm/radeon/kms: fix regression in RMX code (v2)
  drm: Fix regression in disable polling e58f637b
parents 9c03f162 fe725d4f
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -103,8 +103,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
		if (connector->funcs->force)
		if (connector->funcs->force)
			connector->funcs->force(connector);
			connector->funcs->force(connector);
	} else {
	} else {
		connector->status = connector->funcs->detect(connector);
		connector->status = connector->funcs->detect(connector, true);
		drm_helper_hpd_irq_event(dev);
		drm_kms_helper_poll_enable(dev);
	}
	}


	if (connector->status == connector_status_disconnected) {
	if (connector->status == connector_status_disconnected) {
@@ -637,13 +637,13 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
		mode_changed = true;
		mode_changed = true;


	if (mode_changed) {
	if (mode_changed) {
		old_fb = set->crtc->fb;
		set->crtc->fb = set->fb;
		set->crtc->enabled = (set->mode != NULL);
		set->crtc->enabled = (set->mode != NULL);
		if (set->mode != NULL) {
		if (set->mode != NULL) {
			DRM_DEBUG_KMS("attempting to set mode from"
			DRM_DEBUG_KMS("attempting to set mode from"
					" userspace\n");
					" userspace\n");
			drm_mode_debug_printmodeline(set->mode);
			drm_mode_debug_printmodeline(set->mode);
			old_fb = set->crtc->fb;
			set->crtc->fb = set->fb;
			if (!drm_crtc_helper_set_mode(set->crtc, set->mode,
			if (!drm_crtc_helper_set_mode(set->crtc, set->mode,
						      set->x, set->y,
						      set->x, set->y,
						      old_fb)) {
						      old_fb)) {
@@ -866,7 +866,7 @@ static void output_poll_execute(struct work_struct *work)
		    !(connector->polled & DRM_CONNECTOR_POLL_HPD))
		    !(connector->polled & DRM_CONNECTOR_POLL_HPD))
			continue;
			continue;


		status = connector->funcs->detect(connector);
		status = connector->funcs->detect(connector, false);
		if (old_status != status)
		if (old_status != status)
			changed = true;
			changed = true;
	}
	}
+4 −0
Original line number Original line Diff line number Diff line
@@ -164,6 +164,8 @@ int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
	dev->hose = pdev->sysdata;
	dev->hose = pdev->sysdata;
#endif
#endif


	mutex_lock(&drm_global_mutex);

	if ((ret = drm_fill_in_dev(dev, ent, driver))) {
	if ((ret = drm_fill_in_dev(dev, ent, driver))) {
		printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
		printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
		goto err_g2;
		goto err_g2;
@@ -199,6 +201,7 @@ int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
		 driver->name, driver->major, driver->minor, driver->patchlevel,
		 driver->name, driver->major, driver->minor, driver->patchlevel,
		 driver->date, pci_name(pdev), dev->primary->index);
		 driver->date, pci_name(pdev), dev->primary->index);


	mutex_unlock(&drm_global_mutex);
	return 0;
	return 0;


err_g4:
err_g4:
@@ -210,6 +213,7 @@ err_g2:
	pci_disable_device(pdev);
	pci_disable_device(pdev);
err_g1:
err_g1:
	kfree(dev);
	kfree(dev);
	mutex_unlock(&drm_global_mutex);
	return ret;
	return ret;
}
}
EXPORT_SYMBOL(drm_get_pci_dev);
EXPORT_SYMBOL(drm_get_pci_dev);
+5 −0
Original line number Original line Diff line number Diff line
@@ -53,6 +53,8 @@ int drm_get_platform_dev(struct platform_device *platdev,
	dev->platformdev = platdev;
	dev->platformdev = platdev;
	dev->dev = &platdev->dev;
	dev->dev = &platdev->dev;


	mutex_lock(&drm_global_mutex);

	ret = drm_fill_in_dev(dev, NULL, driver);
	ret = drm_fill_in_dev(dev, NULL, driver);


	if (ret) {
	if (ret) {
@@ -87,6 +89,8 @@ int drm_get_platform_dev(struct platform_device *platdev,


	list_add_tail(&dev->driver_item, &driver->device_list);
	list_add_tail(&dev->driver_item, &driver->device_list);


	mutex_unlock(&drm_global_mutex);

	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
		 driver->name, driver->major, driver->minor, driver->patchlevel,
		 driver->name, driver->major, driver->minor, driver->patchlevel,
		 driver->date, dev->primary->index);
		 driver->date, dev->primary->index);
@@ -100,6 +104,7 @@ err_g2:
		drm_put_minor(&dev->control);
		drm_put_minor(&dev->control);
err_g1:
err_g1:
	kfree(dev);
	kfree(dev);
	mutex_unlock(&drm_global_mutex);
	return ret;
	return ret;
}
}
EXPORT_SYMBOL(drm_get_platform_dev);
EXPORT_SYMBOL(drm_get_platform_dev);
+1 −1
Original line number Original line Diff line number Diff line
@@ -159,7 +159,7 @@ static ssize_t status_show(struct device *device,
	struct drm_connector *connector = to_drm_connector(device);
	struct drm_connector *connector = to_drm_connector(device);
	enum drm_connector_status status;
	enum drm_connector_status status;


	status = connector->funcs->detect(connector);
	status = connector->funcs->detect(connector, true);
	return snprintf(buf, PAGE_SIZE, "%s\n",
	return snprintf(buf, PAGE_SIZE, "%s\n",
			drm_get_connector_status_name(status));
			drm_get_connector_status_name(status));
}
}
+5 −1
Original line number Original line Diff line number Diff line
@@ -400,7 +400,8 @@ intel_crt_load_detect(struct drm_crtc *crtc, struct intel_encoder *intel_encoder
	return status;
	return status;
}
}


static enum drm_connector_status intel_crt_detect(struct drm_connector *connector)
static enum drm_connector_status
intel_crt_detect(struct drm_connector *connector, bool force)
{
{
	struct drm_device *dev = connector->dev;
	struct drm_device *dev = connector->dev;
	struct drm_encoder *encoder = intel_attached_encoder(connector);
	struct drm_encoder *encoder = intel_attached_encoder(connector);
@@ -419,6 +420,9 @@ static enum drm_connector_status intel_crt_detect(struct drm_connector *connecto
	if (intel_crt_detect_ddc(encoder))
	if (intel_crt_detect_ddc(encoder))
		return connector_status_connected;
		return connector_status_connected;


	if (!force)
		return connector->status;

	/* for pre-945g platforms use load detect */
	/* for pre-945g platforms use load detect */
	if (encoder->crtc && encoder->crtc->enabled) {
	if (encoder->crtc && encoder->crtc->enabled) {
		status = intel_crt_load_detect(encoder->crtc, intel_encoder);
		status = intel_crt_load_detect(encoder->crtc, intel_encoder);
Loading