From: Archit Taneja <archit@ti.com>
To: "Valkeinen, Tomi" <tomi.valkeinen@ti.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"linux-fbdev@vger.kernel.org" <linux-fbdev@vger.kernel.org>,
"K, Mythri P" <mythripk@ti.com>
Subject: Re: [PATCH 1/8] OMAP: DSS2: DISPC: Fix minimum PCD value
Date: Fri, 02 Sep 2011 06:54:06 +0000 [thread overview]
Message-ID: <4E607D51.8010203@ti.com> (raw)
In-Reply-To: <1314796908-17354-2-git-send-email-tomi.valkeinen@ti.com>
On Wednesday 31 August 2011 06:51 PM, Valkeinen, Tomi wrote:
> The current driver had a hardcoded minimum value of 2 for pixel clock
> divisor (PCD). This doesn't seem to be right.
>
> OMAP4 TRM says that PCD can be 1 when not downscaling, and inverted
> pixel clock (IPC) is off.
>
> OMAP3 TRM says the same, but also in the register descriptions that PCD
> value 1 is invalid.
>
> OMAP2 TRM says PCD 2 is the minimum.
>
> OMAP2 is still untested, but for both OMAP3 and OMAP4 PCD of 1 seems to
> work fine.
>
> This patch adds a new DSS feature, FEAT_PARAM_DSS_PCD, which is used to
> find the minimum and maximum PCD. The minimum is set to 2 for OMAP2, and
> 1 for OMAP3/4.
This looks good to me.
Archit
>
> Signed-off-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/dss/dispc.c | 14 ++++++++++----
> drivers/video/omap2/dss/dss_features.c | 3 +++
> drivers/video/omap2/dss/dss_features.h | 1 +
> 3 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
> index de20936..7f3d847 100644
> --- a/drivers/video/omap2/dss/dispc.c
> +++ b/drivers/video/omap2/dss/dispc.c
> @@ -2339,7 +2339,7 @@ static void dispc_mgr_set_lcd_divisor(enum omap_channel channel, u16 lck_div,
> u16 pck_div)
> {
> BUG_ON(lck_div< 1);
> - BUG_ON(pck_div< 2);
> + BUG_ON(pck_div< 1);
>
> dispc_write_reg(DISPC_DIVISORo(channel),
> FLD_VAL(lck_div, 23, 16) | FLD_VAL(pck_div, 7, 0));
> @@ -2726,11 +2726,17 @@ void dispc_mgr_set_pol_freq(enum omap_channel channel,
> void dispc_find_clk_divs(bool is_tft, unsigned long req_pck, unsigned long fck,
> struct dispc_clock_info *cinfo)
> {
> - u16 pcd_min = is_tft ? 2 : 3;
> + u16 pcd_min, pcd_max;
> unsigned long best_pck;
> u16 best_ld, cur_ld;
> u16 best_pd, cur_pd;
>
> + pcd_min = dss_feat_get_param_min(FEAT_PARAM_DSS_PCD);
> + pcd_max = dss_feat_get_param_max(FEAT_PARAM_DSS_PCD);
> +
> + if (!is_tft)
> + pcd_min = 3;
> +
> best_pck = 0;
> best_ld = 0;
> best_pd = 0;
> @@ -2738,7 +2744,7 @@ void dispc_find_clk_divs(bool is_tft, unsigned long req_pck, unsigned long fck,
> for (cur_ld = 1; cur_ld<= 255; ++cur_ld) {
> unsigned long lck = fck / cur_ld;
>
> - for (cur_pd = pcd_min; cur_pd<= 255; ++cur_pd) {
> + for (cur_pd = pcd_min; cur_pd<= pcd_max; ++cur_pd) {
> unsigned long pck = lck / cur_pd;
> long old_delta = abs(best_pck - req_pck);
> long new_delta = abs(pck - req_pck);
> @@ -2773,7 +2779,7 @@ int dispc_calc_clock_rates(unsigned long dispc_fclk_rate,
> {
> if (cinfo->lck_div> 255 || cinfo->lck_div = 0)
> return -EINVAL;
> - if (cinfo->pck_div< 2 || cinfo->pck_div> 255)
> + if (cinfo->pck_div< 1 || cinfo->pck_div> 255)
> return -EINVAL;
>
> cinfo->lck = dispc_fclk_rate / cinfo->lck_div;
> diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
> index b63c5f8..85b07ca 100644
> --- a/drivers/video/omap2/dss/dss_features.c
> +++ b/drivers/video/omap2/dss/dss_features.c
> @@ -281,6 +281,7 @@ static const char * const omap4_dss_clk_source_names[] = {
>
> static const struct dss_param_range omap2_dss_param_range[] = {
> [FEAT_PARAM_DSS_FCK] = { 0, 173000000 },
> + [FEAT_PARAM_DSS_PCD] = { 2, 255 },
> [FEAT_PARAM_DSIPLL_REGN] = { 0, 0 },
> [FEAT_PARAM_DSIPLL_REGM] = { 0, 0 },
> [FEAT_PARAM_DSIPLL_REGM_DISPC] = { 0, 0 },
> @@ -291,6 +292,7 @@ static const struct dss_param_range omap2_dss_param_range[] = {
>
> static const struct dss_param_range omap3_dss_param_range[] = {
> [FEAT_PARAM_DSS_FCK] = { 0, 173000000 },
> + [FEAT_PARAM_DSS_PCD] = { 1, 255 },
> [FEAT_PARAM_DSIPLL_REGN] = { 0, (1<< 7) - 1 },
> [FEAT_PARAM_DSIPLL_REGM] = { 0, (1<< 11) - 1 },
> [FEAT_PARAM_DSIPLL_REGM_DISPC] = { 0, (1<< 4) - 1 },
> @@ -301,6 +303,7 @@ static const struct dss_param_range omap3_dss_param_range[] = {
>
> static const struct dss_param_range omap4_dss_param_range[] = {
> [FEAT_PARAM_DSS_FCK] = { 0, 186000000 },
> + [FEAT_PARAM_DSS_PCD] = { 1, 255 },
> [FEAT_PARAM_DSIPLL_REGN] = { 0, (1<< 8) - 1 },
> [FEAT_PARAM_DSIPLL_REGM] = { 0, (1<< 12) - 1 },
> [FEAT_PARAM_DSIPLL_REGM_DISPC] = { 0, (1<< 5) - 1 },
> diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
> index 4271e96..158d922 100644
> --- a/drivers/video/omap2/dss/dss_features.h
> +++ b/drivers/video/omap2/dss/dss_features.h
> @@ -73,6 +73,7 @@ enum dss_feat_reg_field {
>
> enum dss_range_param {
> FEAT_PARAM_DSS_FCK,
> + FEAT_PARAM_DSS_PCD,
> FEAT_PARAM_DSIPLL_REGN,
> FEAT_PARAM_DSIPLL_REGM,
> FEAT_PARAM_DSIPLL_REGM_DISPC,
WARNING: multiple messages have this Message-ID (diff)
From: Archit Taneja <archit@ti.com>
To: "Valkeinen, Tomi" <tomi.valkeinen@ti.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"linux-fbdev@vger.kernel.org" <linux-fbdev@vger.kernel.org>,
"K, Mythri P" <mythripk@ti.com>
Subject: Re: [PATCH 1/8] OMAP: DSS2: DISPC: Fix minimum PCD value
Date: Fri, 2 Sep 2011 12:23:05 +0530 [thread overview]
Message-ID: <4E607D51.8010203@ti.com> (raw)
In-Reply-To: <1314796908-17354-2-git-send-email-tomi.valkeinen@ti.com>
On Wednesday 31 August 2011 06:51 PM, Valkeinen, Tomi wrote:
> The current driver had a hardcoded minimum value of 2 for pixel clock
> divisor (PCD). This doesn't seem to be right.
>
> OMAP4 TRM says that PCD can be 1 when not downscaling, and inverted
> pixel clock (IPC) is off.
>
> OMAP3 TRM says the same, but also in the register descriptions that PCD
> value 1 is invalid.
>
> OMAP2 TRM says PCD 2 is the minimum.
>
> OMAP2 is still untested, but for both OMAP3 and OMAP4 PCD of 1 seems to
> work fine.
>
> This patch adds a new DSS feature, FEAT_PARAM_DSS_PCD, which is used to
> find the minimum and maximum PCD. The minimum is set to 2 for OMAP2, and
> 1 for OMAP3/4.
This looks good to me.
Archit
>
> Signed-off-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/dss/dispc.c | 14 ++++++++++----
> drivers/video/omap2/dss/dss_features.c | 3 +++
> drivers/video/omap2/dss/dss_features.h | 1 +
> 3 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
> index de20936..7f3d847 100644
> --- a/drivers/video/omap2/dss/dispc.c
> +++ b/drivers/video/omap2/dss/dispc.c
> @@ -2339,7 +2339,7 @@ static void dispc_mgr_set_lcd_divisor(enum omap_channel channel, u16 lck_div,
> u16 pck_div)
> {
> BUG_ON(lck_div< 1);
> - BUG_ON(pck_div< 2);
> + BUG_ON(pck_div< 1);
>
> dispc_write_reg(DISPC_DIVISORo(channel),
> FLD_VAL(lck_div, 23, 16) | FLD_VAL(pck_div, 7, 0));
> @@ -2726,11 +2726,17 @@ void dispc_mgr_set_pol_freq(enum omap_channel channel,
> void dispc_find_clk_divs(bool is_tft, unsigned long req_pck, unsigned long fck,
> struct dispc_clock_info *cinfo)
> {
> - u16 pcd_min = is_tft ? 2 : 3;
> + u16 pcd_min, pcd_max;
> unsigned long best_pck;
> u16 best_ld, cur_ld;
> u16 best_pd, cur_pd;
>
> + pcd_min = dss_feat_get_param_min(FEAT_PARAM_DSS_PCD);
> + pcd_max = dss_feat_get_param_max(FEAT_PARAM_DSS_PCD);
> +
> + if (!is_tft)
> + pcd_min = 3;
> +
> best_pck = 0;
> best_ld = 0;
> best_pd = 0;
> @@ -2738,7 +2744,7 @@ void dispc_find_clk_divs(bool is_tft, unsigned long req_pck, unsigned long fck,
> for (cur_ld = 1; cur_ld<= 255; ++cur_ld) {
> unsigned long lck = fck / cur_ld;
>
> - for (cur_pd = pcd_min; cur_pd<= 255; ++cur_pd) {
> + for (cur_pd = pcd_min; cur_pd<= pcd_max; ++cur_pd) {
> unsigned long pck = lck / cur_pd;
> long old_delta = abs(best_pck - req_pck);
> long new_delta = abs(pck - req_pck);
> @@ -2773,7 +2779,7 @@ int dispc_calc_clock_rates(unsigned long dispc_fclk_rate,
> {
> if (cinfo->lck_div> 255 || cinfo->lck_div == 0)
> return -EINVAL;
> - if (cinfo->pck_div< 2 || cinfo->pck_div> 255)
> + if (cinfo->pck_div< 1 || cinfo->pck_div> 255)
> return -EINVAL;
>
> cinfo->lck = dispc_fclk_rate / cinfo->lck_div;
> diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
> index b63c5f8..85b07ca 100644
> --- a/drivers/video/omap2/dss/dss_features.c
> +++ b/drivers/video/omap2/dss/dss_features.c
> @@ -281,6 +281,7 @@ static const char * const omap4_dss_clk_source_names[] = {
>
> static const struct dss_param_range omap2_dss_param_range[] = {
> [FEAT_PARAM_DSS_FCK] = { 0, 173000000 },
> + [FEAT_PARAM_DSS_PCD] = { 2, 255 },
> [FEAT_PARAM_DSIPLL_REGN] = { 0, 0 },
> [FEAT_PARAM_DSIPLL_REGM] = { 0, 0 },
> [FEAT_PARAM_DSIPLL_REGM_DISPC] = { 0, 0 },
> @@ -291,6 +292,7 @@ static const struct dss_param_range omap2_dss_param_range[] = {
>
> static const struct dss_param_range omap3_dss_param_range[] = {
> [FEAT_PARAM_DSS_FCK] = { 0, 173000000 },
> + [FEAT_PARAM_DSS_PCD] = { 1, 255 },
> [FEAT_PARAM_DSIPLL_REGN] = { 0, (1<< 7) - 1 },
> [FEAT_PARAM_DSIPLL_REGM] = { 0, (1<< 11) - 1 },
> [FEAT_PARAM_DSIPLL_REGM_DISPC] = { 0, (1<< 4) - 1 },
> @@ -301,6 +303,7 @@ static const struct dss_param_range omap3_dss_param_range[] = {
>
> static const struct dss_param_range omap4_dss_param_range[] = {
> [FEAT_PARAM_DSS_FCK] = { 0, 186000000 },
> + [FEAT_PARAM_DSS_PCD] = { 1, 255 },
> [FEAT_PARAM_DSIPLL_REGN] = { 0, (1<< 8) - 1 },
> [FEAT_PARAM_DSIPLL_REGM] = { 0, (1<< 12) - 1 },
> [FEAT_PARAM_DSIPLL_REGM_DISPC] = { 0, (1<< 5) - 1 },
> diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
> index 4271e96..158d922 100644
> --- a/drivers/video/omap2/dss/dss_features.h
> +++ b/drivers/video/omap2/dss/dss_features.h
> @@ -73,6 +73,7 @@ enum dss_feat_reg_field {
>
> enum dss_range_param {
> FEAT_PARAM_DSS_FCK,
> + FEAT_PARAM_DSS_PCD,
> FEAT_PARAM_DSIPLL_REGN,
> FEAT_PARAM_DSIPLL_REGM,
> FEAT_PARAM_DSIPLL_REGM_DISPC,
next prev parent reply other threads:[~2011-09-02 6:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-31 13:21 [PATCH 0/8] OMAP: DSS2: misc improvements Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 1/8] OMAP: DSS2: DISPC: Fix minimum PCD value Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-09-02 6:53 ` Archit Taneja [this message]
2011-09-02 6:54 ` Archit Taneja
2011-08-31 13:21 ` [PATCH 2/8] OMAP: DSS2: HDMI: use default dividers Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 3/8] OMAP: DSS2: HDMI: change regn definition Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 4/8] OMAP: DSS2: DSI: Add comment about regn Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 5/8] OMAP: DSS2: DISPC: Add missing IRQ definitions Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 6/8] OMAP: DSS2: add dss_get_hdmi_venc_clk_source() Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 7/8] OMAP: DSS2: DISPC: improve dispc_mgr_enable_digit_out() Tomi Valkeinen
2011-08-31 13:21 ` Tomi Valkeinen
2011-08-31 13:21 ` [PATCH 8/8] OMAP: DSS2: HDMI: fix hdmi output enable Tomi Valkeinen
2011-08-31 13:21 ` 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=4E607D51.8010203@ti.com \
--to=archit@ti.com \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=mythripk@ti.com \
--cc=tomi.valkeinen@ti.com \
/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.