| 
									
										
										
										
											2010-12-15 07:14:24 +10:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (C) 2012 Red Hat | 
					
						
							|  |  |  |  * based in parts on udlfb.c: | 
					
						
							|  |  |  |  * Copyright (C) 2009 Roberto De Ioris <roberto@unbit.it> | 
					
						
							|  |  |  |  * Copyright (C) 2009 Jaya Kumar <jayakumar.lkml@gmail.com> | 
					
						
							|  |  |  |  * Copyright (C) 2009 Bernie Thompson <bernie@plugable.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is subject to the terms and conditions of the GNU General Public | 
					
						
							|  |  |  |  * License v2. See the file COPYING in the main directory of this archive for | 
					
						
							|  |  |  |  * more details. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-02 18:01:07 +01:00
										 |  |  | #include <drm/drmP.h>
 | 
					
						
							|  |  |  | #include <drm/drm_crtc.h>
 | 
					
						
							|  |  |  | #include <drm/drm_crtc_helper.h>
 | 
					
						
							| 
									
										
										
										
											2010-12-15 07:14:24 +10:00
										 |  |  | #include "udl_drv.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* dummy encoder */ | 
					
						
							| 
									
										
										
										
											2012-09-22 06:47:39 +00:00
										 |  |  | static void udl_enc_destroy(struct drm_encoder *encoder) | 
					
						
							| 
									
										
										
										
											2010-12-15 07:14:24 +10:00
										 |  |  | { | 
					
						
							|  |  |  | 	drm_encoder_cleanup(encoder); | 
					
						
							|  |  |  | 	kfree(encoder); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void udl_encoder_disable(struct drm_encoder *encoder) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static bool udl_mode_fixup(struct drm_encoder *encoder, | 
					
						
							| 
									
										
										
										
											2012-07-17 17:56:50 +02:00
										 |  |  | 			   const struct drm_display_mode *mode, | 
					
						
							| 
									
										
										
										
											2010-12-15 07:14:24 +10:00
										 |  |  | 			   struct drm_display_mode *adjusted_mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void udl_encoder_prepare(struct drm_encoder *encoder) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void udl_encoder_commit(struct drm_encoder *encoder) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void udl_encoder_mode_set(struct drm_encoder *encoder, | 
					
						
							|  |  |  | 				 struct drm_display_mode *mode, | 
					
						
							|  |  |  | 				 struct drm_display_mode *adjusted_mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | udl_encoder_dpms(struct drm_encoder *encoder, int mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static const struct drm_encoder_helper_funcs udl_helper_funcs = { | 
					
						
							|  |  |  | 	.dpms = udl_encoder_dpms, | 
					
						
							|  |  |  | 	.mode_fixup = udl_mode_fixup, | 
					
						
							|  |  |  | 	.prepare = udl_encoder_prepare, | 
					
						
							|  |  |  | 	.mode_set = udl_encoder_mode_set, | 
					
						
							|  |  |  | 	.commit = udl_encoder_commit, | 
					
						
							|  |  |  | 	.disable = udl_encoder_disable, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static const struct drm_encoder_funcs udl_enc_funcs = { | 
					
						
							|  |  |  | 	.destroy = udl_enc_destroy, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct drm_encoder *udl_encoder_init(struct drm_device *dev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct drm_encoder *encoder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	encoder = kzalloc(sizeof(struct drm_encoder), GFP_KERNEL); | 
					
						
							|  |  |  | 	if (!encoder) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	drm_encoder_init(dev, encoder, &udl_enc_funcs, DRM_MODE_ENCODER_TMDS); | 
					
						
							|  |  |  | 	drm_encoder_helper_add(encoder, &udl_helper_funcs); | 
					
						
							|  |  |  | 	encoder->possible_crtcs = 1; | 
					
						
							|  |  |  | 	return encoder; | 
					
						
							|  |  |  | } |