drm: add encoder attach/detach
authorDave Airlie <airlied@redhat.com>
Fri, 30 May 2008 03:31:16 +0000 (13:31 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 30 May 2008 03:31:16 +0000 (13:31 +1000)
linux-core/drm_crtc.c
linux-core/drm_crtc.h

index f6937f4..400df98 100644 (file)
@@ -2202,3 +2202,31 @@ out:
        return ret;
 
 }
+
+int drm_mode_output_attach_encoder(struct drm_output *output,
+                                  struct drm_encoder *encoder)
+{
+       int i;
+
+       for (i = 0; i < DRM_OUTPUT_MAX_ENCODER; i++) {
+               if (output->encoder_ids[i] == 0) {
+                       output->encoder_ids[i] = encoder->id;
+                       return 0;
+               }
+       }
+       return -ENOMEM;
+}
+EXPORT_SYMBOL(drm_mode_output_attach_encoder);
+
+void drm_mode_output_detach_encoder(struct drm_output *output,
+                                   struct drm_encoder *encoder)
+{
+       int i;
+       for (i = 0; i < DRM_OUTPUT_MAX_ENCODER; i++) {
+               if (output->encoder_ids[i] == encoder->id) {
+                       output->encoder_ids[i] = 0;
+                       break;
+               }
+       }
+}
+EXPORT_SYMBOL(drm_mode_output_detach_encoder);
index ed8467e..04e0d03 100644 (file)
@@ -629,6 +629,11 @@ extern int drm_property_add_enum(struct drm_property *property, int index,
 extern bool drm_create_tv_properties(struct drm_device *dev, int num_formats,
                                     char *formats[]);
 
+extern int drm_mode_output_attach_encoder(struct drm_output *output,
+                                         struct drm_encoder *encoder);
+extern void drm_mode_output_detach_encoder(struct drm_output *output,
+                                          struct drm_encoder *encoder);
+
 /* IOCTLs */
 extern int drm_mode_getresources(struct drm_device *dev,
                                 void *data, struct drm_file *file_priv);