[PATCH v2 35/60] drm/omap: dss: Replace omap_dss_device port number with bitmask
Sebastian Reichel
sre at kernel.org
Sun Jun 10 21:00:23 UTC 2018
Hi,
On Sat, May 26, 2018 at 08:24:53PM +0300, Laurent Pinchart wrote:
> The omap_dss_device port_num field stores the DT port number associated
> with the device. The field is used in different ways depending on the
> device type:
>
> - For DPI outputs, the port number is used as an identifier of the DPI
> instance
>
> - For sources, the port number is used to look up the omap_dss_device by
> DT port node
>
> As omap_dss_device instances are only looked up as sources by sinks,
> setting the field to the number of the source port works for both use
> cases.
>
> However, to enable looking up sinks, we need to record all the ports
> associated with an omap_dss_device. Do so by turning the port_num field
> into an of_ports bitmask. For DPI outputs the port number is
> additionally stored in the dpi_data structure as the output ID.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.co.uk>
-- Sebastian
> .../gpu/drm/omapdrm/displays/connector-analog-tv.c | 1 +
> drivers/gpu/drm/omapdrm/displays/connector-dvi.c | 1 +
> drivers/gpu/drm/omapdrm/displays/connector-hdmi.c | 1 +
> drivers/gpu/drm/omapdrm/displays/encoder-opa362.c | 1 +
> drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c | 2 +-
> drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c | 2 +-
> drivers/gpu/drm/omapdrm/displays/panel-dpi.c | 1 +
> drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 1 +
> .../drm/omapdrm/displays/panel-lgphilips-lb035q02.c | 1 +
> .../gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c | 1 +
> .../drm/omapdrm/displays/panel-sharp-ls037v7dw01.c | 1 +
> .../gpu/drm/omapdrm/displays/panel-sony-acx565akm.c | 1 +
> .../gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c | 1 +
> .../gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c | 1 +
> drivers/gpu/drm/omapdrm/dss/base.c | 2 +-
> drivers/gpu/drm/omapdrm/dss/dpi.c | 19 +++++++++----------
> drivers/gpu/drm/omapdrm/dss/dsi.c | 1 +
> drivers/gpu/drm/omapdrm/dss/hdmi4.c | 1 +
> drivers/gpu/drm/omapdrm/dss/hdmi5.c | 1 +
> drivers/gpu/drm/omapdrm/dss/omapdss.h | 4 ++--
> drivers/gpu/drm/omapdrm/dss/sdi.c | 2 +-
> drivers/gpu/drm/omapdrm/dss/venc.c | 1 +
> 22 files changed, 31 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
> index f7250db0f3b7..b960c4d0e84d 100644
> --- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
> +++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
> index b4f84baff144..8ff674bf75e6 100644
> --- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
> +++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
> index 2f8ae93c117a..2afaa2ca602b 100644
> --- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
> +++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
> index 4d7f4dae2c10..eb0ebb850114 100644
> --- a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
> +++ b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
> @@ -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);
>
> diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> index 833544d8502f..fb767d674297 100644
> --- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> +++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> @@ -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);
>
> diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
> index 3a3c36fef446..cd6da0e8f76a 100644
> --- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
> +++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
> @@ -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);
>
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
> index 43df4f7c38f0..97ebfb51192e 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
> index 6090447b66a1..92f521930c2c 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
> @@ -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;
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> index 5c26e1d19655..46ca37dd9205 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> index 6c30b2078a0e..fec2de915200 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> index fb40d2c705e5..0ff8f00a95cb 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> index a35d4407f2b0..8d2bf114f47e 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> index d887f12c021c..38d87a276261 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> index 6d333b0aea18..c30b0809012a 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> @@ -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);
> diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
> index 7f9d8a8be8c3..96be800a0f25 100644
> --- a/drivers/gpu/drm/omapdrm/dss/base.c
> +++ b/drivers/gpu/drm/omapdrm/dss/base.c
> @@ -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);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
> index 3fbed21d69a6..8a7c951a413c 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dpi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
> @@ -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;
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
> index 90820402e81f..b3e50d8a7477 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dsi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
> @@ -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);
> }
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> index fa818033f3f3..bf800cede2ad 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> @@ -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);
> }
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> index ef4a48f397d2..e5d23dd19f99 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> @@ -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);
> }
> diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> index 121bc953ba31..c2d9ebdec3d1 100644
> --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
> +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> @@ -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 {
> diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
> index 76842ca4a619..fd5320041911 100644
> --- a/drivers/gpu/drm/omapdrm/dss/sdi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
> @@ -324,7 +324,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;
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
> index bed7fcb35d89..47985549a81c 100644
> --- a/drivers/gpu/drm/omapdrm/dss/venc.c
> +++ b/drivers/gpu/drm/omapdrm/dss/venc.c
> @@ -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);
> }
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180610/ef2f4d64/attachment-0001.sig>
More information about the dri-devel
mailing list