mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	drm: Print pretty names for pixel formats
Rather than just printing the pixel format as a hex number, decode the fourcc into human readable form, and also decode the LE vs. BE flag. Keep printing the raw hex number too in case it contains non-printable characters. Some examples what the new drm_get_format_name() produces: DRM_FORMAT_XRGB8888: "XR24 little-endian (0x34325258)" DRM_FORMAT_YUYV: "YUYV little-endian (0x56595559)" DRM_FORMAT_RGB565|DRM_FORMAT_BIG_ENDIAN: "RG16 big-endian (0xb6314752)" Unprintable characters: "D??? big-endian (0xff7f0244)" v2: Fix patch author Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
		
							parent
							
								
									ca793f75d9
								
							
						
					
					
						commit
						6ba6d03e69
					
				
					 2 changed files with 28 additions and 2 deletions
				
			
		|  | @ -29,6 +29,7 @@ | |||
|  *      Dave Airlie <airlied@linux.ie> | ||||
|  *      Jesse Barnes <jesse.barnes@intel.com> | ||||
|  */ | ||||
| #include <linux/ctype.h> | ||||
| #include <linux/list.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/export.h> | ||||
|  | @ -252,6 +253,28 @@ char *drm_get_connector_status_name(enum drm_connector_status status) | |||
| } | ||||
| EXPORT_SYMBOL(drm_get_connector_status_name); | ||||
| 
 | ||||
| static char printable_char(int c) | ||||
| { | ||||
| 	return isascii(c) && isprint(c) ? c : '?'; | ||||
| } | ||||
| 
 | ||||
| char *drm_get_format_name(uint32_t format) | ||||
| { | ||||
| 	static char buf[32]; | ||||
| 
 | ||||
| 	snprintf(buf, sizeof(buf), | ||||
| 		 "%c%c%c%c %s-endian (0x%08x)", | ||||
| 		 printable_char(format & 0xff), | ||||
| 		 printable_char((format >> 8) & 0xff), | ||||
| 		 printable_char((format >> 16) & 0xff), | ||||
| 		 printable_char((format >> 24) & 0x7f), | ||||
| 		 format & DRM_FORMAT_BIG_ENDIAN ? "big" : "little", | ||||
| 		 format); | ||||
| 
 | ||||
| 	return buf; | ||||
| } | ||||
| EXPORT_SYMBOL(drm_get_format_name); | ||||
| 
 | ||||
| /**
 | ||||
|  * drm_mode_object_get - allocate a new modeset identifier | ||||
|  * @dev: DRM device | ||||
|  | @ -1834,7 +1857,8 @@ int drm_mode_setplane(struct drm_device *dev, void *data, | |||
| 		if (fb->pixel_format == plane->format_types[i]) | ||||
| 			break; | ||||
| 	if (i == plane->format_count) { | ||||
| 		DRM_DEBUG_KMS("Invalid pixel format 0x%08x\n", fb->pixel_format); | ||||
| 		DRM_DEBUG_KMS("Invalid pixel format %s\n", | ||||
| 			      drm_get_format_name(fb->pixel_format)); | ||||
| 		ret = -EINVAL; | ||||
| 		goto out; | ||||
| 	} | ||||
|  | @ -2312,7 +2336,8 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r) | |||
| 
 | ||||
| 	ret = format_check(r); | ||||
| 	if (ret) { | ||||
| 		DRM_DEBUG_KMS("bad framebuffer format 0x%08x\n", r->pixel_format); | ||||
| 		DRM_DEBUG_KMS("bad framebuffer format %s\n", | ||||
| 			      drm_get_format_name(r->pixel_format)); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -1094,5 +1094,6 @@ extern int drm_format_num_planes(uint32_t format); | |||
| extern int drm_format_plane_cpp(uint32_t format, int plane); | ||||
| extern int drm_format_horz_chroma_subsampling(uint32_t format); | ||||
| extern int drm_format_vert_chroma_subsampling(uint32_t format); | ||||
| extern char *drm_get_format_name(uint32_t format); | ||||
| 
 | ||||
| #endif /* __DRM_CRTC_H__ */ | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Ville Syrjälä
						Ville Syrjälä