Merge tag 'topic/core-stuff-2014-06-30' of git://anongit.freedesktop.org/drm-intel into drm-next
misc core patches picked up by Daniel and Jani. * tag 'topic/core-stuff-2014-06-30' of git://anongit.freedesktop.org/drm-intel: drm/fb-helper: Remove unnecessary list empty check in drm_fb_helper_debug_enter() drm/fb-helper: Redundant info->fix.type_aux setting in drm_fb_helper_fill_fix() drm/debugfs: add an "edid_override" file per connector drm/debugfs: add a "force" file per connector drm: add register and unregister functions for connectors drm: fix uninitialized acquire_ctx fields (v2) drm: Driver-specific ioctls range from 0x40 to 0x9f drm: Don't export internal module variables
This commit is contained in:
		
				commit
				
					
						afa95e7403
					
				
			
		
					 57 changed files with 334 additions and 98 deletions
				
			
		|  | @ -1610,7 +1610,7 @@ int max_width, max_height;</synopsis> | ||||||
|           The connector is then registered with a call to |           The connector is then registered with a call to | ||||||
|           <function>drm_connector_init</function> with a pointer to the connector |           <function>drm_connector_init</function> with a pointer to the connector | ||||||
|           functions and a connector type, and exposed through sysfs with a call to |           functions and a connector type, and exposed through sysfs with a call to | ||||||
|           <function>drm_sysfs_connector_add</function>. |           <function>drm_connector_register</function>. | ||||||
|         </para> |         </para> | ||||||
|         <para> |         <para> | ||||||
|           Supported connector types are |           Supported connector types are | ||||||
|  | @ -1768,7 +1768,7 @@ int max_width, max_height;</synopsis> | ||||||
| 	(<function>drm_encoder_cleanup</function>) and connectors | 	(<function>drm_encoder_cleanup</function>) and connectors | ||||||
| 	(<function>drm_connector_cleanup</function>). Furthermore, connectors | 	(<function>drm_connector_cleanup</function>). Furthermore, connectors | ||||||
| 	that have been added to sysfs must be removed by a call to | 	that have been added to sysfs must be removed by a call to | ||||||
| 	<function>drm_sysfs_connector_remove</function> before calling | 	<function>drm_connector_unregister</function> before calling | ||||||
| 	<function>drm_connector_cleanup</function>. | 	<function>drm_connector_cleanup</function>. | ||||||
|       </para> |       </para> | ||||||
|       <para> |       <para> | ||||||
|  | @ -1813,7 +1813,7 @@ void intel_crt_init(struct drm_device *dev) | ||||||
| 	drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs); | 	drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs); | ||||||
| 	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); | 	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| }]]></programlisting> | }]]></programlisting> | ||||||
|       <para> |       <para> | ||||||
|         In the example above (taken from the i915 driver), a CRTC, connector and |         In the example above (taken from the i915 driver), a CRTC, connector and | ||||||
|  |  | ||||||
|  | @ -48,7 +48,7 @@ static void armada_drm_connector_destroy(struct drm_connector *conn) | ||||||
| { | { | ||||||
| 	struct armada_connector *dconn = drm_to_armada_conn(conn); | 	struct armada_connector *dconn = drm_to_armada_conn(conn); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_remove(conn); | 	drm_connector_unregister(conn); | ||||||
| 	drm_connector_cleanup(conn); | 	drm_connector_cleanup(conn); | ||||||
| 	kfree(dconn); | 	kfree(dconn); | ||||||
| } | } | ||||||
|  | @ -141,7 +141,7 @@ int armada_output_create(struct drm_device *dev, | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto err_conn; | 		goto err_conn; | ||||||
| 
 | 
 | ||||||
| 	ret = drm_sysfs_connector_add(&dconn->conn); | 	ret = drm_connector_register(&dconn->conn); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto err_sysfs; | 		goto err_sysfs; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -829,7 +829,7 @@ static void ast_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	struct ast_connector *ast_connector = to_ast_connector(connector); | 	struct ast_connector *ast_connector = to_ast_connector(connector); | ||||||
| 	ast_i2c_destroy(ast_connector->i2c); | 	ast_i2c_destroy(ast_connector->i2c); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -871,7 +871,7 @@ static int ast_connector_init(struct drm_device *dev) | ||||||
| 	connector->interlace_allowed = 0; | 	connector->interlace_allowed = 0; | ||||||
| 	connector->doublescan_allowed = 0; | 	connector->doublescan_allowed = 0; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	connector->polled = DRM_CONNECTOR_POLL_CONNECT; | 	connector->polled = DRM_CONNECTOR_POLL_CONNECT; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -328,7 +328,7 @@ int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder, | ||||||
| 	} | 	} | ||||||
| 	drm_connector_helper_add(&ptn_bridge->connector, | 	drm_connector_helper_add(&ptn_bridge->connector, | ||||||
| 			&ptn3460_connector_helper_funcs); | 			&ptn3460_connector_helper_funcs); | ||||||
| 	drm_sysfs_connector_add(&ptn_bridge->connector); | 	drm_connector_register(&ptn_bridge->connector); | ||||||
| 	drm_mode_connector_attach_encoder(&ptn_bridge->connector, encoder); | 	drm_mode_connector_attach_encoder(&ptn_bridge->connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -881,6 +881,8 @@ int drm_connector_init(struct drm_device *dev, | ||||||
| 	drm_object_attach_property(&connector->base, | 	drm_object_attach_property(&connector->base, | ||||||
| 				      dev->mode_config.dpms_property, 0); | 				      dev->mode_config.dpms_property, 0); | ||||||
| 
 | 
 | ||||||
|  | 	connector->debugfs_entry = NULL; | ||||||
|  | 
 | ||||||
| out_put: | out_put: | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		drm_mode_object_put(dev, &connector->base); | 		drm_mode_object_put(dev, &connector->base); | ||||||
|  | @ -920,6 +922,47 @@ void drm_connector_cleanup(struct drm_connector *connector) | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(drm_connector_cleanup); | EXPORT_SYMBOL(drm_connector_cleanup); | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * drm_connector_register - register a connector | ||||||
|  |  * @connector: the connector to register | ||||||
|  |  * | ||||||
|  |  * Register userspace interfaces for a connector | ||||||
|  |  * | ||||||
|  |  * Returns: | ||||||
|  |  * Zero on success, error code on failure. | ||||||
|  |  */ | ||||||
|  | int drm_connector_register(struct drm_connector *connector) | ||||||
|  | { | ||||||
|  | 	int ret; | ||||||
|  | 
 | ||||||
|  | 	ret = drm_sysfs_connector_add(connector); | ||||||
|  | 	if (ret) | ||||||
|  | 		return ret; | ||||||
|  | 
 | ||||||
|  | 	ret = drm_debugfs_connector_add(connector); | ||||||
|  | 	if (ret) { | ||||||
|  | 		drm_sysfs_connector_remove(connector); | ||||||
|  | 		return ret; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | EXPORT_SYMBOL(drm_connector_register); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * drm_connector_unregister - unregister a connector | ||||||
|  |  * @connector: the connector to unregister | ||||||
|  |  * | ||||||
|  |  * Unregister userspace interfaces for a connector | ||||||
|  |  */ | ||||||
|  | void drm_connector_unregister(struct drm_connector *connector) | ||||||
|  | { | ||||||
|  | 	drm_sysfs_connector_remove(connector); | ||||||
|  | 	drm_debugfs_connector_remove(connector); | ||||||
|  | } | ||||||
|  | EXPORT_SYMBOL(drm_connector_unregister); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * drm_connector_unplug_all - unregister connector userspace interfaces |  * drm_connector_unplug_all - unregister connector userspace interfaces | ||||||
|  * @dev: drm device |  * @dev: drm device | ||||||
|  | @ -934,7 +977,7 @@ void drm_connector_unplug_all(struct drm_device *dev) | ||||||
| 
 | 
 | ||||||
| 	/* taking the mode config mutex ends up in a clash with sysfs */ | 	/* taking the mode config mutex ends up in a clash with sysfs */ | ||||||
| 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) | 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) | ||||||
| 		drm_sysfs_connector_remove(connector); | 		drm_connector_unregister(connector); | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(drm_connector_unplug_all); | EXPORT_SYMBOL(drm_connector_unplug_all); | ||||||
|  | @ -3720,6 +3763,10 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector, | ||||||
| 	struct drm_device *dev = connector->dev; | 	struct drm_device *dev = connector->dev; | ||||||
| 	int ret, size; | 	int ret, size; | ||||||
| 
 | 
 | ||||||
|  | 	/* ignore requests to set edid when overridden */ | ||||||
|  | 	if (connector->override_edid) | ||||||
|  | 		return 0; | ||||||
|  | 
 | ||||||
| 	if (connector->edid_blob_ptr) | 	if (connector->edid_blob_ptr) | ||||||
| 		drm_property_destroy_blob(dev, connector->edid_blob_ptr); | 		drm_property_destroy_blob(dev, connector->edid_blob_ptr); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ | ||||||
| #include <linux/slab.h> | #include <linux/slab.h> | ||||||
| #include <linux/export.h> | #include <linux/export.h> | ||||||
| #include <drm/drmP.h> | #include <drm/drmP.h> | ||||||
|  | #include <drm/drm_edid.h> | ||||||
| 
 | 
 | ||||||
| #if defined(CONFIG_DEBUG_FS) | #if defined(CONFIG_DEBUG_FS) | ||||||
| 
 | 
 | ||||||
|  | @ -237,5 +238,186 @@ int drm_debugfs_cleanup(struct drm_minor *minor) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static int connector_show(struct seq_file *m, void *data) | ||||||
|  | { | ||||||
|  | 	struct drm_connector *connector = m->private; | ||||||
|  | 	const char *status; | ||||||
|  | 
 | ||||||
|  | 	switch (connector->force) { | ||||||
|  | 	case DRM_FORCE_ON: | ||||||
|  | 		status = "on\n"; | ||||||
|  | 		break; | ||||||
|  | 
 | ||||||
|  | 	case DRM_FORCE_ON_DIGITAL: | ||||||
|  | 		status = "digital\n"; | ||||||
|  | 		break; | ||||||
|  | 
 | ||||||
|  | 	case DRM_FORCE_OFF: | ||||||
|  | 		status = "off\n"; | ||||||
|  | 		break; | ||||||
|  | 
 | ||||||
|  | 	case DRM_FORCE_UNSPECIFIED: | ||||||
|  | 		status = "unspecified\n"; | ||||||
|  | 		break; | ||||||
|  | 
 | ||||||
|  | 	default: | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	seq_puts(m, status); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int connector_open(struct inode *inode, struct file *file) | ||||||
|  | { | ||||||
|  | 	struct drm_connector *dev = inode->i_private; | ||||||
|  | 
 | ||||||
|  | 	return single_open(file, connector_show, dev); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static ssize_t connector_write(struct file *file, const char __user *ubuf, | ||||||
|  | 			       size_t len, loff_t *offp) | ||||||
|  | { | ||||||
|  | 	struct seq_file *m = file->private_data; | ||||||
|  | 	struct drm_connector *connector = m->private; | ||||||
|  | 	char buf[12]; | ||||||
|  | 
 | ||||||
|  | 	if (len > sizeof(buf) - 1) | ||||||
|  | 		return -EINVAL; | ||||||
|  | 
 | ||||||
|  | 	if (copy_from_user(buf, ubuf, len)) | ||||||
|  | 		return -EFAULT; | ||||||
|  | 
 | ||||||
|  | 	buf[len] = '\0'; | ||||||
|  | 
 | ||||||
|  | 	if (!strcmp(buf, "on")) | ||||||
|  | 		connector->force = DRM_FORCE_ON; | ||||||
|  | 	else if (!strcmp(buf, "digital")) | ||||||
|  | 		connector->force = DRM_FORCE_ON_DIGITAL; | ||||||
|  | 	else if (!strcmp(buf, "off")) | ||||||
|  | 		connector->force = DRM_FORCE_OFF; | ||||||
|  | 	else if (!strcmp(buf, "unspecified")) | ||||||
|  | 		connector->force = DRM_FORCE_UNSPECIFIED; | ||||||
|  | 	else | ||||||
|  | 		return -EINVAL; | ||||||
|  | 
 | ||||||
|  | 	return len; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int edid_show(struct seq_file *m, void *data) | ||||||
|  | { | ||||||
|  | 	struct drm_connector *connector = m->private; | ||||||
|  | 	struct drm_property_blob *edid = connector->edid_blob_ptr; | ||||||
|  | 
 | ||||||
|  | 	if (connector->override_edid && edid) | ||||||
|  | 		seq_write(m, edid->data, edid->length); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int edid_open(struct inode *inode, struct file *file) | ||||||
|  | { | ||||||
|  | 	struct drm_connector *dev = inode->i_private; | ||||||
|  | 
 | ||||||
|  | 	return single_open(file, edid_show, dev); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static ssize_t edid_write(struct file *file, const char __user *ubuf, | ||||||
|  | 			  size_t len, loff_t *offp) | ||||||
|  | { | ||||||
|  | 	struct seq_file *m = file->private_data; | ||||||
|  | 	struct drm_connector *connector = m->private; | ||||||
|  | 	char *buf; | ||||||
|  | 	struct edid *edid; | ||||||
|  | 	int ret; | ||||||
|  | 
 | ||||||
|  | 	buf = memdup_user(ubuf, len); | ||||||
|  | 	if (IS_ERR(buf)) | ||||||
|  | 		return PTR_ERR(buf); | ||||||
|  | 
 | ||||||
|  | 	edid = (struct edid *) buf; | ||||||
|  | 
 | ||||||
|  | 	if (len == 5 && !strncmp(buf, "reset", 5)) { | ||||||
|  | 		connector->override_edid = false; | ||||||
|  | 		ret = drm_mode_connector_update_edid_property(connector, NULL); | ||||||
|  | 	} else if (len < EDID_LENGTH || | ||||||
|  | 		   EDID_LENGTH * (1 + edid->extensions) > len) | ||||||
|  | 		ret = -EINVAL; | ||||||
|  | 	else { | ||||||
|  | 		connector->override_edid = false; | ||||||
|  | 		ret = drm_mode_connector_update_edid_property(connector, edid); | ||||||
|  | 		if (!ret) | ||||||
|  | 			connector->override_edid = true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	kfree(buf); | ||||||
|  | 
 | ||||||
|  | 	return (ret) ? ret : len; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static const struct file_operations drm_edid_fops = { | ||||||
|  | 	.owner = THIS_MODULE, | ||||||
|  | 	.open = edid_open, | ||||||
|  | 	.read = seq_read, | ||||||
|  | 	.llseek = seq_lseek, | ||||||
|  | 	.release = single_release, | ||||||
|  | 	.write = edid_write | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | static const struct file_operations drm_connector_fops = { | ||||||
|  | 	.owner = THIS_MODULE, | ||||||
|  | 	.open = connector_open, | ||||||
|  | 	.read = seq_read, | ||||||
|  | 	.llseek = seq_lseek, | ||||||
|  | 	.release = single_release, | ||||||
|  | 	.write = connector_write | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | int drm_debugfs_connector_add(struct drm_connector *connector) | ||||||
|  | { | ||||||
|  | 	struct drm_minor *minor = connector->dev->primary; | ||||||
|  | 	struct dentry *root, *ent; | ||||||
|  | 
 | ||||||
|  | 	if (!minor->debugfs_root) | ||||||
|  | 		return -1; | ||||||
|  | 
 | ||||||
|  | 	root = debugfs_create_dir(connector->name, minor->debugfs_root); | ||||||
|  | 	if (!root) | ||||||
|  | 		return -ENOMEM; | ||||||
|  | 
 | ||||||
|  | 	connector->debugfs_entry = root; | ||||||
|  | 
 | ||||||
|  | 	/* force */ | ||||||
|  | 	ent = debugfs_create_file("force", S_IRUGO | S_IWUSR, root, connector, | ||||||
|  | 				  &drm_connector_fops); | ||||||
|  | 	if (!ent) | ||||||
|  | 		goto error; | ||||||
|  | 
 | ||||||
|  | 	/* edid */ | ||||||
|  | 	ent = debugfs_create_file("edid_override", S_IRUGO | S_IWUSR, root, | ||||||
|  | 				  connector, &drm_edid_fops); | ||||||
|  | 	if (!ent) | ||||||
|  | 		goto error; | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | 
 | ||||||
|  | error: | ||||||
|  | 	debugfs_remove_recursive(connector->debugfs_entry); | ||||||
|  | 	connector->debugfs_entry = NULL; | ||||||
|  | 	return -ENOMEM; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void drm_debugfs_connector_remove(struct drm_connector *connector) | ||||||
|  | { | ||||||
|  | 	if (!connector->debugfs_entry) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	debugfs_remove_recursive(connector->debugfs_entry); | ||||||
|  | 
 | ||||||
|  | 	connector->debugfs_entry = NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #endif /* CONFIG_DEBUG_FS */ | #endif /* CONFIG_DEBUG_FS */ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -199,9 +199,6 @@ int drm_fb_helper_debug_enter(struct fb_info *info) | ||||||
| 	struct drm_crtc_helper_funcs *funcs; | 	struct drm_crtc_helper_funcs *funcs; | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	if (list_empty(&kernel_fb_helper_list)) |  | ||||||
| 		return false; |  | ||||||
| 
 |  | ||||||
| 	list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { | 	list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { | ||||||
| 		for (i = 0; i < helper->crtc_count; i++) { | 		for (i = 0; i < helper->crtc_count; i++) { | ||||||
| 			struct drm_mode_set *mode_set = | 			struct drm_mode_set *mode_set = | ||||||
|  | @ -1056,7 +1053,6 @@ void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, | ||||||
| 	info->fix.ypanstep = 1; /* doing it in hw */ | 	info->fix.ypanstep = 1; /* doing it in hw */ | ||||||
| 	info->fix.ywrapstep = 0; | 	info->fix.ywrapstep = 0; | ||||||
| 	info->fix.accel = FB_ACCEL_NONE; | 	info->fix.accel = FB_ACCEL_NONE; | ||||||
| 	info->fix.type_aux = 0; |  | ||||||
| 
 | 
 | ||||||
| 	info->fix.line_length = pitch; | 	info->fix.line_length = pitch; | ||||||
| 	return; | 	return; | ||||||
|  |  | ||||||
|  | @ -130,7 +130,14 @@ static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connect | ||||||
| 	count = drm_load_edid_firmware(connector); | 	count = drm_load_edid_firmware(connector); | ||||||
| 	if (count == 0) | 	if (count == 0) | ||||||
| #endif | #endif | ||||||
|  | 	{ | ||||||
|  | 		if (connector->override_edid) { | ||||||
|  | 			struct edid *edid = (struct edid *) connector->edid_blob_ptr->data; | ||||||
|  | 
 | ||||||
|  | 			count = drm_add_edid_modes(connector, edid); | ||||||
|  | 		} else | ||||||
| 			count = (*connector_funcs->get_modes)(connector); | 			count = (*connector_funcs->get_modes)(connector); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	if (count == 0 && connector->status == connector_status_connected) | 	if (count == 0 && connector->status == connector_status_connected) | ||||||
| 		count = drm_add_modes_noedid(connector, 1024, 768); | 		count = drm_add_modes_noedid(connector, 1024, 768); | ||||||
|  |  | ||||||
|  | @ -38,17 +38,13 @@ unsigned int drm_debug = 0;	/* 1 to enable debug output */ | ||||||
| EXPORT_SYMBOL(drm_debug); | EXPORT_SYMBOL(drm_debug); | ||||||
| 
 | 
 | ||||||
| unsigned int drm_rnodes = 0;	/* 1 to enable experimental render nodes API */ | unsigned int drm_rnodes = 0;	/* 1 to enable experimental render nodes API */ | ||||||
| EXPORT_SYMBOL(drm_rnodes); |  | ||||||
| 
 | 
 | ||||||
| /* 1 to allow user space to request universal planes (experimental) */ | /* 1 to allow user space to request universal planes (experimental) */ | ||||||
| unsigned int drm_universal_planes = 0; | unsigned int drm_universal_planes = 0; | ||||||
| EXPORT_SYMBOL(drm_universal_planes); |  | ||||||
| 
 | 
 | ||||||
| unsigned int drm_vblank_offdelay = 5000;    /* Default to 5000 msecs. */ | unsigned int drm_vblank_offdelay = 5000;    /* Default to 5000 msecs. */ | ||||||
| EXPORT_SYMBOL(drm_vblank_offdelay); |  | ||||||
| 
 | 
 | ||||||
| unsigned int drm_timestamp_precision = 20;  /* Default to 20 usecs. */ | unsigned int drm_timestamp_precision = 20;  /* Default to 20 usecs. */ | ||||||
| EXPORT_SYMBOL(drm_timestamp_precision); |  | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Default to use monotonic timestamps for wait-for-vblank and page-flip |  * Default to use monotonic timestamps for wait-for-vblank and page-flip | ||||||
|  |  | ||||||
|  | @ -438,7 +438,6 @@ err_out_files: | ||||||
| out: | out: | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(drm_sysfs_connector_add); |  | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * drm_sysfs_connector_remove - remove an connector device from sysfs |  * drm_sysfs_connector_remove - remove an connector device from sysfs | ||||||
|  | @ -468,7 +467,6 @@ void drm_sysfs_connector_remove(struct drm_connector *connector) | ||||||
| 	device_unregister(connector->kdev); | 	device_unregister(connector->kdev); | ||||||
| 	connector->kdev = NULL; | 	connector->kdev = NULL; | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(drm_sysfs_connector_remove); |  | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * drm_sysfs_hotplug_event - generate a DRM uevent |  * drm_sysfs_hotplug_event - generate a DRM uevent | ||||||
|  |  | ||||||
|  | @ -1018,7 +1018,7 @@ static int exynos_dp_create_connector(struct exynos_drm_display *display, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &exynos_dp_connector_helper_funcs); | 	drm_connector_helper_add(connector, &exynos_dp_connector_helper_funcs); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	drm_mode_connector_attach_encoder(connector, encoder); | 	drm_mode_connector_attach_encoder(connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -185,7 +185,7 @@ static void exynos_drm_connector_destroy(struct drm_connector *connector) | ||||||
| 	struct exynos_drm_connector *exynos_connector = | 	struct exynos_drm_connector *exynos_connector = | ||||||
| 		to_exynos_connector(connector); | 		to_exynos_connector(connector); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(exynos_connector); | 	kfree(exynos_connector); | ||||||
| } | } | ||||||
|  | @ -230,7 +230,7 @@ struct drm_connector *exynos_drm_connector_create(struct drm_device *dev, | ||||||
| 	drm_connector_init(dev, connector, &exynos_connector_funcs, type); | 	drm_connector_init(dev, connector, &exynos_connector_funcs, type); | ||||||
| 	drm_connector_helper_add(connector, &exynos_connector_helper_funcs); | 	drm_connector_helper_add(connector, &exynos_connector_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	err = drm_sysfs_connector_add(connector); | 	err = drm_connector_register(connector); | ||||||
| 	if (err) | 	if (err) | ||||||
| 		goto err_connector; | 		goto err_connector; | ||||||
| 
 | 
 | ||||||
|  | @ -250,7 +250,7 @@ struct drm_connector *exynos_drm_connector_create(struct drm_device *dev, | ||||||
| 	return connector; | 	return connector; | ||||||
| 
 | 
 | ||||||
| err_sysfs: | err_sysfs: | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| err_connector: | err_connector: | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(exynos_connector); | 	kfree(exynos_connector); | ||||||
|  |  | ||||||
|  | @ -48,7 +48,7 @@ exynos_dpi_detect(struct drm_connector *connector, bool force) | ||||||
| 
 | 
 | ||||||
| static void exynos_dpi_connector_destroy(struct drm_connector *connector) | static void exynos_dpi_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -117,7 +117,7 @@ static int exynos_dpi_create_connector(struct exynos_drm_display *display, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &exynos_dpi_connector_helper_funcs); | 	drm_connector_helper_add(connector, &exynos_dpi_connector_helper_funcs); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	drm_mode_connector_attach_encoder(connector, encoder); | 	drm_mode_connector_attach_encoder(connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -39,8 +39,6 @@ | ||||||
| #define DRIVER_MAJOR	1 | #define DRIVER_MAJOR	1 | ||||||
| #define DRIVER_MINOR	0 | #define DRIVER_MINOR	0 | ||||||
| 
 | 
 | ||||||
| #define VBLANK_OFF_DELAY	50000 |  | ||||||
| 
 |  | ||||||
| static struct platform_device *exynos_drm_pdev; | static struct platform_device *exynos_drm_pdev; | ||||||
| 
 | 
 | ||||||
| static DEFINE_MUTEX(drm_component_lock); | static DEFINE_MUTEX(drm_component_lock); | ||||||
|  | @ -103,8 +101,6 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags) | ||||||
| 	/* setup possible_clones. */ | 	/* setup possible_clones. */ | ||||||
| 	exynos_drm_encoder_setup(dev); | 	exynos_drm_encoder_setup(dev); | ||||||
| 
 | 
 | ||||||
| 	drm_vblank_offdelay = VBLANK_OFF_DELAY; |  | ||||||
| 
 |  | ||||||
| 	platform_set_drvdata(dev->platformdev, dev); | 	platform_set_drvdata(dev->platformdev, dev); | ||||||
| 
 | 
 | ||||||
| 	/* Try to bind all sub drivers. */ | 	/* Try to bind all sub drivers. */ | ||||||
|  |  | ||||||
|  | @ -40,8 +40,6 @@ struct drm_device; | ||||||
| struct exynos_drm_overlay; | struct exynos_drm_overlay; | ||||||
| struct drm_connector; | struct drm_connector; | ||||||
| 
 | 
 | ||||||
| extern unsigned int drm_vblank_offdelay; |  | ||||||
| 
 |  | ||||||
| /* This enumerates device type. */ | /* This enumerates device type. */ | ||||||
| enum exynos_drm_device_type { | enum exynos_drm_device_type { | ||||||
| 	EXYNOS_DEVICE_TYPE_NONE, | 	EXYNOS_DEVICE_TYPE_NONE, | ||||||
|  |  | ||||||
|  | @ -1246,7 +1246,7 @@ static int exynos_dsi_create_connector(struct exynos_drm_display *display, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs); | 	drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	drm_mode_connector_attach_encoder(connector, encoder); | 	drm_mode_connector_attach_encoder(connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -562,7 +562,7 @@ static int vidi_create_connector(struct exynos_drm_display *display, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &vidi_connector_helper_funcs); | 	drm_connector_helper_add(connector, &vidi_connector_helper_funcs); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	drm_mode_connector_attach_encoder(connector, encoder); | 	drm_mode_connector_attach_encoder(connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -1129,7 +1129,7 @@ static int hdmi_create_connector(struct exynos_drm_display *display, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &hdmi_connector_helper_funcs); | 	drm_connector_helper_add(connector, &hdmi_connector_helper_funcs); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	drm_mode_connector_attach_encoder(connector, encoder); | 	drm_mode_connector_attach_encoder(connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -192,7 +192,7 @@ static void cdv_intel_crt_destroy(struct drm_connector *connector) | ||||||
| 	struct gma_encoder *gma_encoder = gma_attached_encoder(connector); | 	struct gma_encoder *gma_encoder = gma_attached_encoder(connector); | ||||||
| 
 | 
 | ||||||
| 	psb_intel_i2c_destroy(gma_encoder->ddc_bus); | 	psb_intel_i2c_destroy(gma_encoder->ddc_bus); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -304,7 +304,7 @@ void cdv_intel_crt_init(struct drm_device *dev, | ||||||
| 	drm_connector_helper_add(connector, | 	drm_connector_helper_add(connector, | ||||||
| 					&cdv_intel_crt_connector_helper_funcs); | 					&cdv_intel_crt_connector_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	return; | 	return; | ||||||
| failed_ddc: | failed_ddc: | ||||||
|  |  | ||||||
|  | @ -1713,7 +1713,7 @@ cdv_intel_dp_destroy(struct drm_connector *connector) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	i2c_del_adapter(&intel_dp->adapter); | 	i2c_del_adapter(&intel_dp->adapter); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -1847,7 +1847,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev | ||||||
| 	connector->interlace_allowed = false; | 	connector->interlace_allowed = false; | ||||||
| 	connector->doublescan_allowed = false; | 	connector->doublescan_allowed = false; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	/* Set up the DDC bus. */ | 	/* Set up the DDC bus. */ | ||||||
| 	switch (output_reg) { | 	switch (output_reg) { | ||||||
|  |  | ||||||
|  | @ -248,7 +248,7 @@ static void cdv_hdmi_destroy(struct drm_connector *connector) | ||||||
| 
 | 
 | ||||||
| 	if (gma_encoder->i2c_bus) | 	if (gma_encoder->i2c_bus) | ||||||
| 		psb_intel_i2c_destroy(gma_encoder->i2c_bus); | 		psb_intel_i2c_destroy(gma_encoder->i2c_bus); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -356,7 +356,7 @@ void cdv_hdmi_init(struct drm_device *dev, | ||||||
| 
 | 
 | ||||||
| 	hdmi_priv->hdmi_i2c_adapter = &(gma_encoder->i2c_bus->adapter); | 	hdmi_priv->hdmi_i2c_adapter = &(gma_encoder->i2c_bus->adapter); | ||||||
| 	hdmi_priv->dev = dev; | 	hdmi_priv->dev = dev; | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return; | 	return; | ||||||
| 
 | 
 | ||||||
| failed_ddc: | failed_ddc: | ||||||
|  |  | ||||||
|  | @ -446,7 +446,7 @@ static void cdv_intel_lvds_destroy(struct drm_connector *connector) | ||||||
| 
 | 
 | ||||||
| 	if (gma_encoder->i2c_bus) | 	if (gma_encoder->i2c_bus) | ||||||
| 		psb_intel_i2c_destroy(gma_encoder->i2c_bus); | 		psb_intel_i2c_destroy(gma_encoder->i2c_bus); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -774,7 +774,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	mutex_unlock(&dev->mode_config.mutex); | 	mutex_unlock(&dev->mode_config.mutex); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return; | 	return; | ||||||
| 
 | 
 | ||||||
| failed_find: | failed_find: | ||||||
|  |  | ||||||
|  | @ -318,7 +318,7 @@ static void mdfld_dsi_connector_destroy(struct drm_connector *connector) | ||||||
| 
 | 
 | ||||||
| 	if (!dsi_connector) | 	if (!dsi_connector) | ||||||
| 		return; | 		return; | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	sender = dsi_connector->pkg_sender; | 	sender = dsi_connector->pkg_sender; | ||||||
| 	mdfld_dsi_pkg_sender_destroy(sender); | 	mdfld_dsi_pkg_sender_destroy(sender); | ||||||
|  | @ -597,7 +597,7 @@ void mdfld_dsi_output_init(struct drm_device *dev, | ||||||
| 	dsi_config->encoder = encoder; | 	dsi_config->encoder = encoder; | ||||||
| 	encoder->base.type = (pipe == 0) ? INTEL_OUTPUT_MIPI : | 	encoder->base.type = (pipe == 0) ? INTEL_OUTPUT_MIPI : | ||||||
| 		INTEL_OUTPUT_MIPI2; | 		INTEL_OUTPUT_MIPI2; | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return; | 	return; | ||||||
| 
 | 
 | ||||||
| 	/*TODO: add code to destroy outputs on error*/ | 	/*TODO: add code to destroy outputs on error*/ | ||||||
|  |  | ||||||
|  | @ -665,7 +665,7 @@ void oaktrail_hdmi_init(struct drm_device *dev, | ||||||
| 	connector->display_info.subpixel_order = SubPixelHorizontalRGB; | 	connector->display_info.subpixel_order = SubPixelHorizontalRGB; | ||||||
| 	connector->interlace_allowed = false; | 	connector->interlace_allowed = false; | ||||||
| 	connector->doublescan_allowed = false; | 	connector->doublescan_allowed = false; | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	dev_info(dev->dev, "HDMI initialised.\n"); | 	dev_info(dev->dev, "HDMI initialised.\n"); | ||||||
| 
 | 
 | ||||||
| 	return; | 	return; | ||||||
|  |  | ||||||
|  | @ -404,7 +404,7 @@ void oaktrail_lvds_init(struct drm_device *dev, | ||||||
| out: | out: | ||||||
| 	mutex_unlock(&dev->mode_config.mutex); | 	mutex_unlock(&dev->mode_config.mutex); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return; | 	return; | ||||||
| 
 | 
 | ||||||
| failed_find: | failed_find: | ||||||
|  |  | ||||||
|  | @ -563,7 +563,7 @@ void psb_intel_lvds_destroy(struct drm_connector *connector) | ||||||
| 
 | 
 | ||||||
| 	if (lvds_priv->ddc_bus) | 	if (lvds_priv->ddc_bus) | ||||||
| 		psb_intel_i2c_destroy(lvds_priv->ddc_bus); | 		psb_intel_i2c_destroy(lvds_priv->ddc_bus); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -829,7 +829,7 @@ void psb_intel_lvds_init(struct drm_device *dev, | ||||||
| 	 */ | 	 */ | ||||||
| out: | out: | ||||||
| 	mutex_unlock(&dev->mode_config.mutex); | 	mutex_unlock(&dev->mode_config.mutex); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return; | 	return; | ||||||
| 
 | 
 | ||||||
| failed_find: | failed_find: | ||||||
|  |  | ||||||
|  | @ -1682,7 +1682,7 @@ static void psb_intel_sdvo_destroy(struct drm_connector *connector) | ||||||
| 				     psb_intel_sdvo_connector->tv_format); | 				     psb_intel_sdvo_connector->tv_format); | ||||||
| 
 | 
 | ||||||
| 	psb_intel_sdvo_destroy_enhance_property(connector); | 	psb_intel_sdvo_destroy_enhance_property(connector); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -2071,7 +2071,7 @@ psb_intel_sdvo_connector_init(struct psb_intel_sdvo_connector *connector, | ||||||
| 	connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; | 	connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; | ||||||
| 
 | 
 | ||||||
| 	gma_connector_attach_encoder(&connector->base, &encoder->base); | 	gma_connector_attach_encoder(&connector->base, &encoder->base); | ||||||
| 	drm_sysfs_connector_add(&connector->base.base); | 	drm_connector_register(&connector->base.base); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
|  |  | ||||||
|  | @ -869,7 +869,7 @@ void intel_crt_init(struct drm_device *dev) | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); | 	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	if (!I915_HAS_HOTPLUG(dev)) | 	if (!I915_HAS_HOTPLUG(dev)) | ||||||
| 		intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT; | 		intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT; | ||||||
|  |  | ||||||
|  | @ -12260,7 +12260,7 @@ void intel_connector_unregister(struct intel_connector *intel_connector) | ||||||
| 	struct drm_connector *connector = &intel_connector->base; | 	struct drm_connector *connector = &intel_connector->base; | ||||||
| 
 | 
 | ||||||
| 	intel_panel_destroy_backlight(connector); | 	intel_panel_destroy_backlight(connector); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void intel_modeset_cleanup(struct drm_device *dev) | void intel_modeset_cleanup(struct drm_device *dev) | ||||||
|  |  | ||||||
|  | @ -4246,7 +4246,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, | ||||||
| 			  edp_panel_vdd_work); | 			  edp_panel_vdd_work); | ||||||
| 
 | 
 | ||||||
| 	intel_connector_attach_encoder(intel_connector, intel_encoder); | 	intel_connector_attach_encoder(intel_connector, intel_encoder); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	if (HAS_DDI(dev)) | 	if (HAS_DDI(dev)) | ||||||
| 		intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; | 		intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; | ||||||
|  | @ -4289,7 +4289,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, | ||||||
| 			edp_panel_vdd_off_sync(intel_dp); | 			edp_panel_vdd_off_sync(intel_dp); | ||||||
| 			drm_modeset_unlock(&dev->mode_config.connection_mutex); | 			drm_modeset_unlock(&dev->mode_config.connection_mutex); | ||||||
| 		} | 		} | ||||||
| 		drm_sysfs_connector_remove(connector); | 		drm_connector_unregister(connector); | ||||||
| 		drm_connector_cleanup(connector); | 		drm_connector_cleanup(connector); | ||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -742,7 +742,7 @@ bool intel_dsi_init(struct drm_device *dev) | ||||||
| 
 | 
 | ||||||
| 	intel_connector_attach_encoder(intel_connector, intel_encoder); | 	intel_connector_attach_encoder(intel_connector, intel_encoder); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	fixed_mode = dsi->dev_ops->get_modes(&intel_dsi->dev); | 	fixed_mode = dsi->dev_ops->get_modes(&intel_dsi->dev); | ||||||
| 	if (!fixed_mode) { | 	if (!fixed_mode) { | ||||||
|  |  | ||||||
|  | @ -558,7 +558,7 @@ void intel_dvo_init(struct drm_device *dev) | ||||||
| 			intel_dvo->panel_wants_dither = true; | 			intel_dvo->panel_wants_dither = true; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		drm_sysfs_connector_add(connector); | 		drm_connector_register(connector); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1490,7 +1490,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, | ||||||
| 	intel_hdmi_add_properties(intel_hdmi, connector); | 	intel_hdmi_add_properties(intel_hdmi, connector); | ||||||
| 
 | 
 | ||||||
| 	intel_connector_attach_encoder(intel_connector, intel_encoder); | 	intel_connector_attach_encoder(intel_connector, intel_encoder); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
 | 	/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
 | ||||||
| 	 * 0xd.  Failure to do so will result in spurious interrupts being | 	 * 0xd.  Failure to do so will result in spurious interrupts being | ||||||
|  |  | ||||||
|  | @ -1097,7 +1097,7 @@ out: | ||||||
| 		DRM_DEBUG_KMS("lid notifier registration failed\n"); | 		DRM_DEBUG_KMS("lid notifier registration failed\n"); | ||||||
| 		lvds_connector->lid_notifier.notifier_call = NULL; | 		lvds_connector->lid_notifier.notifier_call = NULL; | ||||||
| 	} | 	} | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode); | 	intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode); | ||||||
| 	intel_panel_setup_backlight(connector); | 	intel_panel_setup_backlight(connector); | ||||||
|  |  | ||||||
|  | @ -2433,7 +2433,7 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector, | ||||||
| 	connector->base.unregister = intel_sdvo_connector_unregister; | 	connector->base.unregister = intel_sdvo_connector_unregister; | ||||||
| 
 | 
 | ||||||
| 	intel_connector_attach_encoder(&connector->base, &encoder->base); | 	intel_connector_attach_encoder(&connector->base, &encoder->base); | ||||||
| 	ret = drm_sysfs_connector_add(drm_connector); | 	ret = drm_connector_register(drm_connector); | ||||||
| 	if (ret < 0) | 	if (ret < 0) | ||||||
| 		goto err1; | 		goto err1; | ||||||
| 
 | 
 | ||||||
|  | @ -2446,7 +2446,7 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector, | ||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
| err2: | err2: | ||||||
| 	drm_sysfs_connector_remove(drm_connector); | 	drm_connector_unregister(drm_connector); | ||||||
| err1: | err1: | ||||||
| 	drm_connector_cleanup(drm_connector); | 	drm_connector_cleanup(drm_connector); | ||||||
| 
 | 
 | ||||||
|  | @ -2559,7 +2559,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type) | ||||||
| 	return true; | 	return true; | ||||||
| 
 | 
 | ||||||
| err: | err: | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	intel_sdvo_destroy(connector); | 	intel_sdvo_destroy(connector); | ||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
|  | @ -2638,7 +2638,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) | ||||||
| 	return true; | 	return true; | ||||||
| 
 | 
 | ||||||
| err: | err: | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	intel_sdvo_destroy(connector); | 	intel_sdvo_destroy(connector); | ||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
|  | @ -2711,7 +2711,7 @@ static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo) | ||||||
| 	list_for_each_entry_safe(connector, tmp, | 	list_for_each_entry_safe(connector, tmp, | ||||||
| 				 &dev->mode_config.connector_list, head) { | 				 &dev->mode_config.connector_list, head) { | ||||||
| 		if (intel_attached_encoder(connector) == &intel_sdvo->base) { | 		if (intel_attached_encoder(connector) == &intel_sdvo->base) { | ||||||
| 			drm_sysfs_connector_remove(connector); | 			drm_connector_unregister(connector); | ||||||
| 			intel_sdvo_destroy(connector); | 			intel_sdvo_destroy(connector); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -1680,5 +1680,5 @@ intel_tv_init(struct drm_device *dev) | ||||||
| 	drm_object_attach_property(&connector->base, | 	drm_object_attach_property(&connector->base, | ||||||
| 				   dev->mode_config.tv_bottom_margin_property, | 				   dev->mode_config.tv_bottom_margin_property, | ||||||
| 				   intel_tv->margin[TV_MARGIN_BOTTOM]); | 				   intel_tv->margin[TV_MARGIN_BOTTOM]); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1621,7 +1621,7 @@ static struct drm_connector *mga_vga_init(struct drm_device *dev) | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &mga_vga_connector_helper_funcs); | 	drm_connector_helper_add(connector, &mga_vga_connector_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	mga_connector->i2c = mgag200_i2c_create(dev); | 	mga_connector->i2c = mgag200_i2c_create(dev); | ||||||
| 	if (!mga_connector->i2c) | 	if (!mga_connector->i2c) | ||||||
|  |  | ||||||
|  | @ -306,7 +306,7 @@ static void hdmi_connector_destroy(struct drm_connector *connector) | ||||||
| 
 | 
 | ||||||
| 	hdp_disable(hdmi_connector); | 	hdp_disable(hdmi_connector); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 
 | 
 | ||||||
| 	hdmi_unreference(hdmi_connector->hdmi); | 	hdmi_unreference(hdmi_connector->hdmi); | ||||||
|  | @ -416,7 +416,7 @@ struct drm_connector *hdmi_connector_init(struct hdmi *hdmi) | ||||||
| 	connector->interlace_allowed = 1; | 	connector->interlace_allowed = 1; | ||||||
| 	connector->doublescan_allowed = 0; | 	connector->doublescan_allowed = 0; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	ret = hpd_enable(hdmi_connector); | 	ret = hpd_enable(hdmi_connector); | ||||||
| 	if (ret) { | 	if (ret) { | ||||||
|  |  | ||||||
|  | @ -104,7 +104,7 @@ nouveau_connector_destroy(struct drm_connector *connector) | ||||||
| 	struct nouveau_connector *nv_connector = nouveau_connector(connector); | 	struct nouveau_connector *nv_connector = nouveau_connector(connector); | ||||||
| 	nouveau_event_ref(NULL, &nv_connector->hpd); | 	nouveau_event_ref(NULL, &nv_connector->hpd); | ||||||
| 	kfree(nv_connector->edid); | 	kfree(nv_connector->edid); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	if (nv_connector->aux.transfer) | 	if (nv_connector->aux.transfer) | ||||||
| 		drm_dp_aux_unregister(&nv_connector->aux); | 		drm_dp_aux_unregister(&nv_connector->aux); | ||||||
|  | @ -1236,6 +1236,6 @@ nouveau_connector_create(struct drm_device *dev, int index) | ||||||
| 
 | 
 | ||||||
| 	INIT_WORK(&nv_connector->work, nouveau_connector_hotplug_work); | 	INIT_WORK(&nv_connector->work, nouveau_connector_hotplug_work); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return connector; | 	return connector; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -130,7 +130,7 @@ static void omap_connector_destroy(struct drm_connector *connector) | ||||||
| 	struct omap_dss_device *dssdev = omap_connector->dssdev; | 	struct omap_dss_device *dssdev = omap_connector->dssdev; | ||||||
| 
 | 
 | ||||||
| 	DBG("%s", omap_connector->dssdev->name); | 	DBG("%s", omap_connector->dssdev->name); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(omap_connector); | 	kfree(omap_connector); | ||||||
| 
 | 
 | ||||||
|  | @ -307,7 +307,7 @@ struct drm_connector *omap_connector_init(struct drm_device *dev, | ||||||
| 	connector->interlace_allowed = 1; | 	connector->interlace_allowed = 1; | ||||||
| 	connector->doublescan_allowed = 0; | 	connector->doublescan_allowed = 0; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	return connector; | 	return connector; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -835,7 +835,7 @@ static void qxl_conn_destroy(struct drm_connector *connector) | ||||||
| 	struct qxl_output *qxl_output = | 	struct qxl_output *qxl_output = | ||||||
| 		drm_connector_to_qxl_output(connector); | 		drm_connector_to_qxl_output(connector); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(qxl_output); | 	kfree(qxl_output); | ||||||
| } | } | ||||||
|  | @ -902,7 +902,7 @@ static int qdev_output_init(struct drm_device *dev, int num_output) | ||||||
| 
 | 
 | ||||||
| 	drm_object_attach_property(&connector->base, | 	drm_object_attach_property(&connector->base, | ||||||
| 				   qdev->hotplug_mode_update_property, 0); | 				   qdev->hotplug_mode_update_property, 0); | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -740,7 +740,7 @@ static void radeon_connector_destroy(struct drm_connector *connector) | ||||||
| 	if (radeon_connector->edid) | 	if (radeon_connector->edid) | ||||||
| 		kfree(radeon_connector->edid); | 		kfree(radeon_connector->edid); | ||||||
| 	kfree(radeon_connector->con_priv); | 	kfree(radeon_connector->con_priv); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -2050,7 +2050,7 @@ radeon_add_atom_connector(struct drm_device *dev, | ||||||
| 		connector->polled = DRM_CONNECTOR_POLL_HPD; | 		connector->polled = DRM_CONNECTOR_POLL_HPD; | ||||||
| 
 | 
 | ||||||
| 	connector->display_info.subpixel_order = subpixel_order; | 	connector->display_info.subpixel_order = subpixel_order; | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	if (has_aux) | 	if (has_aux) | ||||||
| 		radeon_dp_aux_init(radeon_connector); | 		radeon_dp_aux_init(radeon_connector); | ||||||
|  | @ -2211,5 +2211,5 @@ radeon_add_legacy_connector(struct drm_device *dev, | ||||||
| 	} else | 	} else | ||||||
| 		connector->polled = DRM_CONNECTOR_POLL_HPD; | 		connector->polled = DRM_CONNECTOR_POLL_HPD; | ||||||
| 	connector->display_info.subpixel_order = subpixel_order; | 	connector->display_info.subpixel_order = subpixel_order; | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ static const struct drm_connector_helper_funcs connector_helper_funcs = { | ||||||
| 
 | 
 | ||||||
| static void rcar_du_lvds_connector_destroy(struct drm_connector *connector) | static void rcar_du_lvds_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -105,7 +105,7 @@ int rcar_du_lvds_connector_init(struct rcar_du_device *rcdu, | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &connector_helper_funcs); | 	drm_connector_helper_add(connector, &connector_helper_funcs); | ||||||
| 	ret = drm_sysfs_connector_add(connector); | 	ret = drm_connector_register(connector); | ||||||
| 	if (ret < 0) | 	if (ret < 0) | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ static const struct drm_connector_helper_funcs connector_helper_funcs = { | ||||||
| 
 | 
 | ||||||
| static void rcar_du_vga_connector_destroy(struct drm_connector *connector) | static void rcar_du_vga_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -70,7 +70,7 @@ int rcar_du_vga_connector_init(struct rcar_du_device *rcdu, | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &connector_helper_funcs); | 	drm_connector_helper_add(connector, &connector_helper_funcs); | ||||||
| 	ret = drm_sysfs_connector_add(connector); | 	ret = drm_connector_register(connector); | ||||||
| 	if (ret < 0) | 	if (ret < 0) | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -692,7 +692,7 @@ static void shmob_drm_connector_destroy(struct drm_connector *connector) | ||||||
| 	struct shmob_drm_connector *scon = to_shmob_connector(connector); | 	struct shmob_drm_connector *scon = to_shmob_connector(connector); | ||||||
| 
 | 
 | ||||||
| 	shmob_drm_backlight_exit(scon); | 	shmob_drm_backlight_exit(scon); | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -726,7 +726,7 @@ int shmob_drm_connector_create(struct shmob_drm_device *sdev, | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	drm_connector_helper_add(connector, &connector_helper_funcs); | 	drm_connector_helper_add(connector, &connector_helper_funcs); | ||||||
| 	ret = drm_sysfs_connector_add(connector); | 	ret = drm_connector_register(connector); | ||||||
| 	if (ret < 0) | 	if (ret < 0) | ||||||
| 		goto err_cleanup; | 		goto err_cleanup; | ||||||
| 
 | 
 | ||||||
|  | @ -749,7 +749,7 @@ int shmob_drm_connector_create(struct shmob_drm_device *sdev, | ||||||
| err_backlight: | err_backlight: | ||||||
| 	shmob_drm_backlight_exit(&sdev->connector); | 	shmob_drm_backlight_exit(&sdev->connector); | ||||||
| err_sysfs: | err_sysfs: | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| err_cleanup: | err_cleanup: | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	return ret; | 	return ret; | ||||||
|  |  | ||||||
|  | @ -105,7 +105,7 @@ static void drm_connector_clear(struct drm_connector *connector) | ||||||
| 
 | 
 | ||||||
| static void tegra_connector_destroy(struct drm_connector *connector) | static void tegra_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	drm_connector_clear(connector); | 	drm_connector_clear(connector); | ||||||
| } | } | ||||||
|  | @ -318,7 +318,7 @@ int tegra_output_init(struct drm_device *drm, struct tegra_output *output) | ||||||
| 	drm_encoder_helper_add(&output->encoder, &encoder_helper_funcs); | 	drm_encoder_helper_add(&output->encoder, &encoder_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	drm_mode_connector_attach_encoder(&output->connector, &output->encoder); | 	drm_mode_connector_attach_encoder(&output->connector, &output->encoder); | ||||||
| 	drm_sysfs_connector_add(&output->connector); | 	drm_connector_register(&output->connector); | ||||||
| 
 | 
 | ||||||
| 	output->encoder.possible_crtcs = 0x3; | 	output->encoder.possible_crtcs = 0x3; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -247,7 +247,7 @@ static struct drm_connector *panel_connector_create(struct drm_device *dev, | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto fail; | 		goto fail; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	return connector; | 	return connector; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -261,7 +261,7 @@ static struct drm_connector *slave_connector_create(struct drm_device *dev, | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto fail; | 		goto fail; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	return connector; | 	return connector; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -261,7 +261,7 @@ static struct drm_connector *tfp410_connector_create(struct drm_device *dev, | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto fail; | 		goto fail; | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	return connector; | 	return connector; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -124,7 +124,7 @@ static int udl_connector_set_property(struct drm_connector *connector, | ||||||
| 
 | 
 | ||||||
| static void udl_connector_destroy(struct drm_connector *connector) | static void udl_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| 	kfree(connector); | 	kfree(connector); | ||||||
| } | } | ||||||
|  | @ -154,7 +154,7 @@ int udl_connector_init(struct drm_device *dev, struct drm_encoder *encoder) | ||||||
| 	drm_connector_init(dev, connector, &udl_connector_funcs, DRM_MODE_CONNECTOR_DVII); | 	drm_connector_init(dev, connector, &udl_connector_funcs, DRM_MODE_CONNECTOR_DVII); | ||||||
| 	drm_connector_helper_add(connector, &udl_connector_helper_funcs); | 	drm_connector_helper_add(connector, &udl_connector_helper_funcs); | ||||||
| 
 | 
 | ||||||
| 	drm_sysfs_connector_add(connector); | 	drm_connector_register(connector); | ||||||
| 	drm_mode_connector_attach_encoder(connector, encoder); | 	drm_mode_connector_attach_encoder(connector, encoder); | ||||||
| 
 | 
 | ||||||
| 	drm_object_attach_property(&connector->base, | 	drm_object_attach_property(&connector->base, | ||||||
|  |  | ||||||
|  | @ -75,7 +75,7 @@ void vmw_display_unit_cleanup(struct vmw_display_unit *du) | ||||||
| 		vmw_surface_unreference(&du->cursor_surface); | 		vmw_surface_unreference(&du->cursor_surface); | ||||||
| 	if (du->cursor_dmabuf) | 	if (du->cursor_dmabuf) | ||||||
| 		vmw_dmabuf_unreference(&du->cursor_dmabuf); | 		vmw_dmabuf_unreference(&du->cursor_dmabuf); | ||||||
| 	drm_sysfs_connector_remove(&du->connector); | 	drm_connector_unregister(&du->connector); | ||||||
| 	drm_crtc_cleanup(&du->crtc); | 	drm_crtc_cleanup(&du->crtc); | ||||||
| 	drm_encoder_cleanup(&du->encoder); | 	drm_encoder_cleanup(&du->encoder); | ||||||
| 	drm_connector_cleanup(&du->connector); | 	drm_connector_cleanup(&du->connector); | ||||||
|  |  | ||||||
|  | @ -371,7 +371,7 @@ static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit) | ||||||
| 	encoder->possible_crtcs = (1 << unit); | 	encoder->possible_crtcs = (1 << unit); | ||||||
| 	encoder->possible_clones = 0; | 	encoder->possible_clones = 0; | ||||||
| 
 | 
 | ||||||
| 	(void) drm_sysfs_connector_add(connector); | 	(void) drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	drm_crtc_init(dev, crtc, &vmw_legacy_crtc_funcs); | 	drm_crtc_init(dev, crtc, &vmw_legacy_crtc_funcs); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -467,7 +467,7 @@ static int vmw_sou_init(struct vmw_private *dev_priv, unsigned unit) | ||||||
| 	encoder->possible_crtcs = (1 << unit); | 	encoder->possible_crtcs = (1 << unit); | ||||||
| 	encoder->possible_clones = 0; | 	encoder->possible_clones = 0; | ||||||
| 
 | 
 | ||||||
| 	(void) drm_sysfs_connector_add(connector); | 	(void) drm_connector_register(connector); | ||||||
| 
 | 
 | ||||||
| 	drm_crtc_init(dev, crtc, &vmw_screen_object_crtc_funcs); | 	drm_crtc_init(dev, crtc, &vmw_screen_object_crtc_funcs); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -202,7 +202,7 @@ static const struct file_operations imx_drm_driver_fops = { | ||||||
| 
 | 
 | ||||||
| void imx_drm_connector_destroy(struct drm_connector *connector) | void imx_drm_connector_destroy(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	drm_sysfs_connector_remove(connector); | 	drm_connector_unregister(connector); | ||||||
| 	drm_connector_cleanup(connector); | 	drm_connector_cleanup(connector); | ||||||
| } | } | ||||||
| EXPORT_SYMBOL_GPL(imx_drm_connector_destroy); | EXPORT_SYMBOL_GPL(imx_drm_connector_destroy); | ||||||
|  | @ -293,10 +293,10 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags) | ||||||
| 	 * userspace will expect to be able to access DRM at this point. | 	 * userspace will expect to be able to access DRM at this point. | ||||||
| 	 */ | 	 */ | ||||||
| 	list_for_each_entry(connector, &drm->mode_config.connector_list, head) { | 	list_for_each_entry(connector, &drm->mode_config.connector_list, head) { | ||||||
| 		ret = drm_sysfs_connector_add(connector); | 		ret = drm_connector_register(connector); | ||||||
| 		if (ret) { | 		if (ret) { | ||||||
| 			dev_err(drm->dev, | 			dev_err(drm->dev, | ||||||
| 				"[CONNECTOR:%d:%s] drm_sysfs_connector_add failed: %d\n", | 				"[CONNECTOR:%d:%s] drm_connector_register failed: %d\n", | ||||||
| 				connector->base.id, | 				connector->base.id, | ||||||
| 				connector->name, ret); | 				connector->name, ret); | ||||||
| 			goto err_unbind; | 			goto err_unbind; | ||||||
|  |  | ||||||
|  | @ -1419,6 +1419,8 @@ extern int drm_debugfs_create_files(const struct drm_info_list *files, | ||||||
| extern int drm_debugfs_remove_files(const struct drm_info_list *files, | extern int drm_debugfs_remove_files(const struct drm_info_list *files, | ||||||
| 				    int count, struct drm_minor *minor); | 				    int count, struct drm_minor *minor); | ||||||
| extern int drm_debugfs_cleanup(struct drm_minor *minor); | extern int drm_debugfs_cleanup(struct drm_minor *minor); | ||||||
|  | extern int drm_debugfs_connector_add(struct drm_connector *connector); | ||||||
|  | extern void drm_debugfs_connector_remove(struct drm_connector *connector); | ||||||
| #else | #else | ||||||
| static inline int drm_debugfs_init(struct drm_minor *minor, int minor_id, | static inline int drm_debugfs_init(struct drm_minor *minor, int minor_id, | ||||||
| 				   struct dentry *root) | 				   struct dentry *root) | ||||||
|  | @ -1443,6 +1445,15 @@ static inline int drm_debugfs_cleanup(struct drm_minor *minor) | ||||||
| { | { | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | static inline int drm_debugfs_connector_add(struct drm_connector *connector) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | static inline void drm_debugfs_connector_remove(struct drm_connector *connector) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 				/* Info file support */ | 				/* Info file support */ | ||||||
|  |  | ||||||
|  | @ -533,6 +533,7 @@ struct drm_connector { | ||||||
| 
 | 
 | ||||||
| 	/* forced on connector */ | 	/* forced on connector */ | ||||||
| 	enum drm_connector_force force; | 	enum drm_connector_force force; | ||||||
|  | 	bool override_edid; | ||||||
| 	uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER]; | 	uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER]; | ||||||
| 	struct drm_encoder *encoder; /* currently active encoder */ | 	struct drm_encoder *encoder; /* currently active encoder */ | ||||||
| 
 | 
 | ||||||
|  | @ -545,6 +546,8 @@ struct drm_connector { | ||||||
| 	int audio_latency[2]; | 	int audio_latency[2]; | ||||||
| 	int null_edid_counter; /* needed to workaround some HW bugs where we get all 0s */ | 	int null_edid_counter; /* needed to workaround some HW bugs where we get all 0s */ | ||||||
| 	unsigned bad_edid_counter; | 	unsigned bad_edid_counter; | ||||||
|  | 
 | ||||||
|  | 	struct dentry *debugfs_entry; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -878,6 +881,8 @@ extern int drm_connector_init(struct drm_device *dev, | ||||||
| 			      struct drm_connector *connector, | 			      struct drm_connector *connector, | ||||||
| 			      const struct drm_connector_funcs *funcs, | 			      const struct drm_connector_funcs *funcs, | ||||||
| 			      int connector_type); | 			      int connector_type); | ||||||
|  | int drm_connector_register(struct drm_connector *connector); | ||||||
|  | void drm_connector_unregister(struct drm_connector *connector); | ||||||
| 
 | 
 | ||||||
| extern void drm_connector_cleanup(struct drm_connector *connector); | extern void drm_connector_cleanup(struct drm_connector *connector); | ||||||
| /* helper to unplug all connectors from sysfs for device */ | /* helper to unplug all connectors from sysfs for device */ | ||||||
|  |  | ||||||
|  | @ -780,7 +780,7 @@ struct drm_prime_handle { | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Device specific ioctls should only be in their respective headers |  * Device specific ioctls should only be in their respective headers | ||||||
|  * The device specific ioctl range is from 0x40 to 0x99. |  * The device specific ioctl range is from 0x40 to 0x9f. | ||||||
|  * Generic IOCTLS restart at 0xA0. |  * Generic IOCTLS restart at 0xA0. | ||||||
|  * |  * | ||||||
|  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and |  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dave Airlie
				Dave Airlie