Commit 23e041db authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
  drm/fb: fix FBIOGET/PUT_VSCREENINFO pixel clock handling
  drm: make sure page protections are updated after changing vm_flags
  drm/radeon/kms: Report vga connector is connected according to ddc_probe
  drm: mm always protect change to unused_nodes with unused_lock spinlock
  drm/radeon/kms: Disable TV load detect on RS400,RC410,RS480
  drm/radeon/kms: read back register before writing in IIO.
  drm/radeon/kms: fix handling of d1/d2 vga
  drm: work around EDIDs with bad htotal/vtotal values
  drm/radeon/kms: resume AGP by calling init.
parents f5073345 5349ef31
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -662,6 +662,12 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
		return NULL;
	}

	/* Some EDIDs have bogus h/vtotal values */
	if (mode->hsync_end > mode->htotal)
		mode->htotal = mode->hsync_end + 1;
	if (mode->vsync_end > mode->vtotal)
		mode->vtotal = mode->vsync_end + 1;

	drm_mode_set_name(mode);

	if (pt->misc & DRM_EDID_PT_INTERLACED)
+3 −3
Original line number Diff line number Diff line
@@ -599,7 +599,7 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
	struct drm_framebuffer *fb = fb_helper->fb;
	int depth;

	if (var->pixclock == -1 || !var->pixclock)
	if (var->pixclock != 0)
		return -EINVAL;

	/* Need to resize the fb object !!! */
@@ -691,7 +691,7 @@ int drm_fb_helper_set_par(struct fb_info *info)
	int ret;
	int i;

	if (var->pixclock != -1) {
	if (var->pixclock != 0) {
		DRM_ERROR("PIXEL CLCOK SET\n");
		return -EINVAL;
	}
@@ -904,7 +904,7 @@ int drm_fb_helper_single_fb_probe(struct drm_device *dev,
	fb_helper->fb = fb;

	if (new_fb) {
		info->var.pixclock = -1;
		info->var.pixclock = 0;
		if (register_framebuffer(info) < 0)
			return -EINVAL;
	} else {
+1 −1
Original line number Diff line number Diff line
@@ -552,7 +552,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
	vma->vm_flags |= VM_RESERVED | VM_IO | VM_PFNMAP | VM_DONTEXPAND;
	vma->vm_ops = obj->dev->driver->gem_vm_ops;
	vma->vm_private_data = map->handle;
	vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
	vma->vm_page_prot =  pgprot_writecombine(vm_get_page_prot(vma->vm_flags));

	/* Take a ref for this mapping of the object, so that the fault
	 * handler can dereference the mmap offset's pointer to the object.
+9 −0
Original line number Diff line number Diff line
@@ -103,6 +103,11 @@ static struct drm_mm_node *drm_mm_kmalloc(struct drm_mm *mm, int atomic)
	return child;
}

/* drm_mm_pre_get() - pre allocate drm_mm_node structure
 * drm_mm:	memory manager struct we are pre-allocating for
 *
 * Returns 0 on success or -ENOMEM if allocation fails.
 */
int drm_mm_pre_get(struct drm_mm *mm)
{
	struct drm_mm_node *node;
@@ -253,12 +258,14 @@ void drm_mm_put_block(struct drm_mm_node *cur)
				prev_node->size += next_node->size;
				list_del(&next_node->ml_entry);
				list_del(&next_node->fl_entry);
				spin_lock(&mm->unused_lock);
				if (mm->num_unused < MM_UNUSED_TARGET) {
					list_add(&next_node->fl_entry,
						 &mm->unused_nodes);
					++mm->num_unused;
				} else
					kfree(next_node);
				spin_unlock(&mm->unused_lock);
			} else {
				next_node->size += cur->size;
				next_node->start = cur->start;
@@ -271,11 +278,13 @@ void drm_mm_put_block(struct drm_mm_node *cur)
		list_add(&cur->fl_entry, &mm->fl_entry);
	} else {
		list_del(&cur->ml_entry);
		spin_lock(&mm->unused_lock);
		if (mm->num_unused < MM_UNUSED_TARGET) {
			list_add(&cur->fl_entry, &mm->unused_nodes);
			++mm->num_unused;
		} else
			kfree(cur);
		spin_unlock(&mm->unused_lock);
	}
}

+1 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
			base += 3;
			break;
		case ATOM_IIO_WRITE:
			(void)ctx->card->reg_read(ctx->card, CU16(base + 1));
			ctx->card->reg_write(ctx->card, CU16(base + 1), temp);
			base += 3;
			break;
Loading