@@ -169,6 +169,7 @@ static int tvc_probe(struct platform_device *pdev)
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);
@@ -389,6 +389,7 @@ static int dvic_probe(struct platform_device *pdev)
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);
@@ -349,6 +349,7 @@ static int hdmic_probe(struct platform_device *pdev)
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);
@@ -167,6 +167,7 @@ static int opa362_probe(struct platform_device *pdev)
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);
@@ -190,7 +190,7 @@ static int tfp410_probe(struct platform_device *pdev)
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);
@@ -299,7 +299,7 @@ static int tpd_probe(struct platform_device *pdev)
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);
@@ -217,6 +217,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
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);
@@ -1324,6 +1324,7 @@ static int dsicm_probe(struct platform_device *pdev)
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;
@@ -269,6 +269,7 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
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);
@@ -292,6 +292,7 @@ static int nec_8048_probe(struct spi_device *spi)
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);
@@ -268,6 +268,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
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);
@@ -797,6 +797,7 @@ static int acx565akm_probe(struct spi_device *spi)
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);
@@ -393,6 +393,7 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
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);
@@ -535,6 +535,7 @@ static int tpo_td043_probe(struct spi_device *spi)
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);
@@ -118,7 +118,7 @@ struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
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);
}
@@ -39,6 +39,7 @@ struct dpi_data {
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;
@@ -413,7 +414,7 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
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;
@@ -609,7 +610,7 @@ static void dpi_init_pll(struct dpi_data *dpi)
* 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:
@@ -617,7 +618,7 @@ static enum omap_channel dpi_get_channel(struct dpi_data *dpi, int port_num)
return OMAP_DSS_CHANNEL_LCD;
case DSS_MODEL_DRA7:
- switch (port_num) {
+ switch (dpi->id) {
case 2:
return OMAP_DSS_CHANNEL_LCD3;
case 1:
@@ -690,12 +691,10 @@ static const struct omap_dss_device_ops dpi_ops = {
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:
@@ -713,8 +712,8 @@ static void dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
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;
@@ -4994,6 +4994,7 @@ static void dsi_init_output(struct dsi_data *dsi)
out->dispc_channel = dsi_get_channel(dsi);
out->ops = &dsi_ops;
out->owner = THIS_MODULE;
+ out->of_ports = BIT(0);
omapdss_device_register(out);
}
@@ -564,6 +564,7 @@ static void hdmi_init_output(struct omap_hdmi *hdmi)
out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
out->ops = &hdmi_ops;
out->owner = THIS_MODULE;
+ out->of_ports = BIT(0);
omapdss_device_register(out);
}
@@ -555,6 +555,7 @@ static void hdmi_init_output(struct omap_hdmi *hdmi)
out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
out->ops = &hdmi_ops;
out->owner = THIS_MODULE;
+ out->of_ports = BIT(0);
omapdss_device_register(out);
}
@@ -423,8 +423,8 @@ struct omap_dss_device {
/* 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 {
@@ -327,7 +327,7 @@ static void sdi_init_output(struct sdi_device *sdi)
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;
@@ -767,6 +767,7 @@ static void venc_init_output(struct venc_device *venc)
out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
out->ops = &venc_ops;
out->owner = THIS_MODULE;
+ out->of_ports = BIT(0);
omapdss_device_register(out);
}