]> git.karo-electronics.de Git - linux-beck.git/commitdiff
OMAPDSS: combine omap_dss_output into omap_dss_device
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 19 Apr 2013 12:09:34 +0000 (15:09 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 17 Jun 2013 11:00:51 +0000 (14:00 +0300)
We currently have omap_dss_device, which represents an external display
device, sometimes an external encoder, sometimes a panel. Then we have
omap_dss_output, which represents DSS's output encoder.

In the future with new display device model, we construct a video
pipeline from the display blocks. To accomplish this, all the blocks
need to be presented by the same entity.

Thus, this patch combines omap_dss_output into omap_dss_device. Some of
the fields in omap_dss_output are already found in omap_dss_device, but
some are not. This means we'll have DSS output specific fields in
omap_dss_device, which is not very nice. However, it is easier to just
keep those output specific fields there for now, and after transition to
new display device model is made, they can be cleaned up easier than
could be done now.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
13 files changed:
drivers/gpu/drm/omapdrm/omap_crtc.c
drivers/gpu/drm/omapdrm/omap_drv.c
drivers/video/omap2/dss/apply.c
drivers/video/omap2/dss/core.c
drivers/video/omap2/dss/dpi.c
drivers/video/omap2/dss/dsi.c
drivers/video/omap2/dss/dss.h
drivers/video/omap2/dss/hdmi.c
drivers/video/omap2/dss/output.c
drivers/video/omap2/dss/rfbi.c
drivers/video/omap2/dss/sdi.c
drivers/video/omap2/dss/venc.c
include/video/omapdss.h

index b2ab2f5d3cb9da50fa902365efe6146a7f59ed88..4cec678dba94940abfc69e762a061cc99d06b096 100644 (file)
@@ -95,7 +95,7 @@ static struct omap_crtc *omap_crtcs[8];
 
 /* we can probably ignore these until we support command-mode panels: */
 static int omap_crtc_connect(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst)
+               struct omap_dss_device *dst)
 {
        if (mgr->output)
                return -EINVAL;
@@ -110,7 +110,7 @@ static int omap_crtc_connect(struct omap_overlay_manager *mgr,
 }
 
 static void omap_crtc_disconnect(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst)
+               struct omap_dss_device *dst)
 {
        mgr->output->manager = NULL;
        mgr->output = NULL;
index c65dd0d6b01d6bd9d3b4a1e354a8291f1917f5dc..78a78c6ea576c209c352f2c063e9f94e5a479755 100644 (file)
@@ -259,7 +259,7 @@ static int omap_modeset_init(struct drm_device *dev)
                struct drm_encoder *encoder = priv->encoders[i];
                struct omap_dss_device *dssdev =
                                        omap_encoder_get_dssdev(encoder);
-               struct omap_dss_output *output;
+               struct omap_dss_device *output;
 
                output = omapdss_find_output_from_display(dssdev);
 
index ced656ae70592a40f54c514738b4317c6d2083a6..752b98592908917da0a70790ae19ed83e1369838 100644 (file)
@@ -791,13 +791,13 @@ static void mgr_clear_shadow_dirty(struct omap_overlay_manager *mgr)
 }
 
 static int dss_mgr_connect_compat(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst)
+               struct omap_dss_device *dst)
 {
        return mgr->set_output(mgr, dst);
 }
 
 static void dss_mgr_disconnect_compat(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst)
+               struct omap_dss_device *dst)
 {
        mgr->unset_output(mgr);
 }
@@ -1166,7 +1166,7 @@ static void dss_mgr_get_info(struct omap_overlay_manager *mgr,
 }
 
 static int dss_mgr_set_output(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *output)
+               struct omap_dss_device *output)
 {
        int r;
 
index 7118449919c176366394ff316a6fdc5d5464a693..1aeb274e30fc2728e611a8ee4033e88f23d77972 100644 (file)
@@ -353,7 +353,7 @@ static int dss_driver_remove(struct device *dev)
 
 static int omapdss_default_connect(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
        struct omap_overlay_manager *mgr;
        int r;
 
@@ -375,7 +375,7 @@ static int omapdss_default_connect(struct omap_dss_device *dssdev)
 
 static void omapdss_default_disconnect(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
        struct omap_overlay_manager *mgr;
 
        out = dssdev->output;
index e8cbf86eff9d05f145e89f4f19c32fc97eef7402..482b918757bebd2d4970b0ae1f50303a31b3de22 100644 (file)
@@ -48,7 +48,7 @@ static struct {
        struct dss_lcd_mgr_config mgr_config;
        int data_lines;
 
-       struct omap_dss_output output;
+       struct omap_dss_device output;
 } dpi;
 
 static struct platform_device *dpi_get_dsidev(enum omap_channel channel)
@@ -347,7 +347,7 @@ static void dpi_config_lcd_manager(struct omap_overlay_manager *mgr)
 
 int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out = &dpi.output;
+       struct omap_dss_device *out = &dpi.output;
        int r;
 
        mutex_lock(&dpi.lock);
@@ -680,11 +680,11 @@ static int dpi_probe_pdata(struct platform_device *dpidev)
 
 static void dpi_init_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &dpi.output;
+       struct omap_dss_device *out = &dpi.output;
 
-       out->pdev = pdev;
+       out->dev = &pdev->dev;
        out->id = OMAP_DSS_OUTPUT_DPI;
-       out->type = OMAP_DISPLAY_TYPE_DPI;
+       out->output_type = OMAP_DISPLAY_TYPE_DPI;
        out->name = "dpi.0";
        out->dispc_channel = dpi_get_channel();
 
@@ -693,7 +693,7 @@ static void dpi_init_output(struct platform_device *pdev)
 
 static void __exit dpi_uninit_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &dpi.output;
+       struct omap_dss_device *out = &dpi.output;
 
        dss_unregister_output(out);
 }
index 26aa4c324c1849826be96924e1c3cb68888438c7..88780731f7a8694125cd703cdbae12dde4837396 100644 (file)
@@ -363,7 +363,7 @@ struct dsi_data {
        enum omap_dss_dsi_mode mode;
        struct omap_dss_dsi_videomode_timings vm_timings;
 
-       struct omap_dss_output output;
+       struct omap_dss_device output;
 };
 
 struct dsi_packet_sent_handler_data {
@@ -383,12 +383,12 @@ static inline struct dsi_data *dsi_get_dsidrv_data(struct platform_device *dside
 
 static inline struct platform_device *dsi_get_dsidev_from_dssdev(struct omap_dss_device *dssdev)
 {
-       return dssdev->output->pdev;
+       return to_platform_device(dssdev->output->dev);
 }
 
 struct platform_device *dsi_get_dsidev_from_id(int module)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
        enum omap_dss_output_id id;
 
        switch (module) {
@@ -404,7 +404,7 @@ struct platform_device *dsi_get_dsidev_from_id(int module)
 
        out = omap_dss_get_output(id);
 
-       return out ? out->pdev : NULL;
+       return out ? to_platform_device(out->dev) : NULL;
 }
 
 static inline void dsi_write_reg(struct platform_device *dsidev,
@@ -4133,7 +4133,7 @@ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        struct omap_overlay_manager *mgr = dsi->output.manager;
        int bpp = dsi_get_pixel_size(dsi->pix_fmt);
-       struct omap_dss_output *out = &dsi->output;
+       struct omap_dss_device *out = &dsi->output;
        u8 data_type;
        u16 word_count;
        int r;
@@ -5415,13 +5415,13 @@ static int dsi_probe_pdata(struct platform_device *dsidev)
 static void dsi_init_output(struct platform_device *dsidev)
 {
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-       struct omap_dss_output *out = &dsi->output;
+       struct omap_dss_device *out = &dsi->output;
 
-       out->pdev = dsidev;
+       out->dev = &dsidev->dev;
        out->id = dsi->module_id == 0 ?
                        OMAP_DSS_OUTPUT_DSI1 : OMAP_DSS_OUTPUT_DSI2;
 
-       out->type = OMAP_DISPLAY_TYPE_DSI;
+       out->output_type = OMAP_DISPLAY_TYPE_DSI;
        out->name = dsi->module_id == 0 ? "dsi.0" : "dsi.1";
        out->dispc_channel = dsi_get_channel(dsi->module_id);
 
@@ -5431,7 +5431,7 @@ static void dsi_init_output(struct platform_device *dsidev)
 static void dsi_uninit_output(struct platform_device *dsidev)
 {
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-       struct omap_dss_output *out = &dsi->output;
+       struct omap_dss_device *out = &dsi->output;
 
        dss_unregister_output(out);
 }
index 03d729ac8c42ee35d058f7b4a860320b40268e9d..67a509ea1fcb6c99ae08957a74d01cfb77f7b2c6 100644 (file)
@@ -180,8 +180,8 @@ void dss_copy_device_pdata(struct omap_dss_device *dst,
                const struct omap_dss_device *src);
 
 /* output */
-void dss_register_output(struct omap_dss_output *out);
-void dss_unregister_output(struct omap_dss_output *out);
+void dss_register_output(struct omap_dss_device *out);
+void dss_unregister_output(struct omap_dss_device *out);
 
 /* display */
 int dss_suspend_all_devices(void);
index 1804f1e28b9790db48a7983f40dbf46f769d1f07..1c1c1eee9990be2e77844e87c0328fcadfa133ef 100644 (file)
@@ -70,7 +70,7 @@ static struct {
        int ls_oe_gpio;
        int hpd_gpio;
 
-       struct omap_dss_output output;
+       struct omap_dss_device output;
 } hdmi;
 
 /*
@@ -720,7 +720,7 @@ bool omapdss_hdmi_detect(void)
 
 int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out = &hdmi.output;
+       struct omap_dss_device *out = &hdmi.output;
        int r = 0;
 
        DSSDBG("ENTER hdmi_display_enable\n");
@@ -1035,11 +1035,11 @@ static int hdmi_probe_pdata(struct platform_device *pdev)
 
 static void hdmi_init_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &hdmi.output;
+       struct omap_dss_device *out = &hdmi.output;
 
-       out->pdev = pdev;
+       out->dev = &pdev->dev;
        out->id = OMAP_DSS_OUTPUT_HDMI;
-       out->type = OMAP_DISPLAY_TYPE_HDMI;
+       out->output_type = OMAP_DISPLAY_TYPE_HDMI;
        out->name = "hdmi.0";
        out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
 
@@ -1048,7 +1048,7 @@ static void hdmi_init_output(struct platform_device *pdev)
 
 static void __exit hdmi_uninit_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &hdmi.output;
+       struct omap_dss_device *out = &hdmi.output;
 
        dss_unregister_output(out);
 }
index a53b08b2249b434dd1e82a7ce1e9fcc247693355..cc81fec1626f6bd53125db63c4e06619402ebb71 100644 (file)
@@ -27,7 +27,7 @@
 static LIST_HEAD(output_list);
 static DEFINE_MUTEX(output_lock);
 
-int omapdss_output_set_device(struct omap_dss_output *out,
+int omapdss_output_set_device(struct omap_dss_device *out,
                struct omap_dss_device *dssdev)
 {
        int r;
@@ -41,7 +41,7 @@ int omapdss_output_set_device(struct omap_dss_output *out,
                goto err;
        }
 
-       if (out->type != dssdev->type) {
+       if (out->output_type != dssdev->type) {
                DSSERR("output type and display type don't match\n");
                r = -EINVAL;
                goto err;
@@ -60,7 +60,7 @@ err:
 }
 EXPORT_SYMBOL(omapdss_output_set_device);
 
-int omapdss_output_unset_device(struct omap_dss_output *out)
+int omapdss_output_unset_device(struct omap_dss_device *out)
 {
        int r;
 
@@ -92,19 +92,19 @@ err:
 }
 EXPORT_SYMBOL(omapdss_output_unset_device);
 
-void dss_register_output(struct omap_dss_output *out)
+void dss_register_output(struct omap_dss_device *out)
 {
        list_add_tail(&out->list, &output_list);
 }
 
-void dss_unregister_output(struct omap_dss_output *out)
+void dss_unregister_output(struct omap_dss_device *out)
 {
        list_del(&out->list);
 }
 
-struct omap_dss_output *omap_dss_get_output(enum omap_dss_output_id id)
+struct omap_dss_device *omap_dss_get_output(enum omap_dss_output_id id)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
 
        list_for_each_entry(out, &output_list, list) {
                if (out->id == id)
@@ -115,9 +115,9 @@ struct omap_dss_output *omap_dss_get_output(enum omap_dss_output_id id)
 }
 EXPORT_SYMBOL(omap_dss_get_output);
 
-struct omap_dss_output *omap_dss_find_output(const char *name)
+struct omap_dss_device *omap_dss_find_output(const char *name)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
 
        list_for_each_entry(out, &output_list, list) {
                if (strcmp(out->name, name) == 0)
@@ -128,12 +128,12 @@ struct omap_dss_output *omap_dss_find_output(const char *name)
 }
 EXPORT_SYMBOL(omap_dss_find_output);
 
-struct omap_dss_output *omap_dss_find_output_by_node(struct device_node *node)
+struct omap_dss_device *omap_dss_find_output_by_node(struct device_node *node)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
 
        list_for_each_entry(out, &output_list, list) {
-               if (out->pdev->dev.of_node == node)
+               if (out->dev->of_node == node)
                        return out;
        }
 
@@ -141,7 +141,7 @@ struct omap_dss_output *omap_dss_find_output_by_node(struct device_node *node)
 }
 EXPORT_SYMBOL(omap_dss_find_output_by_node);
 
-struct omap_dss_output *omapdss_find_output_from_display(struct omap_dss_device *dssdev)
+struct omap_dss_device *omapdss_find_output_from_display(struct omap_dss_device *dssdev)
 {
        return dssdev->output;
 }
@@ -149,7 +149,7 @@ EXPORT_SYMBOL(omapdss_find_output_from_display);
 
 struct omap_overlay_manager *omapdss_find_mgr_from_display(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out;
+       struct omap_dss_device *out;
 
        out = omapdss_find_output_from_display(dssdev);
 
@@ -180,14 +180,14 @@ void dss_uninstall_mgr_ops(void)
 EXPORT_SYMBOL(dss_uninstall_mgr_ops);
 
 int dss_mgr_connect(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst)
+               struct omap_dss_device *dst)
 {
        return dss_mgr_ops->connect(mgr, dst);
 }
 EXPORT_SYMBOL(dss_mgr_connect);
 
 void dss_mgr_disconnect(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst)
+               struct omap_dss_device *dst)
 {
        dss_mgr_ops->disconnect(mgr, dst);
 }
index 30ff0e0d46290ef36165c4db04af0e730e96c66f..35836eb73a621ae17b15fb8b036179ec38fab9ed 100644 (file)
@@ -117,7 +117,7 @@ static struct {
        int data_lines;
        struct rfbi_timings intf_timings;
 
-       struct omap_dss_output output;
+       struct omap_dss_device output;
 } rfbi;
 
 static inline void rfbi_write_reg(const struct rfbi_reg idx, u32 val)
@@ -890,7 +890,7 @@ static void rfbi_config_lcd_manager(struct omap_dss_device *dssdev)
 
 int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out = &rfbi.output;
+       struct omap_dss_device *out = &rfbi.output;
        int r;
 
        if (out == NULL || out->manager == NULL) {
@@ -925,7 +925,7 @@ EXPORT_SYMBOL(omapdss_rfbi_display_enable);
 
 void omapdss_rfbi_display_disable(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out = &rfbi.output;
+       struct omap_dss_device *out = &rfbi.output;
 
        dss_mgr_unregister_framedone_handler(out->manager,
                        framedone_callback, NULL);
@@ -1013,11 +1013,11 @@ static int rfbi_probe_pdata(struct platform_device *rfbidev)
 
 static void rfbi_init_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &rfbi.output;
+       struct omap_dss_device *out = &rfbi.output;
 
-       out->pdev = pdev;
+       out->dev = &pdev->dev;
        out->id = OMAP_DSS_OUTPUT_DBI;
-       out->type = OMAP_DISPLAY_TYPE_DBI;
+       out->output_type = OMAP_DISPLAY_TYPE_DBI;
        out->name = "rfbi.0";
        out->dispc_channel = OMAP_DSS_CHANNEL_LCD;
 
@@ -1026,7 +1026,7 @@ static void rfbi_init_output(struct platform_device *pdev)
 
 static void __exit rfbi_uninit_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &rfbi.output;
+       struct omap_dss_device *out = &rfbi.output;
 
        dss_unregister_output(out);
 }
index d4f3313bc378a6ec4e6d08955ebc47e02799f68d..5e81de58d932d4bb73c948c8d0fbe487a212ee9f 100644 (file)
@@ -40,7 +40,7 @@ static struct {
        struct omap_video_timings timings;
        int datapairs;
 
-       struct omap_dss_output output;
+       struct omap_dss_device output;
 } sdi;
 
 struct sdi_clk_calc_ctx {
@@ -126,7 +126,7 @@ static void sdi_config_lcd_manager(struct omap_dss_device *dssdev)
 
 int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out = &sdi.output;
+       struct omap_dss_device *out = &sdi.output;
        struct omap_video_timings *t = &sdi.timings;
        struct dss_clock_info dss_cinfo;
        struct dispc_clock_info dispc_cinfo;
@@ -335,11 +335,11 @@ static int sdi_probe_pdata(struct platform_device *sdidev)
 
 static void sdi_init_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &sdi.output;
+       struct omap_dss_device *out = &sdi.output;
 
-       out->pdev = pdev;
+       out->dev = &pdev->dev;
        out->id = OMAP_DSS_OUTPUT_SDI;
-       out->type = OMAP_DISPLAY_TYPE_SDI;
+       out->output_type = OMAP_DISPLAY_TYPE_SDI;
        out->name = "sdi.0";
        out->dispc_channel = OMAP_DSS_CHANNEL_LCD;
 
@@ -348,7 +348,7 @@ static void sdi_init_output(struct platform_device *pdev)
 
 static void __exit sdi_uninit_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &sdi.output;
+       struct omap_dss_device *out = &sdi.output;
 
        dss_unregister_output(out);
 }
index d529a92494329a4616dca35de6ceaddb86588052..96c49bc7bdb4fb225f754d8e0a0634a746c38053 100644 (file)
@@ -304,7 +304,7 @@ static struct {
        enum omap_dss_venc_type type;
        bool invert_polarity;
 
-       struct omap_dss_output output;
+       struct omap_dss_device output;
 } venc;
 
 static inline void venc_write_reg(int idx, u32 val)
@@ -500,7 +500,7 @@ unsigned long venc_get_pixel_clock(void)
 
 int omapdss_venc_display_enable(struct omap_dss_device *dssdev)
 {
-       struct omap_dss_output *out = &venc.output;
+       struct omap_dss_device *out = &venc.output;
        int r;
 
        DSSDBG("venc_display_enable\n");
@@ -785,11 +785,11 @@ static int venc_probe_pdata(struct platform_device *vencdev)
 
 static void venc_init_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &venc.output;
+       struct omap_dss_device *out = &venc.output;
 
-       out->pdev = pdev;
+       out->dev = &pdev->dev;
        out->id = OMAP_DSS_OUTPUT_VENC;
-       out->type = OMAP_DISPLAY_TYPE_VENC;
+       out->output_type = OMAP_DISPLAY_TYPE_VENC;
        out->name = "venc.0";
        out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
 
@@ -798,7 +798,7 @@ static void venc_init_output(struct platform_device *pdev)
 
 static void __exit venc_uninit_output(struct platform_device *pdev)
 {
-       struct omap_dss_output *out = &venc.output;
+       struct omap_dss_device *out = &venc.output;
 
        dss_unregister_output(out);
 }
index 6a699f537a68863a5bb9ec89021235869ca1e7fd..8e5035a5454401f5fd4611595a2ba5977c3fca60 100644 (file)
@@ -515,7 +515,7 @@ struct omap_overlay_manager {
        enum omap_dss_output_id supported_outputs;
 
        /* dynamic fields */
-       struct omap_dss_output *output;
+       struct omap_dss_device *output;
 
        /*
         * The following functions do not block:
@@ -529,7 +529,7 @@ struct omap_overlay_manager {
         */
 
        int (*set_output)(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *output);
+               struct omap_dss_device *output);
        int (*unset_output)(struct omap_overlay_manager *mgr);
 
        int (*set_manager_info)(struct omap_overlay_manager *mgr,
@@ -572,29 +572,6 @@ struct omap_dss_writeback_info {
        u8 pre_mult_alpha;
 };
 
-struct omap_dss_output {
-       struct list_head list;
-
-       const char *name;
-
-       /* display type supported by the output */
-       enum omap_display_type type;
-
-       /* DISPC channel for this output */
-       enum omap_channel dispc_channel;
-
-       /* output instance */
-       enum omap_dss_output_id id;
-
-       /* output's platform device pointer */
-       struct platform_device *pdev;
-
-       /* dynamic fields */
-       struct omap_overlay_manager *manager;
-
-       struct omap_dss_device *device;
-};
-
 struct omap_dss_device {
        /* old device, to be removed */
        struct device old_dev;
@@ -608,6 +585,7 @@ struct omap_dss_device {
        char alias[16];
 
        enum omap_display_type type;
+       enum omap_display_type output_type;
 
        /* obsolete, to be removed */
        enum omap_channel channel;
@@ -669,7 +647,7 @@ struct omap_dss_device {
 
        enum omap_display_caps caps;
 
-       struct omap_dss_output *output;
+       struct omap_dss_device *output;
 
        enum omap_dss_display_state state;
 
@@ -680,6 +658,22 @@ struct omap_dss_device {
        void (*platform_disable)(struct omap_dss_device *dssdev);
        int (*set_backlight)(struct omap_dss_device *dssdev, int level);
        int (*get_backlight)(struct omap_dss_device *dssdev);
+
+
+       /* OMAP DSS output specific fields */
+
+       struct list_head list;
+
+       /* DISPC channel for this output */
+       enum omap_channel dispc_channel;
+
+       /* output instance */
+       enum omap_dss_output_id id;
+
+       /* dynamic fields */
+       struct omap_overlay_manager *manager;
+
+       struct omap_dss_device *device;
 };
 
 struct omap_dss_hdmi_data
@@ -798,14 +792,14 @@ struct omap_overlay_manager *omap_dss_get_overlay_manager(int num);
 int omap_dss_get_num_overlays(void);
 struct omap_overlay *omap_dss_get_overlay(int num);
 
-struct omap_dss_output *omap_dss_get_output(enum omap_dss_output_id id);
-struct omap_dss_output *omap_dss_find_output(const char *name);
-struct omap_dss_output *omap_dss_find_output_by_node(struct device_node *node);
-int omapdss_output_set_device(struct omap_dss_output *out,
+struct omap_dss_device *omap_dss_get_output(enum omap_dss_output_id id);
+struct omap_dss_device *omap_dss_find_output(const char *name);
+struct omap_dss_device *omap_dss_find_output_by_node(struct device_node *node);
+int omapdss_output_set_device(struct omap_dss_device *out,
                struct omap_dss_device *dssdev);
-int omapdss_output_unset_device(struct omap_dss_output *out);
+int omapdss_output_unset_device(struct omap_dss_device *out);
 
-struct omap_dss_output *omapdss_find_output_from_display(struct omap_dss_device *dssdev);
+struct omap_dss_device *omapdss_find_output_from_display(struct omap_dss_device *dssdev);
 struct omap_overlay_manager *omapdss_find_mgr_from_display(struct omap_dss_device *dssdev);
 
 void omapdss_default_get_resolution(struct omap_dss_device *dssdev,
@@ -909,9 +903,9 @@ void omapdss_compat_uninit(void);
 
 struct dss_mgr_ops {
        int (*connect)(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst);
+               struct omap_dss_device *dst);
        void (*disconnect)(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst);
+               struct omap_dss_device *dst);
 
        void (*start_update)(struct omap_overlay_manager *mgr);
        int (*enable)(struct omap_overlay_manager *mgr);
@@ -930,9 +924,9 @@ int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops);
 void dss_uninstall_mgr_ops(void);
 
 int dss_mgr_connect(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst);
+               struct omap_dss_device *dst);
 void dss_mgr_disconnect(struct omap_overlay_manager *mgr,
-               struct omap_dss_output *dst);
+               struct omap_dss_device *dst);
 void dss_mgr_set_timings(struct omap_overlay_manager *mgr,
                const struct omap_video_timings *timings);
 void dss_mgr_set_lcd_config(struct omap_overlay_manager *mgr,