From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: Archit Taneja <archit@ti.com>
Cc: linux-omap@vger.kernel.org
Subject: Re: [RFC v2 1/5] OMAPDSS: DSS: init dss ports cleanly
Date: Tue, 27 May 2014 11:24:41 +0300 [thread overview]
Message-ID: <53844BC9.3060307@ti.com> (raw)
In-Reply-To: <1401096492-1405-1-git-send-email-archit@ti.com>
[-- Attachment #1: Type: text/plain, Size: 6401 bytes --]
On 26/05/14 12:28, Archit Taneja wrote:
> The init/uninit port functions are used to set up the DPI and SDI outputs under
> the dss platform device. A 'reg' property is used to determine whether the node
> is DPI or SDI for OMAP34xx DSS revision. For other DSS revisions, only DPI
> output exists.
>
> For multiple DPI output instances(introduced in DRA7xx DSS), we would use the
> 'reg' property in dts to specify the DPI output instance.
>
> The current functions work fine if there is only one DPI output instance in
> DSS. For multiple DPI instances, it would get complicated to figure out whether
> 'reg' is used to specify whether the output is SDI, or another DPI instance.
>
> We create a list of port types supported for each DSS rev, with the index of the
> port in the list matching the reg id. This allows us to have a more generic way
> to init/uninit ports within DSS, and support multiple DPI ports.
>
> Also, make the uninit_port functions iterative since we will have multiple DPI
> ports to uninit in the future.
>
> Signed-off-by: Archit Taneja <archit@ti.com>
> ---
> drivers/video/fbdev/omap2/dss/dpi.c | 2 +-
> drivers/video/fbdev/omap2/dss/dss.c | 84 ++++++++++++++++++++++++++++++-------
> drivers/video/fbdev/omap2/dss/dss.h | 27 +++++++++++-
> drivers/video/fbdev/omap2/dss/sdi.c | 2 +-
> 4 files changed, 97 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/video/fbdev/omap2/dss/dpi.c b/drivers/video/fbdev/omap2/dss/dpi.c
> index 9368972..8593567 100644
> --- a/drivers/video/fbdev/omap2/dss/dpi.c
> +++ b/drivers/video/fbdev/omap2/dss/dpi.c
> @@ -769,7 +769,7 @@ err_datalines:
> return r;
> }
>
> -void __exit dpi_uninit_port(void)
> +void __exit dpi_uninit_port(struct device_node *port)
> {
> if (!dpi.port_initialized)
> return;
> diff --git a/drivers/video/fbdev/omap2/dss/dss.c b/drivers/video/fbdev/omap2/dss/dss.c
> index 6daeb7e..54a84f4 100644
> --- a/drivers/video/fbdev/omap2/dss/dss.c
> +++ b/drivers/video/fbdev/omap2/dss/dss.c
> @@ -70,6 +70,8 @@ struct dss_features {
> u8 fck_div_max;
> u8 dss_fck_multiplier;
> const char *parent_clk_name;
> + enum omap_display_type *ports;
> + int num_ports;
> int (*dpi_select_source)(enum omap_channel channel);
> };
>
> @@ -689,6 +691,22 @@ void dss_debug_dump_clocks(struct seq_file *s)
> }
> #endif
>
> +
> +static enum omap_display_type omap2plus_ports[] = {
> +#ifdef CONFIG_OMAP2_DSS_DPI
> + OMAP_DISPLAY_TYPE_DPI,
> +#endif
> +};
> +
> +static enum omap_display_type omap34xx_ports[] = {
> +#ifdef CONFIG_OMAP2_DSS_DPI
> + OMAP_DISPLAY_TYPE_DPI,
> +#endif
> +#ifdef CONFIG_OMAP2_DSS_DSI
> + OMAP_DISPLAY_TYPE_SDI,
> +#endif
> +};
If you do this, then if you disable DPI from kernel config, the port
indexes change. The above should reflect the hardware, not which drivers
the user has enabled in the kernel.
Also, you used DSI above, not SDI.
> static const struct dss_features omap24xx_dss_feats __initconst = {
> /*
> * fck div max is really 16, but the divider range has gaps. The range
> @@ -698,6 +716,8 @@ static const struct dss_features omap24xx_dss_feats __initconst = {
> .dss_fck_multiplier = 2,
> .parent_clk_name = "core_ck",
> .dpi_select_source = &dss_dpi_select_source_omap2_omap3,
> + .ports = omap2plus_ports,
> + .num_ports = ARRAY_SIZE(omap2plus_ports),
> };
>
> static const struct dss_features omap34xx_dss_feats __initconst = {
> @@ -705,6 +725,8 @@ static const struct dss_features omap34xx_dss_feats __initconst = {
> .dss_fck_multiplier = 2,
> .parent_clk_name = "dpll4_ck",
> .dpi_select_source = &dss_dpi_select_source_omap2_omap3,
> + .ports = omap34xx_ports,
> + .num_ports = ARRAY_SIZE(omap34xx_ports),
> };
>
> static const struct dss_features omap3630_dss_feats __initconst = {
> @@ -712,6 +734,8 @@ static const struct dss_features omap3630_dss_feats __initconst = {
> .dss_fck_multiplier = 1,
> .parent_clk_name = "dpll4_ck",
> .dpi_select_source = &dss_dpi_select_source_omap2_omap3,
> + .ports = omap2plus_ports,
> + .num_ports = ARRAY_SIZE(omap2plus_ports),
> };
>
> static const struct dss_features omap44xx_dss_feats __initconst = {
> @@ -719,6 +743,8 @@ static const struct dss_features omap44xx_dss_feats __initconst = {
> .dss_fck_multiplier = 1,
> .parent_clk_name = "dpll_per_x2_ck",
> .dpi_select_source = &dss_dpi_select_source_omap4,
> + .ports = omap2plus_ports,
> + .num_ports = ARRAY_SIZE(omap2plus_ports),
> };
>
> static const struct dss_features omap54xx_dss_feats __initconst = {
> @@ -726,6 +752,8 @@ static const struct dss_features omap54xx_dss_feats __initconst = {
> .dss_fck_multiplier = 1,
> .parent_clk_name = "dpll_per_x2_ck",
> .dpi_select_source = &dss_dpi_select_source_omap5,
> + .ports = omap2plus_ports,
> + .num_ports = ARRAY_SIZE(omap2plus_ports),
> };
>
> static const struct dss_features am43xx_dss_feats __initconst = {
> @@ -733,6 +761,8 @@ static const struct dss_features am43xx_dss_feats __initconst = {
> .dss_fck_multiplier = 0,
> .parent_clk_name = NULL,
> .dpi_select_source = &dss_dpi_select_source_omap2_omap3,
> + .ports = omap2plus_ports,
> + .num_ports = ARRAY_SIZE(omap2plus_ports),
> };
>
> static int __init dss_init_features(struct platform_device *pdev)
> @@ -798,6 +828,9 @@ static int __init dss_init_ports(struct platform_device *pdev)
> if (!port)
> return 0;
>
> + if (dss.feat->num_ports == 0)
> + return 0;
> +
> do {
> u32 reg;
>
> @@ -805,30 +838,53 @@ static int __init dss_init_ports(struct platform_device *pdev)
> if (r)
> reg = 0;
>
> -#ifdef CONFIG_OMAP2_DSS_DPI
> - if (reg == 0)
> + if (reg > dss.feat->num_ports - 1)
> + continue;
Maybe matter of taste, but I like (reg >= dss.feat_num_ports) more.
> +
> + if (dss.feat->ports[reg] == OMAP_DISPLAY_TYPE_DPI)
> dpi_init_port(pdev, port);
> -#endif
>
> -#ifdef CONFIG_OMAP2_DSS_SDI
> - if (reg == 1)
> + if (dss.feat->ports[reg] == OMAP_DISPLAY_TYPE_SDI)
> sdi_init_port(pdev, port);
> -#endif
Maybe the above could be something like this in pseudo code:
port_type = dss.feat->ports[reg];
switch (port_type) {
case OMAP_DISPLAY_TYPE_DPI:
dpi_init_port(pdev, port);
break;
...
}
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-05-27 8:24 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-08 9:15 [RFC 1/6] omapdss: remove check for simpler port/endpoint binding Archit Taneja
2014-05-08 9:27 ` Archit Taneja
2014-05-08 9:15 ` [RFC 2/6] omapdss: add init port functions for different omap revs Archit Taneja
2014-05-08 9:27 ` Archit Taneja
2014-05-20 8:04 ` Tomi Valkeinen
2014-05-20 8:04 ` Tomi Valkeinen
2014-05-20 9:31 ` Archit Taneja
2014-05-20 9:43 ` Archit Taneja
2014-05-08 9:15 ` [RFC 3/6] omapdss: DT: Get source endpoint by matching reg-id Archit Taneja
2014-05-08 9:27 ` Archit Taneja
2014-05-08 9:15 ` [RFC 4/6] omapdss: DPI: support multiple DPI instances Archit Taneja
2014-05-08 9:27 ` Archit Taneja
2014-05-08 9:15 ` [RFC 5/6] omapdss: DPI: make dpi_get_channel take DPI reg-id Archit Taneja
2014-05-08 9:27 ` Archit Taneja
2014-05-08 9:15 ` [RFC 6/6] omapdss: DSS: add reg-id param to dpi_select_source Archit Taneja
2014-05-08 9:27 ` Archit Taneja
2014-05-09 9:59 ` [RFC 1/6] omapdss: remove check for simpler port/endpoint binding Tomi Valkeinen
2014-05-09 9:59 ` Tomi Valkeinen
2014-05-26 9:28 ` [RFC v2 1/5] OMAPDSS: DSS: init dss ports cleanly Archit Taneja
2014-05-26 9:28 ` [RFC v2 2/5] OMAPDSS: DT: Get source endpoint by matching reg-id Archit Taneja
2014-05-27 8:34 ` Tomi Valkeinen
2014-05-27 9:49 ` Archit Taneja
2014-05-27 10:24 ` Tomi Valkeinen
2014-05-27 10:51 ` Archit Taneja
2014-05-26 9:28 ` [RFC v2 3/5] OMAPDSS: DPI: support multiple DPI instances Archit Taneja
2014-05-27 9:04 ` Tomi Valkeinen
2014-05-27 9:27 ` Archit Taneja
2014-05-26 9:28 ` [RFC v2 4/5] OMAPDSS: DPI: make dpi_get_channel take DPI reg-id Archit Taneja
2014-05-26 9:28 ` [RFC v2 5/5] OMAPDSS: DSS: add reg-id param to dpi_select_source Archit Taneja
2014-05-27 8:24 ` Tomi Valkeinen [this message]
2014-05-27 11:42 ` [RFC v2 1/5] OMAPDSS: DSS: init dss ports cleanly Archit Taneja
2014-06-04 6:40 ` [PATCH v3 0/7] OMAPDSS: Support multiple DPI instances Archit Taneja
2014-06-04 6:52 ` Archit Taneja
2014-06-04 6:40 ` [PATCH v3 1/7] OMAPDSS: DPI: Use DPI driver data Archit Taneja
2014-06-04 6:52 ` Archit Taneja
2014-06-04 6:40 ` [PATCH v3 2/7] OMAPDSS: DPI: Allocate " Archit Taneja
2014-06-04 6:52 ` Archit Taneja
2014-06-04 6:40 ` [PATCH v3 3/7] OMAPDSS: DPI: Store dpi_data pointer in the DT port's data Archit Taneja
2014-06-04 6:52 ` Archit Taneja
2014-06-04 6:41 ` [PATCH v3 4/7] OMAPDSS: DSS: init dss ports cleanly Archit Taneja
2014-06-04 6:53 ` Archit Taneja
2014-06-26 12:16 ` Tomi Valkeinen
2014-06-26 12:16 ` Tomi Valkeinen
2014-06-04 6:41 ` [PATCH v3 5/7] OMAPDSS: DT: Get source endpoint by matching reg-id Archit Taneja
2014-06-04 6:53 ` Archit Taneja
2014-06-04 6:41 ` [PATCH v3 6/7] OMAPDSS: DPI: Add support for multiple instances Archit Taneja
2014-06-04 6:53 ` Archit Taneja
2014-06-26 12:15 ` Tomi Valkeinen
2014-06-26 12:15 ` Tomi Valkeinen
2014-06-04 6:41 ` [PATCH v3 7/7] omapdss: DSS: add reg-id param to dpi_select_source Archit Taneja
2014-06-04 6:53 ` Archit Taneja
2014-06-26 12:28 ` [PATCH v3 0/7] OMAPDSS: Support multiple DPI instances Tomi Valkeinen
2014-06-26 12:28 ` Tomi Valkeinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53844BC9.3060307@ti.com \
--to=tomi.valkeinen@ti.com \
--cc=archit@ti.com \
--cc=linux-omap@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.