summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/exynos/exynos_drm_dpi.c
diff options
context:
space:
mode:
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>2015-08-06 02:24:20 +0300
committerInki Dae <inki.dae@samsung.com>2015-08-16 04:23:37 +0300
commita2986e8032bddbe237ed16e2e26c71f5416cd5fd (patch)
treee52b61cf865f2a2bec677b148852bb597fefb62a /drivers/gpu/drm/exynos/exynos_drm_dpi.c
parentaf8be3f6fe80262f29b5e353421392196ff626f0 (diff)
downloadlinux-a2986e8032bddbe237ed16e2e26c71f5416cd5fd.tar.xz
drm/exynos: remove exynos_drm_create_enc_conn()
This functions was just hiding the encoder and connector creation in a way that was less clean than if we get rid of it. For example, exynos_encoder ops had .create_connector() defined only because we were handing off the encoder and connector creation to exynos_drm_create_enc_conn(). Without this function we can directly call the create_connector function internally in the code, without the need of any vtable access. It also does some refactoring in the code like creating a bind function for dpi devices. Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_drm_dpi.c')
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_dpi.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 60a316183a4c..6850ce5a0e97 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -20,7 +20,8 @@
#include <video/of_videomode.h>
#include <video/videomode.h>
-#include "exynos_drm_drv.h"
+#include "exynos_drm_encoder.h"
+#include "exynos_drm_crtc.h"
struct exynos_dpi {
struct exynos_drm_encoder encoder;
@@ -151,7 +152,6 @@ static void exynos_dpi_disable(struct exynos_drm_encoder *encoder)
}
static struct exynos_drm_encoder_ops exynos_dpi_encoder_ops = {
- .create_connector = exynos_dpi_create_connector,
.enable = exynos_dpi_enable,
.disable = exynos_dpi_disable,
};
@@ -280,6 +280,28 @@ static int exynos_dpi_parse_dt(struct exynos_dpi *ctx)
return 0;
}
+int exynos_dpi_bind(struct drm_device *dev,
+ struct exynos_drm_encoder *exynos_encoder)
+{
+ int ret;
+
+ ret = exynos_drm_encoder_create(dev, exynos_encoder,
+ EXYNOS_DISPLAY_TYPE_LCD);
+ if (ret) {
+ DRM_ERROR("failed to create encoder\n");
+ return ret;
+ }
+
+ ret = exynos_dpi_create_connector(exynos_encoder);
+ if (ret) {
+ DRM_ERROR("failed to create connector ret = %d\n", ret);
+ drm_encoder_cleanup(&exynos_encoder->base);
+ return ret;
+ }
+
+ return 0;
+}
+
struct exynos_drm_encoder *exynos_dpi_probe(struct device *dev)
{
struct exynos_dpi *ctx;