dssdev->dev = &pdev->dev;
        dssdev->type = OMAP_DISPLAY_TYPE_VENC;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->dev = &pdev->dev;
        dssdev->type = OMAP_DISPLAY_TYPE_DVI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->dev = &pdev->dev;
        dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->type = OMAP_DISPLAY_TYPE_VENC;
        dssdev->output_type = OMAP_DISPLAY_TYPE_VENC;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(1) | BIT(0);
 
        omapdss_device_register(dssdev);
 
 
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->output_type = OMAP_DISPLAY_TYPE_DVI;
        dssdev->owner = THIS_MODULE;
-       dssdev->port_num = 1;
+       dssdev->of_ports = BIT(1) | BIT(0);
 
        omapdss_device_register(dssdev);
 
 
        dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
        dssdev->output_type = OMAP_DISPLAY_TYPE_HDMI;
        dssdev->owner = THIS_MODULE;
-       dssdev->port_num = 1;
+       dssdev->of_ports = BIT(1) | BIT(0);
 
        omapdss_device_register(dssdev);
 
 
        dssdev->driver = &panel_dpi_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->driver = &dsicm_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DSI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE |
                OMAP_DSS_DISPLAY_CAP_TEAR_ELIM;
 
        dssdev->driver = &lb035q02_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->driver = &nec_8048_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->driver = &sharp_ls_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->driver = &acx565akm_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_SDI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->driver = &td028ttec1_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        dssdev->driver = &tpo_td043_ops;
        dssdev->type = OMAP_DISPLAY_TYPE_DPI;
        dssdev->owner = THIS_MODULE;
+       dssdev->of_ports = BIT(0);
 
        omapdss_display_init(dssdev);
        omapdss_device_register(dssdev);
 
        struct omap_dss_device *dssdev;
 
        list_for_each_entry(dssdev, &omapdss_devices_list, list) {
-               if (dssdev->dev->of_node == src && dssdev->port_num == port)
+               if (dssdev->dev->of_node == src && dssdev->of_ports & BIT(port))
                        return omapdss_device_get(dssdev);
        }
 
 
        struct platform_device *pdev;
        enum dss_model dss_model;
        struct dss_device *dss;
+       unsigned int id;
 
        struct regulator *vdds_dsi_reg;
        enum dss_clk_source clk_src;
        if (r)
                goto err_get_dispc;
 
-       r = dss_dpi_select_source(dpi->dss, out->port_num, out->dispc_channel);
+       r = dss_dpi_select_source(dpi->dss, dpi->id, out->dispc_channel);
        if (r)
                goto err_src_sel;
 
  * the channel in some more dynamic manner, or get the channel as a user
  * parameter.
  */
-static enum omap_channel dpi_get_channel(struct dpi_data *dpi, int port_num)
+static enum omap_channel dpi_get_channel(struct dpi_data *dpi)
 {
        switch (dpi->dss_model) {
        case DSS_MODEL_OMAP2:
                return OMAP_DSS_CHANNEL_LCD;
 
        case DSS_MODEL_DRA7:
-               switch (port_num) {
+               switch (dpi->id) {
                case 2:
                        return OMAP_DSS_CHANNEL_LCD3;
                case 1:
 static void dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
 {
        struct omap_dss_device *out = &dpi->output;
-       int r;
-       u32 port_num;
+       u32 port_num = 0;
 
-       r = of_property_read_u32(port, "reg", &port_num);
-       if (r)
-               port_num = 0;
+       of_property_read_u32(port, "reg", &port_num);
+       dpi->id = port_num <= 2 ? port_num : 0;
 
        switch (port_num) {
        case 2:
        out->dev = &dpi->pdev->dev;
        out->id = OMAP_DSS_OUTPUT_DPI;
        out->output_type = OMAP_DISPLAY_TYPE_DPI;
-       out->dispc_channel = dpi_get_channel(dpi, port_num);
-       out->port_num = port_num;
+       out->dispc_channel = dpi_get_channel(dpi);
+       out->of_ports = BIT(port_num);
        out->ops = &dpi_ops;
        out->owner = THIS_MODULE;
 
 
        out->dispc_channel = dsi_get_channel(dsi);
        out->ops = &dsi_ops;
        out->owner = THIS_MODULE;
+       out->of_ports = BIT(0);
 
        omapdss_device_register(out);
 }
 
        out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
        out->ops = &hdmi_ops;
        out->owner = THIS_MODULE;
+       out->of_ports = BIT(0);
 
        omapdss_device_register(out);
 }
 
        out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
        out->ops = &hdmi_ops;
        out->owner = THIS_MODULE;
+       out->of_ports = BIT(0);
 
        omapdss_device_register(out);
 }
 
        /* output instance */
        enum omap_dss_output_id id;
 
-       /* the port number in the DT node */
-       int port_num;
+       /* bitmask of port numbers in DT */
+       unsigned int of_ports;
 };
 
 struct omap_dss_driver {
 
        out->name = "sdi.0";
        out->dispc_channel = OMAP_DSS_CHANNEL_LCD;
        /* We have SDI only on OMAP3, where it's on port 1 */
-       out->port_num = 1;
+       out->of_ports = BIT(1);
        out->ops = &sdi_ops;
        out->owner = THIS_MODULE;
 
 
        out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
        out->ops = &venc_ops;
        out->owner = THIS_MODULE;
+       out->of_ports = BIT(0);
 
        omapdss_device_register(out);
 }