]> git.openpandora.org Git - pandora-kernel.git/commitdiff
drm/exynos: remove struct exynos_drm_display
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>
Tue, 11 Aug 2015 08:38:06 +0000 (17:38 +0900)
committerInki Dae <inki.dae@samsung.com>
Sun, 16 Aug 2015 01:23:36 +0000 (10:23 +0900)
This struct was just representing encoder information, it was a member of
struct exynos_drm_encoder, so any code trying to access encoder data would
have to go through the encoder struct, get the display struct and then get
the data it want.

During this patchset we also realized that the only data
exynos_drm_encoder needs to store is the drm_encoder parent and the
exynos_drm_encoder_ops.

Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
14 files changed:
drivers/gpu/drm/exynos/exynos7_drm_decon.c
drivers/gpu/drm/exynos/exynos_dp_core.c
drivers/gpu/drm/exynos/exynos_dp_core.h
drivers/gpu/drm/exynos/exynos_drm_core.c
drivers/gpu/drm/exynos/exynos_drm_crtc.c
drivers/gpu/drm/exynos/exynos_drm_crtc.h
drivers/gpu/drm/exynos/exynos_drm_dpi.c
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_dsi.c
drivers/gpu/drm/exynos/exynos_drm_encoder.c
drivers/gpu/drm/exynos/exynos_drm_encoder.h
drivers/gpu/drm/exynos/exynos_drm_fimd.c
drivers/gpu/drm/exynos/exynos_drm_vidi.c
drivers/gpu/drm/exynos/exynos_hdmi.c

index cfd0b5eeb498de15caa04fecd02b450be74b2543..1b89e947bec9eb87d4538ff3fe3f2972a02fd41a 100644 (file)
@@ -61,7 +61,7 @@ struct decon_context {
        atomic_t                        wait_vsync_event;
 
        struct exynos_drm_panel_info panel;
-       struct exynos_drm_display *display;
+       struct exynos_drm_encoder *encoder;
 };
 
 static const struct of_device_id decon_driver_dt_match[] = {
@@ -681,8 +681,9 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
                return PTR_ERR(ctx->crtc);
        }
 
-       if (ctx->display)
-               exynos_drm_create_enc_conn(drm_dev, ctx->display);
+       if (ctx->encoder)
+               exynos_drm_create_enc_conn(drm_dev, ctx->encoder,
+                                          EXYNOS_DISPLAY_TYPE_LCD);
 
        return 0;
 
@@ -695,8 +696,8 @@ static void decon_unbind(struct device *dev, struct device *master,
 
        decon_disable(ctx->crtc);
 
-       if (ctx->display)
-               exynos_dpi_remove(ctx->display);
+       if (ctx->encoder)
+               exynos_dpi_remove(ctx->encoder);
 
        decon_ctx_remove(ctx);
 }
@@ -781,9 +782,9 @@ static int decon_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, ctx);
 
-       ctx->display = exynos_dpi_probe(dev);
-       if (IS_ERR(ctx->display)) {
-               ret = PTR_ERR(ctx->display);
+       ctx->encoder = exynos_dpi_probe(dev);
+       if (IS_ERR(ctx->encoder)) {
+               ret = PTR_ERR(ctx->encoder);
                goto err_iounmap;
        }
 
index 173f3e05bda9cdbc4a6f3fcce5fc0e6aba30a169..2118737ab462d2c2242cf85fb98ea4ff08737446 100644 (file)
 
 static inline struct exynos_drm_crtc *dp_to_crtc(struct exynos_dp_device *dp)
 {
-       return to_exynos_crtc(dp->encoder->crtc);
+       return to_exynos_crtc(dp->encoder.base.crtc);
 }
 
-static inline struct exynos_dp_device *
-display_to_dp(struct exynos_drm_display *d)
+static inline struct exynos_dp_device *encoder_to_dp(
+                                               struct exynos_drm_encoder *e)
 {
-       return container_of(d, struct exynos_dp_device, display);
+       return container_of(e, struct exynos_dp_device, encoder);
 }
 
 struct bridge_init {
@@ -891,9 +891,9 @@ static void exynos_dp_hotplug(struct work_struct *work)
                drm_helper_hpd_irq_event(dp->drm_dev);
 }
 
-static void exynos_dp_commit(struct exynos_drm_display *display)
+static void exynos_dp_commit(struct exynos_drm_encoder *encoder)
 {
-       struct exynos_dp_device *dp = display_to_dp(display);
+       struct exynos_dp_device *dp = encoder_to_dp(encoder);
        int ret;
 
        /* Keep the panel disabled while we configure video */
@@ -994,7 +994,7 @@ static struct drm_encoder *exynos_dp_best_encoder(
 {
        struct exynos_dp_device *dp = ctx_from_connector(connector);
 
-       return dp->encoder;
+       return &dp->encoder.base;
 }
 
 static struct drm_connector_helper_funcs exynos_dp_connector_helper_funcs = {
@@ -1019,15 +1019,13 @@ static int exynos_drm_attach_lcd_bridge(struct exynos_dp_device *dp,
        return 0;
 }
 
-static int exynos_dp_create_connector(struct exynos_drm_display *display,
-                               struct drm_encoder *encoder)
+static int exynos_dp_create_connector(struct exynos_drm_encoder *exynos_encoder)
 {
-       struct exynos_dp_device *dp = display_to_dp(display);
+       struct exynos_dp_device *dp = encoder_to_dp(exynos_encoder);
+       struct drm_encoder *encoder = &exynos_encoder->base;
        struct drm_connector *connector = &dp->connector;
        int ret;
 
-       dp->encoder = encoder;
-
        /* Pre-empt DP connector creation if there's a bridge */
        if (dp->bridge) {
                ret = exynos_drm_attach_lcd_bridge(dp, encoder);
@@ -1054,9 +1052,9 @@ static int exynos_dp_create_connector(struct exynos_drm_display *display,
        return ret;
 }
 
-static void exynos_dp_enable(struct exynos_drm_display *display)
+static void exynos_dp_enable(struct exynos_drm_encoder *encoder)
 {
-       struct exynos_dp_device *dp = display_to_dp(display);
+       struct exynos_dp_device *dp = encoder_to_dp(encoder);
        struct exynos_drm_crtc *crtc = dp_to_crtc(dp);
 
        if (dp->dpms_mode == DRM_MODE_DPMS_ON)
@@ -1076,14 +1074,14 @@ static void exynos_dp_enable(struct exynos_drm_display *display)
        phy_power_on(dp->phy);
        exynos_dp_init_dp(dp);
        enable_irq(dp->irq);
-       exynos_dp_commit(&dp->display);
+       exynos_dp_commit(&dp->encoder);
 
        dp->dpms_mode = DRM_MODE_DPMS_ON;
 }
 
-static void exynos_dp_disable(struct exynos_drm_display *display)
+static void exynos_dp_disable(struct exynos_drm_encoder *encoder)
 {
-       struct exynos_dp_device *dp = display_to_dp(display);
+       struct exynos_dp_device *dp = encoder_to_dp(encoder);
        struct exynos_drm_crtc *crtc = dp_to_crtc(dp);
 
        if (dp->dpms_mode != DRM_MODE_DPMS_ON)
@@ -1112,7 +1110,7 @@ static void exynos_dp_disable(struct exynos_drm_display *display)
        dp->dpms_mode = DRM_MODE_DPMS_OFF;
 }
 
-static struct exynos_drm_display_ops exynos_dp_display_ops = {
+static struct exynos_drm_encoder_ops exynos_dp_encoder_ops = {
        .create_connector = exynos_dp_create_connector,
        .enable = exynos_dp_enable,
        .disable = exynos_dp_disable,
@@ -1287,7 +1285,8 @@ static int exynos_dp_bind(struct device *dev, struct device *master, void *data)
 
        dp->drm_dev = drm_dev;
 
-       return exynos_drm_create_enc_conn(drm_dev, &dp->display);
+       return exynos_drm_create_enc_conn(drm_dev, &dp->encoder,
+                                         EXYNOS_DISPLAY_TYPE_LCD);
 }
 
 static void exynos_dp_unbind(struct device *dev, struct device *master,
@@ -1295,7 +1294,7 @@ static void exynos_dp_unbind(struct device *dev, struct device *master,
 {
        struct exynos_dp_device *dp = dev_get_drvdata(dev);
 
-       exynos_dp_disable(&dp->display);
+       exynos_dp_disable(&dp->encoder);
 }
 
 static const struct component_ops exynos_dp_ops = {
@@ -1314,8 +1313,7 @@ static int exynos_dp_probe(struct platform_device *pdev)
        if (!dp)
                return -ENOMEM;
 
-       dp->display.type = EXYNOS_DISPLAY_TYPE_LCD;
-       dp->display.ops = &exynos_dp_display_ops;
+       dp->encoder.ops = &exynos_dp_encoder_ops;
        platform_set_drvdata(pdev, dp);
 
        panel_node = of_parse_phandle(dev->of_node, "panel", 0);
@@ -1353,7 +1351,7 @@ static int exynos_dp_suspend(struct device *dev)
 {
        struct exynos_dp_device *dp = dev_get_drvdata(dev);
 
-       exynos_dp_disable(&dp->display);
+       exynos_dp_disable(&dp->encoder);
        return 0;
 }
 
@@ -1361,7 +1359,7 @@ static int exynos_dp_resume(struct device *dev)
 {
        struct exynos_dp_device *dp = dev_get_drvdata(dev);
 
-       exynos_dp_enable(&dp->display);
+       exynos_dp_enable(&dp->encoder);
        return 0;
 }
 #endif
index a4e799679669420c3cb6d6920beee1c43684889d..f8cc20207dbd8cbf3ce426206937f4bb13a1f24c 100644 (file)
@@ -147,11 +147,10 @@ struct link_train {
 };
 
 struct exynos_dp_device {
-       struct exynos_drm_display display;
+       struct exynos_drm_encoder encoder;
        struct device           *dev;
        struct drm_device       *drm_dev;
        struct drm_connector    connector;
-       struct drm_encoder      *encoder;
        struct drm_panel        *panel;
        struct drm_bridge       *bridge;
        struct clk              *clock;
index 4c9f972eaa0771c0b2d9c5ff0f5480da3dc1e93d..e3864525fd7b8b095e3fe3dd84596ab8525b1df5 100644 (file)
 static LIST_HEAD(exynos_drm_subdrv_list);
 
 int exynos_drm_create_enc_conn(struct drm_device *dev,
-                                       struct exynos_drm_display *display)
+                              struct exynos_drm_encoder *exynos_encoder,
+                              enum exynos_drm_output_type type)
 {
-       struct drm_encoder *encoder;
        int ret;
        unsigned long possible_crtcs = 0;
 
-       ret = exynos_drm_crtc_get_pipe_from_type(dev, display->type);
+       ret = exynos_drm_crtc_get_pipe_from_type(dev, type);
        if (ret < 0)
                return ret;
 
        possible_crtcs |= 1 << ret;
 
        /* create and initialize a encoder for this sub driver. */
-       encoder = exynos_drm_encoder_create(dev, display, possible_crtcs);
-       if (!encoder) {
+       ret = exynos_drm_encoder_create(dev, exynos_encoder, possible_crtcs);
+       if (ret) {
                DRM_ERROR("failed to create encoder\n");
-               return -EFAULT;
+               return ret;
        }
 
-       display->encoder = encoder;
-
-       ret = display->ops->create_connector(display, encoder);
+       ret = exynos_encoder->ops->create_connector(exynos_encoder);
        if (ret) {
                DRM_ERROR("failed to create connector ret = %d\n", ret);
-               goto err_destroy_encoder;
+               drm_encoder_cleanup(&exynos_encoder->base);
+               return ret;
        }
 
        return 0;
-
-err_destroy_encoder:
-       encoder->funcs->destroy(encoder);
-       return ret;
 }
 
 int exynos_drm_subdrv_register(struct exynos_drm_subdrv *subdrv)
index b13c9492291b6ed5a529de2bf30c95a01da817a9..21427cca0a4960c3d7f6a1f7e7d8d56ae720c14e 100644 (file)
@@ -237,7 +237,7 @@ void exynos_drm_crtc_complete_scanout(struct drm_framebuffer *fb)
 }
 
 int exynos_drm_crtc_get_pipe_from_type(struct drm_device *drm_dev,
-                                       unsigned int out_type)
+                                      enum exynos_drm_output_type out_type)
 {
        struct drm_crtc *crtc;
 
index d01d49a69298c02292f372e496dac404a38008c2..9e7027d6c2f6de7a2b58bd5852165063c6625547 100644 (file)
@@ -30,7 +30,7 @@ void exynos_drm_crtc_complete_scanout(struct drm_framebuffer *fb);
 
 /* This function gets pipe value to crtc device matched with out_type. */
 int exynos_drm_crtc_get_pipe_from_type(struct drm_device *drm_dev,
-                                       unsigned int out_type);
+                                      enum exynos_drm_output_type out_type);
 
 /*
  * This function calls the crtc device(manager)'s te_handler() callback
index e0426707c911f721df394e90c621295d22a760c2..60a316183a4c2b726576cd4ccc268e36c0b96067 100644 (file)
 #include "exynos_drm_drv.h"
 
 struct exynos_dpi {
-       struct exynos_drm_display display;
+       struct exynos_drm_encoder encoder;
        struct device *dev;
        struct device_node *panel_node;
 
        struct drm_panel *panel;
        struct drm_connector connector;
-       struct drm_encoder *encoder;
 
        struct videomode *vm;
 };
 
 #define connector_to_dpi(c) container_of(c, struct exynos_dpi, connector)
 
-static inline struct exynos_dpi *display_to_dpi(struct exynos_drm_display *d)
+static inline struct exynos_dpi *encoder_to_dpi(struct exynos_drm_encoder *e)
 {
-       return container_of(d, struct exynos_dpi, display);
+       return container_of(e, struct exynos_dpi, encoder);
 }
 
 static enum drm_connector_status
@@ -98,7 +97,7 @@ exynos_dpi_best_encoder(struct drm_connector *connector)
 {
        struct exynos_dpi *ctx = connector_to_dpi(connector);
 
-       return ctx->encoder;
+       return &ctx->encoder.base;
 }
 
 static struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
@@ -106,15 +105,14 @@ static struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
        .best_encoder = exynos_dpi_best_encoder,
 };
 
-static int exynos_dpi_create_connector(struct exynos_drm_display *display,
-                                      struct drm_encoder *encoder)
+static int exynos_dpi_create_connector(
+                               struct exynos_drm_encoder *exynos_encoder)
 {
-       struct exynos_dpi *ctx = display_to_dpi(display);
+       struct exynos_dpi *ctx = encoder_to_dpi(exynos_encoder);
+       struct drm_encoder *encoder = &exynos_encoder->base;
        struct drm_connector *connector = &ctx->connector;
        int ret;
 
-       ctx->encoder = encoder;
-
        connector->polled = DRM_CONNECTOR_POLL_HPD;
 
        ret = drm_connector_init(encoder->dev, connector,
@@ -132,9 +130,9 @@ static int exynos_dpi_create_connector(struct exynos_drm_display *display,
        return 0;
 }
 
-static void exynos_dpi_enable(struct exynos_drm_display *display)
+static void exynos_dpi_enable(struct exynos_drm_encoder *encoder)
 {
-       struct exynos_dpi *ctx = display_to_dpi(display);
+       struct exynos_dpi *ctx = encoder_to_dpi(encoder);
 
        if (ctx->panel) {
                drm_panel_prepare(ctx->panel);
@@ -142,9 +140,9 @@ static void exynos_dpi_enable(struct exynos_drm_display *display)
        }
 }
 
-static void exynos_dpi_disable(struct exynos_drm_display *display)
+static void exynos_dpi_disable(struct exynos_drm_encoder *encoder)
 {
-       struct exynos_dpi *ctx = display_to_dpi(display);
+       struct exynos_dpi *ctx = encoder_to_dpi(encoder);
 
        if (ctx->panel) {
                drm_panel_disable(ctx->panel);
@@ -152,7 +150,7 @@ static void exynos_dpi_disable(struct exynos_drm_display *display)
        }
 }
 
-static struct exynos_drm_display_ops exynos_dpi_display_ops = {
+static struct exynos_drm_encoder_ops exynos_dpi_encoder_ops = {
        .create_connector = exynos_dpi_create_connector,
        .enable = exynos_dpi_enable,
        .disable = exynos_dpi_disable,
@@ -282,7 +280,7 @@ static int exynos_dpi_parse_dt(struct exynos_dpi *ctx)
        return 0;
 }
 
-struct exynos_drm_display *exynos_dpi_probe(struct device *dev)
+struct exynos_drm_encoder *exynos_dpi_probe(struct device *dev)
 {
        struct exynos_dpi *ctx;
        int ret;
@@ -291,8 +289,7 @@ struct exynos_drm_display *exynos_dpi_probe(struct device *dev)
        if (!ctx)
                return ERR_PTR(-ENOMEM);
 
-       ctx->display.type = EXYNOS_DISPLAY_TYPE_LCD;
-       ctx->display.ops = &exynos_dpi_display_ops;
+       ctx->encoder.ops = &exynos_dpi_encoder_ops;
        ctx->dev = dev;
 
        ret = exynos_dpi_parse_dt(ctx);
@@ -307,14 +304,14 @@ struct exynos_drm_display *exynos_dpi_probe(struct device *dev)
                        return ERR_PTR(-EPROBE_DEFER);
        }
 
-       return &ctx->display;
+       return &ctx->encoder;
 }
 
-int exynos_dpi_remove(struct exynos_drm_display *display)
+int exynos_dpi_remove(struct exynos_drm_encoder *encoder)
 {
-       struct exynos_dpi *ctx = display_to_dpi(display);
+       struct exynos_dpi *ctx = encoder_to_dpi(encoder);
 
-       exynos_dpi_disable(&ctx->display);
+       exynos_dpi_disable(&ctx->encoder);
 
        if (ctx->panel)
                drm_panel_detach(ctx->panel);
Simple merge