/**
* struct drm_plane - central DRM plane control structure
* @dev: DRM device this plane belongs to
+ * @parent: this plane share some resources with parent plane.
* @head: for list management
* @base: base mode object
* @possible_crtcs: pipes this plane can be bound to
*/
struct drm_plane {
struct drm_device *dev;
+ struct drm_plane *parent;
struct list_head head;
struct drm_modeset_lock mutex;
*/
int num_overlay_plane;
int num_total_plane;
+ int num_share_plane;
+ int num_share_overlay_plane;
struct list_head plane_list;
int num_crtc;
struct mutex blob_lock;
+ /* pointers to share properties */
+ struct drm_property *prop_share_id;
+ struct drm_property *prop_share_flags;
+
/* pointers to standard properties */
struct list_head property_blob_list;
struct drm_property *edid_property;
void drm_bridge_pre_enable(struct drm_bridge *bridge);
void drm_bridge_enable(struct drm_bridge *bridge);
-extern int drm_encoder_init(struct drm_device *dev,
- struct drm_encoder *encoder,
- const struct drm_encoder_funcs *funcs,
- int encoder_type);
+extern __printf(5, 6)
+int drm_encoder_init(struct drm_device *dev,
+ struct drm_encoder *encoder,
+ const struct drm_encoder_funcs *funcs,
+ int encoder_type, const char *name, ...);
/**
* drm_encoder_crtc_ok - can a given crtc drive a given encoder?
const struct drm_plane_funcs *funcs,
const uint32_t *formats, unsigned int format_count,
bool is_primary);
+extern int drm_share_plane_init(struct drm_device *dev, struct drm_plane *plane,
+ struct drm_plane *parent,
+ unsigned long possible_crtcs,
+ const struct drm_plane_funcs *funcs,
+ const uint32_t *formats,
+ unsigned int format_count,
+ enum drm_plane_type type);
extern void drm_plane_cleanup(struct drm_plane *plane);
extern unsigned int drm_plane_index(struct drm_plane *plane);
extern struct drm_plane * drm_plane_from_index(struct drm_device *dev, int idx);