drm/msm/sde: add driver for sde support
Initial DRM/KMS driver to support snapdragon display engine.
Change-Id: I2f93d7cd24acf77359682f90b6b9647017ed62ba
Signed-off-by: Abhijit Kulkarni <kabhijit@codeaurora.org>
Signed-off-by: Narendra Muppalla <NarendraM@codeaurora.org>
diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c
new file mode 100644
index 0000000..17b7303
--- /dev/null
+++ b/drivers/gpu/drm/msm/sde/sde_plane.c
@@ -0,0 +1,115 @@
+/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include "sde_kms.h"
+
+struct sde_plane {
+ struct drm_plane base;
+ const char *name;
+ uint32_t nformats;
+ uint32_t formats[32];
+};
+#define to_sde_plane(x) container_of(x, struct sde_plane, base)
+
+static int sde_plane_update(struct drm_plane *plane,
+ struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t src_x, uint32_t src_y,
+ uint32_t src_w, uint32_t src_h)
+{
+ return 0;
+}
+
+static int sde_plane_disable(struct drm_plane *plane)
+{
+ return 0;
+}
+
+static void sde_plane_destroy(struct drm_plane *plane)
+{
+ struct sde_plane *sde_plane = to_sde_plane(plane);
+ struct msm_drm_private *priv = plane->dev->dev_private;
+
+ if (priv->kms)
+ sde_plane_disable(plane);
+
+ drm_plane_cleanup(plane);
+
+ kfree(sde_plane);
+}
+
+/* helper to install properties which are common to planes and crtcs */
+void sde_plane_install_properties(struct drm_plane *plane,
+ struct drm_mode_object *obj)
+{
+}
+
+int sde_plane_set_property(struct drm_plane *plane,
+ struct drm_property *property, uint64_t val)
+{
+ return -EINVAL;
+}
+
+static const struct drm_plane_funcs sde_plane_funcs = {
+ .update_plane = sde_plane_update,
+ .disable_plane = sde_plane_disable,
+ .destroy = sde_plane_destroy,
+ .set_property = sde_plane_set_property,
+};
+
+void sde_plane_set_scanout(struct drm_plane *plane,
+ struct drm_framebuffer *fb)
+{
+}
+
+int sde_plane_mode_set(struct drm_plane *plane,
+ struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t src_x, uint32_t src_y,
+ uint32_t src_w, uint32_t src_h)
+{
+ return 0;
+}
+
+/* initialize plane */
+struct drm_plane *sde_plane_init(struct drm_device *dev, bool private_plane)
+{
+ struct drm_plane *plane = NULL;
+ struct sde_plane *sde_plane;
+ int ret;
+ enum drm_plane_type type;
+
+ sde_plane = kzalloc(sizeof(*sde_plane), GFP_KERNEL);
+ if (!sde_plane) {
+ ret = -ENOMEM;
+ goto fail;
+ }
+
+ plane = &sde_plane->base;
+
+ type = private_plane ? DRM_PLANE_TYPE_PRIMARY : DRM_PLANE_TYPE_OVERLAY;
+ drm_universal_plane_init(dev, plane, 0xff, &sde_plane_funcs,
+ sde_plane->formats, sde_plane->nformats,
+ type);
+
+ sde_plane_install_properties(plane, &plane->base);
+
+ return plane;
+
+fail:
+ if (plane)
+ sde_plane_destroy(plane);
+
+ return ERR_PTR(ret);
+}