diff options
Diffstat (limited to 'drivers')
83 files changed, 1364 insertions, 1092 deletions
| diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c index a610ebe18ed..2fbfe51fb14 100644 --- a/drivers/acpi/acpica/exprep.c +++ b/drivers/acpi/acpica/exprep.c @@ -471,13 +471,18 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)  		/* allow full data read from EC address space */  		if (obj_desc->field.region_obj->region.space_id ==  			ACPI_ADR_SPACE_EC) { -			if (obj_desc->common_field.bit_length > 8) -				obj_desc->common_field.access_bit_width = -				ACPI_ROUND_UP(obj_desc->common_field. -							bit_length, 8); +			if (obj_desc->common_field.bit_length > 8) { +				unsigned width = +					ACPI_ROUND_BITS_UP_TO_BYTES( +					obj_desc->common_field.bit_length); +				// access_bit_width is u8, don't overflow it +				if (width > 8) +					width = 8;  				obj_desc->common_field.access_byte_width = -				ACPI_DIV_8(obj_desc->common_field. -							access_bit_width); +							width; +				obj_desc->common_field.access_bit_width = +							8 * width; +			}  		}  		ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index d41331bc2aa..aa4248efc5d 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c @@ -1817,8 +1817,6 @@ static int intel_845_configure(void)  	pci_write_config_byte(agp_bridge->dev, INTEL_I845_AGPM, temp2 | (1 << 1));  	/* clear any possible error conditions */  	pci_write_config_word(agp_bridge->dev, INTEL_I845_ERRSTS, 0x001c); - -	intel_i830_setup_flush();  	return 0;  } @@ -2188,7 +2186,6 @@ static const struct agp_bridge_driver intel_845_driver = {  	.agp_destroy_page	= agp_generic_destroy_page,  	.agp_destroy_pages      = agp_generic_destroy_pages,  	.agp_type_to_mask_type  = agp_generic_type_to_mask_type, -	.chipset_flush		= intel_i830_chipset_flush,  };  static const struct agp_bridge_driver intel_850_driver = { diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index c9bc896d68a..90b199f97be 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c @@ -1026,14 +1026,16 @@ static ssize_t cmm_read(struct file *filp, __user char *buf, size_t count,  	xoutb(0, REG_FLAGS1(iobase));	/* clear detectCMM */  	/* last check before exit */ -	if (!io_detect_cm4000(iobase, dev)) -		count = -ENODEV; +	if (!io_detect_cm4000(iobase, dev)) { +		rc = -ENODEV; +		goto release_io; +	}  	if (test_bit(IS_INVREV, &dev->flags) && count > 0)  		str_invert_revert(dev->rbuf, count);  	if (copy_to_user(buf, dev->rbuf, count)) -		return -EFAULT; +		rc = -EFAULT;  release_io:  	clear_bit(LOCK_IO, &dev->flags); diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index 702dcc98c07..14a34d99eea 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c @@ -960,6 +960,8 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)  		u.packet.header_length = GET_HEADER_LENGTH(control);  		if (ctx->type == FW_ISO_CONTEXT_TRANSMIT) { +			if (u.packet.header_length % 4 != 0) +				return -EINVAL;  			header_length = u.packet.header_length;  		} else {  			/* @@ -969,7 +971,8 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)  			if (ctx->header_size == 0) {  				if (u.packet.header_length > 0)  					return -EINVAL; -			} else if (u.packet.header_length % ctx->header_size != 0) { +			} else if (u.packet.header_length == 0 || +				   u.packet.header_length % ctx->header_size != 0) {  				return -EINVAL;  			}  			header_length = 0; @@ -1354,24 +1357,24 @@ static int dispatch_ioctl(struct client *client,  		return -ENODEV;  	if (_IOC_TYPE(cmd) != '#' || -	    _IOC_NR(cmd) >= ARRAY_SIZE(ioctl_handlers)) +	    _IOC_NR(cmd) >= ARRAY_SIZE(ioctl_handlers) || +	    _IOC_SIZE(cmd) > sizeof(buffer))  		return -EINVAL; -	if (_IOC_DIR(cmd) & _IOC_WRITE) { -		if (_IOC_SIZE(cmd) > sizeof(buffer) || -		    copy_from_user(&buffer, arg, _IOC_SIZE(cmd))) +	if (_IOC_DIR(cmd) == _IOC_READ) +		memset(&buffer, 0, _IOC_SIZE(cmd)); + +	if (_IOC_DIR(cmd) & _IOC_WRITE) +		if (copy_from_user(&buffer, arg, _IOC_SIZE(cmd)))  			return -EFAULT; -	}  	ret = ioctl_handlers[_IOC_NR(cmd)](client, &buffer);  	if (ret < 0)  		return ret; -	if (_IOC_DIR(cmd) & _IOC_READ) { -		if (_IOC_SIZE(cmd) > sizeof(buffer) || -		    copy_to_user(arg, &buffer, _IOC_SIZE(cmd))) +	if (_IOC_DIR(cmd) & _IOC_READ) +		if (copy_to_user(arg, &buffer, _IOC_SIZE(cmd)))  			return -EFAULT; -	}  	return ret;  } diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index b743411d814..a0c365f2e52 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -516,8 +516,6 @@ void drm_put_dev(struct drm_device *dev)  	}  	driver = dev->driver; -	drm_vblank_cleanup(dev); -  	drm_lastclose(dev);  	if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) && @@ -537,6 +535,8 @@ void drm_put_dev(struct drm_device *dev)  		dev->agp = NULL;  	} +	drm_vblank_cleanup(dev); +  	list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)  		drm_rmmap(dev, r_list->map);  	drm_ht_remove(&dev->map_hash); diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index b574503dddd..a0b8447b06e 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -226,7 +226,7 @@ static int i915_gem_fence_regs_info(struct seq_file *m, void *data)  		} else {  			struct drm_i915_gem_object *obj_priv; -			obj_priv = obj->driver_private; +			obj_priv = to_intel_bo(obj);  			seq_printf(m, "Fenced object[%2d] = %p: %s "  				   "%08x %08zx %08x %s %08x %08x %d",  				   i, obj, get_pin_flag(obj_priv), diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 4b26919abdb..0af3dcc85ce 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -80,14 +80,14 @@ const static struct intel_device_info intel_i915g_info = {  	.is_i915g = 1, .is_i9xx = 1, .cursor_needs_physical = 1,  };  const static struct intel_device_info intel_i915gm_info = { -	.is_i9xx = 1,  .is_mobile = 1, .has_fbc = 1, +	.is_i9xx = 1,  .is_mobile = 1,  	.cursor_needs_physical = 1,  };  const static struct intel_device_info intel_i945g_info = {  	.is_i9xx = 1, .has_hotplug = 1, .cursor_needs_physical = 1,  };  const static struct intel_device_info intel_i945gm_info = { -	.is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1, .has_fbc = 1, +	.is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1,  	.has_hotplug = 1, .cursor_needs_physical = 1,  }; @@ -361,7 +361,7 @@ int i965_reset(struct drm_device *dev, u8 flags)  	    !dev_priv->mm.suspended) {  		drm_i915_ring_buffer_t *ring = &dev_priv->ring;  		struct drm_gem_object *obj = ring->ring_obj; -		struct drm_i915_gem_object *obj_priv = obj->driver_private; +		struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  		dev_priv->mm.suspended = 0;  		/* Stop the ring if it's running. */ diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index aba8260fbc5..6960849522f 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -611,6 +611,8 @@ typedef struct drm_i915_private {  	/* Reclocking support */  	bool render_reclock_avail;  	bool lvds_downclock_avail; +	/* indicate whether the LVDS EDID is OK */ +	bool lvds_edid_good;  	/* indicates the reduced downclock for LVDS*/  	int lvds_downclock;  	struct work_struct idle_work; @@ -731,6 +733,8 @@ struct drm_i915_gem_object {  	atomic_t pending_flip;  }; +#define to_intel_bo(x) ((struct drm_i915_gem_object *) (x)->driver_private) +  /**   * Request queue structure.   * diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 368d726853d..80871c62a57 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -163,7 +163,7 @@ fast_shmem_read(struct page **pages,  static int i915_gem_object_needs_bit17_swizzle(struct drm_gem_object *obj)  {  	drm_i915_private_t *dev_priv = obj->dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	return dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 &&  		obj_priv->tiling_mode != I915_TILING_NONE; @@ -264,7 +264,7 @@ i915_gem_shmem_pread_fast(struct drm_device *dev, struct drm_gem_object *obj,  			  struct drm_i915_gem_pread *args,  			  struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	ssize_t remain;  	loff_t offset, page_base;  	char __user *user_data; @@ -285,7 +285,7 @@ i915_gem_shmem_pread_fast(struct drm_device *dev, struct drm_gem_object *obj,  	if (ret != 0)  		goto fail_put_pages; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	offset = args->offset;  	while (remain > 0) { @@ -354,7 +354,7 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj,  			  struct drm_i915_gem_pread *args,  			  struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct mm_struct *mm = current->mm;  	struct page **user_pages;  	ssize_t remain; @@ -403,7 +403,7 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj,  	if (ret != 0)  		goto fail_put_pages; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	offset = args->offset;  	while (remain > 0) { @@ -479,7 +479,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,  	obj = drm_gem_object_lookup(dev, file_priv, args->handle);  	if (obj == NULL)  		return -EBADF; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	/* Bounds check source.  	 * @@ -581,7 +581,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev, struct drm_gem_object *obj,  			 struct drm_i915_gem_pwrite *args,  			 struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	drm_i915_private_t *dev_priv = dev->dev_private;  	ssize_t remain;  	loff_t offset, page_base; @@ -605,7 +605,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev, struct drm_gem_object *obj,  	if (ret)  		goto fail; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	offset = obj_priv->gtt_offset + args->offset;  	while (remain > 0) { @@ -655,7 +655,7 @@ i915_gem_gtt_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,  			 struct drm_i915_gem_pwrite *args,  			 struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	drm_i915_private_t *dev_priv = dev->dev_private;  	ssize_t remain;  	loff_t gtt_page_base, offset; @@ -699,7 +699,7 @@ i915_gem_gtt_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,  	if (ret)  		goto out_unpin_object; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	offset = obj_priv->gtt_offset + args->offset;  	while (remain > 0) { @@ -761,7 +761,7 @@ i915_gem_shmem_pwrite_fast(struct drm_device *dev, struct drm_gem_object *obj,  			   struct drm_i915_gem_pwrite *args,  			   struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	ssize_t remain;  	loff_t offset, page_base;  	char __user *user_data; @@ -781,7 +781,7 @@ i915_gem_shmem_pwrite_fast(struct drm_device *dev, struct drm_gem_object *obj,  	if (ret != 0)  		goto fail_put_pages; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	offset = args->offset;  	obj_priv->dirty = 1; @@ -829,7 +829,7 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,  			   struct drm_i915_gem_pwrite *args,  			   struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct mm_struct *mm = current->mm;  	struct page **user_pages;  	ssize_t remain; @@ -877,7 +877,7 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,  	if (ret != 0)  		goto fail_put_pages; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	offset = args->offset;  	obj_priv->dirty = 1; @@ -952,7 +952,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,  	obj = drm_gem_object_lookup(dev, file_priv, args->handle);  	if (obj == NULL)  		return -EBADF; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	/* Bounds check destination.  	 * @@ -1034,7 +1034,7 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,  	obj = drm_gem_object_lookup(dev, file_priv, args->handle);  	if (obj == NULL)  		return -EBADF; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	mutex_lock(&dev->struct_mutex); @@ -1096,7 +1096,7 @@ i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,  	DRM_INFO("%s: sw_finish %d (%p %zd)\n",  		 __func__, args->handle, obj, obj->size);  #endif -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	/* Pinned buffers may be scanout, so flush the cache */  	if (obj_priv->pin_count) @@ -1167,7 +1167,7 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)  	struct drm_gem_object *obj = vma->vm_private_data;  	struct drm_device *dev = obj->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	pgoff_t page_offset;  	unsigned long pfn;  	int ret = 0; @@ -1234,7 +1234,7 @@ i915_gem_create_mmap_offset(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	struct drm_gem_mm *mm = dev->mm_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct drm_map_list *list;  	struct drm_local_map *map;  	int ret = 0; @@ -1305,7 +1305,7 @@ void  i915_gem_release_mmap(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	if (dev->dev_mapping)  		unmap_mapping_range(dev->dev_mapping, @@ -1316,7 +1316,7 @@ static void  i915_gem_free_mmap_offset(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct drm_gem_mm *mm = dev->mm_private;  	struct drm_map_list *list; @@ -1347,7 +1347,7 @@ static uint32_t  i915_gem_get_gtt_alignment(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int start, i;  	/* @@ -1406,7 +1406,7 @@ i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,  	mutex_lock(&dev->struct_mutex); -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (obj_priv->madv != I915_MADV_WILLNEED) {  		DRM_ERROR("Attempting to mmap a purgeable buffer\n"); @@ -1450,7 +1450,7 @@ i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,  void  i915_gem_object_put_pages(struct drm_gem_object *obj)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int page_count = obj->size / PAGE_SIZE;  	int i; @@ -1486,7 +1486,7 @@ i915_gem_object_move_to_active(struct drm_gem_object *obj, uint32_t seqno)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	/* Add a reference if we're newly entering the active list. */  	if (!obj_priv->active) { @@ -1506,7 +1506,7 @@ i915_gem_object_move_to_flushing(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	BUG_ON(!obj_priv->active);  	list_move_tail(&obj_priv->list, &dev_priv->mm.flushing_list); @@ -1517,7 +1517,7 @@ i915_gem_object_move_to_flushing(struct drm_gem_object *obj)  static void  i915_gem_object_truncate(struct drm_gem_object *obj)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct inode *inode;  	inode = obj->filp->f_path.dentry->d_inode; @@ -1538,7 +1538,7 @@ i915_gem_object_move_to_inactive(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	i915_verify_inactive(dev, __FILE__, __LINE__);  	if (obj_priv->pin_count != 0) @@ -1965,7 +1965,7 @@ static int  i915_gem_object_wait_rendering(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int ret;  	/* This function only exists to support waiting for existing rendering, @@ -1997,7 +1997,7 @@ i915_gem_object_unbind(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int ret = 0;  #if WATCH_BUF @@ -2173,7 +2173,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size)  #if WATCH_LRU  			DRM_INFO("%s: evicting %p\n", __func__, obj);  #endif -			obj_priv = obj->driver_private; +			obj_priv = to_intel_bo(obj);  			BUG_ON(obj_priv->pin_count != 0);  			BUG_ON(obj_priv->active); @@ -2244,7 +2244,7 @@ int  i915_gem_object_get_pages(struct drm_gem_object *obj,  			  gfp_t gfpmask)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int page_count, i;  	struct address_space *mapping;  	struct inode *inode; @@ -2297,7 +2297,7 @@ static void sandybridge_write_fence_reg(struct drm_i915_fence_reg *reg)  	struct drm_gem_object *obj = reg->obj;  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int regnum = obj_priv->fence_reg;  	uint64_t val; @@ -2319,7 +2319,7 @@ static void i965_write_fence_reg(struct drm_i915_fence_reg *reg)  	struct drm_gem_object *obj = reg->obj;  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int regnum = obj_priv->fence_reg;  	uint64_t val; @@ -2339,7 +2339,7 @@ static void i915_write_fence_reg(struct drm_i915_fence_reg *reg)  	struct drm_gem_object *obj = reg->obj;  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int regnum = obj_priv->fence_reg;  	int tile_width;  	uint32_t fence_reg, val; @@ -2381,7 +2381,7 @@ static void i830_write_fence_reg(struct drm_i915_fence_reg *reg)  	struct drm_gem_object *obj = reg->obj;  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int regnum = obj_priv->fence_reg;  	uint32_t val;  	uint32_t pitch_val; @@ -2425,7 +2425,7 @@ static int i915_find_fence_reg(struct drm_device *dev)  		if (!reg->obj)  			return i; -		obj_priv = reg->obj->driver_private; +		obj_priv = to_intel_bo(reg->obj);  		if (!obj_priv->pin_count)  		    avail++;  	} @@ -2480,7 +2480,7 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct drm_i915_fence_reg *reg = NULL;  	int ret; @@ -2547,7 +2547,7 @@ i915_gem_clear_fence_reg(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	if (IS_GEN6(dev)) {  		I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + @@ -2583,7 +2583,7 @@ int  i915_gem_object_put_fence_reg(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	if (obj_priv->fence_reg == I915_FENCE_REG_NONE)  		return 0; @@ -2621,7 +2621,7 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	struct drm_mm_node *free_space;  	gfp_t gfpmask =  __GFP_NORETRY | __GFP_NOWARN;  	int ret; @@ -2728,7 +2728,7 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)  void  i915_gem_clflush_object(struct drm_gem_object *obj)  { -	struct drm_i915_gem_object	*obj_priv = obj->driver_private; +	struct drm_i915_gem_object	*obj_priv = to_intel_bo(obj);  	/* If we don't have a page list set up, then we're not pinned  	 * to GPU, and we can ignore the cache flush because it'll happen @@ -2829,7 +2829,7 @@ i915_gem_object_flush_write_domain(struct drm_gem_object *obj)  int  i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, int write)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	uint32_t old_write_domain, old_read_domains;  	int ret; @@ -2879,7 +2879,7 @@ int  i915_gem_object_set_to_display_plane(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	uint32_t old_write_domain, old_read_domains;  	int ret; @@ -3092,7 +3092,7 @@ static void  i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj)  {  	struct drm_device		*dev = obj->dev; -	struct drm_i915_gem_object	*obj_priv = obj->driver_private; +	struct drm_i915_gem_object	*obj_priv = to_intel_bo(obj);  	uint32_t			invalidate_domains = 0;  	uint32_t			flush_domains = 0;  	uint32_t			old_read_domains; @@ -3177,7 +3177,7 @@ i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj)  static void  i915_gem_object_set_to_full_cpu_read_domain(struct drm_gem_object *obj)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	if (!obj_priv->page_cpu_valid)  		return; @@ -3217,7 +3217,7 @@ static int  i915_gem_object_set_cpu_read_domain_range(struct drm_gem_object *obj,  					  uint64_t offset, uint64_t size)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	uint32_t old_read_domains;  	int i, ret; @@ -3286,7 +3286,7 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int i, ret;  	void __iomem *reloc_page;  	bool need_fence; @@ -3337,7 +3337,7 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,  			i915_gem_object_unpin(obj);  			return -EBADF;  		} -		target_obj_priv = target_obj->driver_private; +		target_obj_priv = to_intel_bo(target_obj);  #if WATCH_RELOC  		DRM_INFO("%s: obj %p offset %08x target %d " @@ -3689,7 +3689,7 @@ i915_gem_wait_for_pending_flip(struct drm_device *dev,  		prepare_to_wait(&dev_priv->pending_flip_queue,  				&wait, TASK_INTERRUPTIBLE);  		for (i = 0; i < count; i++) { -			obj_priv = object_list[i]->driver_private; +			obj_priv = to_intel_bo(object_list[i]);  			if (atomic_read(&obj_priv->pending_flip) > 0)  				break;  		} @@ -3798,7 +3798,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  			goto err;  		} -		obj_priv = object_list[i]->driver_private; +		obj_priv = to_intel_bo(object_list[i]);  		if (obj_priv->in_execbuffer) {  			DRM_ERROR("Object %p appears more than once in object list\n",  				   object_list[i]); @@ -3924,7 +3924,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,  	for (i = 0; i < args->buffer_count; i++) {  		struct drm_gem_object *obj = object_list[i]; -		struct drm_i915_gem_object *obj_priv = obj->driver_private; +		struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  		uint32_t old_write_domain = obj->write_domain;  		obj->write_domain = obj->pending_write_domain; @@ -3999,7 +3999,7 @@ err:  	for (i = 0; i < args->buffer_count; i++) {  		if (object_list[i]) { -			obj_priv = object_list[i]->driver_private; +			obj_priv = to_intel_bo(object_list[i]);  			obj_priv->in_execbuffer = false;  		}  		drm_gem_object_unreference(object_list[i]); @@ -4177,7 +4177,7 @@ int  i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int ret;  	i915_verify_inactive(dev, __FILE__, __LINE__); @@ -4210,7 +4210,7 @@ i915_gem_object_unpin(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	i915_verify_inactive(dev, __FILE__, __LINE__);  	obj_priv->pin_count--; @@ -4250,7 +4250,7 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data,  		mutex_unlock(&dev->struct_mutex);  		return -EBADF;  	} -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (obj_priv->madv != I915_MADV_WILLNEED) {  		DRM_ERROR("Attempting to pin a purgeable buffer\n"); @@ -4307,7 +4307,7 @@ i915_gem_unpin_ioctl(struct drm_device *dev, void *data,  		return -EBADF;  	} -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (obj_priv->pin_filp != file_priv) {  		DRM_ERROR("Not pinned by caller in i915_gem_pin_ioctl(): %d\n",  			  args->handle); @@ -4349,7 +4349,7 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,  	 */  	i915_gem_retire_requests(dev); -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	/* Don't count being on the flushing list against the object being  	 * done.  Otherwise, a buffer left on the flushing list but not getting  	 * flushed (because nobody's flushing that domain) won't ever return @@ -4395,7 +4395,7 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,  	}  	mutex_lock(&dev->struct_mutex); -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (obj_priv->pin_count) {  		drm_gem_object_unreference(obj); @@ -4456,7 +4456,7 @@ int i915_gem_init_object(struct drm_gem_object *obj)  void i915_gem_free_object(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	trace_i915_gem_object_destroy(obj); @@ -4565,7 +4565,7 @@ i915_gem_init_hws(struct drm_device *dev)  		DRM_ERROR("Failed to allocate status page\n");  		return -ENOMEM;  	} -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	obj_priv->agp_type = AGP_USER_CACHED_MEMORY;  	ret = i915_gem_object_pin(obj, 4096); @@ -4609,7 +4609,7 @@ i915_gem_cleanup_hws(struct drm_device *dev)  		return;  	obj = dev_priv->hws_obj; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	kunmap(obj_priv->pages[0]);  	i915_gem_object_unpin(obj); @@ -4643,7 +4643,7 @@ i915_gem_init_ringbuffer(struct drm_device *dev)  		i915_gem_cleanup_hws(dev);  		return -ENOMEM;  	} -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	ret = i915_gem_object_pin(obj, 4096);  	if (ret != 0) { @@ -4936,7 +4936,7 @@ void i915_gem_detach_phys_object(struct drm_device *dev,  	int ret;  	int page_count; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (!obj_priv->phys_obj)  		return; @@ -4975,7 +4975,7 @@ i915_gem_attach_phys_object(struct drm_device *dev,  	if (id > I915_MAX_PHYS_OBJECT)  		return -EINVAL; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (obj_priv->phys_obj) {  		if (obj_priv->phys_obj->id == id) @@ -5026,7 +5026,7 @@ i915_gem_phys_pwrite(struct drm_device *dev, struct drm_gem_object *obj,  		     struct drm_i915_gem_pwrite *args,  		     struct drm_file *file_priv)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	void *obj_addr;  	int ret;  	char __user *user_data; diff --git a/drivers/gpu/drm/i915/i915_gem_debug.c b/drivers/gpu/drm/i915/i915_gem_debug.c index e602614bd3f..35507cf53fa 100644 --- a/drivers/gpu/drm/i915/i915_gem_debug.c +++ b/drivers/gpu/drm/i915/i915_gem_debug.c @@ -72,7 +72,7 @@ void  i915_gem_dump_object(struct drm_gem_object *obj, int len,  		     const char *where, uint32_t mark)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int page;  	DRM_INFO("%s: object at offset %08x\n", where, obj_priv->gtt_offset); @@ -137,7 +137,7 @@ void  i915_gem_object_check_coherency(struct drm_gem_object *obj, int handle)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int page;  	uint32_t *gtt_mapping;  	uint32_t *backing_map = NULL; diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index c01c878e51b..449157f7161 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c @@ -240,7 +240,7 @@ bool  i915_gem_object_fence_offset_ok(struct drm_gem_object *obj, int tiling_mode)  {  	struct drm_device *dev = obj->dev; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	if (obj_priv->gtt_space == NULL)  		return true; @@ -280,7 +280,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,  	obj = drm_gem_object_lookup(dev, file_priv, args->handle);  	if (obj == NULL)  		return -EINVAL; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	if (!i915_tiling_ok(dev, args->stride, obj->size, args->tiling_mode)) {  		drm_gem_object_unreference_unlocked(obj); @@ -364,7 +364,7 @@ i915_gem_get_tiling(struct drm_device *dev, void *data,  	obj = drm_gem_object_lookup(dev, file_priv, args->handle);  	if (obj == NULL)  		return -EINVAL; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	mutex_lock(&dev->struct_mutex); @@ -427,7 +427,7 @@ i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int page_count = obj->size >> PAGE_SHIFT;  	int i; @@ -456,7 +456,7 @@ i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj)  {  	struct drm_device *dev = obj->dev;  	drm_i915_private_t *dev_priv = dev->dev_private; -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	int page_count = obj->size >> PAGE_SHIFT;  	int i; diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 49c458bc650..6421481d622 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -260,10 +260,10 @@ static void i915_hotplug_work_func(struct work_struct *work)  	if (mode_config->num_connector) {  		list_for_each_entry(connector, &mode_config->connector_list, head) { -			struct intel_output *intel_output = to_intel_output(connector); +			struct intel_encoder *intel_encoder = to_intel_encoder(connector); -			if (intel_output->hot_plug) -				(*intel_output->hot_plug) (intel_output); +			if (intel_encoder->hot_plug) +				(*intel_encoder->hot_plug) (intel_encoder);  		}  	}  	/* Just fire off a uevent and let userspace tell us what to do */ @@ -444,7 +444,7 @@ i915_error_object_create(struct drm_device *dev,  	if (src == NULL)  		return NULL; -	src_priv = src->driver_private; +	src_priv = to_intel_bo(src);  	if (src_priv->pages == NULL)  		return NULL; diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index 38110ce742a..759c2ef72ef 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c @@ -247,19 +247,19 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)  static bool intel_crt_detect_ddc(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	/* CRT should always be at 0, but check anyway */ -	if (intel_output->type != INTEL_OUTPUT_ANALOG) +	if (intel_encoder->type != INTEL_OUTPUT_ANALOG)  		return false; -	return intel_ddc_probe(intel_output); +	return intel_ddc_probe(intel_encoder);  }  static enum drm_connector_status -intel_crt_load_detect(struct drm_crtc *crtc, struct intel_output *intel_output) +intel_crt_load_detect(struct drm_crtc *crtc, struct intel_encoder *intel_encoder)  { -	struct drm_encoder *encoder = &intel_output->enc; +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_device *dev = encoder->dev;  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc); @@ -387,8 +387,8 @@ intel_crt_load_detect(struct drm_crtc *crtc, struct intel_output *intel_output)  static enum drm_connector_status intel_crt_detect(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev; -	struct intel_output *intel_output = to_intel_output(connector); -	struct drm_encoder *encoder = &intel_output->enc; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_crtc *crtc;  	int dpms_mode;  	enum drm_connector_status status; @@ -405,13 +405,13 @@ static enum drm_connector_status intel_crt_detect(struct drm_connector *connecto  	/* for pre-945g platforms use load detect */  	if (encoder->crtc && encoder->crtc->enabled) { -		status = intel_crt_load_detect(encoder->crtc, intel_output); +		status = intel_crt_load_detect(encoder->crtc, intel_encoder);  	} else { -		crtc = intel_get_load_detect_pipe(intel_output, +		crtc = intel_get_load_detect_pipe(intel_encoder,  						  NULL, &dpms_mode);  		if (crtc) { -			status = intel_crt_load_detect(crtc, intel_output); -			intel_release_load_detect_pipe(intel_output, dpms_mode); +			status = intel_crt_load_detect(crtc, intel_encoder); +			intel_release_load_detect_pipe(intel_encoder, dpms_mode);  		} else  			status = connector_status_unknown;  	} @@ -421,9 +421,9 @@ static enum drm_connector_status intel_crt_detect(struct drm_connector *connecto  static void intel_crt_destroy(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); -	intel_i2c_destroy(intel_output->ddc_bus); +	intel_i2c_destroy(intel_encoder->ddc_bus);  	drm_sysfs_connector_remove(connector);  	drm_connector_cleanup(connector);  	kfree(connector); @@ -432,28 +432,28 @@ static void intel_crt_destroy(struct drm_connector *connector)  static int intel_crt_get_modes(struct drm_connector *connector)  {  	int ret; -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	struct i2c_adapter *ddcbus;  	struct drm_device *dev = connector->dev; -	ret = intel_ddc_get_modes(intel_output); +	ret = intel_ddc_get_modes(intel_encoder);  	if (ret || !IS_G4X(dev))  		goto end; -	ddcbus = intel_output->ddc_bus; +	ddcbus = intel_encoder->ddc_bus;  	/* Try to probe digital port for output in DVI-I -> VGA mode. */ -	intel_output->ddc_bus = +	intel_encoder->ddc_bus =  		intel_i2c_create(connector->dev, GPIOD, "CRTDDC_D"); -	if (!intel_output->ddc_bus) { -		intel_output->ddc_bus = ddcbus; +	if (!intel_encoder->ddc_bus) { +		intel_encoder->ddc_bus = ddcbus;  		dev_printk(KERN_ERR, &connector->dev->pdev->dev,  			   "DDC bus registration failed for CRTDDC_D.\n");  		goto end;  	}  	/* Try to get modes by GPIOD port */ -	ret = intel_ddc_get_modes(intel_output); +	ret = intel_ddc_get_modes(intel_encoder);  	intel_i2c_destroy(ddcbus);  end: @@ -506,23 +506,23 @@ static const struct drm_encoder_funcs intel_crt_enc_funcs = {  void intel_crt_init(struct drm_device *dev)  {  	struct drm_connector *connector; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct drm_i915_private *dev_priv = dev->dev_private;  	u32 i2c_reg; -	intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); -	if (!intel_output) +	intel_encoder = kzalloc(sizeof(struct intel_encoder), GFP_KERNEL); +	if (!intel_encoder)  		return; -	connector = &intel_output->base; -	drm_connector_init(dev, &intel_output->base, +	connector = &intel_encoder->base; +	drm_connector_init(dev, &intel_encoder->base,  			   &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); -	drm_encoder_init(dev, &intel_output->enc, &intel_crt_enc_funcs, +	drm_encoder_init(dev, &intel_encoder->enc, &intel_crt_enc_funcs,  			 DRM_MODE_ENCODER_DAC); -	drm_mode_connector_attach_encoder(&intel_output->base, -					  &intel_output->enc); +	drm_mode_connector_attach_encoder(&intel_encoder->base, +					  &intel_encoder->enc);  	/* Set up the DDC bus. */  	if (HAS_PCH_SPLIT(dev)) @@ -533,22 +533,22 @@ void intel_crt_init(struct drm_device *dev)  		if (dev_priv->crt_ddc_bus != 0)  			i2c_reg = dev_priv->crt_ddc_bus;  	} -	intel_output->ddc_bus = intel_i2c_create(dev, i2c_reg, "CRTDDC_A"); -	if (!intel_output->ddc_bus) { +	intel_encoder->ddc_bus = intel_i2c_create(dev, i2c_reg, "CRTDDC_A"); +	if (!intel_encoder->ddc_bus) {  		dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "  			   "failed.\n");  		return;  	} -	intel_output->type = INTEL_OUTPUT_ANALOG; -	intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | +	intel_encoder->type = INTEL_OUTPUT_ANALOG; +	intel_encoder->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |  				   (1 << INTEL_ANALOG_CLONE_BIT) |  				   (1 << INTEL_SDVO_LVDS_CLONE_BIT); -	intel_output->crtc_mask = (1 << 0) | (1 << 1); +	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);  	connector->interlace_allowed = 0;  	connector->doublescan_allowed = 0; -	drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs); +	drm_encoder_helper_add(&intel_encoder->enc, &intel_crt_helper_funcs);  	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);  	drm_sysfs_connector_add(connector); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index e7e753b2845..e7356fb6c91 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -747,16 +747,16 @@ bool intel_pipe_has_type (struct drm_crtc *crtc, int type)      list_for_each_entry(l_entry, &mode_config->connector_list, head) {  	    if (l_entry->encoder &&  	        l_entry->encoder->crtc == crtc) { -		    struct intel_output *intel_output = to_intel_output(l_entry); -		    if (intel_output->type == type) +		    struct intel_encoder *intel_encoder = to_intel_encoder(l_entry); +		    if (intel_encoder->type == type)  			    return true;  	    }      }      return false;  } -struct drm_connector * -intel_pipe_get_output (struct drm_crtc *crtc) +static struct drm_connector * +intel_pipe_get_connector (struct drm_crtc *crtc)  {      struct drm_device *dev = crtc->dev;      struct drm_mode_config *mode_config = &dev->mode_config; @@ -1003,7 +1003,7 @@ static void i8xx_enable_fbc(struct drm_crtc *crtc, unsigned long interval)  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_framebuffer *fb = crtc->fb;  	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); -	struct drm_i915_gem_object *obj_priv = intel_fb->obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(intel_fb->obj);  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);  	int plane, i;  	u32 fbc_ctl, fbc_ctl2; @@ -1080,7 +1080,7 @@ static void g4x_enable_fbc(struct drm_crtc *crtc, unsigned long interval)  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_framebuffer *fb = crtc->fb;  	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); -	struct drm_i915_gem_object *obj_priv = intel_fb->obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(intel_fb->obj);  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);  	int plane = (intel_crtc->plane == 0 ? DPFC_CTL_PLANEA :  		     DPFC_CTL_PLANEB); @@ -1176,7 +1176,7 @@ static void intel_update_fbc(struct drm_crtc *crtc,  		return;  	intel_fb = to_intel_framebuffer(fb); -	obj_priv = intel_fb->obj->driver_private; +	obj_priv = to_intel_bo(intel_fb->obj);  	/*  	 * If FBC is already on, we just have to verify that we can @@ -1243,7 +1243,7 @@ out_disable:  static int  intel_pin_and_fence_fb_obj(struct drm_device *dev, struct drm_gem_object *obj)  { -	struct drm_i915_gem_object *obj_priv = obj->driver_private; +	struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);  	u32 alignment;  	int ret; @@ -1323,7 +1323,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,  	intel_fb = to_intel_framebuffer(crtc->fb);  	obj = intel_fb->obj; -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	mutex_lock(&dev->struct_mutex);  	ret = intel_pin_and_fence_fb_obj(dev, obj); @@ -1401,7 +1401,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,  	if (old_fb) {  		intel_fb = to_intel_framebuffer(old_fb); -		obj_priv = intel_fb->obj->driver_private; +		obj_priv = to_intel_bo(intel_fb->obj);  		i915_gem_object_unpin(intel_fb->obj);  	}  	intel_increase_pllclock(crtc, true); @@ -2917,7 +2917,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,  	int dspsize_reg = (plane == 0) ? DSPASIZE : DSPBSIZE;  	int dsppos_reg = (plane == 0) ? DSPAPOS : DSPBPOS;  	int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC; -	int refclk, num_outputs = 0; +	int refclk, num_connectors = 0;  	intel_clock_t clock, reduced_clock;  	u32 dpll = 0, fp = 0, fp2 = 0, dspcntr, pipeconf;  	bool ok, has_reduced_clock = false, is_sdvo = false, is_dvo = false; @@ -2943,19 +2943,19 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,  	drm_vblank_pre_modeset(dev, pipe);  	list_for_each_entry(connector, &mode_config->connector_list, head) { -		struct intel_output *intel_output = to_intel_output(connector); +		struct intel_encoder *intel_encoder = to_intel_encoder(connector);  		if (!connector->encoder || connector->encoder->crtc != crtc)  			continue; -		switch (intel_output->type) { +		switch (intel_encoder->type) {  		case INTEL_OUTPUT_LVDS:  			is_lvds = true;  			break;  		case INTEL_OUTPUT_SDVO:  		case INTEL_OUTPUT_HDMI:  			is_sdvo = true; -			if (intel_output->needs_tv_clock) +			if (intel_encoder->needs_tv_clock)  				is_tv = true;  			break;  		case INTEL_OUTPUT_DVO: @@ -2975,10 +2975,10 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,  			break;  		} -		num_outputs++; +		num_connectors++;  	} -	if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) { +	if (is_lvds && dev_priv->lvds_use_ssc && num_connectors < 2) {  		refclk = dev_priv->lvds_ssc_freq * 1000;  		DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",  					refclk / 1000); @@ -3049,8 +3049,8 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,  		if (is_edp) {  			struct drm_connector *edp;  			target_clock = mode->clock; -			edp = intel_pipe_get_output(crtc); -			intel_edp_link_config(to_intel_output(edp), +			edp = intel_pipe_get_connector(crtc); +			intel_edp_link_config(to_intel_encoder(edp),  					&lane, &link_bw);  		} else {  			/* DP over FDI requires target mode clock @@ -3231,7 +3231,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,  		/* XXX: just matching BIOS for now */  		/*	dpll |= PLL_REF_INPUT_TVCLKINBC; */  		dpll |= 3; -	else if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) +	else if (is_lvds && dev_priv->lvds_use_ssc && num_connectors < 2)  		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;  	else  		dpll |= PLL_REF_INPUT_DREFCLK; @@ -3511,7 +3511,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,  	if (!bo)  		return -ENOENT; -	obj_priv = bo->driver_private; +	obj_priv = to_intel_bo(bo);  	if (bo->size < width * height * 4) {  		DRM_ERROR("buffer is to small\n"); @@ -3655,9 +3655,9 @@ static void intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,   * detection.   *   * It will be up to the load-detect code to adjust the pipe as appropriate for - * its requirements.  The pipe will be connected to no other outputs. + * its requirements.  The pipe will be connected to no other encoders.   * - * Currently this code will only succeed if there is a pipe with no outputs + * Currently this code will only succeed if there is a pipe with no encoders   * configured for it.  In the future, it could choose to temporarily disable   * some outputs to free up a pipe for its use.   * @@ -3670,14 +3670,14 @@ static struct drm_display_mode load_detect_mode = {  		 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),  }; -struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output, +struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,  					    struct drm_display_mode *mode,  					    int *dpms_mode)  {  	struct intel_crtc *intel_crtc;  	struct drm_crtc *possible_crtc;  	struct drm_crtc *supported_crtc =NULL; -	struct drm_encoder *encoder = &intel_output->enc; +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_crtc *crtc = NULL;  	struct drm_device *dev = encoder->dev;  	struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; @@ -3729,8 +3729,8 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output,  	}  	encoder->crtc = crtc; -	intel_output->base.encoder = encoder; -	intel_output->load_detect_temp = true; +	intel_encoder->base.encoder = encoder; +	intel_encoder->load_detect_temp = true;  	intel_crtc = to_intel_crtc(crtc);  	*dpms_mode = intel_crtc->dpms_mode; @@ -3755,23 +3755,23 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output,  	return crtc;  } -void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_mode) +void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, int dpms_mode)  { -	struct drm_encoder *encoder = &intel_output->enc; +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_device *dev = encoder->dev;  	struct drm_crtc *crtc = encoder->crtc;  	struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;  	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; -	if (intel_output->load_detect_temp) { +	if (intel_encoder->load_detect_temp) {  		encoder->crtc = NULL; -		intel_output->base.encoder = NULL; -		intel_output->load_detect_temp = false; +		intel_encoder->base.encoder = NULL; +		intel_encoder->load_detect_temp = false;  		crtc->enabled = drm_helper_crtc_in_use(crtc);  		drm_helper_disable_unused_functions(dev);  	} -	/* Switch crtc and output back off if necessary */ +	/* Switch crtc and encoder back off if necessary */  	if (crtc->enabled && dpms_mode != DRM_MODE_DPMS_ON) {  		if (encoder->crtc == crtc)  			encoder_funcs->dpms(encoder, dpms_mode); @@ -4156,7 +4156,7 @@ void intel_finish_page_flip(struct drm_device *dev, int pipe)  	work = intel_crtc->unpin_work;  	if (work == NULL || !work->pending) {  		if (work && !work->pending) { -			obj_priv = work->pending_flip_obj->driver_private; +			obj_priv = to_intel_bo(work->pending_flip_obj);  			DRM_DEBUG_DRIVER("flip finish: %p (%d) not pending?\n",  					 obj_priv,  					 atomic_read(&obj_priv->pending_flip)); @@ -4181,7 +4181,7 @@ void intel_finish_page_flip(struct drm_device *dev, int pipe)  	spin_unlock_irqrestore(&dev->event_lock, flags); -	obj_priv = work->pending_flip_obj->driver_private; +	obj_priv = to_intel_bo(work->pending_flip_obj);  	/* Initial scanout buffer will have a 0 pending flip count */  	if ((atomic_read(&obj_priv->pending_flip) == 0) || @@ -4252,7 +4252,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,  	ret = intel_pin_and_fence_fb_obj(dev, obj);  	if (ret != 0) {  		DRM_DEBUG_DRIVER("flip queue: %p pin & fence failed\n", -			  obj->driver_private); +			  to_intel_bo(obj));  		kfree(work);  		intel_crtc->unpin_work = NULL;  		mutex_unlock(&dev->struct_mutex); @@ -4266,7 +4266,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,  	crtc->fb = fb;  	i915_gem_object_flush_write_domain(obj);  	drm_vblank_get(dev, intel_crtc->pipe); -	obj_priv = obj->driver_private; +	obj_priv = to_intel_bo(obj);  	atomic_inc(&obj_priv->pending_flip);  	work->pending_flip_obj = obj; @@ -4399,8 +4399,8 @@ static int intel_connector_clones(struct drm_device *dev, int type_mask)  	int entry = 0;          list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -		struct intel_output *intel_output = to_intel_output(connector); -		if (type_mask & intel_output->clone_mask) +		struct intel_encoder *intel_encoder = to_intel_encoder(connector); +		if (type_mask & intel_encoder->clone_mask)  			index_mask |= (1 << entry);  		entry++;  	} @@ -4495,12 +4495,12 @@ static void intel_setup_outputs(struct drm_device *dev)  		intel_tv_init(dev);  	list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -		struct intel_output *intel_output = to_intel_output(connector); -		struct drm_encoder *encoder = &intel_output->enc; +		struct intel_encoder *intel_encoder = to_intel_encoder(connector); +		struct drm_encoder *encoder = &intel_encoder->enc; -		encoder->possible_crtcs = intel_output->crtc_mask; +		encoder->possible_crtcs = intel_encoder->crtc_mask;  		encoder->possible_clones = intel_connector_clones(dev, -						intel_output->clone_mask); +						intel_encoder->clone_mask);  	}  } @@ -4779,14 +4779,14 @@ void intel_init_clock_gating(struct drm_device *dev)  		struct drm_i915_gem_object *obj_priv = NULL;  		if (dev_priv->pwrctx) { -			obj_priv = dev_priv->pwrctx->driver_private; +			obj_priv = to_intel_bo(dev_priv->pwrctx);  		} else {  			struct drm_gem_object *pwrctx;  			pwrctx = intel_alloc_power_context(dev);  			if (pwrctx) {  				dev_priv->pwrctx = pwrctx; -				obj_priv = pwrctx->driver_private; +				obj_priv = to_intel_bo(pwrctx);  			}  		} @@ -4815,7 +4815,7 @@ static void intel_init_display(struct drm_device *dev)  			dev_priv->display.fbc_enabled = g4x_fbc_enabled;  			dev_priv->display.enable_fbc = g4x_enable_fbc;  			dev_priv->display.disable_fbc = g4x_disable_fbc; -		} else if (IS_I965GM(dev) || IS_I945GM(dev) || IS_I915GM(dev)) { +		} else if (IS_I965GM(dev)) {  			dev_priv->display.fbc_enabled = i8xx_fbc_enabled;  			dev_priv->display.enable_fbc = i8xx_enable_fbc;  			dev_priv->display.disable_fbc = i8xx_disable_fbc; @@ -4957,7 +4957,7 @@ void intel_modeset_cleanup(struct drm_device *dev)  	if (dev_priv->pwrctx) {  		struct drm_i915_gem_object *obj_priv; -		obj_priv = dev_priv->pwrctx->driver_private; +		obj_priv = to_intel_bo(dev_priv->pwrctx);  		I915_WRITE(PWRCTXA, obj_priv->gtt_offset &~ PWRCTX_EN);  		I915_READ(PWRCTXA);  		i915_gem_object_unpin(dev_priv->pwrctx); @@ -4978,9 +4978,9 @@ void intel_modeset_cleanup(struct drm_device *dev)  */  struct drm_encoder *intel_best_encoder(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); -	return &intel_output->enc; +	return &intel_encoder->enc;  }  /* diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 8e283f75941..77e40cfcf21 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -55,23 +55,23 @@ struct intel_dp_priv {  	uint8_t link_bw;  	uint8_t lane_count;  	uint8_t dpcd[4]; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct i2c_adapter adapter;  	struct i2c_algo_dp_aux_data algo;  };  static void -intel_dp_link_train(struct intel_output *intel_output, uint32_t DP, +intel_dp_link_train(struct intel_encoder *intel_encoder, uint32_t DP,  		    uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE]);  static void -intel_dp_link_down(struct intel_output *intel_output, uint32_t DP); +intel_dp_link_down(struct intel_encoder *intel_encoder, uint32_t DP);  void -intel_edp_link_config (struct intel_output *intel_output, +intel_edp_link_config (struct intel_encoder *intel_encoder,  		int *lane_num, int *link_bw)  { -	struct intel_dp_priv   *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv   *dp_priv = intel_encoder->dev_priv;  	*lane_num = dp_priv->lane_count;  	if (dp_priv->link_bw == DP_LINK_BW_1_62) @@ -81,9 +81,9 @@ intel_edp_link_config (struct intel_output *intel_output,  }  static int -intel_dp_max_lane_count(struct intel_output *intel_output) +intel_dp_max_lane_count(struct intel_encoder *intel_encoder)  { -	struct intel_dp_priv   *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv   *dp_priv = intel_encoder->dev_priv;  	int max_lane_count = 4;  	if (dp_priv->dpcd[0] >= 0x11) { @@ -99,9 +99,9 @@ intel_dp_max_lane_count(struct intel_output *intel_output)  }  static int -intel_dp_max_link_bw(struct intel_output *intel_output) +intel_dp_max_link_bw(struct intel_encoder *intel_encoder)  { -	struct intel_dp_priv   *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv   *dp_priv = intel_encoder->dev_priv;  	int max_link_bw = dp_priv->dpcd[1];  	switch (max_link_bw) { @@ -127,11 +127,11 @@ intel_dp_link_clock(uint8_t link_bw)  /* I think this is a fiction */  static int  intel_dp_link_required(struct drm_device *dev, -		       struct intel_output *intel_output, int pixel_clock) +		       struct intel_encoder *intel_encoder, int pixel_clock)  {  	struct drm_i915_private *dev_priv = dev->dev_private; -	if (IS_eDP(intel_output)) +	if (IS_eDP(intel_encoder))  		return (pixel_clock * dev_priv->edp_bpp) / 8;  	else  		return pixel_clock * 3; @@ -141,11 +141,11 @@ static int  intel_dp_mode_valid(struct drm_connector *connector,  		    struct drm_display_mode *mode)  { -	struct intel_output *intel_output = to_intel_output(connector); -	int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_output)); -	int max_lanes = intel_dp_max_lane_count(intel_output); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_encoder)); +	int max_lanes = intel_dp_max_lane_count(intel_encoder); -	if (intel_dp_link_required(connector->dev, intel_output, mode->clock) +	if (intel_dp_link_required(connector->dev, intel_encoder, mode->clock)  			> max_link_clock * max_lanes)  		return MODE_CLOCK_HIGH; @@ -209,13 +209,13 @@ intel_hrawclk(struct drm_device *dev)  }  static int -intel_dp_aux_ch(struct intel_output *intel_output, +intel_dp_aux_ch(struct intel_encoder *intel_encoder,  		uint8_t *send, int send_bytes,  		uint8_t *recv, int recv_size)  { -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	uint32_t output_reg = dp_priv->output_reg; -	struct drm_device *dev = intel_output->base.dev; +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private;  	uint32_t ch_ctl = output_reg + 0x10;  	uint32_t ch_data = ch_ctl + 4; @@ -230,7 +230,7 @@ intel_dp_aux_ch(struct intel_output *intel_output,  	 * and would like to run at 2MHz. So, take the  	 * hrawclk value and divide by 2 and use that  	 */ -	if (IS_eDP(intel_output)) +	if (IS_eDP(intel_encoder))  		aux_clock_divider = 225; /* eDP input clock at 450Mhz */  	else if (HAS_PCH_SPLIT(dev))  		aux_clock_divider = 62; /* IRL input clock fixed at 125Mhz */ @@ -313,7 +313,7 @@ intel_dp_aux_ch(struct intel_output *intel_output,  /* Write data to the aux channel in native mode */  static int -intel_dp_aux_native_write(struct intel_output *intel_output, +intel_dp_aux_native_write(struct intel_encoder *intel_encoder,  			  uint16_t address, uint8_t *send, int send_bytes)  {  	int ret; @@ -330,7 +330,7 @@ intel_dp_aux_native_write(struct intel_output *intel_output,  	memcpy(&msg[4], send, send_bytes);  	msg_bytes = send_bytes + 4;  	for (;;) { -		ret = intel_dp_aux_ch(intel_output, msg, msg_bytes, &ack, 1); +		ret = intel_dp_aux_ch(intel_encoder, msg, msg_bytes, &ack, 1);  		if (ret < 0)  			return ret;  		if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK) @@ -345,15 +345,15 @@ intel_dp_aux_native_write(struct intel_output *intel_output,  /* Write a single byte to the aux channel in native mode */  static int -intel_dp_aux_native_write_1(struct intel_output *intel_output, +intel_dp_aux_native_write_1(struct intel_encoder *intel_encoder,  			    uint16_t address, uint8_t byte)  { -	return intel_dp_aux_native_write(intel_output, address, &byte, 1); +	return intel_dp_aux_native_write(intel_encoder, address, &byte, 1);  }  /* read bytes from a native aux channel */  static int -intel_dp_aux_native_read(struct intel_output *intel_output, +intel_dp_aux_native_read(struct intel_encoder *intel_encoder,  			 uint16_t address, uint8_t *recv, int recv_bytes)  {  	uint8_t msg[4]; @@ -372,7 +372,7 @@ intel_dp_aux_native_read(struct intel_output *intel_output,  	reply_bytes = recv_bytes + 1;  	for (;;) { -		ret = intel_dp_aux_ch(intel_output, msg, msg_bytes, +		ret = intel_dp_aux_ch(intel_encoder, msg, msg_bytes,  				      reply, reply_bytes);  		if (ret == 0)  			return -EPROTO; @@ -398,7 +398,7 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,  	struct intel_dp_priv *dp_priv = container_of(adapter,  						     struct intel_dp_priv,  						     adapter); -	struct intel_output *intel_output = dp_priv->intel_output; +	struct intel_encoder *intel_encoder = dp_priv->intel_encoder;  	uint16_t address = algo_data->address;  	uint8_t msg[5];  	uint8_t reply[2]; @@ -437,7 +437,7 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,  	}  	for (;;) { -	  ret = intel_dp_aux_ch(intel_output, +	  ret = intel_dp_aux_ch(intel_encoder,  				msg, msg_bytes,  				reply, reply_bytes);  		if (ret < 0) { @@ -465,9 +465,9 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,  }  static int -intel_dp_i2c_init(struct intel_output *intel_output, const char *name) +intel_dp_i2c_init(struct intel_encoder *intel_encoder, const char *name)  { -	struct intel_dp_priv   *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv   *dp_priv = intel_encoder->dev_priv;  	DRM_DEBUG_KMS("i2c_init %s\n", name);  	dp_priv->algo.running = false; @@ -480,7 +480,7 @@ intel_dp_i2c_init(struct intel_output *intel_output, const char *name)  	strncpy (dp_priv->adapter.name, name, sizeof(dp_priv->adapter.name) - 1);  	dp_priv->adapter.name[sizeof(dp_priv->adapter.name) - 1] = '\0';  	dp_priv->adapter.algo_data = &dp_priv->algo; -	dp_priv->adapter.dev.parent = &intel_output->base.kdev; +	dp_priv->adapter.dev.parent = &intel_encoder->base.kdev;  	return i2c_dp_aux_add_bus(&dp_priv->adapter);  } @@ -489,18 +489,18 @@ static bool  intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,  		    struct drm_display_mode *adjusted_mode)  { -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_dp_priv   *dp_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_dp_priv   *dp_priv = intel_encoder->dev_priv;  	int lane_count, clock; -	int max_lane_count = intel_dp_max_lane_count(intel_output); -	int max_clock = intel_dp_max_link_bw(intel_output) == DP_LINK_BW_2_7 ? 1 : 0; +	int max_lane_count = intel_dp_max_lane_count(intel_encoder); +	int max_clock = intel_dp_max_link_bw(intel_encoder) == DP_LINK_BW_2_7 ? 1 : 0;  	static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };  	for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {  		for (clock = 0; clock <= max_clock; clock++) {  			int link_avail = intel_dp_link_clock(bws[clock]) * lane_count; -			if (intel_dp_link_required(encoder->dev, intel_output, mode->clock) +			if (intel_dp_link_required(encoder->dev, intel_encoder, mode->clock)  					<= link_avail) {  				dp_priv->link_bw = bws[clock];  				dp_priv->lane_count = lane_count; @@ -562,16 +562,16 @@ intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,  	struct intel_dp_m_n m_n;  	/* -	 * Find the lane count in the intel_output private +	 * Find the lane count in the intel_encoder private  	 */  	list_for_each_entry(connector, &mode_config->connector_list, head) { -		struct intel_output *intel_output = to_intel_output(connector); -		struct intel_dp_priv *dp_priv = intel_output->dev_priv; +		struct intel_encoder *intel_encoder = to_intel_encoder(connector); +		struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  		if (!connector->encoder || connector->encoder->crtc != crtc)  			continue; -		if (intel_output->type == INTEL_OUTPUT_DISPLAYPORT) { +		if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT) {  			lane_count = dp_priv->lane_count;  			break;  		} @@ -626,9 +626,9 @@ static void  intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,  		  struct drm_display_mode *adjusted_mode)  { -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; -	struct drm_crtc *crtc = intel_output->enc.crtc; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv; +	struct drm_crtc *crtc = intel_encoder->enc.crtc;  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);  	dp_priv->DP = (DP_LINK_TRAIN_OFF | @@ -667,7 +667,7 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,  	if (intel_crtc->pipe == 1)  		dp_priv->DP |= DP_PIPEB_SELECT; -	if (IS_eDP(intel_output)) { +	if (IS_eDP(intel_encoder)) {  		/* don't miss out required setting for eDP */  		dp_priv->DP |= DP_PLL_ENABLE;  		if (adjusted_mode->clock < 200000) @@ -702,22 +702,22 @@ static void ironlake_edp_backlight_off (struct drm_device *dev)  static void  intel_dp_dpms(struct drm_encoder *encoder, int mode)  { -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; -	struct drm_device *dev = intel_output->base.dev; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv; +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private;  	uint32_t dp_reg = I915_READ(dp_priv->output_reg);  	if (mode != DRM_MODE_DPMS_ON) {  		if (dp_reg & DP_PORT_EN) { -			intel_dp_link_down(intel_output, dp_priv->DP); -			if (IS_eDP(intel_output)) +			intel_dp_link_down(intel_encoder, dp_priv->DP); +			if (IS_eDP(intel_encoder))  				ironlake_edp_backlight_off(dev);  		}  	} else {  		if (!(dp_reg & DP_PORT_EN)) { -			intel_dp_link_train(intel_output, dp_priv->DP, dp_priv->link_configuration); -			if (IS_eDP(intel_output)) +			intel_dp_link_train(intel_encoder, dp_priv->DP, dp_priv->link_configuration); +			if (IS_eDP(intel_encoder))  				ironlake_edp_backlight_on(dev);  		}  	} @@ -729,12 +729,12 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)   * link status information   */  static bool -intel_dp_get_link_status(struct intel_output *intel_output, +intel_dp_get_link_status(struct intel_encoder *intel_encoder,  			 uint8_t link_status[DP_LINK_STATUS_SIZE])  {  	int ret; -	ret = intel_dp_aux_native_read(intel_output, +	ret = intel_dp_aux_native_read(intel_encoder,  				       DP_LANE0_1_STATUS,  				       link_status, DP_LINK_STATUS_SIZE);  	if (ret != DP_LINK_STATUS_SIZE) @@ -752,13 +752,13 @@ intel_dp_link_status(uint8_t link_status[DP_LINK_STATUS_SIZE],  static void  intel_dp_save(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct drm_device *dev = intel_output->base.dev; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	dp_priv->save_DP = I915_READ(dp_priv->output_reg); -	intel_dp_aux_native_read(intel_output, DP_LINK_BW_SET, +	intel_dp_aux_native_read(intel_encoder, DP_LINK_BW_SET,  				 dp_priv->save_link_configuration,  				 sizeof (dp_priv->save_link_configuration));  } @@ -825,7 +825,7 @@ intel_dp_pre_emphasis_max(uint8_t voltage_swing)  }  static void -intel_get_adjust_train(struct intel_output *intel_output, +intel_get_adjust_train(struct intel_encoder *intel_encoder,  		       uint8_t link_status[DP_LINK_STATUS_SIZE],  		       int lane_count,  		       uint8_t train_set[4]) @@ -942,15 +942,15 @@ intel_channel_eq_ok(uint8_t link_status[DP_LINK_STATUS_SIZE], int lane_count)  }  static bool -intel_dp_set_link_train(struct intel_output *intel_output, +intel_dp_set_link_train(struct intel_encoder *intel_encoder,  			uint32_t dp_reg_value,  			uint8_t dp_train_pat,  			uint8_t train_set[4],  			bool first)  { -	struct drm_device *dev = intel_output->base.dev; +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	int ret;  	I915_WRITE(dp_priv->output_reg, dp_reg_value); @@ -958,11 +958,11 @@ intel_dp_set_link_train(struct intel_output *intel_output,  	if (first)  		intel_wait_for_vblank(dev); -	intel_dp_aux_native_write_1(intel_output, +	intel_dp_aux_native_write_1(intel_encoder,  				    DP_TRAINING_PATTERN_SET,  				    dp_train_pat); -	ret = intel_dp_aux_native_write(intel_output, +	ret = intel_dp_aux_native_write(intel_encoder,  					DP_TRAINING_LANE0_SET, train_set, 4);  	if (ret != 4)  		return false; @@ -971,12 +971,12 @@ intel_dp_set_link_train(struct intel_output *intel_output,  }  static void -intel_dp_link_train(struct intel_output *intel_output, uint32_t DP, +intel_dp_link_train(struct intel_encoder *intel_encoder, uint32_t DP,  		    uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE])  { -	struct drm_device *dev = intel_output->base.dev; +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	uint8_t	train_set[4];  	uint8_t link_status[DP_LINK_STATUS_SIZE];  	int i; @@ -987,7 +987,7 @@ intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,  	int tries;  	/* Write the link configuration data */ -	intel_dp_aux_native_write(intel_output, 0x100, +	intel_dp_aux_native_write(intel_encoder, 0x100,  				  link_configuration, DP_LINK_CONFIGURATION_SIZE);  	DP |= DP_PORT_EN; @@ -1001,14 +1001,14 @@ intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,  		uint32_t    signal_levels = intel_dp_signal_levels(train_set[0], dp_priv->lane_count);  		DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels; -		if (!intel_dp_set_link_train(intel_output, DP | DP_LINK_TRAIN_PAT_1, +		if (!intel_dp_set_link_train(intel_encoder, DP | DP_LINK_TRAIN_PAT_1,  					     DP_TRAINING_PATTERN_1, train_set, first))  			break;  		first = false;  		/* Set training pattern 1 */  		udelay(100); -		if (!intel_dp_get_link_status(intel_output, link_status)) +		if (!intel_dp_get_link_status(intel_encoder, link_status))  			break;  		if (intel_clock_recovery_ok(link_status, dp_priv->lane_count)) { @@ -1033,7 +1033,7 @@ intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,  		voltage = train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;  		/* Compute new train_set as requested by target */ -		intel_get_adjust_train(intel_output, link_status, dp_priv->lane_count, train_set); +		intel_get_adjust_train(intel_encoder, link_status, dp_priv->lane_count, train_set);  	}  	/* channel equalization */ @@ -1045,13 +1045,13 @@ intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,  		DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;  		/* channel eq pattern */ -		if (!intel_dp_set_link_train(intel_output, DP | DP_LINK_TRAIN_PAT_2, +		if (!intel_dp_set_link_train(intel_encoder, DP | DP_LINK_TRAIN_PAT_2,  					     DP_TRAINING_PATTERN_2, train_set,  					     false))  			break;  		udelay(400); -		if (!intel_dp_get_link_status(intel_output, link_status)) +		if (!intel_dp_get_link_status(intel_encoder, link_status))  			break;  		if (intel_channel_eq_ok(link_status, dp_priv->lane_count)) { @@ -1064,26 +1064,26 @@ intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,  			break;  		/* Compute new train_set as requested by target */ -		intel_get_adjust_train(intel_output, link_status, dp_priv->lane_count, train_set); +		intel_get_adjust_train(intel_encoder, link_status, dp_priv->lane_count, train_set);  		++tries;  	}  	I915_WRITE(dp_priv->output_reg, DP | DP_LINK_TRAIN_OFF);  	POSTING_READ(dp_priv->output_reg); -	intel_dp_aux_native_write_1(intel_output, +	intel_dp_aux_native_write_1(intel_encoder,  				    DP_TRAINING_PATTERN_SET, DP_TRAINING_PATTERN_DISABLE);  }  static void -intel_dp_link_down(struct intel_output *intel_output, uint32_t DP) +intel_dp_link_down(struct intel_encoder *intel_encoder, uint32_t DP)  { -	struct drm_device *dev = intel_output->base.dev; +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	DRM_DEBUG_KMS("\n"); -	if (IS_eDP(intel_output)) { +	if (IS_eDP(intel_encoder)) {  		DP &= ~DP_PLL_ENABLE;  		I915_WRITE(dp_priv->output_reg, DP);  		POSTING_READ(dp_priv->output_reg); @@ -1096,7 +1096,7 @@ intel_dp_link_down(struct intel_output *intel_output, uint32_t DP)  	udelay(17000); -	if (IS_eDP(intel_output)) +	if (IS_eDP(intel_encoder))  		DP |= DP_LINK_TRAIN_OFF;  	I915_WRITE(dp_priv->output_reg, DP & ~DP_PORT_EN);  	POSTING_READ(dp_priv->output_reg); @@ -1105,13 +1105,13 @@ intel_dp_link_down(struct intel_output *intel_output, uint32_t DP)  static void  intel_dp_restore(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	if (dp_priv->save_DP & DP_PORT_EN) -		intel_dp_link_train(intel_output, dp_priv->save_DP, dp_priv->save_link_configuration); +		intel_dp_link_train(intel_encoder, dp_priv->save_DP, dp_priv->save_link_configuration);  	else -		intel_dp_link_down(intel_output,  dp_priv->save_DP); +		intel_dp_link_down(intel_encoder,  dp_priv->save_DP);  }  /* @@ -1124,32 +1124,32 @@ intel_dp_restore(struct drm_connector *connector)   */  static void -intel_dp_check_link_status(struct intel_output *intel_output) +intel_dp_check_link_status(struct intel_encoder *intel_encoder)  { -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	uint8_t link_status[DP_LINK_STATUS_SIZE]; -	if (!intel_output->enc.crtc) +	if (!intel_encoder->enc.crtc)  		return; -	if (!intel_dp_get_link_status(intel_output, link_status)) { -		intel_dp_link_down(intel_output, dp_priv->DP); +	if (!intel_dp_get_link_status(intel_encoder, link_status)) { +		intel_dp_link_down(intel_encoder, dp_priv->DP);  		return;  	}  	if (!intel_channel_eq_ok(link_status, dp_priv->lane_count)) -		intel_dp_link_train(intel_output, dp_priv->DP, dp_priv->link_configuration); +		intel_dp_link_train(intel_encoder, dp_priv->DP, dp_priv->link_configuration);  }  static enum drm_connector_status  ironlake_dp_detect(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	enum drm_connector_status status;  	status = connector_status_disconnected; -	if (intel_dp_aux_native_read(intel_output, +	if (intel_dp_aux_native_read(intel_encoder,  				     0x000, dp_priv->dpcd,  				     sizeof (dp_priv->dpcd)) == sizeof (dp_priv->dpcd))  	{ @@ -1168,10 +1168,10 @@ ironlake_dp_detect(struct drm_connector *connector)  static enum drm_connector_status  intel_dp_detect(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct drm_device *dev = intel_output->base.dev; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	uint32_t temp, bit;  	enum drm_connector_status status; @@ -1210,7 +1210,7 @@ intel_dp_detect(struct drm_connector *connector)  		return connector_status_disconnected;  	status = connector_status_disconnected; -	if (intel_dp_aux_native_read(intel_output, +	if (intel_dp_aux_native_read(intel_encoder,  				     0x000, dp_priv->dpcd,  				     sizeof (dp_priv->dpcd)) == sizeof (dp_priv->dpcd))  	{ @@ -1222,20 +1222,20 @@ intel_dp_detect(struct drm_connector *connector)  static int intel_dp_get_modes(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct drm_device *dev = intel_output->base.dev; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private;  	int ret;  	/* We should parse the EDID data and find out if it has an audio sink  	 */ -	ret = intel_ddc_get_modes(intel_output); +	ret = intel_ddc_get_modes(intel_encoder);  	if (ret)  		return ret;  	/* if eDP has no EDID, try to use fixed panel mode from VBT */ -	if (IS_eDP(intel_output)) { +	if (IS_eDP(intel_encoder)) {  		if (dev_priv->panel_fixed_mode != NULL) {  			struct drm_display_mode *mode;  			mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode); @@ -1249,13 +1249,13 @@ static int intel_dp_get_modes(struct drm_connector *connector)  static void  intel_dp_destroy (struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); -	if (intel_output->i2c_bus) -		intel_i2c_destroy(intel_output->i2c_bus); +	if (intel_encoder->i2c_bus) +		intel_i2c_destroy(intel_encoder->i2c_bus);  	drm_sysfs_connector_remove(connector);  	drm_connector_cleanup(connector); -	kfree(intel_output); +	kfree(intel_encoder);  }  static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = { @@ -1291,12 +1291,12 @@ static const struct drm_encoder_funcs intel_dp_enc_funcs = {  };  void -intel_dp_hot_plug(struct intel_output *intel_output) +intel_dp_hot_plug(struct intel_encoder *intel_encoder)  { -	struct intel_dp_priv *dp_priv = intel_output->dev_priv; +	struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;  	if (dp_priv->dpms_mode == DRM_MODE_DPMS_ON) -		intel_dp_check_link_status(intel_output); +		intel_dp_check_link_status(intel_encoder);  }  void @@ -1304,53 +1304,53 @@ intel_dp_init(struct drm_device *dev, int output_reg)  {  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_connector *connector; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct intel_dp_priv *dp_priv;  	const char *name = NULL; -	intel_output = kcalloc(sizeof(struct intel_output) +  +	intel_encoder = kcalloc(sizeof(struct intel_encoder) +  			       sizeof(struct intel_dp_priv), 1, GFP_KERNEL); -	if (!intel_output) +	if (!intel_encoder)  		return; -	dp_priv = (struct intel_dp_priv *)(intel_output + 1); +	dp_priv = (struct intel_dp_priv *)(intel_encoder + 1); -	connector = &intel_output->base; +	connector = &intel_encoder->base;  	drm_connector_init(dev, connector, &intel_dp_connector_funcs,  			   DRM_MODE_CONNECTOR_DisplayPort);  	drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);  	if (output_reg == DP_A) -		intel_output->type = INTEL_OUTPUT_EDP; +		intel_encoder->type = INTEL_OUTPUT_EDP;  	else -		intel_output->type = INTEL_OUTPUT_DISPLAYPORT; +		intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;  	if (output_reg == DP_B || output_reg == PCH_DP_B) -		intel_output->clone_mask = (1 << INTEL_DP_B_CLONE_BIT); +		intel_encoder->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);  	else if (output_reg == DP_C || output_reg == PCH_DP_C) -		intel_output->clone_mask = (1 << INTEL_DP_C_CLONE_BIT); +		intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);  	else if (output_reg == DP_D || output_reg == PCH_DP_D) -		intel_output->clone_mask = (1 << INTEL_DP_D_CLONE_BIT); +		intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT); -	if (IS_eDP(intel_output)) -		intel_output->clone_mask = (1 << INTEL_EDP_CLONE_BIT); +	if (IS_eDP(intel_encoder)) +		intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT); -	intel_output->crtc_mask = (1 << 0) | (1 << 1); +	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);  	connector->interlace_allowed = true;  	connector->doublescan_allowed = 0; -	dp_priv->intel_output = intel_output; +	dp_priv->intel_encoder = intel_encoder;  	dp_priv->output_reg = output_reg;  	dp_priv->has_audio = false;  	dp_priv->dpms_mode = DRM_MODE_DPMS_ON; -	intel_output->dev_priv = dp_priv; +	intel_encoder->dev_priv = dp_priv; -	drm_encoder_init(dev, &intel_output->enc, &intel_dp_enc_funcs, +	drm_encoder_init(dev, &intel_encoder->enc, &intel_dp_enc_funcs,  			 DRM_MODE_ENCODER_TMDS); -	drm_encoder_helper_add(&intel_output->enc, &intel_dp_helper_funcs); +	drm_encoder_helper_add(&intel_encoder->enc, &intel_dp_helper_funcs); -	drm_mode_connector_attach_encoder(&intel_output->base, -					  &intel_output->enc); +	drm_mode_connector_attach_encoder(&intel_encoder->base, +					  &intel_encoder->enc);  	drm_sysfs_connector_add(connector);  	/* Set up the DDC bus. */ @@ -1378,10 +1378,10 @@ intel_dp_init(struct drm_device *dev, int output_reg)  			break;  	} -	intel_dp_i2c_init(intel_output, name); +	intel_dp_i2c_init(intel_encoder, name); -	intel_output->ddc_bus = &dp_priv->adapter; -	intel_output->hot_plug = intel_dp_hot_plug; +	intel_encoder->ddc_bus = &dp_priv->adapter; +	intel_encoder->hot_plug = intel_dp_hot_plug;  	if (output_reg == DP_A) {  		/* initialize panel mode from VBT if available for eDP */ diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 3a467ca5785..e30253755f1 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -95,7 +95,7 @@ struct intel_framebuffer {  }; -struct intel_output { +struct intel_encoder {  	struct drm_connector base;  	struct drm_encoder enc; @@ -105,7 +105,7 @@ struct intel_output {  	bool load_detect_temp;  	bool needs_tv_clock;  	void *dev_priv; -	void (*hot_plug)(struct intel_output *); +	void (*hot_plug)(struct intel_encoder *);  	int crtc_mask;  	int clone_mask;  }; @@ -152,15 +152,15 @@ struct intel_crtc {  };  #define to_intel_crtc(x) container_of(x, struct intel_crtc, base) -#define to_intel_output(x) container_of(x, struct intel_output, base) -#define enc_to_intel_output(x) container_of(x, struct intel_output, enc) +#define to_intel_encoder(x) container_of(x, struct intel_encoder, base) +#define enc_to_intel_encoder(x) container_of(x, struct intel_encoder, enc)  #define to_intel_framebuffer(x) container_of(x, struct intel_framebuffer, base)  struct i2c_adapter *intel_i2c_create(struct drm_device *dev, const u32 reg,  				     const char *name);  void intel_i2c_destroy(struct i2c_adapter *adapter); -int intel_ddc_get_modes(struct intel_output *intel_output); -extern bool intel_ddc_probe(struct intel_output *intel_output); +int intel_ddc_get_modes(struct intel_encoder *intel_encoder); +extern bool intel_ddc_probe(struct intel_encoder *intel_encoder);  void intel_i2c_quirk_set(struct drm_device *dev, bool enable);  void intel_i2c_reset_gmbus(struct drm_device *dev); @@ -175,7 +175,7 @@ extern void intel_dp_init(struct drm_device *dev, int dp_reg);  void  intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,  		 struct drm_display_mode *adjusted_mode); -extern void intel_edp_link_config (struct intel_output *, int *, int *); +extern void intel_edp_link_config (struct intel_encoder *, int *, int *);  extern int intel_panel_fitter_pipe (struct drm_device *dev); @@ -191,10 +191,10 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,  				struct drm_file *file_priv);  extern void intel_wait_for_vblank(struct drm_device *dev);  extern struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe); -extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output, +extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,  						   struct drm_display_mode *mode,  						   int *dpms_mode); -extern void intel_release_load_detect_pipe(struct intel_output *intel_output, +extern void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,  					   int dpms_mode);  extern struct drm_connector* intel_sdvo_find(struct drm_device *dev, int sdvoB); diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c index 0427ca5a251..ebf213c96b9 100644 --- a/drivers/gpu/drm/i915/intel_dvo.c +++ b/drivers/gpu/drm/i915/intel_dvo.c @@ -80,8 +80,8 @@ static struct intel_dvo_device intel_dvo_devices[] = {  static void intel_dvo_dpms(struct drm_encoder *encoder, int mode)  {  	struct drm_i915_private *dev_priv = encoder->dev->dev_private; -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	u32 dvo_reg = dvo->dvo_reg;  	u32 temp = I915_READ(dvo_reg); @@ -99,8 +99,8 @@ static void intel_dvo_dpms(struct drm_encoder *encoder, int mode)  static void intel_dvo_save(struct drm_connector *connector)  {  	struct drm_i915_private *dev_priv = connector->dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	/* Each output should probably just save the registers it touches,  	 * but for now, use more overkill. @@ -115,8 +115,8 @@ static void intel_dvo_save(struct drm_connector *connector)  static void intel_dvo_restore(struct drm_connector *connector)  {  	struct drm_i915_private *dev_priv = connector->dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	dvo->dev_ops->restore(dvo); @@ -128,8 +128,8 @@ static void intel_dvo_restore(struct drm_connector *connector)  static int intel_dvo_mode_valid(struct drm_connector *connector,  				struct drm_display_mode *mode)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)  		return MODE_NO_DBLESCAN; @@ -150,8 +150,8 @@ static bool intel_dvo_mode_fixup(struct drm_encoder *encoder,  				 struct drm_display_mode *mode,  				 struct drm_display_mode *adjusted_mode)  { -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	/* If we have timings from the BIOS for the panel, put them in  	 * to the adjusted mode.  The CRTC will be set up for this mode, @@ -186,8 +186,8 @@ static void intel_dvo_mode_set(struct drm_encoder *encoder,  	struct drm_device *dev = encoder->dev;  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	int pipe = intel_crtc->pipe;  	u32 dvo_val;  	u32 dvo_reg = dvo->dvo_reg, dvo_srcdim_reg; @@ -241,23 +241,23 @@ static void intel_dvo_mode_set(struct drm_encoder *encoder,   */  static enum drm_connector_status intel_dvo_detect(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	return dvo->dev_ops->detect(dvo);  }  static int intel_dvo_get_modes(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	/* We should probably have an i2c driver get_modes function for those  	 * devices which will have a fixed set of modes determined by the chip  	 * (TV-out, for example), but for now with just TMDS and LVDS,  	 * that's not the case.  	 */ -	intel_ddc_get_modes(intel_output); +	intel_ddc_get_modes(intel_encoder);  	if (!list_empty(&connector->probed_modes))  		return 1; @@ -275,8 +275,8 @@ static int intel_dvo_get_modes(struct drm_connector *connector)  static void intel_dvo_destroy (struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	if (dvo) {  		if (dvo->dev_ops->destroy) @@ -286,13 +286,13 @@ static void intel_dvo_destroy (struct drm_connector *connector)  		/* no need, in i830_dvoices[] now */  		//kfree(dvo);  	} -	if (intel_output->i2c_bus) -		intel_i2c_destroy(intel_output->i2c_bus); -	if (intel_output->ddc_bus) -		intel_i2c_destroy(intel_output->ddc_bus); +	if (intel_encoder->i2c_bus) +		intel_i2c_destroy(intel_encoder->i2c_bus); +	if (intel_encoder->ddc_bus) +		intel_i2c_destroy(intel_encoder->ddc_bus);  	drm_sysfs_connector_remove(connector);  	drm_connector_cleanup(connector); -	kfree(intel_output); +	kfree(intel_encoder);  }  #ifdef RANDR_GET_CRTC_INTERFACE @@ -300,8 +300,8 @@ static struct drm_crtc *intel_dvo_get_crtc(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	int pipe = !!(I915_READ(dvo->dvo_reg) & SDVO_PIPE_B_SELECT);  	return intel_pipe_to_crtc(pScrn, pipe); @@ -352,8 +352,8 @@ intel_dvo_get_current_mode (struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_dvo_device *dvo = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_dvo_device *dvo = intel_encoder->dev_priv;  	uint32_t dvo_reg = dvo->dvo_reg;  	uint32_t dvo_val = I915_READ(dvo_reg);  	struct drm_display_mode *mode = NULL; @@ -383,24 +383,24 @@ intel_dvo_get_current_mode (struct drm_connector *connector)  void intel_dvo_init(struct drm_device *dev)  { -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct intel_dvo_device *dvo;  	struct i2c_adapter *i2cbus = NULL;  	int ret = 0;  	int i;  	int encoder_type = DRM_MODE_ENCODER_NONE; -	intel_output = kzalloc (sizeof(struct intel_output), GFP_KERNEL); -	if (!intel_output) +	intel_encoder = kzalloc (sizeof(struct intel_encoder), GFP_KERNEL); +	if (!intel_encoder)  		return;  	/* Set up the DDC bus */ -	intel_output->ddc_bus = intel_i2c_create(dev, GPIOD, "DVODDC_D"); -	if (!intel_output->ddc_bus) +	intel_encoder->ddc_bus = intel_i2c_create(dev, GPIOD, "DVODDC_D"); +	if (!intel_encoder->ddc_bus)  		goto free_intel;  	/* Now, try to find a controller */  	for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) { -		struct drm_connector *connector = &intel_output->base; +		struct drm_connector *connector = &intel_encoder->base;  		int gpio;  		dvo = &intel_dvo_devices[i]; @@ -435,11 +435,11 @@ void intel_dvo_init(struct drm_device *dev)  		if (!ret)  			continue; -		intel_output->type = INTEL_OUTPUT_DVO; -		intel_output->crtc_mask = (1 << 0) | (1 << 1); +		intel_encoder->type = INTEL_OUTPUT_DVO; +		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);  		switch (dvo->type) {  		case INTEL_DVO_CHIP_TMDS: -			intel_output->clone_mask = +			intel_encoder->clone_mask =  				(1 << INTEL_DVO_TMDS_CLONE_BIT) |  				(1 << INTEL_ANALOG_CLONE_BIT);  			drm_connector_init(dev, connector, @@ -448,7 +448,7 @@ void intel_dvo_init(struct drm_device *dev)  			encoder_type = DRM_MODE_ENCODER_TMDS;  			break;  		case INTEL_DVO_CHIP_LVDS: -			intel_output->clone_mask = +			intel_encoder->clone_mask =  				(1 << INTEL_DVO_LVDS_CLONE_BIT);  			drm_connector_init(dev, connector,  					   &intel_dvo_connector_funcs, @@ -463,16 +463,16 @@ void intel_dvo_init(struct drm_device *dev)  		connector->interlace_allowed = false;  		connector->doublescan_allowed = false; -		intel_output->dev_priv = dvo; -		intel_output->i2c_bus = i2cbus; +		intel_encoder->dev_priv = dvo; +		intel_encoder->i2c_bus = i2cbus; -		drm_encoder_init(dev, &intel_output->enc, +		drm_encoder_init(dev, &intel_encoder->enc,  				 &intel_dvo_enc_funcs, encoder_type); -		drm_encoder_helper_add(&intel_output->enc, +		drm_encoder_helper_add(&intel_encoder->enc,  				       &intel_dvo_helper_funcs); -		drm_mode_connector_attach_encoder(&intel_output->base, -						  &intel_output->enc); +		drm_mode_connector_attach_encoder(&intel_encoder->base, +						  &intel_encoder->enc);  		if (dvo->type == INTEL_DVO_CHIP_LVDS) {  			/* For our LVDS chipsets, we should hopefully be able  			 * to dig the fixed panel mode out of the BIOS data. @@ -490,10 +490,10 @@ void intel_dvo_init(struct drm_device *dev)  		return;  	} -	intel_i2c_destroy(intel_output->ddc_bus); +	intel_i2c_destroy(intel_encoder->ddc_bus);  	/* Didn't find a chip, so tear down. */  	if (i2cbus != NULL)  		intel_i2c_destroy(i2cbus);  free_intel: -	kfree(intel_output); +	kfree(intel_encoder);  } diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index 69bbef92f13..8a0b3bcdc7b 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c @@ -144,7 +144,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,  		ret = -ENOMEM;  		goto out;  	} -	obj_priv = fbo->driver_private; +	obj_priv = to_intel_bo(fbo);  	mutex_lock(&dev->struct_mutex); diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 1ed02f64125..48cade0cf7b 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -51,8 +51,8 @@ static void intel_hdmi_mode_set(struct drm_encoder *encoder,  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_crtc *crtc = encoder->crtc;  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_hdmi_priv *hdmi_priv = intel_encoder->dev_priv;  	u32 sdvox;  	sdvox = SDVO_ENCODING_HDMI | @@ -74,8 +74,8 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)  {  	struct drm_device *dev = encoder->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_hdmi_priv *hdmi_priv = intel_encoder->dev_priv;  	u32 temp;  	temp = I915_READ(hdmi_priv->sdvox_reg); @@ -110,8 +110,8 @@ static void intel_hdmi_save(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_hdmi_priv *hdmi_priv = intel_encoder->dev_priv;  	hdmi_priv->save_SDVOX = I915_READ(hdmi_priv->sdvox_reg);  } @@ -120,8 +120,8 @@ static void intel_hdmi_restore(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_hdmi_priv *hdmi_priv = intel_encoder->dev_priv;  	I915_WRITE(hdmi_priv->sdvox_reg, hdmi_priv->save_SDVOX);  	POSTING_READ(hdmi_priv->sdvox_reg); @@ -151,21 +151,21 @@ static bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,  static enum drm_connector_status  intel_hdmi_detect(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_hdmi_priv *hdmi_priv = intel_encoder->dev_priv;  	struct edid *edid = NULL;  	enum drm_connector_status status = connector_status_disconnected;  	hdmi_priv->has_hdmi_sink = false; -	edid = drm_get_edid(&intel_output->base, -			    intel_output->ddc_bus); +	edid = drm_get_edid(&intel_encoder->base, +			    intel_encoder->ddc_bus);  	if (edid) {  		if (edid->input & DRM_EDID_INPUT_DIGITAL) {  			status = connector_status_connected;  			hdmi_priv->has_hdmi_sink = drm_detect_hdmi_monitor(edid);  		} -		intel_output->base.display_info.raw_edid = NULL; +		intel_encoder->base.display_info.raw_edid = NULL;  		kfree(edid);  	} @@ -174,24 +174,24 @@ intel_hdmi_detect(struct drm_connector *connector)  static int intel_hdmi_get_modes(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	/* We should parse the EDID data and find out if it's an HDMI sink so  	 * we can send audio to it.  	 */ -	return intel_ddc_get_modes(intel_output); +	return intel_ddc_get_modes(intel_encoder);  }  static void intel_hdmi_destroy(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); -	if (intel_output->i2c_bus) -		intel_i2c_destroy(intel_output->i2c_bus); +	if (intel_encoder->i2c_bus) +		intel_i2c_destroy(intel_encoder->i2c_bus);  	drm_sysfs_connector_remove(connector);  	drm_connector_cleanup(connector); -	kfree(intel_output); +	kfree(intel_encoder);  }  static const struct drm_encoder_helper_funcs intel_hdmi_helper_funcs = { @@ -230,63 +230,63 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)  {  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_connector *connector; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct intel_hdmi_priv *hdmi_priv; -	intel_output = kcalloc(sizeof(struct intel_output) + +	intel_encoder = kcalloc(sizeof(struct intel_encoder) +  			       sizeof(struct intel_hdmi_priv), 1, GFP_KERNEL); -	if (!intel_output) +	if (!intel_encoder)  		return; -	hdmi_priv = (struct intel_hdmi_priv *)(intel_output + 1); +	hdmi_priv = (struct intel_hdmi_priv *)(intel_encoder + 1); -	connector = &intel_output->base; +	connector = &intel_encoder->base;  	drm_connector_init(dev, connector, &intel_hdmi_connector_funcs,  			   DRM_MODE_CONNECTOR_HDMIA);  	drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs); -	intel_output->type = INTEL_OUTPUT_HDMI; +	intel_encoder->type = INTEL_OUTPUT_HDMI;  	connector->interlace_allowed = 0;  	connector->doublescan_allowed = 0; -	intel_output->crtc_mask = (1 << 0) | (1 << 1); +	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);  	/* Set up the DDC bus. */  	if (sdvox_reg == SDVOB) { -		intel_output->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT); -		intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "HDMIB"); +		intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT); +		intel_encoder->ddc_bus = intel_i2c_create(dev, GPIOE, "HDMIB");  		dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;  	} else if (sdvox_reg == SDVOC) { -		intel_output->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT); -		intel_output->ddc_bus = intel_i2c_create(dev, GPIOD, "HDMIC"); +		intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT); +		intel_encoder->ddc_bus = intel_i2c_create(dev, GPIOD, "HDMIC");  		dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;  	} else if (sdvox_reg == HDMIB) { -		intel_output->clone_mask = (1 << INTEL_HDMID_CLONE_BIT); -		intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOE, +		intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT); +		intel_encoder->ddc_bus = intel_i2c_create(dev, PCH_GPIOE,  								"HDMIB");  		dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;  	} else if (sdvox_reg == HDMIC) { -		intel_output->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT); -		intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOD, +		intel_encoder->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT); +		intel_encoder->ddc_bus = intel_i2c_create(dev, PCH_GPIOD,  								"HDMIC");  		dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;  	} else if (sdvox_reg == HDMID) { -		intel_output->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT); -		intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOF, +		intel_encoder->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT); +		intel_encoder->ddc_bus = intel_i2c_create(dev, PCH_GPIOF,  								"HDMID");  		dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;  	} -	if (!intel_output->ddc_bus) +	if (!intel_encoder->ddc_bus)  		goto err_connector;  	hdmi_priv->sdvox_reg = sdvox_reg; -	intel_output->dev_priv = hdmi_priv; +	intel_encoder->dev_priv = hdmi_priv; -	drm_encoder_init(dev, &intel_output->enc, &intel_hdmi_enc_funcs, +	drm_encoder_init(dev, &intel_encoder->enc, &intel_hdmi_enc_funcs,  			 DRM_MODE_ENCODER_TMDS); -	drm_encoder_helper_add(&intel_output->enc, &intel_hdmi_helper_funcs); +	drm_encoder_helper_add(&intel_encoder->enc, &intel_hdmi_helper_funcs); -	drm_mode_connector_attach_encoder(&intel_output->base, -					  &intel_output->enc); +	drm_mode_connector_attach_encoder(&intel_encoder->base, +					  &intel_encoder->enc);  	drm_sysfs_connector_add(connector);  	/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written @@ -302,7 +302,7 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)  err_connector:  	drm_connector_cleanup(connector); -	kfree(intel_output); +	kfree(intel_encoder);  	return;  } diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 216e9f52b6e..b66806a37d3 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c @@ -239,8 +239,8 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);  	struct drm_encoder *tmp_encoder; -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_lvds_priv *lvds_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_lvds_priv *lvds_priv = intel_encoder->dev_priv;  	u32 pfit_control = 0, pfit_pgm_ratios = 0;  	int left_border = 0, right_border = 0, top_border = 0;  	int bottom_border = 0; @@ -587,8 +587,8 @@ static void intel_lvds_mode_set(struct drm_encoder *encoder,  {  	struct drm_device *dev = encoder->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_lvds_priv *lvds_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_lvds_priv *lvds_priv = intel_encoder->dev_priv;  	/*  	 * The LVDS pin pair will already have been turned on in the @@ -635,14 +635,16 @@ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connect  static int intel_lvds_get_modes(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev; -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	struct drm_i915_private *dev_priv = dev->dev_private;  	int ret = 0; -	ret = intel_ddc_get_modes(intel_output); +	if (dev_priv->lvds_edid_good) { +		ret = intel_ddc_get_modes(intel_encoder); -	if (ret) -		return ret; +		if (ret) +			return ret; +	}  	/* Didn't get an EDID, so  	 * Set wide sync ranges so we get all modes @@ -715,11 +717,11 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,  static void intel_lvds_destroy(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev; -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	struct drm_i915_private *dev_priv = dev->dev_private; -	if (intel_output->ddc_bus) -		intel_i2c_destroy(intel_output->ddc_bus); +	if (intel_encoder->ddc_bus) +		intel_i2c_destroy(intel_encoder->ddc_bus);  	if (dev_priv->lid_notifier.notifier_call)  		acpi_lid_notifier_unregister(&dev_priv->lid_notifier);  	drm_sysfs_connector_remove(connector); @@ -732,13 +734,13 @@ static int intel_lvds_set_property(struct drm_connector *connector,  				   uint64_t value)  {  	struct drm_device *dev = connector->dev; -	struct intel_output *intel_output = -			to_intel_output(connector); +	struct intel_encoder *intel_encoder = +			to_intel_encoder(connector);  	if (property == dev->mode_config.scaling_mode_property &&  				connector->encoder) {  		struct drm_crtc *crtc = connector->encoder->crtc; -		struct intel_lvds_priv *lvds_priv = intel_output->dev_priv; +		struct intel_lvds_priv *lvds_priv = intel_encoder->dev_priv;  		if (value == DRM_MODE_SCALE_NONE) {  			DRM_DEBUG_KMS("no scaling not supported\n");  			return 0; @@ -858,6 +860,14 @@ static const struct dmi_system_id intel_no_lvds[] = {  			DMI_MATCH(DMI_PRODUCT_VERSION, "AO00001JW"),  		},  	}, +	{ +		.callback = intel_no_lvds_dmi_callback, +		.ident = "Clientron U800", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "Clientron"), +			DMI_MATCH(DMI_PRODUCT_NAME, "U800"), +		}, +	},  	{ }	/* terminating entry */  }; @@ -968,7 +978,7 @@ static int lvds_is_present_in_vbt(struct drm_device *dev)  void intel_lvds_init(struct drm_device *dev)  {  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct drm_connector *connector;  	struct drm_encoder *encoder;  	struct drm_display_mode *scan; /* *modes, *bios_mode; */ @@ -996,40 +1006,40 @@ void intel_lvds_init(struct drm_device *dev)  		gpio = PCH_GPIOC;  	} -	intel_output = kzalloc(sizeof(struct intel_output) + +	intel_encoder = kzalloc(sizeof(struct intel_encoder) +  				sizeof(struct intel_lvds_priv), GFP_KERNEL); -	if (!intel_output) { +	if (!intel_encoder) {  		return;  	} -	connector = &intel_output->base; -	encoder = &intel_output->enc; -	drm_connector_init(dev, &intel_output->base, &intel_lvds_connector_funcs, +	connector = &intel_encoder->base; +	encoder = &intel_encoder->enc; +	drm_connector_init(dev, &intel_encoder->base, &intel_lvds_connector_funcs,  			   DRM_MODE_CONNECTOR_LVDS); -	drm_encoder_init(dev, &intel_output->enc, &intel_lvds_enc_funcs, +	drm_encoder_init(dev, &intel_encoder->enc, &intel_lvds_enc_funcs,  			 DRM_MODE_ENCODER_LVDS); -	drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc); -	intel_output->type = INTEL_OUTPUT_LVDS; +	drm_mode_connector_attach_encoder(&intel_encoder->base, &intel_encoder->enc); +	intel_encoder->type = INTEL_OUTPUT_LVDS; -	intel_output->clone_mask = (1 << INTEL_LVDS_CLONE_BIT); -	intel_output->crtc_mask = (1 << 1); +	intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT); +	intel_encoder->crtc_mask = (1 << 1);  	drm_encoder_helper_add(encoder, &intel_lvds_helper_funcs);  	drm_connector_helper_add(connector, &intel_lvds_connector_helper_funcs);  	connector->display_info.subpixel_order = SubPixelHorizontalRGB;  	connector->interlace_allowed = false;  	connector->doublescan_allowed = false; -	lvds_priv = (struct intel_lvds_priv *)(intel_output + 1); -	intel_output->dev_priv = lvds_priv; +	lvds_priv = (struct intel_lvds_priv *)(intel_encoder + 1); +	intel_encoder->dev_priv = lvds_priv;  	/* create the scaling mode property */  	drm_mode_create_scaling_mode_property(dev);  	/*  	 * the initial panel fitting mode will be FULL_SCREEN.  	 */ -	drm_connector_attach_property(&intel_output->base, +	drm_connector_attach_property(&intel_encoder->base,  				      dev->mode_config.scaling_mode_property,  				      DRM_MODE_SCALE_FULLSCREEN);  	lvds_priv->fitting_mode = DRM_MODE_SCALE_FULLSCREEN; @@ -1044,8 +1054,8 @@ void intel_lvds_init(struct drm_device *dev)  	 */  	/* Set up the DDC bus. */ -	intel_output->ddc_bus = intel_i2c_create(dev, gpio, "LVDSDDC_C"); -	if (!intel_output->ddc_bus) { +	intel_encoder->ddc_bus = intel_i2c_create(dev, gpio, "LVDSDDC_C"); +	if (!intel_encoder->ddc_bus) {  		dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "  			   "failed.\n");  		goto failed; @@ -1055,7 +1065,10 @@ void intel_lvds_init(struct drm_device *dev)  	 * Attempt to get the fixed panel mode from DDC.  Assume that the  	 * preferred mode is the right one.  	 */ -	intel_ddc_get_modes(intel_output); +	dev_priv->lvds_edid_good = true; + +	if (!intel_ddc_get_modes(intel_encoder)) +		dev_priv->lvds_edid_good = false;  	list_for_each_entry(scan, &connector->probed_modes, head) {  		mutex_lock(&dev->mode_config.mutex); @@ -1133,9 +1146,9 @@ out:  failed:  	DRM_DEBUG_KMS("No LVDS modes found, disabling.\n"); -	if (intel_output->ddc_bus) -		intel_i2c_destroy(intel_output->ddc_bus); +	if (intel_encoder->ddc_bus) +		intel_i2c_destroy(intel_encoder->ddc_bus);  	drm_connector_cleanup(connector);  	drm_encoder_cleanup(encoder); -	kfree(intel_output); +	kfree(intel_encoder);  } diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c index 89d303d1d3f..8e5c83b2d12 100644 --- a/drivers/gpu/drm/i915/intel_modes.c +++ b/drivers/gpu/drm/i915/intel_modes.c @@ -34,7 +34,7 @@   * intel_ddc_probe   *   */ -bool intel_ddc_probe(struct intel_output *intel_output) +bool intel_ddc_probe(struct intel_encoder *intel_encoder)  {  	u8 out_buf[] = { 0x0, 0x0};  	u8 buf[2]; @@ -54,9 +54,9 @@ bool intel_ddc_probe(struct intel_output *intel_output)  		}  	}; -	intel_i2c_quirk_set(intel_output->base.dev, true); -	ret = i2c_transfer(intel_output->ddc_bus, msgs, 2); -	intel_i2c_quirk_set(intel_output->base.dev, false); +	intel_i2c_quirk_set(intel_encoder->base.dev, true); +	ret = i2c_transfer(intel_encoder->ddc_bus, msgs, 2); +	intel_i2c_quirk_set(intel_encoder->base.dev, false);  	if (ret == 2)  		return true; @@ -69,19 +69,19 @@ bool intel_ddc_probe(struct intel_output *intel_output)   *   * Fetch the EDID information from @connector using the DDC bus.   */ -int intel_ddc_get_modes(struct intel_output *intel_output) +int intel_ddc_get_modes(struct intel_encoder *intel_encoder)  {  	struct edid *edid;  	int ret = 0; -	intel_i2c_quirk_set(intel_output->base.dev, true); -	edid = drm_get_edid(&intel_output->base, intel_output->ddc_bus); -	intel_i2c_quirk_set(intel_output->base.dev, false); +	intel_i2c_quirk_set(intel_encoder->base.dev, true); +	edid = drm_get_edid(&intel_encoder->base, intel_encoder->ddc_bus); +	intel_i2c_quirk_set(intel_encoder->base.dev, false);  	if (edid) { -		drm_mode_connector_update_edid_property(&intel_output->base, +		drm_mode_connector_update_edid_property(&intel_encoder->base,  							edid); -		ret = drm_add_edid_modes(&intel_output->base, edid); -		intel_output->base.display_info.raw_edid = NULL; +		ret = drm_add_edid_modes(&intel_encoder->base, edid); +		intel_encoder->base.display_info.raw_edid = NULL;  		kfree(edid);  	} diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index 60595fc26fd..6d524a1fc27 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c @@ -724,7 +724,7 @@ int intel_overlay_do_put_image(struct intel_overlay *overlay,  	int ret, tmp_width;  	struct overlay_registers *regs;  	bool scale_changed = false; -	struct drm_i915_gem_object *bo_priv = new_bo->driver_private; +	struct drm_i915_gem_object *bo_priv = to_intel_bo(new_bo);  	struct drm_device *dev = overlay->dev;  	BUG_ON(!mutex_is_locked(&dev->struct_mutex)); @@ -809,7 +809,7 @@ int intel_overlay_do_put_image(struct intel_overlay *overlay,  	intel_overlay_continue(overlay, scale_changed);  	overlay->old_vid_bo = overlay->vid_bo; -	overlay->vid_bo = new_bo->driver_private; +	overlay->vid_bo = to_intel_bo(new_bo);  	return 0; @@ -1344,7 +1344,7 @@ void intel_setup_overlay(struct drm_device *dev)  	reg_bo = drm_gem_object_alloc(dev, PAGE_SIZE);  	if (!reg_bo)  		goto out_free; -	overlay->reg_bo = reg_bo->driver_private; +	overlay->reg_bo = to_intel_bo(reg_bo);  	if (OVERLAY_NONPHYSICAL(dev)) {  		ret = i915_gem_object_pin(reg_bo, PAGE_SIZE); diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 26e13a0bf30..87d953664cb 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -54,7 +54,7 @@ struct intel_sdvo_priv {  	u8 slave_addr;  	/* Register for the SDVO device: SDVOB or SDVOC */ -	int output_device; +	int sdvo_reg;  	/* Active outputs controlled by this SDVO output */  	uint16_t controlled_output; @@ -124,7 +124,7 @@ struct intel_sdvo_priv {  	 */  	struct intel_sdvo_encode encode; -	/* DDC bus used by this SDVO output */ +	/* DDC bus used by this SDVO encoder */  	uint8_t ddc_bus;  	/* Mac mini hack -- use the same DDC as the analog connector */ @@ -162,22 +162,22 @@ struct intel_sdvo_priv {  };  static bool -intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags); +intel_sdvo_output_setup(struct intel_encoder *intel_encoder, uint16_t flags);  /**   * Writes the SDVOB or SDVOC with the given value, but always writes both   * SDVOB and SDVOC to work around apparent hardware issues (according to   * comments in the BIOS).   */ -static void intel_sdvo_write_sdvox(struct intel_output *intel_output, u32 val) +static void intel_sdvo_write_sdvox(struct intel_encoder *intel_encoder, u32 val)  { -	struct drm_device *dev = intel_output->base.dev; +	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_sdvo_priv   *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv   *sdvo_priv = intel_encoder->dev_priv;  	u32 bval = val, cval = val;  	int i; -	if (sdvo_priv->output_device == SDVOB) { +	if (sdvo_priv->sdvo_reg == SDVOB) {  		cval = I915_READ(SDVOC);  	} else {  		bval = I915_READ(SDVOB); @@ -196,10 +196,10 @@ static void intel_sdvo_write_sdvox(struct intel_output *intel_output, u32 val)  	}  } -static bool intel_sdvo_read_byte(struct intel_output *intel_output, u8 addr, +static bool intel_sdvo_read_byte(struct intel_encoder *intel_encoder, u8 addr,  				 u8 *ch)  { -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	u8 out_buf[2];  	u8 buf[2];  	int ret; @@ -222,7 +222,7 @@ static bool intel_sdvo_read_byte(struct intel_output *intel_output, u8 addr,  	out_buf[0] = addr;  	out_buf[1] = 0; -	if ((ret = i2c_transfer(intel_output->i2c_bus, msgs, 2)) == 2) +	if ((ret = i2c_transfer(intel_encoder->i2c_bus, msgs, 2)) == 2)  	{  		*ch = buf[0];  		return true; @@ -232,10 +232,10 @@ static bool intel_sdvo_read_byte(struct intel_output *intel_output, u8 addr,  	return false;  } -static bool intel_sdvo_write_byte(struct intel_output *intel_output, int addr, +static bool intel_sdvo_write_byte(struct intel_encoder *intel_encoder, int addr,  				  u8 ch)  { -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	u8 out_buf[2];  	struct i2c_msg msgs[] = {  		{ @@ -249,7 +249,7 @@ static bool intel_sdvo_write_byte(struct intel_output *intel_output, int addr,  	out_buf[0] = addr;  	out_buf[1] = ch; -	if (i2c_transfer(intel_output->i2c_bus, msgs, 1) == 1) +	if (i2c_transfer(intel_encoder->i2c_bus, msgs, 1) == 1)  	{  		return true;  	} @@ -353,13 +353,13 @@ static const struct _sdvo_cmd_name {      SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_DATA),  }; -#define SDVO_NAME(dev_priv) ((dev_priv)->output_device == SDVOB ? "SDVOB" : "SDVOC") -#define SDVO_PRIV(output)   ((struct intel_sdvo_priv *) (output)->dev_priv) +#define SDVO_NAME(dev_priv) ((dev_priv)->sdvo_reg == SDVOB ? "SDVOB" : "SDVOC") +#define SDVO_PRIV(encoder)   ((struct intel_sdvo_priv *) (encoder)->dev_priv) -static void intel_sdvo_debug_write(struct intel_output *intel_output, u8 cmd, +static void intel_sdvo_debug_write(struct intel_encoder *intel_encoder, u8 cmd,  				   void *args, int args_len)  { -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	int i;  	DRM_DEBUG_KMS("%s: W: %02X ", @@ -379,19 +379,19 @@ static void intel_sdvo_debug_write(struct intel_output *intel_output, u8 cmd,  	DRM_LOG_KMS("\n");  } -static void intel_sdvo_write_cmd(struct intel_output *intel_output, u8 cmd, +static void intel_sdvo_write_cmd(struct intel_encoder *intel_encoder, u8 cmd,  				 void *args, int args_len)  {  	int i; -	intel_sdvo_debug_write(intel_output, cmd, args, args_len); +	intel_sdvo_debug_write(intel_encoder, cmd, args, args_len);  	for (i = 0; i < args_len; i++) { -		intel_sdvo_write_byte(intel_output, SDVO_I2C_ARG_0 - i, +		intel_sdvo_write_byte(intel_encoder, SDVO_I2C_ARG_0 - i,  				      ((u8*)args)[i]);  	} -	intel_sdvo_write_byte(intel_output, SDVO_I2C_OPCODE, cmd); +	intel_sdvo_write_byte(intel_encoder, SDVO_I2C_OPCODE, cmd);  }  static const char *cmd_status_names[] = { @@ -404,11 +404,11 @@ static const char *cmd_status_names[] = {  	"Scaling not supported"  }; -static void intel_sdvo_debug_response(struct intel_output *intel_output, +static void intel_sdvo_debug_response(struct intel_encoder *intel_encoder,  				      void *response, int response_len,  				      u8 status)  { -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	int i;  	DRM_DEBUG_KMS("%s: R: ", SDVO_NAME(sdvo_priv)); @@ -423,7 +423,7 @@ static void intel_sdvo_debug_response(struct intel_output *intel_output,  	DRM_LOG_KMS("\n");  } -static u8 intel_sdvo_read_response(struct intel_output *intel_output, +static u8 intel_sdvo_read_response(struct intel_encoder *intel_encoder,  				   void *response, int response_len)  {  	int i; @@ -433,16 +433,16 @@ static u8 intel_sdvo_read_response(struct intel_output *intel_output,  	while (retry--) {  		/* Read the command response */  		for (i = 0; i < response_len; i++) { -			intel_sdvo_read_byte(intel_output, +			intel_sdvo_read_byte(intel_encoder,  					     SDVO_I2C_RETURN_0 + i,  					     &((u8 *)response)[i]);  		}  		/* read the return status */ -		intel_sdvo_read_byte(intel_output, SDVO_I2C_CMD_STATUS, +		intel_sdvo_read_byte(intel_encoder, SDVO_I2C_CMD_STATUS,  				     &status); -		intel_sdvo_debug_response(intel_output, response, response_len, +		intel_sdvo_debug_response(intel_encoder, response, response_len,  					  status);  		if (status != SDVO_CMD_STATUS_PENDING)  			return status; @@ -470,10 +470,10 @@ static int intel_sdvo_get_pixel_multiplier(struct drm_display_mode *mode)   * another I2C transaction after issuing the DDC bus switch, it will be   * switched to the internal SDVO register.   */ -static void intel_sdvo_set_control_bus_switch(struct intel_output *intel_output, +static void intel_sdvo_set_control_bus_switch(struct intel_encoder *intel_encoder,  					      u8 target)  { -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	u8 out_buf[2], cmd_buf[2], ret_value[2], ret;  	struct i2c_msg msgs[] = {  		{ @@ -497,10 +497,10 @@ static void intel_sdvo_set_control_bus_switch(struct intel_output *intel_output,  		},  	}; -	intel_sdvo_debug_write(intel_output, SDVO_CMD_SET_CONTROL_BUS_SWITCH, +	intel_sdvo_debug_write(intel_encoder, SDVO_CMD_SET_CONTROL_BUS_SWITCH,  					&target, 1);  	/* write the DDC switch command argument */ -	intel_sdvo_write_byte(intel_output, SDVO_I2C_ARG_0, target); +	intel_sdvo_write_byte(intel_encoder, SDVO_I2C_ARG_0, target);  	out_buf[0] = SDVO_I2C_OPCODE;  	out_buf[1] = SDVO_CMD_SET_CONTROL_BUS_SWITCH; @@ -509,7 +509,7 @@ static void intel_sdvo_set_control_bus_switch(struct intel_output *intel_output,  	ret_value[0] = 0;  	ret_value[1] = 0; -	ret = i2c_transfer(intel_output->i2c_bus, msgs, 3); +	ret = i2c_transfer(intel_encoder->i2c_bus, msgs, 3);  	if (ret != 3) {  		/* failure in I2C transfer */  		DRM_DEBUG_KMS("I2c transfer returned %d\n", ret); @@ -523,7 +523,7 @@ static void intel_sdvo_set_control_bus_switch(struct intel_output *intel_output,  	return;  } -static bool intel_sdvo_set_target_input(struct intel_output *intel_output, bool target_0, bool target_1) +static bool intel_sdvo_set_target_input(struct intel_encoder *intel_encoder, bool target_0, bool target_1)  {  	struct intel_sdvo_set_target_input_args targets = {0};  	u8 status; @@ -534,10 +534,10 @@ static bool intel_sdvo_set_target_input(struct intel_output *intel_output, bool  	if (target_1)  		targets.target_1 = 1; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_TARGET_INPUT, &targets, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_TARGET_INPUT, &targets,  			     sizeof(targets)); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	return (status == SDVO_CMD_STATUS_SUCCESS);  } @@ -548,13 +548,13 @@ static bool intel_sdvo_set_target_input(struct intel_output *intel_output, bool   * This function is making an assumption about the layout of the response,   * which should be checked against the docs.   */ -static bool intel_sdvo_get_trained_inputs(struct intel_output *intel_output, bool *input_1, bool *input_2) +static bool intel_sdvo_get_trained_inputs(struct intel_encoder *intel_encoder, bool *input_1, bool *input_2)  {  	struct intel_sdvo_get_trained_inputs_response response;  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_TRAINED_INPUTS, NULL, 0); -	status = intel_sdvo_read_response(intel_output, &response, sizeof(response)); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_TRAINED_INPUTS, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, &response, sizeof(response));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; @@ -563,29 +563,29 @@ static bool intel_sdvo_get_trained_inputs(struct intel_output *intel_output, boo  	return true;  } -static bool intel_sdvo_get_active_outputs(struct intel_output *intel_output, +static bool intel_sdvo_get_active_outputs(struct intel_encoder *intel_encoder,  					  u16 *outputs)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_ACTIVE_OUTPUTS, NULL, 0); -	status = intel_sdvo_read_response(intel_output, outputs, sizeof(*outputs)); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_ACTIVE_OUTPUTS, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, outputs, sizeof(*outputs));  	return (status == SDVO_CMD_STATUS_SUCCESS);  } -static bool intel_sdvo_set_active_outputs(struct intel_output *intel_output, +static bool intel_sdvo_set_active_outputs(struct intel_encoder *intel_encoder,  					  u16 outputs)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_ACTIVE_OUTPUTS, &outputs, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_ACTIVE_OUTPUTS, &outputs,  			     sizeof(outputs)); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	return (status == SDVO_CMD_STATUS_SUCCESS);  } -static bool intel_sdvo_set_encoder_power_state(struct intel_output *intel_output, +static bool intel_sdvo_set_encoder_power_state(struct intel_encoder *intel_encoder,  					       int mode)  {  	u8 status, state = SDVO_ENCODER_STATE_ON; @@ -605,24 +605,24 @@ static bool intel_sdvo_set_encoder_power_state(struct intel_output *intel_output  		break;  	} -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_ENCODER_POWER_STATE, &state, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_ENCODER_POWER_STATE, &state,  			     sizeof(state)); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	return (status == SDVO_CMD_STATUS_SUCCESS);  } -static bool intel_sdvo_get_input_pixel_clock_range(struct intel_output *intel_output, +static bool intel_sdvo_get_input_pixel_clock_range(struct intel_encoder *intel_encoder,  						   int *clock_min,  						   int *clock_max)  {  	struct intel_sdvo_pixel_clock_range clocks;  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE,  			     NULL, 0); -	status = intel_sdvo_read_response(intel_output, &clocks, sizeof(clocks)); +	status = intel_sdvo_read_response(intel_encoder, &clocks, sizeof(clocks));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; @@ -634,31 +634,31 @@ static bool intel_sdvo_get_input_pixel_clock_range(struct intel_output *intel_ou  	return true;  } -static bool intel_sdvo_set_target_output(struct intel_output *intel_output, +static bool intel_sdvo_set_target_output(struct intel_encoder *intel_encoder,  					 u16 outputs)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_TARGET_OUTPUT, &outputs, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_TARGET_OUTPUT, &outputs,  			     sizeof(outputs)); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	return (status == SDVO_CMD_STATUS_SUCCESS);  } -static bool intel_sdvo_get_timing(struct intel_output *intel_output, u8 cmd, +static bool intel_sdvo_get_timing(struct intel_encoder *intel_encoder, u8 cmd,  				  struct intel_sdvo_dtd *dtd)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, cmd, NULL, 0); -	status = intel_sdvo_read_response(intel_output, &dtd->part1, +	intel_sdvo_write_cmd(intel_encoder, cmd, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, &dtd->part1,  					  sizeof(dtd->part1));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; -	intel_sdvo_write_cmd(intel_output, cmd + 1, NULL, 0); -	status = intel_sdvo_read_response(intel_output, &dtd->part2, +	intel_sdvo_write_cmd(intel_encoder, cmd + 1, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, &dtd->part2,  					  sizeof(dtd->part2));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; @@ -666,60 +666,60 @@ static bool intel_sdvo_get_timing(struct intel_output *intel_output, u8 cmd,  	return true;  } -static bool intel_sdvo_get_input_timing(struct intel_output *intel_output, +static bool intel_sdvo_get_input_timing(struct intel_encoder *intel_encoder,  					 struct intel_sdvo_dtd *dtd)  { -	return intel_sdvo_get_timing(intel_output, +	return intel_sdvo_get_timing(intel_encoder,  				     SDVO_CMD_GET_INPUT_TIMINGS_PART1, dtd);  } -static bool intel_sdvo_get_output_timing(struct intel_output *intel_output, +static bool intel_sdvo_get_output_timing(struct intel_encoder *intel_encoder,  					 struct intel_sdvo_dtd *dtd)  { -	return intel_sdvo_get_timing(intel_output, +	return intel_sdvo_get_timing(intel_encoder,  				     SDVO_CMD_GET_OUTPUT_TIMINGS_PART1, dtd);  } -static bool intel_sdvo_set_timing(struct intel_output *intel_output, u8 cmd, +static bool intel_sdvo_set_timing(struct intel_encoder *intel_encoder, u8 cmd,  				  struct intel_sdvo_dtd *dtd)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, cmd, &dtd->part1, sizeof(dtd->part1)); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	intel_sdvo_write_cmd(intel_encoder, cmd, &dtd->part1, sizeof(dtd->part1)); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; -	intel_sdvo_write_cmd(intel_output, cmd + 1, &dtd->part2, sizeof(dtd->part2)); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	intel_sdvo_write_cmd(intel_encoder, cmd + 1, &dtd->part2, sizeof(dtd->part2)); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false;  	return true;  } -static bool intel_sdvo_set_input_timing(struct intel_output *intel_output, +static bool intel_sdvo_set_input_timing(struct intel_encoder *intel_encoder,  					 struct intel_sdvo_dtd *dtd)  { -	return intel_sdvo_set_timing(intel_output, +	return intel_sdvo_set_timing(intel_encoder,  				     SDVO_CMD_SET_INPUT_TIMINGS_PART1, dtd);  } -static bool intel_sdvo_set_output_timing(struct intel_output *intel_output, +static bool intel_sdvo_set_output_timing(struct intel_encoder *intel_encoder,  					 struct intel_sdvo_dtd *dtd)  { -	return intel_sdvo_set_timing(intel_output, +	return intel_sdvo_set_timing(intel_encoder,  				     SDVO_CMD_SET_OUTPUT_TIMINGS_PART1, dtd);  }  static bool -intel_sdvo_create_preferred_input_timing(struct intel_output *output, +intel_sdvo_create_preferred_input_timing(struct intel_encoder *intel_encoder,  					 uint16_t clock,  					 uint16_t width,  					 uint16_t height)  {  	struct intel_sdvo_preferred_input_timing_args args; -	struct intel_sdvo_priv *sdvo_priv = output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	uint8_t status;  	memset(&args, 0, sizeof(args)); @@ -733,32 +733,33 @@ intel_sdvo_create_preferred_input_timing(struct intel_output *output,  	    sdvo_priv->sdvo_lvds_fixed_mode->vdisplay != height))  		args.scaled = 1; -	intel_sdvo_write_cmd(output, SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING, +	intel_sdvo_write_cmd(intel_encoder, +			     SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING,  			     &args, sizeof(args)); -	status = intel_sdvo_read_response(output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false;  	return true;  } -static bool intel_sdvo_get_preferred_input_timing(struct intel_output *output, +static bool intel_sdvo_get_preferred_input_timing(struct intel_encoder *intel_encoder,  						  struct intel_sdvo_dtd *dtd)  {  	bool status; -	intel_sdvo_write_cmd(output, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1,  			     NULL, 0); -	status = intel_sdvo_read_response(output, &dtd->part1, +	status = intel_sdvo_read_response(intel_encoder, &dtd->part1,  					  sizeof(dtd->part1));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; -	intel_sdvo_write_cmd(output, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2,  			     NULL, 0); -	status = intel_sdvo_read_response(output, &dtd->part2, +	status = intel_sdvo_read_response(intel_encoder, &dtd->part2,  					  sizeof(dtd->part2));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; @@ -766,12 +767,12 @@ static bool intel_sdvo_get_preferred_input_timing(struct intel_output *output,  	return false;  } -static int intel_sdvo_get_clock_rate_mult(struct intel_output *intel_output) +static int intel_sdvo_get_clock_rate_mult(struct intel_encoder *intel_encoder)  {  	u8 response, status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_CLOCK_RATE_MULT, NULL, 0); -	status = intel_sdvo_read_response(intel_output, &response, 1); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_CLOCK_RATE_MULT, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, &response, 1);  	if (status != SDVO_CMD_STATUS_SUCCESS) {  		DRM_DEBUG_KMS("Couldn't get SDVO clock rate multiplier\n"); @@ -783,12 +784,12 @@ static int intel_sdvo_get_clock_rate_mult(struct intel_output *intel_output)  	return response;  } -static bool intel_sdvo_set_clock_rate_mult(struct intel_output *intel_output, u8 val) +static bool intel_sdvo_set_clock_rate_mult(struct intel_encoder *intel_encoder, u8 val)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1); -	status = intel_sdvo_read_response(intel_output, NULL, 0); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; @@ -877,13 +878,13 @@ static void intel_sdvo_get_mode_from_dtd(struct drm_display_mode * mode,  		mode->flags |= DRM_MODE_FLAG_PVSYNC;  } -static bool intel_sdvo_get_supp_encode(struct intel_output *output, +static bool intel_sdvo_get_supp_encode(struct intel_encoder *intel_encoder,  				       struct intel_sdvo_encode *encode)  {  	uint8_t status; -	intel_sdvo_write_cmd(output, SDVO_CMD_GET_SUPP_ENCODE, NULL, 0); -	status = intel_sdvo_read_response(output, encode, sizeof(*encode)); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_SUPP_ENCODE, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, encode, sizeof(*encode));  	if (status != SDVO_CMD_STATUS_SUCCESS) { /* non-support means DVI */  		memset(encode, 0, sizeof(*encode));  		return false; @@ -892,29 +893,30 @@ static bool intel_sdvo_get_supp_encode(struct intel_output *output,  	return true;  } -static bool intel_sdvo_set_encode(struct intel_output *output, uint8_t mode) +static bool intel_sdvo_set_encode(struct intel_encoder *intel_encoder, +				  uint8_t mode)  {  	uint8_t status; -	intel_sdvo_write_cmd(output, SDVO_CMD_SET_ENCODE, &mode, 1); -	status = intel_sdvo_read_response(output, NULL, 0); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_ENCODE, &mode, 1); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	return (status == SDVO_CMD_STATUS_SUCCESS);  } -static bool intel_sdvo_set_colorimetry(struct intel_output *output, +static bool intel_sdvo_set_colorimetry(struct intel_encoder *intel_encoder,  				       uint8_t mode)  {  	uint8_t status; -	intel_sdvo_write_cmd(output, SDVO_CMD_SET_COLORIMETRY, &mode, 1); -	status = intel_sdvo_read_response(output, NULL, 0); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_COLORIMETRY, &mode, 1); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	return (status == SDVO_CMD_STATUS_SUCCESS);  }  #if 0 -static void intel_sdvo_dump_hdmi_buf(struct intel_output *output) +static void intel_sdvo_dump_hdmi_buf(struct intel_encoder *intel_encoder)  {  	int i, j;  	uint8_t set_buf_index[2]; @@ -923,43 +925,45 @@ static void intel_sdvo_dump_hdmi_buf(struct intel_output *output)  	uint8_t buf[48];  	uint8_t *pos; -	intel_sdvo_write_cmd(output, SDVO_CMD_GET_HBUF_AV_SPLIT, NULL, 0); -	intel_sdvo_read_response(output, &av_split, 1); +	intel_sdvo_write_cmd(encoder, SDVO_CMD_GET_HBUF_AV_SPLIT, NULL, 0); +	intel_sdvo_read_response(encoder, &av_split, 1);  	for (i = 0; i <= av_split; i++) {  		set_buf_index[0] = i; set_buf_index[1] = 0; -		intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_INDEX, +		intel_sdvo_write_cmd(encoder, SDVO_CMD_SET_HBUF_INDEX,  				     set_buf_index, 2); -		intel_sdvo_write_cmd(output, SDVO_CMD_GET_HBUF_INFO, NULL, 0); -		intel_sdvo_read_response(output, &buf_size, 1); +		intel_sdvo_write_cmd(encoder, SDVO_CMD_GET_HBUF_INFO, NULL, 0); +		intel_sdvo_read_response(encoder, &buf_size, 1);  		pos = buf;  		for (j = 0; j <= buf_size; j += 8) { -			intel_sdvo_write_cmd(output, SDVO_CMD_GET_HBUF_DATA, +			intel_sdvo_write_cmd(encoder, SDVO_CMD_GET_HBUF_DATA,  					     NULL, 0); -			intel_sdvo_read_response(output, pos, 8); +			intel_sdvo_read_response(encoder, pos, 8);  			pos += 8;  		}  	}  }  #endif -static void intel_sdvo_set_hdmi_buf(struct intel_output *output, int index, -				uint8_t *data, int8_t size, uint8_t tx_rate) +static void intel_sdvo_set_hdmi_buf(struct intel_encoder *intel_encoder, +				    int index, +				    uint8_t *data, int8_t size, uint8_t tx_rate)  {      uint8_t set_buf_index[2];      set_buf_index[0] = index;      set_buf_index[1] = 0; -    intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_INDEX, set_buf_index, 2); +    intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_HBUF_INDEX, +			 set_buf_index, 2);      for (; size > 0; size -= 8) { -	intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_DATA, data, 8); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_HBUF_DATA, data, 8);  	data += 8;      } -    intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_TXRATE, &tx_rate, 1); +    intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_HBUF_TXRATE, &tx_rate, 1);  }  static uint8_t intel_sdvo_calc_hbuf_csum(uint8_t *data, uint8_t size) @@ -1034,7 +1038,7 @@ struct dip_infoframe {  	} __attribute__ ((packed)) u;  } __attribute__((packed)); -static void intel_sdvo_set_avi_infoframe(struct intel_output *output, +static void intel_sdvo_set_avi_infoframe(struct intel_encoder *intel_encoder,  					 struct drm_display_mode * mode)  {  	struct dip_infoframe avi_if = { @@ -1045,15 +1049,16 @@ static void intel_sdvo_set_avi_infoframe(struct intel_output *output,  	avi_if.checksum = intel_sdvo_calc_hbuf_csum((uint8_t *)&avi_if,  						    4 + avi_if.len); -	intel_sdvo_set_hdmi_buf(output, 1, (uint8_t *)&avi_if, 4 + avi_if.len, +	intel_sdvo_set_hdmi_buf(intel_encoder, 1, (uint8_t *)&avi_if, +				4 + avi_if.len,  				SDVO_HBUF_TX_VSYNC);  } -static void intel_sdvo_set_tv_format(struct intel_output *output) +static void intel_sdvo_set_tv_format(struct intel_encoder *intel_encoder)  {  	struct intel_sdvo_tv_format format; -	struct intel_sdvo_priv *sdvo_priv = output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	uint32_t format_map, i;  	uint8_t status; @@ -1066,10 +1071,10 @@ static void intel_sdvo_set_tv_format(struct intel_output *output)  	memcpy(&format, &format_map, sizeof(format_map) > sizeof(format) ?  			sizeof(format) : sizeof(format_map)); -	intel_sdvo_write_cmd(output, SDVO_CMD_SET_TV_FORMAT, &format_map, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_TV_FORMAT, &format_map,  			     sizeof(format)); -	status = intel_sdvo_read_response(output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	if (status != SDVO_CMD_STATUS_SUCCESS)  		DRM_DEBUG_KMS("%s: Failed to set TV format\n",  			  SDVO_NAME(sdvo_priv)); @@ -1079,8 +1084,8 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,  				  struct drm_display_mode *mode,  				  struct drm_display_mode *adjusted_mode)  { -	struct intel_output *output = enc_to_intel_output(encoder); -	struct intel_sdvo_priv *dev_priv = output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_sdvo_priv *dev_priv = intel_encoder->dev_priv;  	if (dev_priv->is_tv) {  		struct intel_sdvo_dtd output_dtd; @@ -1095,22 +1100,22 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,  		/* Set output timings */  		intel_sdvo_get_dtd_from_mode(&output_dtd, mode); -		intel_sdvo_set_target_output(output, +		intel_sdvo_set_target_output(intel_encoder,  					     dev_priv->controlled_output); -		intel_sdvo_set_output_timing(output, &output_dtd); +		intel_sdvo_set_output_timing(intel_encoder, &output_dtd);  		/* Set the input timing to the screen. Assume always input 0. */ -		intel_sdvo_set_target_input(output, true, false); +		intel_sdvo_set_target_input(intel_encoder, true, false); -		success = intel_sdvo_create_preferred_input_timing(output, +		success = intel_sdvo_create_preferred_input_timing(intel_encoder,  								   mode->clock / 10,  								   mode->hdisplay,  								   mode->vdisplay);  		if (success) {  			struct intel_sdvo_dtd input_dtd; -			intel_sdvo_get_preferred_input_timing(output, +			intel_sdvo_get_preferred_input_timing(intel_encoder,  							     &input_dtd);  			intel_sdvo_get_mode_from_dtd(adjusted_mode, &input_dtd);  			dev_priv->sdvo_flags = input_dtd.part2.sdvo_flags; @@ -1133,16 +1138,16 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,  		intel_sdvo_get_dtd_from_mode(&output_dtd,  				dev_priv->sdvo_lvds_fixed_mode); -		intel_sdvo_set_target_output(output, +		intel_sdvo_set_target_output(intel_encoder,  					     dev_priv->controlled_output); -		intel_sdvo_set_output_timing(output, &output_dtd); +		intel_sdvo_set_output_timing(intel_encoder, &output_dtd);  		/* Set the input timing to the screen. Assume always input 0. */ -		intel_sdvo_set_target_input(output, true, false); +		intel_sdvo_set_target_input(intel_encoder, true, false);  		success = intel_sdvo_create_preferred_input_timing( -				output, +				intel_encoder,  				mode->clock / 10,  				mode->hdisplay,  				mode->vdisplay); @@ -1150,7 +1155,7 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,  		if (success) {  			struct intel_sdvo_dtd input_dtd; -			intel_sdvo_get_preferred_input_timing(output, +			intel_sdvo_get_preferred_input_timing(intel_encoder,  							     &input_dtd);  			intel_sdvo_get_mode_from_dtd(adjusted_mode, &input_dtd);  			dev_priv->sdvo_flags = input_dtd.part2.sdvo_flags; @@ -1182,8 +1187,8 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_crtc *crtc = encoder->crtc;  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -	struct intel_output *output = enc_to_intel_output(encoder); -	struct intel_sdvo_priv *sdvo_priv = output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	u32 sdvox = 0;  	int sdvo_pixel_multiply;  	struct intel_sdvo_in_out_map in_out; @@ -1202,12 +1207,12 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,  	in_out.in0 = sdvo_priv->controlled_output;  	in_out.in1 = 0; -	intel_sdvo_write_cmd(output, SDVO_CMD_SET_IN_OUT_MAP, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_IN_OUT_MAP,  			     &in_out, sizeof(in_out)); -	status = intel_sdvo_read_response(output, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, NULL, 0);  	if (sdvo_priv->is_hdmi) { -		intel_sdvo_set_avi_infoframe(output, mode); +		intel_sdvo_set_avi_infoframe(intel_encoder, mode);  		sdvox |= SDVO_AUDIO_ENABLE;  	} @@ -1224,16 +1229,16 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,  	 */  	if (!sdvo_priv->is_tv && !sdvo_priv->is_lvds) {  		/* Set the output timing to the screen */ -		intel_sdvo_set_target_output(output, +		intel_sdvo_set_target_output(intel_encoder,  					     sdvo_priv->controlled_output); -		intel_sdvo_set_output_timing(output, &input_dtd); +		intel_sdvo_set_output_timing(intel_encoder, &input_dtd);  	}  	/* Set the input timing to the screen. Assume always input 0. */ -	intel_sdvo_set_target_input(output, true, false); +	intel_sdvo_set_target_input(intel_encoder, true, false);  	if (sdvo_priv->is_tv) -		intel_sdvo_set_tv_format(output); +		intel_sdvo_set_tv_format(intel_encoder);  	/* We would like to use intel_sdvo_create_preferred_input_timing() to  	 * provide the device with a timing it can support, if it supports that @@ -1241,29 +1246,29 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,  	 * output the preferred timing, and we don't support that currently.  	 */  #if 0 -	success = intel_sdvo_create_preferred_input_timing(output, clock, +	success = intel_sdvo_create_preferred_input_timing(encoder, clock,  							   width, height);  	if (success) {  		struct intel_sdvo_dtd *input_dtd; -		intel_sdvo_get_preferred_input_timing(output, &input_dtd); -		intel_sdvo_set_input_timing(output, &input_dtd); +		intel_sdvo_get_preferred_input_timing(encoder, &input_dtd); +		intel_sdvo_set_input_timing(encoder, &input_dtd);  	}  #else -	intel_sdvo_set_input_timing(output, &input_dtd); +	intel_sdvo_set_input_timing(intel_encoder, &input_dtd);  #endif  	switch (intel_sdvo_get_pixel_multiplier(mode)) {  	case 1: -		intel_sdvo_set_clock_rate_mult(output, +		intel_sdvo_set_clock_rate_mult(intel_encoder,  					       SDVO_CLOCK_RATE_MULT_1X);  		break;  	case 2: -		intel_sdvo_set_clock_rate_mult(output, +		intel_sdvo_set_clock_rate_mult(intel_encoder,  					       SDVO_CLOCK_RATE_MULT_2X);  		break;  	case 4: -		intel_sdvo_set_clock_rate_mult(output, +		intel_sdvo_set_clock_rate_mult(intel_encoder,  					       SDVO_CLOCK_RATE_MULT_4X);  		break;  	} @@ -1274,8 +1279,8 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,  			SDVO_VSYNC_ACTIVE_HIGH |  			SDVO_HSYNC_ACTIVE_HIGH;  	} else { -		sdvox |= I915_READ(sdvo_priv->output_device); -		switch (sdvo_priv->output_device) { +		sdvox |= I915_READ(sdvo_priv->sdvo_reg); +		switch (sdvo_priv->sdvo_reg) {  		case SDVOB:  			sdvox &= SDVOB_PRESERVE_MASK;  			break; @@ -1299,26 +1304,26 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,  	if (sdvo_priv->sdvo_flags & SDVO_NEED_TO_STALL)  		sdvox |= SDVO_STALL_SELECT; -	intel_sdvo_write_sdvox(output, sdvox); +	intel_sdvo_write_sdvox(intel_encoder, sdvox);  }  static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode)  {  	struct drm_device *dev = encoder->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	u32 temp;  	if (mode != DRM_MODE_DPMS_ON) { -		intel_sdvo_set_active_outputs(intel_output, 0); +		intel_sdvo_set_active_outputs(intel_encoder, 0);  		if (0) -			intel_sdvo_set_encoder_power_state(intel_output, mode); +			intel_sdvo_set_encoder_power_state(intel_encoder, mode);  		if (mode == DRM_MODE_DPMS_OFF) { -			temp = I915_READ(sdvo_priv->output_device); +			temp = I915_READ(sdvo_priv->sdvo_reg);  			if ((temp & SDVO_ENABLE) != 0) { -				intel_sdvo_write_sdvox(intel_output, temp & ~SDVO_ENABLE); +				intel_sdvo_write_sdvox(intel_encoder, temp & ~SDVO_ENABLE);  			}  		}  	} else { @@ -1326,13 +1331,13 @@ static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode)  		int i;  		u8 status; -		temp = I915_READ(sdvo_priv->output_device); +		temp = I915_READ(sdvo_priv->sdvo_reg);  		if ((temp & SDVO_ENABLE) == 0) -			intel_sdvo_write_sdvox(intel_output, temp | SDVO_ENABLE); +			intel_sdvo_write_sdvox(intel_encoder, temp | SDVO_ENABLE);  		for (i = 0; i < 2; i++)  		  intel_wait_for_vblank(dev); -		status = intel_sdvo_get_trained_inputs(intel_output, &input1, +		status = intel_sdvo_get_trained_inputs(intel_encoder, &input1,  						       &input2); @@ -1346,8 +1351,8 @@ static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode)  		}  		if (0) -			intel_sdvo_set_encoder_power_state(intel_output, mode); -		intel_sdvo_set_active_outputs(intel_output, sdvo_priv->controlled_output); +			intel_sdvo_set_encoder_power_state(intel_encoder, mode); +		intel_sdvo_set_active_outputs(intel_encoder, sdvo_priv->controlled_output);  	}  	return;  } @@ -1356,22 +1361,22 @@ static void intel_sdvo_save(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	int o; -	sdvo_priv->save_sdvo_mult = intel_sdvo_get_clock_rate_mult(intel_output); -	intel_sdvo_get_active_outputs(intel_output, &sdvo_priv->save_active_outputs); +	sdvo_priv->save_sdvo_mult = intel_sdvo_get_clock_rate_mult(intel_encoder); +	intel_sdvo_get_active_outputs(intel_encoder, &sdvo_priv->save_active_outputs);  	if (sdvo_priv->caps.sdvo_inputs_mask & 0x1) { -		intel_sdvo_set_target_input(intel_output, true, false); -		intel_sdvo_get_input_timing(intel_output, +		intel_sdvo_set_target_input(intel_encoder, true, false); +		intel_sdvo_get_input_timing(intel_encoder,  					    &sdvo_priv->save_input_dtd_1);  	}  	if (sdvo_priv->caps.sdvo_inputs_mask & 0x2) { -		intel_sdvo_set_target_input(intel_output, false, true); -		intel_sdvo_get_input_timing(intel_output, +		intel_sdvo_set_target_input(intel_encoder, false, true); +		intel_sdvo_get_input_timing(intel_encoder,  					    &sdvo_priv->save_input_dtd_2);  	} @@ -1380,8 +1385,8 @@ static void intel_sdvo_save(struct drm_connector *connector)  	        u16  this_output = (1 << o);  		if (sdvo_priv->caps.output_flags & this_output)  		{ -			intel_sdvo_set_target_output(intel_output, this_output); -			intel_sdvo_get_output_timing(intel_output, +			intel_sdvo_set_target_output(intel_encoder, this_output); +			intel_sdvo_get_output_timing(intel_encoder,  						     &sdvo_priv->save_output_dtd[o]);  		}  	} @@ -1389,66 +1394,66 @@ static void intel_sdvo_save(struct drm_connector *connector)  		/* XXX: Save TV format/enhancements. */  	} -	sdvo_priv->save_SDVOX = I915_READ(sdvo_priv->output_device); +	sdvo_priv->save_SDVOX = I915_READ(sdvo_priv->sdvo_reg);  }  static void intel_sdvo_restore(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	int o;  	int i;  	bool input1, input2;  	u8 status; -	intel_sdvo_set_active_outputs(intel_output, 0); +	intel_sdvo_set_active_outputs(intel_encoder, 0);  	for (o = SDVO_OUTPUT_FIRST; o <= SDVO_OUTPUT_LAST; o++)  	{  		u16  this_output = (1 << o);  		if (sdvo_priv->caps.output_flags & this_output) { -			intel_sdvo_set_target_output(intel_output, this_output); -			intel_sdvo_set_output_timing(intel_output, &sdvo_priv->save_output_dtd[o]); +			intel_sdvo_set_target_output(intel_encoder, this_output); +			intel_sdvo_set_output_timing(intel_encoder, &sdvo_priv->save_output_dtd[o]);  		}  	}  	if (sdvo_priv->caps.sdvo_inputs_mask & 0x1) { -		intel_sdvo_set_target_input(intel_output, true, false); -		intel_sdvo_set_input_timing(intel_output, &sdvo_priv->save_input_dtd_1); +		intel_sdvo_set_target_input(intel_encoder, true, false); +		intel_sdvo_set_input_timing(intel_encoder, &sdvo_priv->save_input_dtd_1);  	}  	if (sdvo_priv->caps.sdvo_inputs_mask & 0x2) { -		intel_sdvo_set_target_input(intel_output, false, true); -		intel_sdvo_set_input_timing(intel_output, &sdvo_priv->save_input_dtd_2); +		intel_sdvo_set_target_input(intel_encoder, false, true); +		intel_sdvo_set_input_timing(intel_encoder, &sdvo_priv->save_input_dtd_2);  	} -	intel_sdvo_set_clock_rate_mult(intel_output, sdvo_priv->save_sdvo_mult); +	intel_sdvo_set_clock_rate_mult(intel_encoder, sdvo_priv->save_sdvo_mult);  	if (sdvo_priv->is_tv) {  		/* XXX: Restore TV format/enhancements. */  	} -	intel_sdvo_write_sdvox(intel_output, sdvo_priv->save_SDVOX); +	intel_sdvo_write_sdvox(intel_encoder, sdvo_priv->save_SDVOX);  	if (sdvo_priv->save_SDVOX & SDVO_ENABLE)  	{  		for (i = 0; i < 2; i++)  			intel_wait_for_vblank(dev); -		status = intel_sdvo_get_trained_inputs(intel_output, &input1, &input2); +		status = intel_sdvo_get_trained_inputs(intel_encoder, &input1, &input2);  		if (status == SDVO_CMD_STATUS_SUCCESS && !input1)  			DRM_DEBUG_KMS("First %s output reported failure to "  					"sync\n", SDVO_NAME(sdvo_priv));  	} -	intel_sdvo_set_active_outputs(intel_output, sdvo_priv->save_active_outputs); +	intel_sdvo_set_active_outputs(intel_encoder, sdvo_priv->save_active_outputs);  }  static int intel_sdvo_mode_valid(struct drm_connector *connector,  				 struct drm_display_mode *mode)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)  		return MODE_NO_DBLESCAN; @@ -1473,12 +1478,12 @@ static int intel_sdvo_mode_valid(struct drm_connector *connector,  	return MODE_OK;  } -static bool intel_sdvo_get_capabilities(struct intel_output *intel_output, struct intel_sdvo_caps *caps) +static bool intel_sdvo_get_capabilities(struct intel_encoder *intel_encoder, struct intel_sdvo_caps *caps)  {  	u8 status; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_DEVICE_CAPS, NULL, 0); -	status = intel_sdvo_read_response(intel_output, caps, sizeof(*caps)); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_DEVICE_CAPS, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, caps, sizeof(*caps));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return false; @@ -1488,22 +1493,22 @@ static bool intel_sdvo_get_capabilities(struct intel_output *intel_output, struc  struct drm_connector* intel_sdvo_find(struct drm_device *dev, int sdvoB)  {  	struct drm_connector *connector = NULL; -	struct intel_output *iout = NULL; +	struct intel_encoder *iout = NULL;  	struct intel_sdvo_priv *sdvo;  	/* find the sdvo connector */  	list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -		iout = to_intel_output(connector); +		iout = to_intel_encoder(connector);  		if (iout->type != INTEL_OUTPUT_SDVO)  			continue;  		sdvo = iout->dev_priv; -		if (sdvo->output_device == SDVOB && sdvoB) +		if (sdvo->sdvo_reg == SDVOB && sdvoB)  			return connector; -		if (sdvo->output_device == SDVOC && !sdvoB) +		if (sdvo->sdvo_reg == SDVOC && !sdvoB)  			return connector;  	} @@ -1515,16 +1520,16 @@ int intel_sdvo_supports_hotplug(struct drm_connector *connector)  {  	u8 response[2];  	u8 status; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	DRM_DEBUG_KMS("\n");  	if (!connector)  		return 0; -	intel_output = to_intel_output(connector); +	intel_encoder = to_intel_encoder(connector); -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0); -	status = intel_sdvo_read_response(intel_output, &response, 2); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0); +	status = intel_sdvo_read_response(intel_encoder, &response, 2);  	if (response[0] !=0)  		return 1; @@ -1536,30 +1541,30 @@ void intel_sdvo_set_hotplug(struct drm_connector *connector, int on)  {  	u8 response[2];  	u8 status; -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0); -	intel_sdvo_read_response(intel_output, &response, 2); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0); +	intel_sdvo_read_response(intel_encoder, &response, 2);  	if (on) { -		intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0); -		status = intel_sdvo_read_response(intel_output, &response, 2); +		intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0); +		status = intel_sdvo_read_response(intel_encoder, &response, 2); -		intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2); +		intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2);  	} else {  		response[0] = 0;  		response[1] = 0; -		intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2); +		intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2);  	} -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0); -	intel_sdvo_read_response(intel_output, &response, 2); +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0); +	intel_sdvo_read_response(intel_encoder, &response, 2);  }  static bool -intel_sdvo_multifunc_encoder(struct intel_output *intel_output) +intel_sdvo_multifunc_encoder(struct intel_encoder *intel_encoder)  { -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	int caps = 0;  	if (sdvo_priv->caps.output_flags & @@ -1593,11 +1598,11 @@ static struct drm_connector *  intel_find_analog_connector(struct drm_device *dev)  {  	struct drm_connector *connector; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -		intel_output = to_intel_output(connector); -		if (intel_output->type == INTEL_OUTPUT_ANALOG) +		intel_encoder = to_intel_encoder(connector); +		if (intel_encoder->type == INTEL_OUTPUT_ANALOG)  			return connector;  	}  	return NULL; @@ -1622,16 +1627,16 @@ intel_analog_is_connected(struct drm_device *dev)  enum drm_connector_status  intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	enum drm_connector_status status = connector_status_connected;  	struct edid *edid = NULL; -	edid = drm_get_edid(&intel_output->base, -			    intel_output->ddc_bus); +	edid = drm_get_edid(&intel_encoder->base, +			    intel_encoder->ddc_bus);  	/* This is only applied to SDVO cards with multiple outputs */ -	if (edid == NULL && intel_sdvo_multifunc_encoder(intel_output)) { +	if (edid == NULL && intel_sdvo_multifunc_encoder(intel_encoder)) {  		uint8_t saved_ddc, temp_ddc;  		saved_ddc = sdvo_priv->ddc_bus;  		temp_ddc = sdvo_priv->ddc_bus >> 1; @@ -1641,8 +1646,8 @@ intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)  		 */  		while(temp_ddc > 1) {  			sdvo_priv->ddc_bus = temp_ddc; -			edid = drm_get_edid(&intel_output->base, -				intel_output->ddc_bus); +			edid = drm_get_edid(&intel_encoder->base, +				intel_encoder->ddc_bus);  			if (edid) {  				/*  				 * When we can get the EDID, maybe it is the @@ -1661,8 +1666,8 @@ intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)  	 */  	if (edid == NULL &&  	    sdvo_priv->analog_ddc_bus && -	    !intel_analog_is_connected(intel_output->base.dev)) -		edid = drm_get_edid(&intel_output->base, +	    !intel_analog_is_connected(intel_encoder->base.dev)) +		edid = drm_get_edid(&intel_encoder->base,  				    sdvo_priv->analog_ddc_bus);  	if (edid != NULL) {  		/* Don't report the output as connected if it's a DVI-I @@ -1677,7 +1682,7 @@ intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)  		}  		kfree(edid); -		intel_output->base.display_info.raw_edid = NULL; +		intel_encoder->base.display_info.raw_edid = NULL;  	} else if (response & (SDVO_OUTPUT_TMDS0 | SDVO_OUTPUT_TMDS1))  		status = connector_status_disconnected; @@ -1689,16 +1694,16 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect  {  	uint16_t response;  	u8 status; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv; -	intel_sdvo_write_cmd(intel_output, +	intel_sdvo_write_cmd(intel_encoder,  			     SDVO_CMD_GET_ATTACHED_DISPLAYS, NULL, 0);  	if (sdvo_priv->is_tv) {  		/* add 30ms delay when the output type is SDVO-TV */  		mdelay(30);  	} -	status = intel_sdvo_read_response(intel_output, &response, 2); +	status = intel_sdvo_read_response(intel_encoder, &response, 2);  	DRM_DEBUG_KMS("SDVO response %d %d\n", response & 0xff, response >> 8); @@ -1708,10 +1713,10 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect  	if (response == 0)  		return connector_status_disconnected; -	if (intel_sdvo_multifunc_encoder(intel_output) && +	if (intel_sdvo_multifunc_encoder(intel_encoder) &&  		sdvo_priv->attached_output != response) {  		if (sdvo_priv->controlled_output != response && -			intel_sdvo_output_setup(intel_output, response) != true) +			intel_sdvo_output_setup(intel_encoder, response) != true)  			return connector_status_unknown;  		sdvo_priv->attached_output = response;  	} @@ -1720,12 +1725,12 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect  static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	int num_modes;  	/* set the bus switch and get the modes */ -	num_modes = intel_ddc_get_modes(intel_output); +	num_modes = intel_ddc_get_modes(intel_encoder);  	/*  	 * Mac mini hack.  On this device, the DVI-I connector shares one DDC @@ -1735,17 +1740,17 @@ static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)  	 */  	if (num_modes == 0 &&  	    sdvo_priv->analog_ddc_bus && -	    !intel_analog_is_connected(intel_output->base.dev)) { +	    !intel_analog_is_connected(intel_encoder->base.dev)) {  		struct i2c_adapter *digital_ddc_bus;  		/* Switch to the analog ddc bus and try that  		 */ -		digital_ddc_bus = intel_output->ddc_bus; -		intel_output->ddc_bus = sdvo_priv->analog_ddc_bus; +		digital_ddc_bus = intel_encoder->ddc_bus; +		intel_encoder->ddc_bus = sdvo_priv->analog_ddc_bus; -		(void) intel_ddc_get_modes(intel_output); +		(void) intel_ddc_get_modes(intel_encoder); -		intel_output->ddc_bus = digital_ddc_bus; +		intel_encoder->ddc_bus = digital_ddc_bus;  	}  } @@ -1816,7 +1821,7 @@ struct drm_display_mode sdvo_tv_modes[] = {  static void intel_sdvo_get_tv_modes(struct drm_connector *connector)  { -	struct intel_output *output = to_intel_output(connector); +	struct intel_encoder *output = to_intel_encoder(connector);  	struct intel_sdvo_priv *sdvo_priv = output->dev_priv;  	struct intel_sdvo_sdtv_resolution_request tv_res;  	uint32_t reply = 0, format_map = 0; @@ -1858,9 +1863,9 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector)  static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	struct drm_i915_private *dev_priv = connector->dev->dev_private; -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	struct drm_display_mode *newmode;  	/* @@ -1868,7 +1873,7 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)  	 * Assume that the preferred modes are  	 * arranged in priority order.  	 */ -	intel_ddc_get_modes(intel_output); +	intel_ddc_get_modes(intel_encoder);  	if (list_empty(&connector->probed_modes) == false)  		goto end; @@ -1897,7 +1902,7 @@ end:  static int intel_sdvo_get_modes(struct drm_connector *connector)  { -	struct intel_output *output = to_intel_output(connector); +	struct intel_encoder *output = to_intel_encoder(connector);  	struct intel_sdvo_priv *sdvo_priv = output->dev_priv;  	if (sdvo_priv->is_tv) @@ -1915,8 +1920,8 @@ static int intel_sdvo_get_modes(struct drm_connector *connector)  static  void intel_sdvo_destroy_enhance_property(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	struct drm_device *dev = connector->dev;  	if (sdvo_priv->is_tv) { @@ -1953,13 +1958,13 @@ void intel_sdvo_destroy_enhance_property(struct drm_connector *connector)  static void intel_sdvo_destroy(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv; -	if (intel_output->i2c_bus) -		intel_i2c_destroy(intel_output->i2c_bus); -	if (intel_output->ddc_bus) -		intel_i2c_destroy(intel_output->ddc_bus); +	if (intel_encoder->i2c_bus) +		intel_i2c_destroy(intel_encoder->i2c_bus); +	if (intel_encoder->ddc_bus) +		intel_i2c_destroy(intel_encoder->ddc_bus);  	if (sdvo_priv->analog_ddc_bus)  		intel_i2c_destroy(sdvo_priv->analog_ddc_bus); @@ -1977,7 +1982,7 @@ static void intel_sdvo_destroy(struct drm_connector *connector)  	drm_sysfs_connector_remove(connector);  	drm_connector_cleanup(connector); -	kfree(intel_output); +	kfree(intel_encoder);  }  static int @@ -1985,9 +1990,9 @@ intel_sdvo_set_property(struct drm_connector *connector,  			struct drm_property *property,  			uint64_t val)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; -	struct drm_encoder *encoder = &intel_output->enc; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv; +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_crtc *crtc = encoder->crtc;  	int ret = 0;  	bool changed = false; @@ -2095,8 +2100,8 @@ intel_sdvo_set_property(struct drm_connector *connector,  			sdvo_priv->cur_brightness = temp_value;  		}  		if (cmd) { -			intel_sdvo_write_cmd(intel_output, cmd, &temp_value, 2); -			status = intel_sdvo_read_response(intel_output, +			intel_sdvo_write_cmd(intel_encoder, cmd, &temp_value, 2); +			status = intel_sdvo_read_response(intel_encoder,  								NULL, 0);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO command \n"); @@ -2191,7 +2196,7 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo_priv *dev_priv)  }  static bool -intel_sdvo_get_digital_encoding_mode(struct intel_output *output) +intel_sdvo_get_digital_encoding_mode(struct intel_encoder *output)  {  	struct intel_sdvo_priv *sdvo_priv = output->dev_priv;  	uint8_t status; @@ -2205,42 +2210,42 @@ intel_sdvo_get_digital_encoding_mode(struct intel_output *output)  	return true;  } -static struct intel_output * -intel_sdvo_chan_to_intel_output(struct intel_i2c_chan *chan) +static struct intel_encoder * +intel_sdvo_chan_to_intel_encoder(struct intel_i2c_chan *chan)  {  	struct drm_device *dev = chan->drm_dev;  	struct drm_connector *connector; -	struct intel_output *intel_output = NULL; +	struct intel_encoder *intel_encoder = NULL;  	list_for_each_entry(connector,  			&dev->mode_config.connector_list, head) { -		if (to_intel_output(connector)->ddc_bus == &chan->adapter) { -			intel_output = to_intel_output(connector); +		if (to_intel_encoder(connector)->ddc_bus == &chan->adapter) { +			intel_encoder = to_intel_encoder(connector);  			break;  		}  	} -	return intel_output; +	return intel_encoder;  }  static int intel_sdvo_master_xfer(struct i2c_adapter *i2c_adap,  				  struct i2c_msg msgs[], int num)  { -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct intel_sdvo_priv *sdvo_priv;  	struct i2c_algo_bit_data *algo_data;  	const struct i2c_algorithm *algo;  	algo_data = (struct i2c_algo_bit_data *)i2c_adap->algo_data; -	intel_output = -		intel_sdvo_chan_to_intel_output( +	intel_encoder = +		intel_sdvo_chan_to_intel_encoder(  				(struct intel_i2c_chan *)(algo_data->data)); -	if (intel_output == NULL) +	if (intel_encoder == NULL)  		return -EINVAL; -	sdvo_priv = intel_output->dev_priv; -	algo = intel_output->i2c_bus->algo; +	sdvo_priv = intel_encoder->dev_priv; +	algo = intel_encoder->i2c_bus->algo; -	intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus); +	intel_sdvo_set_control_bus_switch(intel_encoder, sdvo_priv->ddc_bus);  	return algo->master_xfer(i2c_adap, msgs, num);  } @@ -2249,12 +2254,12 @@ static struct i2c_algorithm intel_sdvo_i2c_bit_algo = {  };  static u8 -intel_sdvo_get_slave_addr(struct drm_device *dev, int output_device) +intel_sdvo_get_slave_addr(struct drm_device *dev, int sdvo_reg)  {  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct sdvo_device_mapping *my_mapping, *other_mapping; -	if (output_device == SDVOB) { +	if (sdvo_reg == SDVOB) {  		my_mapping = &dev_priv->sdvo_mappings[0];  		other_mapping = &dev_priv->sdvo_mappings[1];  	} else { @@ -2279,7 +2284,7 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, int output_device)  	/* No SDVO device info is found for another DVO port,  	 * so use mapping assumption we had before BIOS parsing.  	 */ -	if (output_device == SDVOB) +	if (sdvo_reg == SDVOB)  		return 0x70;  	else  		return 0x72; @@ -2305,15 +2310,15 @@ static struct dmi_system_id intel_sdvo_bad_tv[] = {  };  static bool -intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags) +intel_sdvo_output_setup(struct intel_encoder *intel_encoder, uint16_t flags)  { -	struct drm_connector *connector = &intel_output->base; -	struct drm_encoder *encoder = &intel_output->enc; -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct drm_connector *connector = &intel_encoder->base; +	struct drm_encoder *encoder = &intel_encoder->enc; +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	bool ret = true, registered = false;  	sdvo_priv->is_tv = false; -	intel_output->needs_tv_clock = false; +	intel_encoder->needs_tv_clock = false;  	sdvo_priv->is_lvds = false;  	if (device_is_registered(&connector->kdev)) { @@ -2331,16 +2336,16 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  		encoder->encoder_type = DRM_MODE_ENCODER_TMDS;  		connector->connector_type = DRM_MODE_CONNECTOR_DVID; -		if (intel_sdvo_get_supp_encode(intel_output, +		if (intel_sdvo_get_supp_encode(intel_encoder,  					       &sdvo_priv->encode) && -		    intel_sdvo_get_digital_encoding_mode(intel_output) && +		    intel_sdvo_get_digital_encoding_mode(intel_encoder) &&  		    sdvo_priv->is_hdmi) {  			/* enable hdmi encoding mode if supported */ -			intel_sdvo_set_encode(intel_output, SDVO_ENCODE_HDMI); -			intel_sdvo_set_colorimetry(intel_output, +			intel_sdvo_set_encode(intel_encoder, SDVO_ENCODE_HDMI); +			intel_sdvo_set_colorimetry(intel_encoder,  						   SDVO_COLORIMETRY_RGB256);  			connector->connector_type = DRM_MODE_CONNECTOR_HDMIA; -			intel_output->clone_mask = +			intel_encoder->clone_mask =  					(1 << INTEL_SDVO_NON_TV_CLONE_BIT) |  					(1 << INTEL_ANALOG_CLONE_BIT);  		} @@ -2351,21 +2356,21 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  		encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;  		connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO;  		sdvo_priv->is_tv = true; -		intel_output->needs_tv_clock = true; -		intel_output->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; +		intel_encoder->needs_tv_clock = true; +		intel_encoder->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT;  	} else if (flags & SDVO_OUTPUT_RGB0) {  		sdvo_priv->controlled_output = SDVO_OUTPUT_RGB0;  		encoder->encoder_type = DRM_MODE_ENCODER_DAC;  		connector->connector_type = DRM_MODE_CONNECTOR_VGA; -		intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | +		intel_encoder->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |  					(1 << INTEL_ANALOG_CLONE_BIT);  	} else if (flags & SDVO_OUTPUT_RGB1) {  		sdvo_priv->controlled_output = SDVO_OUTPUT_RGB1;  		encoder->encoder_type = DRM_MODE_ENCODER_DAC;  		connector->connector_type = DRM_MODE_CONNECTOR_VGA; -		intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | +		intel_encoder->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |  					(1 << INTEL_ANALOG_CLONE_BIT);  	} else if (flags & SDVO_OUTPUT_CVBS0) { @@ -2373,15 +2378,15 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  		encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;  		connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO;  		sdvo_priv->is_tv = true; -		intel_output->needs_tv_clock = true; -		intel_output->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; +		intel_encoder->needs_tv_clock = true; +		intel_encoder->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT;  	} else if (flags & SDVO_OUTPUT_LVDS0) {  		sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS0;  		encoder->encoder_type = DRM_MODE_ENCODER_LVDS;  		connector->connector_type = DRM_MODE_CONNECTOR_LVDS;  		sdvo_priv->is_lvds = true; -		intel_output->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT) | +		intel_encoder->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT) |  					(1 << INTEL_SDVO_LVDS_CLONE_BIT);  	} else if (flags & SDVO_OUTPUT_LVDS1) { @@ -2389,7 +2394,7 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  		encoder->encoder_type = DRM_MODE_ENCODER_LVDS;  		connector->connector_type = DRM_MODE_CONNECTOR_LVDS;  		sdvo_priv->is_lvds = true; -		intel_output->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT) | +		intel_encoder->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT) |  					(1 << INTEL_SDVO_LVDS_CLONE_BIT);  	} else { @@ -2402,7 +2407,7 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  			      bytes[0], bytes[1]);  		ret = false;  	} -	intel_output->crtc_mask = (1 << 0) | (1 << 1); +	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);  	if (ret && registered)  		ret = drm_sysfs_connector_add(connector) == 0 ? true : false; @@ -2414,18 +2419,18 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)  static void intel_sdvo_tv_create_property(struct drm_connector *connector)  { -      struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +      struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	struct intel_sdvo_tv_format format;  	uint32_t format_map, i;  	uint8_t status; -	intel_sdvo_set_target_output(intel_output, +	intel_sdvo_set_target_output(intel_encoder,  				     sdvo_priv->controlled_output); -	intel_sdvo_write_cmd(intel_output, +	intel_sdvo_write_cmd(intel_encoder,  			     SDVO_CMD_GET_SUPPORTED_TV_FORMATS, NULL, 0); -	status = intel_sdvo_read_response(intel_output, +	status = intel_sdvo_read_response(intel_encoder,  					  &format, sizeof(format));  	if (status != SDVO_CMD_STATUS_SUCCESS)  		return; @@ -2463,16 +2468,16 @@ static void intel_sdvo_tv_create_property(struct drm_connector *connector)  static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_sdvo_priv *sdvo_priv = intel_encoder->dev_priv;  	struct intel_sdvo_enhancements_reply sdvo_data;  	struct drm_device *dev = connector->dev;  	uint8_t status;  	uint16_t response, data_value[2]; -	intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS, +	intel_sdvo_write_cmd(intel_encoder, SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS,  						NULL, 0); -	status = intel_sdvo_read_response(intel_output, &sdvo_data, +	status = intel_sdvo_read_response(intel_encoder, &sdvo_data,  					sizeof(sdvo_data));  	if (status != SDVO_CMD_STATUS_SUCCESS) {  		DRM_DEBUG_KMS(" incorrect response is returned\n"); @@ -2488,18 +2493,18 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  		 * property  		 */  		if (sdvo_data.overscan_h) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_OVERSCAN_H, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO max "  						"h_overscan\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_OVERSCAN_H, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO h_overscan\n"); @@ -2529,18 +2534,18 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  					data_value[0], data_value[1], response);  		}  		if (sdvo_data.overscan_v) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_OVERSCAN_V, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO max "  						"v_overscan\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_OVERSCAN_V, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO v_overscan\n"); @@ -2570,17 +2575,17 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  					data_value[0], data_value[1], response);  		}  		if (sdvo_data.position_h) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_POSITION_H, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO Max h_pos\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_POSITION_H, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO get h_postion\n"); @@ -2601,17 +2606,17 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  					data_value[0], data_value[1], response);  		}  		if (sdvo_data.position_v) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_POSITION_V, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO Max v_pos\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_POSITION_V, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO get v_postion\n"); @@ -2634,17 +2639,17 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  	}  	if (sdvo_priv->is_tv) {  		if (sdvo_data.saturation) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_SATURATION, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO Max sat\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_SATURATION, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO get sat\n"); @@ -2666,17 +2671,17 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  					data_value[0], data_value[1], response);  		}  		if (sdvo_data.contrast) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_CONTRAST, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO Max contrast\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_CONTRAST, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO get contrast\n"); @@ -2697,17 +2702,17 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  					data_value[0], data_value[1], response);  		}  		if (sdvo_data.hue) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_HUE, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO Max hue\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_HUE, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO get hue\n"); @@ -2730,17 +2735,17 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  	}  	if (sdvo_priv->is_tv || sdvo_priv->is_lvds) {  		if (sdvo_data.brightness) { -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_MAX_BRIGHTNESS, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&data_value, 4);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO Max bright\n");  				return;  			} -			intel_sdvo_write_cmd(intel_output, +			intel_sdvo_write_cmd(intel_encoder,  				SDVO_CMD_GET_BRIGHTNESS, NULL, 0); -			status = intel_sdvo_read_response(intel_output, +			status = intel_sdvo_read_response(intel_encoder,  				&response, 2);  			if (status != SDVO_CMD_STATUS_SUCCESS) {  				DRM_DEBUG_KMS("Incorrect SDVO get brigh\n"); @@ -2765,81 +2770,81 @@ static void intel_sdvo_create_enhance_property(struct drm_connector *connector)  	return;  } -bool intel_sdvo_init(struct drm_device *dev, int output_device) +bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)  {  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_connector *connector; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct intel_sdvo_priv *sdvo_priv;  	u8 ch[0x40];  	int i; -	intel_output = kcalloc(sizeof(struct intel_output)+sizeof(struct intel_sdvo_priv), 1, GFP_KERNEL); -	if (!intel_output) { +	intel_encoder = kcalloc(sizeof(struct intel_encoder)+sizeof(struct intel_sdvo_priv), 1, GFP_KERNEL); +	if (!intel_encoder) {  		return false;  	} -	sdvo_priv = (struct intel_sdvo_priv *)(intel_output + 1); -	sdvo_priv->output_device = output_device; +	sdvo_priv = (struct intel_sdvo_priv *)(intel_encoder + 1); +	sdvo_priv->sdvo_reg = sdvo_reg; -	intel_output->dev_priv = sdvo_priv; -	intel_output->type = INTEL_OUTPUT_SDVO; +	intel_encoder->dev_priv = sdvo_priv; +	intel_encoder->type = INTEL_OUTPUT_SDVO;  	/* setup the DDC bus. */ -	if (output_device == SDVOB) -		intel_output->i2c_bus = intel_i2c_create(dev, GPIOE, "SDVOCTRL_E for SDVOB"); +	if (sdvo_reg == SDVOB) +		intel_encoder->i2c_bus = intel_i2c_create(dev, GPIOE, "SDVOCTRL_E for SDVOB");  	else -		intel_output->i2c_bus = intel_i2c_create(dev, GPIOE, "SDVOCTRL_E for SDVOC"); +		intel_encoder->i2c_bus = intel_i2c_create(dev, GPIOE, "SDVOCTRL_E for SDVOC"); -	if (!intel_output->i2c_bus) +	if (!intel_encoder->i2c_bus)  		goto err_inteloutput; -	sdvo_priv->slave_addr = intel_sdvo_get_slave_addr(dev, output_device); +	sdvo_priv->slave_addr = intel_sdvo_get_slave_addr(dev, sdvo_reg);  	/* Save the bit-banging i2c functionality for use by the DDC wrapper */ -	intel_sdvo_i2c_bit_algo.functionality = intel_output->i2c_bus->algo->functionality; +	intel_sdvo_i2c_bit_algo.functionality = intel_encoder->i2c_bus->algo->functionality;  	/* Read the regs to test if we can talk to the device */  	for (i = 0; i < 0x40; i++) { -		if (!intel_sdvo_read_byte(intel_output, i, &ch[i])) { +		if (!intel_sdvo_read_byte(intel_encoder, i, &ch[i])) {  			DRM_DEBUG_KMS("No SDVO device found on SDVO%c\n", -					output_device == SDVOB ? 'B' : 'C'); +					sdvo_reg == SDVOB ? 'B' : 'C');  			goto err_i2c;  		}  	}  	/* setup the DDC bus. */ -	if (output_device == SDVOB) { -		intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOB DDC BUS"); +	if (sdvo_reg == SDVOB) { +		intel_encoder->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOB DDC BUS");  		sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA,  						"SDVOB/VGA DDC BUS");  		dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS;  	} else { -		intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOC DDC BUS"); +		intel_encoder->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOC DDC BUS");  		sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA,  						"SDVOC/VGA DDC BUS");  		dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS;  	} -	if (intel_output->ddc_bus == NULL) +	if (intel_encoder->ddc_bus == NULL)  		goto err_i2c;  	/* Wrap with our custom algo which switches to DDC mode */ -	intel_output->ddc_bus->algo = &intel_sdvo_i2c_bit_algo; +	intel_encoder->ddc_bus->algo = &intel_sdvo_i2c_bit_algo;  	/* In default case sdvo lvds is false */ -	intel_sdvo_get_capabilities(intel_output, &sdvo_priv->caps); +	intel_sdvo_get_capabilities(intel_encoder, &sdvo_priv->caps); -	if (intel_sdvo_output_setup(intel_output, +	if (intel_sdvo_output_setup(intel_encoder,  				    sdvo_priv->caps.output_flags) != true) {  		DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n", -			  output_device == SDVOB ? 'B' : 'C'); +			  sdvo_reg == SDVOB ? 'B' : 'C');  		goto err_i2c;  	} -	connector = &intel_output->base; +	connector = &intel_encoder->base;  	drm_connector_init(dev, connector, &intel_sdvo_connector_funcs,  			   connector->connector_type); @@ -2848,12 +2853,12 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)  	connector->doublescan_allowed = 0;  	connector->display_info.subpixel_order = SubPixelHorizontalRGB; -	drm_encoder_init(dev, &intel_output->enc, -			&intel_sdvo_enc_funcs, intel_output->enc.encoder_type); +	drm_encoder_init(dev, &intel_encoder->enc, +			&intel_sdvo_enc_funcs, intel_encoder->enc.encoder_type); -	drm_encoder_helper_add(&intel_output->enc, &intel_sdvo_helper_funcs); +	drm_encoder_helper_add(&intel_encoder->enc, &intel_sdvo_helper_funcs); -	drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc); +	drm_mode_connector_attach_encoder(&intel_encoder->base, &intel_encoder->enc);  	if (sdvo_priv->is_tv)  		intel_sdvo_tv_create_property(connector); @@ -2865,9 +2870,9 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)  	intel_sdvo_select_ddc_bus(sdvo_priv);  	/* Set the input timing to the screen. Assume always input 0. */ -	intel_sdvo_set_target_input(intel_output, true, false); +	intel_sdvo_set_target_input(intel_encoder, true, false); -	intel_sdvo_get_input_pixel_clock_range(intel_output, +	intel_sdvo_get_input_pixel_clock_range(intel_encoder,  					       &sdvo_priv->pixel_clock_min,  					       &sdvo_priv->pixel_clock_max); @@ -2894,12 +2899,12 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)  err_i2c:  	if (sdvo_priv->analog_ddc_bus != NULL)  		intel_i2c_destroy(sdvo_priv->analog_ddc_bus); -	if (intel_output->ddc_bus != NULL) -		intel_i2c_destroy(intel_output->ddc_bus); -	if (intel_output->i2c_bus != NULL) -		intel_i2c_destroy(intel_output->i2c_bus); +	if (intel_encoder->ddc_bus != NULL) +		intel_i2c_destroy(intel_encoder->ddc_bus); +	if (intel_encoder->i2c_bus != NULL) +		intel_i2c_destroy(intel_encoder->i2c_bus);  err_inteloutput: -	kfree(intel_output); +	kfree(intel_encoder);  	return false;  } diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index 552ec110b74..d7d39b2327d 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c @@ -921,8 +921,8 @@ intel_tv_save(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv;  	int i;  	tv_priv->save_TV_H_CTL_1 = I915_READ(TV_H_CTL_1); @@ -971,8 +971,8 @@ intel_tv_restore(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct drm_i915_private *dev_priv = dev->dev_private; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv;  	struct drm_crtc *crtc = connector->encoder->crtc;  	struct intel_crtc *intel_crtc;  	int i; @@ -1068,9 +1068,9 @@ intel_tv_mode_lookup (char *tv_format)  }  static const struct tv_mode * -intel_tv_mode_find (struct intel_output *intel_output) +intel_tv_mode_find (struct intel_encoder *intel_encoder)  { -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv;  	return intel_tv_mode_lookup(tv_priv->tv_format);  } @@ -1078,8 +1078,8 @@ intel_tv_mode_find (struct intel_output *intel_output)  static enum drm_mode_status  intel_tv_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode)  { -	struct intel_output *intel_output = to_intel_output(connector); -	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);  	/* Ensure TV refresh is close to desired refresh */  	if (tv_mode && abs(tv_mode->refresh - drm_mode_vrefresh(mode) * 1000) @@ -1095,8 +1095,8 @@ intel_tv_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,  {  	struct drm_device *dev = encoder->dev;  	struct drm_mode_config *drm_config = &dev->mode_config; -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	const struct tv_mode *tv_mode = intel_tv_mode_find (intel_output); +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	const struct tv_mode *tv_mode = intel_tv_mode_find (intel_encoder);  	struct drm_encoder *other_encoder;  	if (!tv_mode) @@ -1121,9 +1121,9 @@ intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_crtc *crtc = encoder->crtc;  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -	struct intel_output *intel_output = enc_to_intel_output(encoder); -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; -	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output); +	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; +	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);  	u32 tv_ctl;  	u32 hctl1, hctl2, hctl3;  	u32 vctl1, vctl2, vctl3, vctl4, vctl5, vctl6, vctl7; @@ -1360,9 +1360,9 @@ static const struct drm_display_mode reported_modes[] = {   * \return false if TV is disconnected.   */  static int -intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output) +intel_tv_detect_type (struct drm_crtc *crtc, struct intel_encoder *intel_encoder)  { -	struct drm_encoder *encoder = &intel_output->enc; +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_device *dev = encoder->dev;  	struct drm_i915_private *dev_priv = dev->dev_private;  	unsigned long irqflags; @@ -1441,9 +1441,9 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output)   */  static void intel_tv_find_better_format(struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; -	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; +	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);  	int i;  	if ((tv_priv->type == DRM_MODE_CONNECTOR_Component) == @@ -1475,9 +1475,9 @@ intel_tv_detect(struct drm_connector *connector)  {  	struct drm_crtc *crtc;  	struct drm_display_mode mode; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; -	struct drm_encoder *encoder = &intel_output->enc; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; +	struct drm_encoder *encoder = &intel_encoder->enc;  	int dpms_mode;  	int type = tv_priv->type; @@ -1485,12 +1485,12 @@ intel_tv_detect(struct drm_connector *connector)  	drm_mode_set_crtcinfo(&mode, CRTC_INTERLACE_HALVE_V);  	if (encoder->crtc && encoder->crtc->enabled) { -		type = intel_tv_detect_type(encoder->crtc, intel_output); +		type = intel_tv_detect_type(encoder->crtc, intel_encoder);  	} else { -		crtc = intel_get_load_detect_pipe(intel_output, &mode, &dpms_mode); +		crtc = intel_get_load_detect_pipe(intel_encoder, &mode, &dpms_mode);  		if (crtc) { -			type = intel_tv_detect_type(crtc, intel_output); -			intel_release_load_detect_pipe(intel_output, dpms_mode); +			type = intel_tv_detect_type(crtc, intel_encoder); +			intel_release_load_detect_pipe(intel_encoder, dpms_mode);  		} else  			type = -1;  	} @@ -1525,8 +1525,8 @@ static void  intel_tv_chose_preferred_modes(struct drm_connector *connector,  			       struct drm_display_mode *mode_ptr)  { -	struct intel_output *intel_output = to_intel_output(connector); -	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);  	if (tv_mode->nbr_end < 480 && mode_ptr->vdisplay == 480)  		mode_ptr->type |= DRM_MODE_TYPE_PREFERRED; @@ -1550,8 +1550,8 @@ static int  intel_tv_get_modes(struct drm_connector *connector)  {  	struct drm_display_mode *mode_ptr; -	struct intel_output *intel_output = to_intel_output(connector); -	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);  	int j, count = 0;  	u64 tmp; @@ -1604,11 +1604,11 @@ intel_tv_get_modes(struct drm_connector *connector)  static void  intel_tv_destroy (struct drm_connector *connector)  { -	struct intel_output *intel_output = to_intel_output(connector); +	struct intel_encoder *intel_encoder = to_intel_encoder(connector);  	drm_sysfs_connector_remove(connector);  	drm_connector_cleanup(connector); -	kfree(intel_output); +	kfree(intel_encoder);  } @@ -1617,9 +1617,9 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop  		      uint64_t val)  {  	struct drm_device *dev = connector->dev; -	struct intel_output *intel_output = to_intel_output(connector); -	struct intel_tv_priv *tv_priv = intel_output->dev_priv; -	struct drm_encoder *encoder = &intel_output->enc; +	struct intel_encoder *intel_encoder = to_intel_encoder(connector); +	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; +	struct drm_encoder *encoder = &intel_encoder->enc;  	struct drm_crtc *crtc = encoder->crtc;  	int ret = 0;  	bool changed = false; @@ -1740,7 +1740,7 @@ intel_tv_init(struct drm_device *dev)  {  	struct drm_i915_private *dev_priv = dev->dev_private;  	struct drm_connector *connector; -	struct intel_output *intel_output; +	struct intel_encoder *intel_encoder;  	struct intel_tv_priv *tv_priv;  	u32 tv_dac_on, tv_dac_off, save_tv_dac;  	char **tv_format_names; @@ -1780,28 +1780,28 @@ intel_tv_init(struct drm_device *dev)  	    (tv_dac_off & TVDAC_STATE_CHG_EN) != 0)  		return; -	intel_output = kzalloc(sizeof(struct intel_output) + +	intel_encoder = kzalloc(sizeof(struct intel_encoder) +  			       sizeof(struct intel_tv_priv), GFP_KERNEL); -	if (!intel_output) { +	if (!intel_encoder) {  		return;  	} -	connector = &intel_output->base; +	connector = &intel_encoder->base;  	drm_connector_init(dev, connector, &intel_tv_connector_funcs,  			   DRM_MODE_CONNECTOR_SVIDEO); -	drm_encoder_init(dev, &intel_output->enc, &intel_tv_enc_funcs, +	drm_encoder_init(dev, &intel_encoder->enc, &intel_tv_enc_funcs,  			 DRM_MODE_ENCODER_TVDAC); -	drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc); -	tv_priv = (struct intel_tv_priv *)(intel_output + 1); -	intel_output->type = INTEL_OUTPUT_TVOUT; -	intel_output->crtc_mask = (1 << 0) | (1 << 1); -	intel_output->clone_mask = (1 << INTEL_TV_CLONE_BIT); -	intel_output->enc.possible_crtcs = ((1 << 0) | (1 << 1)); -	intel_output->enc.possible_clones = (1 << INTEL_OUTPUT_TVOUT); -	intel_output->dev_priv = tv_priv; +	drm_mode_connector_attach_encoder(&intel_encoder->base, &intel_encoder->enc); +	tv_priv = (struct intel_tv_priv *)(intel_encoder + 1); +	intel_encoder->type = INTEL_OUTPUT_TVOUT; +	intel_encoder->crtc_mask = (1 << 0) | (1 << 1); +	intel_encoder->clone_mask = (1 << INTEL_TV_CLONE_BIT); +	intel_encoder->enc.possible_crtcs = ((1 << 0) | (1 << 1)); +	intel_encoder->enc.possible_clones = (1 << INTEL_OUTPUT_TVOUT); +	intel_encoder->dev_priv = tv_priv;  	tv_priv->type = DRM_MODE_CONNECTOR_Unknown;  	/* BIOS margin values */ @@ -1812,7 +1812,7 @@ intel_tv_init(struct drm_device *dev)  	tv_priv->tv_format = kstrdup(tv_modes[initial_mode].name, GFP_KERNEL); -	drm_encoder_helper_add(&intel_output->enc, &intel_tv_helper_funcs); +	drm_encoder_helper_add(&intel_encoder->enc, &intel_tv_helper_funcs);  	drm_connector_helper_add(connector, &intel_tv_connector_helper_funcs);  	connector->interlace_allowed = false;  	connector->doublescan_allowed = false; diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c index bcec2d79636..1d569830ed9 100644 --- a/drivers/gpu/drm/radeon/atom.c +++ b/drivers/gpu/drm/radeon/atom.c @@ -908,11 +908,16 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)  	uint8_t attr = U8((*ptr)++), shift;  	uint32_t saved, dst;  	int dptr = *ptr; +	uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];  	SDEBUG("   dst: ");  	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); +	/* op needs to full dst value */ +	dst = saved;  	shift = atom_get_src(ctx, attr, ptr);  	SDEBUG("   shift: %d\n", shift);  	dst <<= shift; +	dst &= atom_arg_mask[dst_align]; +	dst >>= atom_arg_shift[dst_align];  	SDEBUG("   dst: ");  	atom_put_dst(ctx, arg, attr, &dptr, dst, saved);  } @@ -922,11 +927,16 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)  	uint8_t attr = U8((*ptr)++), shift;  	uint32_t saved, dst;  	int dptr = *ptr; +	uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];  	SDEBUG("   dst: ");  	dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); +	/* op needs to full dst value */ +	dst = saved;  	shift = atom_get_src(ctx, attr, ptr);  	SDEBUG("   shift: %d\n", shift);  	dst >>= shift; +	dst &= atom_arg_mask[dst_align]; +	dst >>= atom_arg_shift[dst_align];  	SDEBUG("   dst: ");  	atom_put_dst(ctx, arg, attr, &dptr, dst, saved);  } diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index fd4ef6d1884..a87990b3ae8 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c @@ -521,6 +521,10 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,  				/* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */  				if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1)  					adjusted_clock = mode->clock * 2; +				if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) { +					pll->algo = PLL_ALGO_LEGACY; +					pll->flags |= RADEON_PLL_PREFER_CLOSEST_LOWER; +				}  			} else {  				if (encoder->encoder_type != DRM_MODE_ENCODER_DAC)  					pll->flags |= RADEON_PLL_NO_ODD_POST_DIV; diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index c9580497ede..d7388fdb6d0 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c @@ -2891,7 +2891,7 @@ static int r100_cs_track_texture_check(struct radeon_device *rdev,  {  	struct radeon_bo *robj;  	unsigned long size; -	unsigned u, i, w, h; +	unsigned u, i, w, h, d;  	int ret;  	for (u = 0; u < track->num_texture; u++) { @@ -2923,20 +2923,25 @@ static int r100_cs_track_texture_check(struct radeon_device *rdev,  			h = h / (1 << i);  			if (track->textures[u].roundup_h)  				h = roundup_pow_of_two(h); +			if (track->textures[u].tex_coord_type == 1) { +				d = (1 << track->textures[u].txdepth) / (1 << i); +				if (!d) +					d = 1; +			} else { +				d = 1; +			}  			if (track->textures[u].compress_format) { -				size += r100_track_compress_size(track->textures[u].compress_format, w, h); +				size += r100_track_compress_size(track->textures[u].compress_format, w, h) * d;  				/* compressed textures are block based */  			} else -				size += w * h; +				size += w * h * d;  		}  		size *= track->textures[u].cpp;  		switch (track->textures[u].tex_coord_type) {  		case 0: -			break;  		case 1: -			size *= (1 << track->textures[u].txdepth);  			break;  		case 2:  			if (track->separate_cube) { @@ -3007,7 +3012,11 @@ int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track)  		}  	}  	prim_walk = (track->vap_vf_cntl >> 4) & 0x3; -	nverts = (track->vap_vf_cntl >> 16) & 0xFFFF; +	if (track->vap_vf_cntl & (1 << 14)) { +		nverts = track->vap_alt_nverts; +	} else { +		nverts = (track->vap_vf_cntl >> 16) & 0xFFFF; +	}  	switch (prim_walk) {  	case 1:  		for (i = 0; i < track->num_arrays; i++) { diff --git a/drivers/gpu/drm/radeon/r100_track.h b/drivers/gpu/drm/radeon/r100_track.h index b27a6999d21..fadfe68de9c 100644 --- a/drivers/gpu/drm/radeon/r100_track.h +++ b/drivers/gpu/drm/radeon/r100_track.h @@ -64,6 +64,7 @@ struct r100_cs_track {  	unsigned			maxy;  	unsigned			vtx_size;  	unsigned			vap_vf_cntl; +	unsigned			vap_alt_nverts;  	unsigned			immd_dwords;  	unsigned			num_arrays;  	unsigned			max_indx; diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 2b9affe754c..bd75f99bd65 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c @@ -730,6 +730,12 @@ static int r300_packet0_check(struct radeon_cs_parser *p,  		/* VAP_VF_MAX_VTX_INDX */  		track->max_indx = idx_value & 0x00FFFFFFUL;  		break; +	case 0x2088: +		/* VAP_ALT_NUM_VERTICES - only valid on r500 */ +		if (p->rdev->family < CHIP_RV515) +			goto fail; +		track->vap_alt_nverts = idx_value & 0xFFFFFF; +		break;  	case 0x43E4:  		/* SC_SCISSOR1 */  		track->maxy = ((idx_value >> 13) & 0x1FFF) + 1; @@ -767,7 +773,6 @@ static int r300_packet0_check(struct radeon_cs_parser *p,  		tmp = idx_value & ~(0x7 << 16);  		tmp |= tile_flags;  		ib[idx] = tmp; -  		i = (reg - 0x4E38) >> 2;  		track->cb[i].pitch = idx_value & 0x3FFE;  		switch (((idx_value >> 21) & 0xF)) { @@ -1052,11 +1057,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p,  			break;  		/* fallthrough do not move */  	default: -		printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n", -		       reg, idx); -		return -EINVAL; +		goto fail;  	}  	return 0; +fail: +	printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n", +	       reg, idx); +	return -EINVAL;  }  static int r300_packet3_check(struct radeon_cs_parser *p, diff --git a/drivers/gpu/drm/radeon/r600_audio.c b/drivers/gpu/drm/radeon/r600_audio.c index dac7042b797..1d898051c63 100644 --- a/drivers/gpu/drm/radeon/r600_audio.c +++ b/drivers/gpu/drm/radeon/r600_audio.c @@ -35,7 +35,7 @@   */  static int r600_audio_chipset_supported(struct radeon_device *rdev)  { -	return rdev->family >= CHIP_R600 +	return (rdev->family >= CHIP_R600 && rdev->family < CHIP_CEDAR)  		|| rdev->family == CHIP_RS600  		|| rdev->family == CHIP_RS690  		|| rdev->family == CHIP_RS740; diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c index 029fa1406d1..2616b822ba6 100644 --- a/drivers/gpu/drm/radeon/r600_hdmi.c +++ b/drivers/gpu/drm/radeon/r600_hdmi.c @@ -314,6 +314,9 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod  	struct radeon_device *rdev = dev->dev_private;  	uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; +	if (ASIC_IS_DCE4(rdev)) +		return; +  	if (!offset)  		return; @@ -484,6 +487,9 @@ void r600_hdmi_enable(struct drm_encoder *encoder)  	struct radeon_device *rdev = dev->dev_private;  	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); +	if (ASIC_IS_DCE4(rdev)) +		return; +  	if (!radeon_encoder->hdmi_offset) {  		r600_hdmi_assign_block(encoder);  		if (!radeon_encoder->hdmi_offset) { @@ -525,6 +531,9 @@ void r600_hdmi_disable(struct drm_encoder *encoder)  	struct radeon_device *rdev = dev->dev_private;  	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); +	if (ASIC_IS_DCE4(rdev)) +		return; +  	if (!radeon_encoder->hdmi_offset) {  		dev_err(rdev->dev, "Disabling not enabled HDMI\n");  		return; diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 3fba50540f7..1331351c517 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -162,12 +162,14 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,  {  	struct drm_device *dev = connector->dev;  	struct drm_connector *conflict; +	struct radeon_connector *radeon_conflict;  	int i;  	list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {  		if (conflict == connector)  			continue; +		radeon_conflict = to_radeon_connector(conflict);  		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {  			if (conflict->encoder_ids[i] == 0)  				break; @@ -177,6 +179,9 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,  				if (conflict->status != connector_status_connected)  					continue; +				if (radeon_conflict->use_digital) +					continue; +  				if (priority == true) {  					DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));  					DRM_INFO("in favor of %s\n", drm_get_connector_name(connector)); @@ -287,6 +292,7 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr  	if (property == rdev->mode_info.coherent_mode_property) {  		struct radeon_encoder_atom_dig *dig; +		bool new_coherent_mode;  		/* need to find digital encoder on connector */  		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); @@ -299,8 +305,11 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr  			return 0;  		dig = radeon_encoder->enc_priv; -		dig->coherent_mode = val ? true : false; -		radeon_property_change_mode(&radeon_encoder->base); +		new_coherent_mode = val ? true : false; +		if (dig->coherent_mode != new_coherent_mode) { +			dig->coherent_mode = new_coherent_mode; +			radeon_property_change_mode(&radeon_encoder->base); +		}  	}  	if (property == rdev->mode_info.tv_std_property) { diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index bddf17f97da..7b629e30556 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -36,6 +36,54 @@  #include "radeon.h"  #include "atom.h" +static const char radeon_family_name[][16] = { +	"R100", +	"RV100", +	"RS100", +	"RV200", +	"RS200", +	"R200", +	"RV250", +	"RS300", +	"RV280", +	"R300", +	"R350", +	"RV350", +	"RV380", +	"R420", +	"R423", +	"RV410", +	"RS400", +	"RS480", +	"RS600", +	"RS690", +	"RS740", +	"RV515", +	"R520", +	"RV530", +	"RV560", +	"RV570", +	"R580", +	"R600", +	"RV610", +	"RV630", +	"RV670", +	"RV620", +	"RV635", +	"RS780", +	"RS880", +	"RV770", +	"RV730", +	"RV710", +	"RV740", +	"CEDAR", +	"REDWOOD", +	"JUNIPER", +	"CYPRESS", +	"HEMLOCK", +	"LAST", +}; +  /*   * Clear GPU surface registers.   */ @@ -526,7 +574,6 @@ int radeon_device_init(struct radeon_device *rdev,  	int r;  	int dma_bits; -	DRM_INFO("radeon: Initializing kernel modesetting.\n");  	rdev->shutdown = false;  	rdev->dev = &pdev->dev;  	rdev->ddev = ddev; @@ -538,6 +585,10 @@ int radeon_device_init(struct radeon_device *rdev,  	rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;  	rdev->gpu_lockup = false;  	rdev->accel_working = false; + +	DRM_INFO("initializing kernel modesetting (%s 0x%04X:0x%04X).\n", +		radeon_family_name[rdev->family], pdev->vendor, pdev->device); +  	/* mutex initialization are all done here so we  	 * can recall function without having locking issues */  	mutex_init(&rdev->cs_mutex); diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 055a51732dc..4b05563d99e 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c @@ -43,9 +43,10 @@   * - 2.0.0 - initial interface   * - 2.1.0 - add square tiling interface   * - 2.2.0 - add r6xx/r7xx const buffer support + * - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs   */  #define KMS_DRIVER_MAJOR	2 -#define KMS_DRIVER_MINOR	2 +#define KMS_DRIVER_MINOR	3  #define KMS_DRIVER_PATCHLEVEL	0  int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);  int radeon_driver_unload_kms(struct drm_device *dev); diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c index c52fc3080b6..30293bec080 100644 --- a/drivers/gpu/drm/radeon/radeon_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_encoders.c @@ -865,6 +865,8 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t  		else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {  			if (dig->coherent_mode)  				args.v3.acConfig.fCoherentMode = 1; +			if (radeon_encoder->pixel_clock > 165000) +				args.v3.acConfig.fDualLinkConnector = 1;  		}  	} else if (ASIC_IS_DCE32(rdev)) {  		args.v2.acConfig.ucEncoderSel = dig->dig_encoder; @@ -888,6 +890,8 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t  		else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {  			if (dig->coherent_mode)  				args.v2.acConfig.fCoherentMode = 1; +			if (radeon_encoder->pixel_clock > 165000) +				args.v2.acConfig.fDualLinkConnector = 1;  		}  	} else {  		args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; @@ -1373,8 +1377,12 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,  	case ENCODER_OBJECT_ID_INTERNAL_DAC2:  	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:  		atombios_dac_setup(encoder, ATOM_ENABLE); -		if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) -			atombios_tv_setup(encoder, ATOM_ENABLE); +		if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) { +			if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) +				atombios_tv_setup(encoder, ATOM_ENABLE); +			else +				atombios_tv_setup(encoder, ATOM_DISABLE); +		}  		break;  	}  	atombios_apply_encoder_quirks(encoder, adjusted_mode); diff --git a/drivers/gpu/drm/radeon/radeon_family.h b/drivers/gpu/drm/radeon/radeon_family.h index 93c7d5d4191..e329066dcab 100644 --- a/drivers/gpu/drm/radeon/radeon_family.h +++ b/drivers/gpu/drm/radeon/radeon_family.h @@ -36,7 +36,7 @@   * Radeon chip families   */  enum radeon_family { -	CHIP_R100, +	CHIP_R100 = 0,  	CHIP_RV100,  	CHIP_RS100,  	CHIP_RV200, @@ -99,4 +99,5 @@ enum radeon_chip_flags {  	RADEON_IS_PCI = 0x00800000UL,  	RADEON_IS_IGPGART = 0x01000000UL,  }; +  #endif diff --git a/drivers/gpu/drm/radeon/reg_srcs/r300 b/drivers/gpu/drm/radeon/reg_srcs/r300 index 19c4663fa9c..1e97b2d129f 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/r300 +++ b/drivers/gpu/drm/radeon/reg_srcs/r300 @@ -125,6 +125,8 @@ r300 0x4f60  0x4000 GB_VAP_RASTER_VTX_FMT_0  0x4004 GB_VAP_RASTER_VTX_FMT_1  0x4008 GB_ENABLE +0x4010 GB_MSPOS0 +0x4014 GB_MSPOS1  0x401C GB_SELECT  0x4020 GB_AA_CONFIG  0x4024 GB_FIFO_SIZE diff --git a/drivers/gpu/drm/radeon/reg_srcs/r420 b/drivers/gpu/drm/radeon/reg_srcs/r420 index 989f7a02083..e958980d00f 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/r420 +++ b/drivers/gpu/drm/radeon/reg_srcs/r420 @@ -125,6 +125,8 @@ r420 0x4f60  0x4000 GB_VAP_RASTER_VTX_FMT_0  0x4004 GB_VAP_RASTER_VTX_FMT_1  0x4008 GB_ENABLE +0x4010 GB_MSPOS0 +0x4014 GB_MSPOS1  0x401C GB_SELECT  0x4020 GB_AA_CONFIG  0x4024 GB_FIFO_SIZE diff --git a/drivers/gpu/drm/radeon/reg_srcs/rs600 b/drivers/gpu/drm/radeon/reg_srcs/rs600 index 6801b865d1c..83e8bc0c2bb 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/rs600 +++ b/drivers/gpu/drm/radeon/reg_srcs/rs600 @@ -125,6 +125,8 @@ rs600 0x6d40  0x4000 GB_VAP_RASTER_VTX_FMT_0  0x4004 GB_VAP_RASTER_VTX_FMT_1  0x4008 GB_ENABLE +0x4010 GB_MSPOS0 +0x4014 GB_MSPOS1  0x401C GB_SELECT  0x4020 GB_AA_CONFIG  0x4024 GB_FIFO_SIZE diff --git a/drivers/gpu/drm/radeon/reg_srcs/rv515 b/drivers/gpu/drm/radeon/reg_srcs/rv515 index 38abf63bf2c..1e46233985e 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/rv515 +++ b/drivers/gpu/drm/radeon/reg_srcs/rv515 @@ -35,6 +35,7 @@ rv515 0x6d40  0x1DA8 VAP_VPORT_ZSCALE  0x1DAC VAP_VPORT_ZOFFSET  0x2080 VAP_CNTL +0x208C VAP_INDEX_OFFSET  0x2090 VAP_OUT_VTX_FMT_0  0x2094 VAP_OUT_VTX_FMT_1  0x20B0 VAP_VTE_CNTL @@ -158,6 +159,8 @@ rv515 0x6d40  0x4000 GB_VAP_RASTER_VTX_FMT_0  0x4004 GB_VAP_RASTER_VTX_FMT_1  0x4008 GB_ENABLE +0x4010 GB_MSPOS0 +0x4014 GB_MSPOS1  0x401C GB_SELECT  0x4020 GB_AA_CONFIG  0x4024 GB_FIFO_SIZE diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c index abf824c2123..a81bc7a21e1 100644 --- a/drivers/gpu/drm/radeon/rs600.c +++ b/drivers/gpu/drm/radeon/rs600.c @@ -159,7 +159,7 @@ void rs600_gart_tlb_flush(struct radeon_device *rdev)  	WREG32_MC(R_000100_MC_PT0_CNTL, tmp);  	tmp = RREG32_MC(R_000100_MC_PT0_CNTL); -	tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) & S_000100_INVALIDATE_L2_CACHE(1); +	tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) | S_000100_INVALIDATE_L2_CACHE(1);  	WREG32_MC(R_000100_MC_PT0_CNTL, tmp);  	tmp = RREG32_MC(R_000100_MC_PT0_CNTL); diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c index c1605b528e8..0f28d91f29d 100644 --- a/drivers/hwmon/applesmc.c +++ b/drivers/hwmon/applesmc.c @@ -142,6 +142,12 @@ static const char *temperature_sensors_sets[][41] = {  	  "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", "TM8S", "TM9P", "TM9S",  	  "TN0C", "TN0D", "TN0H", "TS0C", "Tp0C", "Tp1C", "Tv0S", "Tv1S",  	  NULL }, +/* Set 17: iMac 9,1 */ +	{ "TA0P", "TC0D", "TC0H", "TC0P", "TG0D", "TG0H", "TH0P", "TL0P", +	  "TN0D", "TN0H", "TN0P", "TO0P", "Tm0P", "Tp0P", NULL }, +/* Set 18: MacBook Pro 2,2 */ +	{ "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "TM0P", "TTF0", +	  "Th0H", "Th1H", "Tm0P", "Ts0P", NULL },  };  /* List of keys used to read/write fan speeds */ @@ -1350,6 +1356,10 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {  	{ .accelerometer = 1, .light = 1, .temperature_set = 15 },  /* MacPro3,1: temperature set 16 */  	{ .accelerometer = 0, .light = 0, .temperature_set = 16 }, +/* iMac 9,1: light sensor only, temperature set 17 */ +	{ .accelerometer = 0, .light = 0, .temperature_set = 17 }, +/* MacBook Pro 2,2: accelerometer, backlight and temperature set 18 */ +	{ .accelerometer = 1, .light = 1, .temperature_set = 18 },  };  /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1". @@ -1375,6 +1385,10 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {  	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3") },  		&applesmc_dmi_data[9]}, +	{ applesmc_dmi_match, "Apple MacBook Pro 2,2", { +	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple Computer, Inc."), +	  DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2") }, +		&applesmc_dmi_data[18]},  	{ applesmc_dmi_match, "Apple MacBook Pro", {  	  DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME,"MacBookPro") }, @@ -1415,6 +1429,10 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {  	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME, "MacPro") },  		&applesmc_dmi_data[4]}, +	{ applesmc_dmi_match, "Apple iMac 9,1", { +	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple Inc."), +	  DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1") }, +		&applesmc_dmi_data[17]},  	{ applesmc_dmi_match, "Apple iMac 8", {  	  DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),  	  DMI_MATCH(DMI_PRODUCT_NAME, "iMac8") }, diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 1002befd87d..5be09c048c5 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c @@ -539,14 +539,14 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,  	struct it87_data *data = dev_get_drvdata(dev);  	long val; +	u8 reg;  	if (strict_strtol(buf, 10, &val) < 0)  		return -EINVAL; -	mutex_lock(&data->update_lock); - -	data->sensor &= ~(1 << nr); -	data->sensor &= ~(8 << nr); +	reg = it87_read_value(data, IT87_REG_TEMP_ENABLE); +	reg &= ~(1 << nr); +	reg &= ~(8 << nr);  	if (val == 2) {	/* backwards compatibility */  		dev_warn(dev, "Sensor type 2 is deprecated, please use 4 "  			 "instead\n"); @@ -554,14 +554,16 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,  	}  	/* 3 = thermal diode; 4 = thermistor; 0 = disabled */  	if (val == 3) -		data->sensor |= 1 << nr; +		reg |= 1 << nr;  	else if (val == 4) -		data->sensor |= 8 << nr; -	else if (val != 0) { -		mutex_unlock(&data->update_lock); +		reg |= 8 << nr; +	else if (val != 0)  		return -EINVAL; -	} + +	mutex_lock(&data->update_lock); +	data->sensor = reg;  	it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor); +	data->valid = 0;	/* Force cache refresh */  	mutex_unlock(&data->update_lock);  	return count;  } @@ -1841,14 +1843,10 @@ static void __devinit it87_init_device(struct platform_device *pdev)  			it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127);  	} -	/* Check if temperature channels are reset manually or by some reason */ -	tmp = it87_read_value(data, IT87_REG_TEMP_ENABLE); -	if ((tmp & 0x3f) == 0) { -		/* Temp1,Temp3=thermistor; Temp2=thermal diode */ -		tmp = (tmp & 0xc0) | 0x2a; -		it87_write_value(data, IT87_REG_TEMP_ENABLE, tmp); -	} -	data->sensor = tmp; +	/* Temperature channels are not forcibly enabled, as they can be +	 * set to two different sensor types and we can't guess which one +	 * is correct for a given system. These channels can be enabled at +	 * run-time through the temp{1-3}_type sysfs accessors if needed. */  	/* Check if voltage monitors are reset manually or by some reason */  	tmp = it87_read_value(data, IT87_REG_VIN_ENABLE); diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c index 6b2d8ae64fe..a610e7880fb 100644 --- a/drivers/hwmon/sht15.c +++ b/drivers/hwmon/sht15.c @@ -303,13 +303,13 @@ error_ret:   **/  static inline int sht15_calc_temp(struct sht15_data *data)  { -	int d1 = 0; +	int d1 = temppoints[0].d1;  	int i; -	for (i = 1; i < ARRAY_SIZE(temppoints); i++) +	for (i = ARRAY_SIZE(temppoints) - 1; i > 0; i--)  		/* Find pointer to interpolate */  		if (data->supply_uV > temppoints[i - 1].vdd) { -			d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd) +			d1 = (data->supply_uV - temppoints[i - 1].vdd)  				* (temppoints[i].d1 - temppoints[i - 1].d1)  				/ (temppoints[i].vdd - temppoints[i - 1].vdd)  				+ temppoints[i - 1].d1; @@ -542,7 +542,12 @@ static int __devinit sht15_probe(struct platform_device *pdev)  /* If a regulator is available, query what the supply voltage actually is!*/  	data->reg = regulator_get(data->dev, "vcc");  	if (!IS_ERR(data->reg)) { -		data->supply_uV = regulator_get_voltage(data->reg); +		int voltage; + +		voltage = regulator_get_voltage(data->reg); +		if (voltage) +			data->supply_uV = voltage; +  		regulator_enable(data->reg);  		/* setup a notifier block to update this if another device  		 *  causes the voltage to change */ diff --git a/drivers/input/input.c b/drivers/input/input.c index afd4e2b7658..9c79bd56b51 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -660,7 +660,14 @@ static int input_default_setkeycode(struct input_dev *dev,  int input_get_keycode(struct input_dev *dev,  		      unsigned int scancode, unsigned int *keycode)  { -	return dev->getkeycode(dev, scancode, keycode); +	unsigned long flags; +	int retval; + +	spin_lock_irqsave(&dev->event_lock, flags); +	retval = dev->getkeycode(dev, scancode, keycode); +	spin_unlock_irqrestore(&dev->event_lock, flags); + +	return retval;  }  EXPORT_SYMBOL(input_get_keycode); diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c index ffc25cfcef7..b443e088fd3 100644 --- a/drivers/input/keyboard/matrix_keypad.c +++ b/drivers/input/keyboard/matrix_keypad.c @@ -374,7 +374,9 @@ static int __devinit matrix_keypad_probe(struct platform_device *pdev)  	input_dev->name		= pdev->name;  	input_dev->id.bustype	= BUS_HOST;  	input_dev->dev.parent	= &pdev->dev; -	input_dev->evbit[0]	= BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); +	input_dev->evbit[0]	= BIT_MASK(EV_KEY); +	if (!pdata->no_autorepeat) +		input_dev->evbit[0] |= BIT_MASK(EV_REP);  	input_dev->open		= matrix_keypad_start;  	input_dev->close	= matrix_keypad_stop; diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 99d58764ef0..0d22cb9ce42 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c @@ -64,6 +64,7 @@ static const struct alps_model_info alps_model_data[] = {  	{ { 0x62, 0x02, 0x14 }, 0xcf, 0xcf,  		ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED },  	{ { 0x73, 0x02, 0x50 }, 0xcf, 0xcf, ALPS_FOUR_BUTTONS },	  /* Dell Vostro 1400 */ +	{ { 0x73, 0x02, 0x64 }, 0xf8, 0xf8, 0 },			  /* HP Pavilion dm3 */  	{ { 0x52, 0x01, 0x14 }, 0xff, 0xff,  		ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED },	  /* Toshiba Tecra A11-11L */  }; diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c index 4f8fe0886b2..b89879bd860 100644 --- a/drivers/input/mouse/bcm5974.c +++ b/drivers/input/mouse/bcm5974.c @@ -803,7 +803,6 @@ static struct usb_driver bcm5974_driver = {  	.disconnect		= bcm5974_disconnect,  	.suspend		= bcm5974_suspend,  	.resume			= bcm5974_resume, -	.reset_resume		= bcm5974_resume,  	.id_table		= bcm5974_table,  	.supports_autosuspend	= 1,  }; diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 577688b5b95..6440a8f5568 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c @@ -39,7 +39,7 @@ MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port.");  static bool i8042_nomux;  module_param_named(nomux, i8042_nomux, bool, 0); -MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing conrtoller is present."); +MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing controller is present.");  static bool i8042_unlock;  module_param_named(unlock, i8042_unlock, bool, 0); diff --git a/drivers/input/sparse-keymap.c b/drivers/input/sparse-keymap.c index 82ae18d2968..01424834476 100644 --- a/drivers/input/sparse-keymap.c +++ b/drivers/input/sparse-keymap.c @@ -68,12 +68,14 @@ static int sparse_keymap_getkeycode(struct input_dev *dev,  				    unsigned int scancode,  				    unsigned int *keycode)  { -	const struct key_entry *key = -			sparse_keymap_entry_from_scancode(dev, scancode); +	const struct key_entry *key; -	if (key && key->type == KE_KEY) { -		*keycode = key->keycode; -		return 0; +	if (dev->keycode) { +		key = sparse_keymap_entry_from_scancode(dev, scancode); +		if (key && key->type == KE_KEY) { +			*keycode = key->keycode; +			return 0; +		}  	}  	return -EINVAL; @@ -86,17 +88,16 @@ static int sparse_keymap_setkeycode(struct input_dev *dev,  	struct key_entry *key;  	int old_keycode; -	if (keycode < 0 || keycode > KEY_MAX) -		return -EINVAL; - -	key = sparse_keymap_entry_from_scancode(dev, scancode); -	if (key && key->type == KE_KEY) { -		old_keycode = key->keycode; -		key->keycode = keycode; -		set_bit(keycode, dev->keybit); -		if (!sparse_keymap_entry_from_keycode(dev, old_keycode)) -			clear_bit(old_keycode, dev->keybit); -		return 0; +	if (dev->keycode) { +		key = sparse_keymap_entry_from_scancode(dev, scancode); +		if (key && key->type == KE_KEY) { +			old_keycode = key->keycode; +			key->keycode = keycode; +			set_bit(keycode, dev->keybit); +			if (!sparse_keymap_entry_from_keycode(dev, old_keycode)) +				clear_bit(old_keycode, dev->keybit); +			return 0; +		}  	}  	return -EINVAL; @@ -164,7 +165,7 @@ int sparse_keymap_setup(struct input_dev *dev,  	return 0;   err_out: -	kfree(keymap); +	kfree(map);  	return error;  } @@ -176,14 +177,27 @@ EXPORT_SYMBOL(sparse_keymap_setup);   *   * This function is used to free memory allocated by sparse keymap   * in an input device that was set up by sparse_keymap_setup(). + * NOTE: It is safe to cal this function while input device is + * still registered (however the drivers should care not to try to + * use freed keymap and thus have to shut off interrups/polling + * before freeing the keymap).   */  void sparse_keymap_free(struct input_dev *dev)  { +	unsigned long flags; + +	/* +	 * Take event lock to prevent racing with input_get_keycode() +	 * and input_set_keycode() if we are called while input device +	 * is still registered. +	 */ +	spin_lock_irqsave(&dev->event_lock, flags); +  	kfree(dev->keycode);  	dev->keycode = NULL;  	dev->keycodemax = 0; -	dev->getkeycode = NULL; -	dev->setkeycode = NULL; + +	spin_unlock_irqrestore(&dev->event_lock, flags);  }  EXPORT_SYMBOL(sparse_keymap_free); diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 8b5d2873f0c..f46502589e4 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c @@ -673,13 +673,15 @@ static int wacom_resume(struct usb_interface *intf)  	int rv;  	mutex_lock(&wacom->lock); -	if (wacom->open) { + +	/* switch to wacom mode first */ +	wacom_query_tablet_data(intf, features); + +	if (wacom->open)  		rv = usb_submit_urb(wacom->irq, GFP_NOIO); -		/* switch to wacom mode if needed */ -		if (!wacom_retrieve_hid_descriptor(intf, features)) -			wacom_query_tablet_data(intf, features); -	} else +	else  		rv = 0; +  	mutex_unlock(&wacom->lock);  	return rv; diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index b3ba3437a2e..4a852d815c6 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c @@ -155,19 +155,19 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)  {  	struct wacom_features *features = &wacom->features;  	unsigned char *data = wacom->data; -	int x, y, prox; -	int rw = 0; -	int retval = 0; +	int x, y, rw; +	static int penData = 0;  	if (data[0] != WACOM_REPORT_PENABLED) {  		dbg("wacom_graphire_irq: received unknown report #%d", data[0]); -		goto exit; +		return 0;  	} -	prox = data[1] & 0x80; -	if (prox || wacom->id[0]) { -		if (prox) { -			switch ((data[1] >> 5) & 3) { +	if (data[1] & 0x80) { +		/* in prox and not a pad data */ +		penData = 1; + +		switch ((data[1] >> 5) & 3) {  			case 0:	/* Pen */  				wacom->tool[0] = BTN_TOOL_PEN; @@ -181,13 +181,23 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)  			case 2: /* Mouse with wheel */  				wacom_report_key(wcombo, BTN_MIDDLE, data[1] & 0x04); +				if (features->type == WACOM_G4 || features->type == WACOM_MO) { +					rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03); +					wacom_report_rel(wcombo, REL_WHEEL, -rw); +				} else +					wacom_report_rel(wcombo, REL_WHEEL, -(signed char) data[6]);  				/* fall through */  			case 3: /* Mouse without wheel */  				wacom->tool[0] = BTN_TOOL_MOUSE;  				wacom->id[0] = CURSOR_DEVICE_ID; +				wacom_report_key(wcombo, BTN_LEFT, data[1] & 0x01); +				wacom_report_key(wcombo, BTN_RIGHT, data[1] & 0x02); +				if (features->type == WACOM_G4 || features->type == WACOM_MO) +					wacom_report_abs(wcombo, ABS_DISTANCE, data[6] & 0x3f); +				else +					wacom_report_abs(wcombo, ABS_DISTANCE, data[7] & 0x3f);  				break; -			}  		}  		x = wacom_le16_to_cpu(&data[2]);  		y = wacom_le16_to_cpu(&data[4]); @@ -198,32 +208,36 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)  			wacom_report_key(wcombo, BTN_TOUCH, data[1] & 0x01);  			wacom_report_key(wcombo, BTN_STYLUS, data[1] & 0x02);  			wacom_report_key(wcombo, BTN_STYLUS2, data[1] & 0x04); -		} else { -			wacom_report_key(wcombo, BTN_LEFT, data[1] & 0x01); -			wacom_report_key(wcombo, BTN_RIGHT, data[1] & 0x02); -			if (features->type == WACOM_G4 || -					features->type == WACOM_MO) { -				wacom_report_abs(wcombo, ABS_DISTANCE, data[6] & 0x3f); -				rw = (signed)(data[7] & 0x04) - (data[7] & 0x03); -			} else { -				wacom_report_abs(wcombo, ABS_DISTANCE, data[7] & 0x3f); -				rw = -(signed)data[6]; -			} -			wacom_report_rel(wcombo, REL_WHEEL, rw);  		} - -		if (!prox) -			wacom->id[0] = 0;  		wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); /* report tool id */ -		wacom_report_key(wcombo, wacom->tool[0], prox); -		wacom_input_sync(wcombo); /* sync last event */ +		wacom_report_key(wcombo, wacom->tool[0], 1); +	} else if (wacom->id[0]) { +		wacom_report_abs(wcombo, ABS_X, 0); +		wacom_report_abs(wcombo, ABS_Y, 0); +		if (wacom->tool[0] == BTN_TOOL_MOUSE) { +			wacom_report_key(wcombo, BTN_LEFT, 0); +			wacom_report_key(wcombo, BTN_RIGHT, 0); +			wacom_report_abs(wcombo, ABS_DISTANCE, 0); +		} else { +			wacom_report_abs(wcombo, ABS_PRESSURE, 0); +			wacom_report_key(wcombo, BTN_TOUCH, 0); +			wacom_report_key(wcombo, BTN_STYLUS, 0); +			wacom_report_key(wcombo, BTN_STYLUS2, 0); +		} +		wacom->id[0] = 0; +		wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ +		wacom_report_key(wcombo, wacom->tool[0], 0);  	}  	/* send pad data */  	switch (features->type) {  	    case WACOM_G4: -		prox = data[7] & 0xf8; -		if (prox || wacom->id[1]) { +		if (data[7] & 0xf8) { +			if (penData) { +				wacom_input_sync(wcombo); /* sync last event */ +				if (!wacom->id[0]) +					penData = 0; +			}  			wacom->id[1] = PAD_DEVICE_ID;  			wacom_report_key(wcombo, BTN_0, (data[7] & 0x40));  			wacom_report_key(wcombo, BTN_4, (data[7] & 0x80)); @@ -231,16 +245,29 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)  			wacom_report_rel(wcombo, REL_WHEEL, rw);  			wacom_report_key(wcombo, BTN_TOOL_FINGER, 0xf0);  			wacom_report_abs(wcombo, ABS_MISC, wacom->id[1]); -			if (!prox) -				wacom->id[1] = 0; -			wacom_report_abs(wcombo, ABS_MISC, wacom->id[1]); +			wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0); +		} else if (wacom->id[1]) { +			if (penData) { +				wacom_input_sync(wcombo); /* sync last event */ +				if (!wacom->id[0]) +					penData = 0; +			} +			wacom->id[1] = 0; +			wacom_report_key(wcombo, BTN_0, (data[7] & 0x40)); +			wacom_report_key(wcombo, BTN_4, (data[7] & 0x80)); +			wacom_report_rel(wcombo, REL_WHEEL, 0); +			wacom_report_key(wcombo, BTN_TOOL_FINGER, 0); +			wacom_report_abs(wcombo, ABS_MISC, 0);  			wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0);  		} -		retval = 1;  		break;  	    case WACOM_MO: -		prox = (data[7] & 0xf8) || data[8]; -		if (prox || wacom->id[1]) { +		if ((data[7] & 0xf8) || (data[8] & 0xff)) { +			if (penData) { +				wacom_input_sync(wcombo); /* sync last event */ +				if (!wacom->id[0]) +					penData = 0; +			}  			wacom->id[1] = PAD_DEVICE_ID;  			wacom_report_key(wcombo, BTN_0, (data[7] & 0x08));  			wacom_report_key(wcombo, BTN_1, (data[7] & 0x20)); @@ -248,16 +275,27 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo)  			wacom_report_key(wcombo, BTN_5, (data[7] & 0x40));  			wacom_report_abs(wcombo, ABS_WHEEL, (data[8] & 0x7f));  			wacom_report_key(wcombo, BTN_TOOL_FINGER, 0xf0); -			if (!prox) -				wacom->id[1] = 0;  			wacom_report_abs(wcombo, ABS_MISC, wacom->id[1]);  			wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0); +		} else if (wacom->id[1]) { +			if (penData) { +				wacom_input_sync(wcombo); /* sync last event */ +				if (!wacom->id[0]) +					penData = 0; +			} +			wacom->id[1] = 0; +			wacom_report_key(wcombo, BTN_0, (data[7] & 0x08)); +			wacom_report_key(wcombo, BTN_1, (data[7] & 0x20)); +			wacom_report_key(wcombo, BTN_4, (data[7] & 0x10)); +			wacom_report_key(wcombo, BTN_5, (data[7] & 0x40)); +			wacom_report_abs(wcombo, ABS_WHEEL, (data[8] & 0x7f)); +			wacom_report_key(wcombo, BTN_TOOL_FINGER, 0); +			wacom_report_abs(wcombo, ABS_MISC, 0); +			wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0);  		} -		retval = 1;  		break;  	} -exit: -	return retval; +	return 1;  }  static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) @@ -598,9 +636,9 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo)  static void wacom_tpc_finger_in(struct wacom_wac *wacom, void *wcombo, char *data, int idx)  {  	wacom_report_abs(wcombo, ABS_X, -		data[2 + idx * 2] | ((data[3 + idx * 2] & 0x7f) << 8)); +		(data[2 + idx * 2] & 0xff) | ((data[3 + idx * 2] & 0x7f) << 8));  	wacom_report_abs(wcombo, ABS_Y, -		data[6 + idx * 2] | ((data[7 + idx * 2] & 0x7f) << 8)); +		(data[6 + idx * 2] & 0xff) | ((data[7 + idx * 2] & 0x7f) << 8));  	wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]);  	wacom_report_key(wcombo, wacom->tool[idx], 1);  	if (idx) @@ -744,24 +782,31 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, void *wcombo)  		touchInProx = 0; -		if (!wacom->id[0]) { /* first in prox */ -			/* Going into proximity select tool */ -			wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; -			if (wacom->tool[0] == BTN_TOOL_PEN) -				wacom->id[0] = STYLUS_DEVICE_ID; -			else -				wacom->id[0] = ERASER_DEVICE_ID; -		} -		wacom_report_key(wcombo, BTN_STYLUS, data[1] & 0x02); -		wacom_report_key(wcombo, BTN_STYLUS2, data[1] & 0x10); -		wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[2])); -		wacom_report_abs(wcombo, ABS_Y, wacom_le16_to_cpu(&data[4])); -		pressure = ((data[7] & 0x01) << 8) | data[6]; -		if (pressure < 0) -			pressure = features->pressure_max + pressure + 1; -		wacom_report_abs(wcombo, ABS_PRESSURE, pressure); -		wacom_report_key(wcombo, BTN_TOUCH, data[1] & 0x05); -		if (!prox) { /* out-prox */ +		if (prox) { /* in prox */ +			if (!wacom->id[0]) { +				/* Going into proximity select tool */ +				wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; +				if (wacom->tool[0] == BTN_TOOL_PEN) +					wacom->id[0] = STYLUS_DEVICE_ID; +				else +					wacom->id[0] = ERASER_DEVICE_ID; +			} +			wacom_report_key(wcombo, BTN_STYLUS, data[1] & 0x02); +			wacom_report_key(wcombo, BTN_STYLUS2, data[1] & 0x10); +			wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[2])); +			wacom_report_abs(wcombo, ABS_Y, wacom_le16_to_cpu(&data[4])); +			pressure = ((data[7] & 0x01) << 8) | data[6]; +			if (pressure < 0) +				pressure = features->pressure_max + pressure + 1; +			wacom_report_abs(wcombo, ABS_PRESSURE, pressure); +			wacom_report_key(wcombo, BTN_TOUCH, data[1] & 0x05); +		} else { +			wacom_report_abs(wcombo, ABS_X, 0); +			wacom_report_abs(wcombo, ABS_Y, 0); +			wacom_report_abs(wcombo, ABS_PRESSURE, 0); +			wacom_report_key(wcombo, BTN_STYLUS, 0); +			wacom_report_key(wcombo, BTN_STYLUS2, 0); +			wacom_report_key(wcombo, BTN_TOUCH, 0);  			wacom->id[0] = 0;  			/* pen is out so touch can be enabled now */  			touchInProx = 1; diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c index 0be15c70c16..47a5ffec55a 100644 --- a/drivers/isdn/gigaset/bas-gigaset.c +++ b/drivers/isdn/gigaset/bas-gigaset.c @@ -14,11 +14,6 @@   */  #include "gigaset.h" - -#include <linux/errno.h> -#include <linux/init.h> -#include <linux/slab.h> -#include <linux/timer.h>  #include <linux/usb.h>  #include <linux/module.h>  #include <linux/moduleparam.h> diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c index eb7e27105a8..964a55fb148 100644 --- a/drivers/isdn/gigaset/capi.c +++ b/drivers/isdn/gigaset/capi.c @@ -12,8 +12,6 @@   */  #include "gigaset.h" -#include <linux/slab.h> -#include <linux/ctype.h>  #include <linux/proc_fs.h>  #include <linux/seq_file.h>  #include <linux/isdn/capilli.h> diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index 0b39b387c12..f6f45f22192 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c @@ -14,10 +14,8 @@   */  #include "gigaset.h" -#include <linux/ctype.h>  #include <linux/module.h>  #include <linux/moduleparam.h> -#include <linux/slab.h>  /* Version Information */  #define DRIVER_AUTHOR "Hansjoerg Lipp <hjlipp@web.de>, Tilman Schmidt <tilman@imap.cc>, Stefan Eilers" diff --git a/drivers/isdn/gigaset/gigaset.h b/drivers/isdn/gigaset/gigaset.h index 9ef5b0463fd..05947f9c184 100644 --- a/drivers/isdn/gigaset/gigaset.h +++ b/drivers/isdn/gigaset/gigaset.h @@ -20,11 +20,12 @@  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/kernel.h> +#include <linux/sched.h>  #include <linux/compiler.h>  #include <linux/types.h> +#include <linux/ctype.h>  #include <linux/slab.h>  #include <linux/spinlock.h> -#include <linux/usb.h>  #include <linux/skbuff.h>  #include <linux/netdevice.h>  #include <linux/ppp_defs.h> diff --git a/drivers/isdn/gigaset/i4l.c b/drivers/isdn/gigaset/i4l.c index c99fb9790a1..c22e5ace827 100644 --- a/drivers/isdn/gigaset/i4l.c +++ b/drivers/isdn/gigaset/i4l.c @@ -15,7 +15,6 @@  #include "gigaset.h"  #include <linux/isdnif.h> -#include <linux/slab.h>  #define HW_HDR_LEN	2	/* Header size used to store ack info */ diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c index f0dc6c9cc28..c9f28dd40d5 100644 --- a/drivers/isdn/gigaset/interface.c +++ b/drivers/isdn/gigaset/interface.c @@ -13,7 +13,6 @@  #include "gigaset.h"  #include <linux/gigaset_dev.h> -#include <linux/tty.h>  #include <linux/tty_flip.h>  /*** our ioctls ***/ diff --git a/drivers/isdn/gigaset/proc.c b/drivers/isdn/gigaset/proc.c index b69f73a0668..b943efbff44 100644 --- a/drivers/isdn/gigaset/proc.c +++ b/drivers/isdn/gigaset/proc.c @@ -14,7 +14,6 @@   */  #include "gigaset.h" -#include <linux/ctype.h>  static ssize_t show_cidmode(struct device *dev,  			    struct device_attribute *attr, char *buf) diff --git a/drivers/isdn/gigaset/ser-gigaset.c b/drivers/isdn/gigaset/ser-gigaset.c index 8b0afd203a0..e96c0586886 100644 --- a/drivers/isdn/gigaset/ser-gigaset.c +++ b/drivers/isdn/gigaset/ser-gigaset.c @@ -11,13 +11,10 @@   */  #include "gigaset.h" -  #include <linux/module.h>  #include <linux/moduleparam.h>  #include <linux/platform_device.h> -#include <linux/tty.h>  #include <linux/completion.h> -#include <linux/slab.h>  /* Version Information */  #define DRIVER_AUTHOR "Tilman Schmidt" diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c index 9430a2bbb52..76dbb20f306 100644 --- a/drivers/isdn/gigaset/usb-gigaset.c +++ b/drivers/isdn/gigaset/usb-gigaset.c @@ -16,10 +16,6 @@   */  #include "gigaset.h" - -#include <linux/errno.h> -#include <linux/init.h> -#include <linux/slab.h>  #include <linux/usb.h>  #include <linux/module.h>  #include <linux/moduleparam.h> diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c index 07090f379c6..69c84a1d88e 100644 --- a/drivers/lguest/lguest_device.c +++ b/drivers/lguest/lguest_device.c @@ -178,7 +178,7 @@ static void set_status(struct virtio_device *vdev, u8 status)  	/* We set the status. */  	to_lgdev(vdev)->desc->status = status; -	kvm_hypercall1(LHCALL_NOTIFY, (max_pfn << PAGE_SHIFT) + offset); +	hcall(LHCALL_NOTIFY, (max_pfn << PAGE_SHIFT) + offset, 0, 0, 0);  }  static void lg_set_status(struct virtio_device *vdev, u8 status) @@ -229,7 +229,7 @@ static void lg_notify(struct virtqueue *vq)  	 */  	struct lguest_vq_info *lvq = vq->priv; -	kvm_hypercall1(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT); +	hcall(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT, 0, 0, 0);  }  /* An extern declaration inside a C file is bad form.  Don't do it. */ diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c index fb2b7ef7868..b4eb675a807 100644 --- a/drivers/lguest/x86/core.c +++ b/drivers/lguest/x86/core.c @@ -288,6 +288,18 @@ static int emulate_insn(struct lg_cpu *cpu)  	insn = lgread(cpu, physaddr, u8);  	/* +	 * Around 2.6.33, the kernel started using an emulation for the +	 * cmpxchg8b instruction in early boot on many configurations.  This +	 * code isn't paravirtualized, and it tries to disable interrupts. +	 * Ignore it, which will Mostly Work. +	 */ +	if (insn == 0xfa) { +		/* "cli", or Clear Interrupt Enable instruction.  Skip it. */ +		cpu->regs->eip++; +		return 1; +	} + +	/*  	 * 0x66 is an "operand prefix".  It means it's using the upper 16 bits  	 * of the eax register.  	 */ diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index d149624b4a4..d0cb372a0f0 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c @@ -1944,7 +1944,7 @@ static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,  		netif_dbg(tp, rx_status, dev, "%s() status %04x, size %04x, cur %04x\n",  			  __func__, rx_status, rx_size, cur_rx);  #if RTL8139_DEBUG > 2 -		print_dump_hex(KERN_DEBUG, "Frame contents: ", +		print_hex_dump(KERN_DEBUG, "Frame contents: ",  			       DUMP_PREFIX_OFFSET, 16, 1,  			       &rx_ring[ring_offset], 70, true);  #endif diff --git a/drivers/net/wan/hdlc_ppp.c b/drivers/net/wan/hdlc_ppp.c index b9b9d6b01c0..941f053e650 100644 --- a/drivers/net/wan/hdlc_ppp.c +++ b/drivers/net/wan/hdlc_ppp.c @@ -628,9 +628,15 @@ static void ppp_stop(struct net_device *dev)  	ppp_cp_event(dev, PID_LCP, STOP, 0, 0, 0, NULL);  } +static void ppp_close(struct net_device *dev) +{ +	ppp_tx_flush(); +} +  static struct hdlc_proto proto = {  	.start		= ppp_start,  	.stop		= ppp_stop, +	.close		= ppp_close,  	.type_trans	= ppp_type_trans,  	.ioctl		= ppp_ioctl,  	.netif_rx	= ppp_rx, diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index dd03384432f..3e32693d1c2 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c @@ -262,6 +262,7 @@ static struct iwl_lib_ops iwl6000_lib = {  			EEPROM_REG_BAND_4_CHANNELS,  			EEPROM_REG_BAND_5_CHANNELS,  			EEPROM_REG_BAND_24_HT40_CHANNELS, +			EEPROM_6000_REG_BAND_24_HT40_CHANNELS,  			EEPROM_REG_BAND_52_HT40_CHANNELS  		},  		.verify_signature  = iwlcore_eeprom_verify_signature, @@ -328,7 +329,7 @@ static struct iwl_lib_ops iwl6050_lib = {  			EEPROM_REG_BAND_3_CHANNELS,  			EEPROM_REG_BAND_4_CHANNELS,  			EEPROM_REG_BAND_5_CHANNELS, -			EEPROM_REG_BAND_24_HT40_CHANNELS, +			EEPROM_6000_REG_BAND_24_HT40_CHANNELS,  			EEPROM_REG_BAND_52_HT40_CHANNELS  		},  		.verify_signature  = iwlcore_eeprom_verify_signature, diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 0b497d4bc65..310bc6aeb99 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -3305,6 +3305,7 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)  	cancel_delayed_work_sync(&priv->init_alive_start);  	cancel_delayed_work(&priv->scan_check); +	cancel_work_sync(&priv->start_internal_scan);  	cancel_delayed_work(&priv->alive_start);  	cancel_work_sync(&priv->beacon_update);  	del_timer_sync(&priv->statistics_periodic); diff --git a/drivers/net/wireless/iwlwifi/iwl-calib.c b/drivers/net/wireless/iwlwifi/iwl-calib.c index 0471c3f8713..f1fd00b1a65 100644 --- a/drivers/net/wireless/iwlwifi/iwl-calib.c +++ b/drivers/net/wireless/iwlwifi/iwl-calib.c @@ -808,6 +808,18 @@ void iwl_chain_noise_calibration(struct iwl_priv *priv,  		}  	} +	/* +	 * The above algorithm sometimes fails when the ucode +	 * reports 0 for all chains. It's not clear why that +	 * happens to start with, but it is then causing trouble +	 * because this can make us enable more chains than the +	 * hardware really has. +	 * +	 * To be safe, simply mask out any chains that we know +	 * are not on the device. +	 */ +	active_chains &= priv->hw_params.valid_rx_ant; +  	num_tx_chains = 0;  	for (i = 0; i < NUM_RX_CHAINS; i++) {  		/* loops on all the bits of diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 2a89747d347..b75808aad1e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c @@ -2802,7 +2802,6 @@ static void iwl_force_rf_reset(struct iwl_priv *priv)  	 */  	IWL_DEBUG_INFO(priv, "perform radio reset.\n");  	iwl_internal_short_hw_scan(priv); -	return;  } diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index d89755f5031..6c3f0127f74 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h @@ -502,7 +502,7 @@ void iwl_init_scan_params(struct iwl_priv *priv);  int iwl_scan_cancel(struct iwl_priv *priv);  int iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);  int iwl_mac_hw_scan(struct ieee80211_hw *hw, struct cfg80211_scan_request *req); -int iwl_internal_short_hw_scan(struct iwl_priv *priv); +void iwl_internal_short_hw_scan(struct iwl_priv *priv);  int iwl_force_reset(struct iwl_priv *priv, int mode);  u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,  		       const u8 *ie, int ie_len, int left); diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 9466e909f55..b2d94c7c645 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h @@ -1264,6 +1264,7 @@ struct iwl_priv {  	struct work_struct tt_work;  	struct work_struct ct_enter;  	struct work_struct ct_exit; +	struct work_struct start_internal_scan;  	struct tasklet_struct irq_tasklet; diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.h b/drivers/net/wireless/iwlwifi/iwl-eeprom.h index cb6d50b7814..ef0e3256eec 100644 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.h +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.h @@ -203,6 +203,10 @@ struct iwl_eeprom_enhanced_txpwr {  #define EEPROM_REG_BAND_52_HT40_CHANNELS  ((0x92)\  		| INDIRECT_ADDRESS | INDIRECT_REGULATORY)   /* 22  bytes */ +/* 6000 regulatory - indirect access */ +#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS  ((0x80)\ +		| INDIRECT_ADDRESS | INDIRECT_REGULATORY)   /* 14  bytes */ +  /* 6000 and up regulatory tx power - indirect access */  /* max. elements per section */  #define EEPROM_MAX_TXPOWER_SECTION_ELEMENTS	(8) diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c index ae981932ce6..de0446d4bfe 100644 --- a/drivers/net/wireless/iwlwifi/iwl-scan.c +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c @@ -470,6 +470,8 @@ EXPORT_SYMBOL(iwl_init_scan_params);  static int iwl_scan_initiate(struct iwl_priv *priv)  { +	WARN_ON(!mutex_is_locked(&priv->mutex)); +  	IWL_DEBUG_INFO(priv, "Starting scan...\n");  	set_bit(STATUS_SCANNING, &priv->status);  	priv->is_internal_short_scan = false; @@ -547,24 +549,31 @@ EXPORT_SYMBOL(iwl_mac_hw_scan);   * internal short scan, this function should only been called while associated.   * It will reset and tune the radio to prevent possible RF related problem   */ -int iwl_internal_short_hw_scan(struct iwl_priv *priv) +void iwl_internal_short_hw_scan(struct iwl_priv *priv)  { -	int ret = 0; +	queue_work(priv->workqueue, &priv->start_internal_scan); +} + +static void iwl_bg_start_internal_scan(struct work_struct *work) +{ +	struct iwl_priv *priv = +		container_of(work, struct iwl_priv, start_internal_scan); + +	mutex_lock(&priv->mutex);  	if (!iwl_is_ready_rf(priv)) { -		ret = -EIO;  		IWL_DEBUG_SCAN(priv, "not ready or exit pending\n"); -		goto out; +		goto unlock;  	} +  	if (test_bit(STATUS_SCANNING, &priv->status)) {  		IWL_DEBUG_SCAN(priv, "Scan already in progress.\n"); -		ret = -EAGAIN; -		goto out; +		goto unlock;  	} +  	if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {  		IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n"); -		ret = -EAGAIN; -		goto out; +		goto unlock;  	}  	priv->scan_bands = 0; @@ -577,9 +586,8 @@ int iwl_internal_short_hw_scan(struct iwl_priv *priv)  	set_bit(STATUS_SCANNING, &priv->status);  	priv->is_internal_short_scan = true;  	queue_work(priv->workqueue, &priv->request_scan); - -out: -	return ret; + unlock: +	mutex_unlock(&priv->mutex);  }  #define IWL_SCAN_CHECK_WATCHDOG (7 * HZ) @@ -963,6 +971,7 @@ void iwl_setup_scan_deferred_work(struct iwl_priv *priv)  	INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);  	INIT_WORK(&priv->request_scan, iwl_bg_request_scan);  	INIT_WORK(&priv->abort_scan, iwl_bg_abort_scan); +	INIT_WORK(&priv->start_internal_scan, iwl_bg_start_internal_scan);  	INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);  }  EXPORT_SYMBOL(iwl_setup_scan_deferred_work); diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index f230f6543bf..854959cada3 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c @@ -1484,6 +1484,11 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)  	if (!s)  		return -EINVAL; +	if (s->functions) { +		WARN_ON(1); +		return -EINVAL; +	} +  	/* We do not want to validate the CIS cache... */  	mutex_lock(&s->ops_mutex);  	destroy_cis_cache(s); @@ -1639,7 +1644,7 @@ static ssize_t pccard_show_cis(struct kobject *kobj,  		count = 0;  	else {  		struct pcmcia_socket *s; -		unsigned int chains; +		unsigned int chains = 1;  		if (off + count > size)  			count = size - off; @@ -1648,7 +1653,7 @@ static ssize_t pccard_show_cis(struct kobject *kobj,  		if (!(s->state & SOCKET_PRESENT))  			return -ENODEV; -		if (pccard_validate_cis(s, &chains)) +		if (!s->functions && pccard_validate_cis(s, &chains))  			return -EIO;  		if (!chains)  			return -ENODATA; diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c index 6206408e196..2d48196a48c 100644 --- a/drivers/pcmcia/db1xxx_ss.c +++ b/drivers/pcmcia/db1xxx_ss.c @@ -166,8 +166,10 @@ static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock)  		ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq,  				  IRQF_DISABLED, "pcmcia_insert", sock); -		if (ret) +		if (ret) { +			local_irq_restore(flags);  			goto out1; +		}  		ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq,  				  IRQF_DISABLED, "pcmcia_eject", sock); diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index cb6036d89e5..4014cf8e4a2 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c @@ -687,12 +687,10 @@ static void pcmcia_requery(struct pcmcia_socket *s)  			new_funcs = mfc.nfn;  		else  			new_funcs = 1; -		if (old_funcs > new_funcs) { +		if (old_funcs != new_funcs) { +			/* we need to re-start */  			pcmcia_card_remove(s, NULL);  			pcmcia_card_add(s); -		} else if (new_funcs > old_funcs) { -			s->functions = new_funcs; -			pcmcia_device_add(s, 1);  		}  	} @@ -728,6 +726,8 @@ static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)  	struct pcmcia_socket *s = dev->socket;  	const struct firmware *fw;  	int ret = -ENOMEM; +	cistpl_longlink_mfc_t mfc; +	int old_funcs, new_funcs = 1;  	if (!filename)  		return -EINVAL; @@ -750,6 +750,14 @@ static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)  			goto release;  		} +		/* we need to re-start if the number of functions changed */ +		old_funcs = s->functions; +		if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC, +					&mfc)) +			new_funcs = mfc.nfn; + +		if (old_funcs != new_funcs) +			ret = -EBUSY;  		/* update information */  		pcmcia_device_query(dev); @@ -858,10 +866,8 @@ static inline int pcmcia_devmatch(struct pcmcia_device *dev,  	if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) {  		dev_dbg(&dev->dev, "device needs a fake CIS\n");  		if (!dev->socket->fake_cis) -			pcmcia_load_firmware(dev, did->cisfile); - -		if (!dev->socket->fake_cis) -			return 0; +			if (pcmcia_load_firmware(dev, did->cisfile)) +				return 0;  	}  	if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) { diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index caec1dee2a4..7c3d03bb4f3 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c @@ -755,12 +755,12 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)  	else  		printk(KERN_WARNING "pcmcia: Driver needs updating to support IRQ sharing.\n"); -#ifdef CONFIG_PCMCIA_PROBE - -	if (s->irq.AssignedIRQ != 0) { -		/* If the interrupt is already assigned, it must be the same */ +	/* If the interrupt is already assigned, it must be the same */ +	if (s->irq.AssignedIRQ != 0)  		irq = s->irq.AssignedIRQ; -	} else { + +#ifdef CONFIG_PCMCIA_PROBE +	if (!irq) {  		int try;  		u32 mask = s->irq_mask;  		void *data = p_dev; /* something unique to this device */ diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 559069a80a3..a6eb7b59ba9 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c @@ -214,7 +214,7 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base,  		return;  	}  	for (i = base, most = 0; i < base+num; i += 8) { -		res = claim_region(NULL, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); +		res = claim_region(s, i, 8, IORESOURCE_IO, "PCMCIA ioprobe");  		if (!res)  			continue;  		hole = inb(i); @@ -231,9 +231,14 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base,  	bad = any = 0;  	for (i = base; i < base+num; i += 8) { -		res = claim_region(NULL, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); -		if (!res) +		res = claim_region(s, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); +		if (!res) { +			if (!any) +				printk(" excluding"); +			if (!bad) +				bad = any = i;  			continue; +		}  		for (j = 0; j < 8; j++)  			if (inb(i+j) != most)  				break; @@ -253,6 +258,7 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base,  	}  	if (bad) {  		if ((num > 16) && (bad == base) && (i == base+num)) { +			sub_interval(&s_data->io_db, bad, i-bad);  			printk(" nothing: probe failed.\n");  			return;  		} else { @@ -804,7 +810,7 @@ static int adjust_memory(struct pcmcia_socket *s, unsigned int action, unsigned  static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long start, unsigned long end)  {  	struct socket_data *data = s->resource_data; -	unsigned long size = end - start + 1; +	unsigned long size;  	int ret = 0;  #if defined(CONFIG_X86) @@ -814,6 +820,8 @@ static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long  		start = 0x100;  #endif +	size = end - start + 1; +  	if (end < start)  		return -EINVAL; diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 175d202ab37..8cfa5b12ea7 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c @@ -105,6 +105,10 @@ struct serial_cfg_mem {   * manfid 0x0160, 0x0104   * This card appears to have a 14.7456MHz clock.   */ +/* Generic Modem: MD55x (GPRS/EDGE) have + * Elan VPU16551 UART with 14.7456MHz oscillator + * manfid 0x015D, 0x4C45 + */  static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port)  {  	port->uartclk = 14745600; @@ -196,6 +200,11 @@ static const struct serial_quirk quirks[] = {  		.multi	= -1,  		.setup	= quirk_setup_brainboxes_0104,  	}, { +		.manfid	= 0x015D, +		.prodid	= 0x4C45, +		.multi	= -1, +		.setup	= quirk_setup_brainboxes_0104, +	}, {  		.manfid	= MANFID_IBM,  		.prodid	= ~0,  		.multi	= -1, diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c index f1dcd7969a5..0e8d3522461 100644 --- a/drivers/ssb/driver_pcicore.c +++ b/drivers/ssb/driver_pcicore.c @@ -246,20 +246,12 @@ static struct pci_controller ssb_pcicore_controller = {  	.pci_ops	= &ssb_pcicore_pciops,  	.io_resource	= &ssb_pcicore_io_resource,  	.mem_resource	= &ssb_pcicore_mem_resource, -	.mem_offset	= 0x24000000,  }; -static u32 ssb_pcicore_pcibus_iobase = 0x100; -static u32 ssb_pcicore_pcibus_membase = SSB_PCI_DMA; -  /* This function is called when doing a pci_enable_device().   * We must first check if the device is a device on the PCI-core bridge. */  int ssb_pcicore_plat_dev_init(struct pci_dev *d)  { -	struct resource *res; -	int pos, size; -	u32 *base; -  	if (d->bus->ops != &ssb_pcicore_pciops) {  		/* This is not a device on the PCI-core bridge. */  		return -ENODEV; @@ -268,27 +260,6 @@ int ssb_pcicore_plat_dev_init(struct pci_dev *d)  	ssb_printk(KERN_INFO "PCI: Fixing up device %s\n",  		   pci_name(d)); -	/* Fix up resource bases */ -	for (pos = 0; pos < 6; pos++) { -		res = &d->resource[pos]; -		if (res->flags & IORESOURCE_IO) -			base = &ssb_pcicore_pcibus_iobase; -		else -			base = &ssb_pcicore_pcibus_membase; -		res->flags |= IORESOURCE_PCI_FIXED; -		if (res->end) { -			size = res->end - res->start + 1; -			if (*base & (size - 1)) -				*base = (*base + size) & ~(size - 1); -			res->start = *base; -			res->end = res->start + size - 1; -			*base += size; -			pci_write_config_dword(d, PCI_BASE_ADDRESS_0 + (pos << 2), res->start); -		} -		/* Fix up PCI bridge BAR0 only */ -		if (d->bus->number == 0 && PCI_SLOT(d->devfn) == 0) -			break; -	}  	/* Fix up interrupt lines */  	d->irq = ssb_mips_irq(extpci_core->dev) + 2;  	pci_write_config_byte(d, PCI_INTERRUPT_LINE, d->irq); diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 0e8468ffd10..0bf5020d0d3 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -194,10 +194,10 @@ config EP93XX_WATCHDOG  config OMAP_WATCHDOG  	tristate "OMAP Watchdog" -	depends on ARCH_OMAP16XX || ARCH_OMAP2 || ARCH_OMAP3 +	depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS  	help -	  Support for TI OMAP1610/OMAP1710/OMAP2420/OMAP3430 watchdog.  Say 'Y' -	  here to enable the OMAP1610/OMAP1710/OMAP2420/OMAP3430 watchdog timer. +	  Support for TI OMAP1610/OMAP1710/OMAP2420/OMAP3430/OMAP4430 watchdog.  Say 'Y' +	  here to enable the OMAP1610/OMAP1710/OMAP2420/OMAP3430/OMAP4430 watchdog timer.  config PNX4008_WATCHDOG  	tristate "PNX4008 Watchdog" @@ -302,7 +302,7 @@ config TS72XX_WATCHDOG  config MAX63XX_WATCHDOG  	tristate "Max63xx watchdog" -	depends on ARM +	depends on ARM && HAS_IOMEM  	help  	  Support for memory mapped max63{69,70,71,72,73,74} watchdog timer. diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c index 8b724aad682..500d38342e1 100644 --- a/drivers/watchdog/booke_wdt.c +++ b/drivers/watchdog/booke_wdt.c @@ -44,7 +44,7 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT;  #ifdef	CONFIG_FSL_BOOKE  #define WDTP(x)		((((x)&0x3)<<30)|(((x)&0x3c)<<15)) -#define WDTP_MASK	(WDTP(0)) +#define WDTP_MASK	(WDTP(0x3f))  #else  #define WDTP(x)		(TCR_WP(x))  #define WDTP_MASK	(TCR_WP_MASK) diff --git a/drivers/watchdog/max63xx_wdt.c b/drivers/watchdog/max63xx_wdt.c index 75f3a83c036..3053ff05ca4 100644 --- a/drivers/watchdog/max63xx_wdt.c +++ b/drivers/watchdog/max63xx_wdt.c @@ -154,9 +154,14 @@ static void max63xx_wdt_enable(struct max63xx_timeout *entry)  static void max63xx_wdt_disable(void)  { +	u8 val; +  	spin_lock(&io_lock); -	__raw_writeb(3, wdt_base); +	val = __raw_readb(wdt_base); +	val &= ~MAX6369_WDSET; +	val |= 3; +	__raw_writeb(val, wdt_base);  	spin_unlock(&io_lock); | 
