All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrzej Hajda <a.hajda@samsung.com>
To: Ajay kumar <ajaynumb@gmail.com>
Cc: "open list:OPEN FIRMWARE AND..." <devicetree@vger.kernel.org>,
	"linux-samsung-soc@vger.kernel.org"
	<linux-samsung-soc@vger.kernel.org>,
	Sean Paul <seanpaul@google.com>, sunil joshi <joshi@samsung.com>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	Prashanth G <prashanth.g@samsung.com>,
	Ajay Kumar <ajaykumar.rs@samsung.com>
Subject: Re: [PATCH V3 1/7] drm/exynos: Support DP CLKCON register in FIMD driver
Date: Fri, 27 Jun 2014 14:44:36 +0200	[thread overview]
Message-ID: <53AD6734.9080909@samsung.com> (raw)
In-Reply-To: <CAEC9eQMXEEq_VBiZY+BHUuVWvbi7q4MkbbQ-XkcigtZBdgwO9w@mail.gmail.com>

On 06/27/2014 01:48 PM, Ajay kumar wrote:
> Hi Andrej,
>
> On Fri, Jun 27, 2014 at 4:52 PM, Andrzej Hajda <a.hajda@samsung.com> wrote:
>> Hi Ajay,
>>
>> +CC DT
>>
>> On 06/27/2014 12:12 PM, Ajay Kumar wrote:
>>> Add the missing setting for DP CLKCON register.
>>>
>>> This register is present on Exynos5 based FIMD controllers,
>>> and needs to be set if we are using DP.
>>>
>>> Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com>
>>> ---
>>>  .../devicetree/bindings/video/samsung-fimd.txt     |    1 +
>>>  drivers/gpu/drm/exynos/exynos_drm_fimd.c           |   23 ++++++++++++++++++++
>>>  include/video/samsung_fimd.h                       |    4 ++++
>>>  3 files changed, 28 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/video/samsung-fimd.txt b/Documentation/devicetree/bindings/video/samsung-fimd.txt
>>> index 2dad41b..12f3d7a 100644
>>> --- a/Documentation/devicetree/bindings/video/samsung-fimd.txt
>>> +++ b/Documentation/devicetree/bindings/video/samsung-fimd.txt
>>> @@ -41,6 +41,7 @@ Optional Properties:
>>>  - samsung,power-domain: a phandle to FIMD power domain node.
>>>  - samsung,invert-vden: video enable signal is inverted
>>>  - samsung,invert-vclk: video clock signal is inverted
>>> +- samsung,output-type: Type of display output interface(DPI=0, DSI=1, DP=2)
>> There is no point in introducing this property. Exynos DRM have already
>> logic which creates pipeline: fimd --> DPI|DSI|DP, this logic can be
>> reused to determine display type. It can be done even without any
>> additional callbacks, just by checking if there is connector of
>> DRM_MODE_CONNECTOR_eDP type connected to fimd.
> The mapping between crtc(struct exynos_drm_manager) and encoder(struct
> exynos_drm_display)
> in exynos drm happens by matching the exynos_drm_output_type variable in each
> structure.
> exynos_drm_output_type supports 3 types: LCD, HDMI and VIDI.
> FIMD statically chooses EXYNOS_DISPLAY_TYPE_LCD as the output type,
> and both DP and MIPI statically choose the same enum EXYNOS_DISPLAY_TYPE_LCD,
> as output type.
> So, we cannot use that logic to differentiate between DP/MIPI DSI.
>
> Also, checking based on connector type doesn't hold good.
> The connector type will be DRM_MODE_CONNECTOR_LVDS in case of
> DP->LVDS or MIPI->LVDS panels!

True, I forgot about bridges. So additional callback/field is necessary.
See below.

>
> Thanks and regards,
> Ajay Kumar
>
>> Regards
>> Andrzej
>>
>>>  - display-timings: timing settings for FIMD, as described in document [1].
>>>               Can be used in case timings cannot be provided otherwise
>>>               or to override timings provided by the panel.
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> index 33161ad..aa74e90 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> @@ -72,6 +72,7 @@ struct fimd_driver_data {
>>>       unsigned int has_shadowcon:1;
>>>       unsigned int has_clksel:1;
>>>       unsigned int has_limited_fmt:1;
>>> +     unsigned int has_dp_clkcon:1;
>>>  };
>>>
>>>  static struct fimd_driver_data s3c64xx_fimd_driver_data = {
>>> @@ -88,6 +89,13 @@ static struct fimd_driver_data exynos4_fimd_driver_data = {
>>>  static struct fimd_driver_data exynos5_fimd_driver_data = {
>>>       .timing_base = 0x20000,
>>>       .has_shadowcon = 1,
>>> +     .has_dp_clkcon = 1,
>>> +};
>>> +
>>> +enum exynos_fimd_output_type {
>>> +     EXYNOS_FIMD_OUTPUT_DPI,
>>> +     EXYNOS_FIMD_OUTPUT_DSI,
>>> +     EXYNOS_FIMD_OUTPUT_DP,
>>>  };
>>>
>>>  struct fimd_win_data {
>>> @@ -125,6 +133,8 @@ struct fimd_context {
>>>       struct exynos_drm_panel_info panel;
>>>       struct fimd_driver_data *driver_data;
>>>       struct exynos_drm_display *display;
>>> +
>>> +     enum exynos_fimd_output_type exynos_fimd_output_type;
>>>  };
>>>
>>>  static const struct of_device_id fimd_driver_dt_match[] = {
>>> @@ -331,6 +341,10 @@ static void fimd_commit(struct exynos_drm_manager *mgr)
>>>       if (clkdiv > 1)
>>>               val |= VIDCON0_CLKVAL_F(clkdiv - 1) | VIDCON0_CLKDIR;
>>>
>>> +     if (ctx->driver_data->has_dp_clkcon &&
>>> +             ctx->exynos_fimd_output_type == EXYNOS_FIMD_OUTPUT_DP)
>>> +             writel(DP_CLK_ENABLE, ctx->regs + DP_CLKCON);
>>> +
>>>       writel(val, ctx->regs + VIDCON0);

New code should not split VIDCON0 related code. It should be moved few
lines above or few lines below.
Anyway this code should be rather placed in power related functions of
dp encoder, as it enables dp. The only question
is if DP_CLKCON update can be performed after VIDCON0 update. If yes the
solution of the whole problem
seems to be simple:
- fimd should provide function fimd_set_dp_clk_gate or sth similar,
- this function should be called in exynos_dp_poweron/exynos_dp_poweroff.
I hope I have not missed anything this time.

Regards
Andrzej


>>>  }
>>>
>>> @@ -924,6 +938,7 @@ static int fimd_probe(struct platform_device *pdev)
>>>       struct device *dev = &pdev->dev;
>>>       struct fimd_context *ctx;
>>>       struct resource *res;
>>> +     u32 fimd_output_type;
>>>       int ret = -EINVAL;
>>>
>>>       ret = exynos_drm_component_add(&pdev->dev, EXYNOS_DEVICE_TYPE_CRTC,
>>> @@ -949,6 +964,14 @@ static int fimd_probe(struct platform_device *pdev)
>>>               ctx->vidcon1 |= VIDCON1_INV_VDEN;
>>>       if (of_property_read_bool(dev->of_node, "samsung,invert-vclk"))
>>>               ctx->vidcon1 |= VIDCON1_INV_VCLK;
>>> +     if (!of_property_read_u32(dev->of_node, "samsung,output-type",
>>> +                             &fimd_output_type)) {
>>> +             if ((fimd_output_type < EXYNOS_FIMD_OUTPUT_DPI) ||
>>> +                 (fimd_output_type > EXYNOS_FIMD_OUTPUT_DP))
>>> +                     dev_err(dev, "invalid output type for FIMD\n");
>>> +             else
>>> +                     ctx->exynos_fimd_output_type = fimd_output_type;
>>> +     }
>>>
>>>       ctx->bus_clk = devm_clk_get(dev, "fimd");
>>>       if (IS_ERR(ctx->bus_clk)) {
>>> diff --git a/include/video/samsung_fimd.h b/include/video/samsung_fimd.h
>>> index b039320..d8f4b0b 100644
>>> --- a/include/video/samsung_fimd.h
>>> +++ b/include/video/samsung_fimd.h
>>> @@ -435,6 +435,10 @@
>>>  #define BLENDCON_NEW_8BIT_ALPHA_VALUE                (1 << 0)
>>>  #define BLENDCON_NEW_4BIT_ALPHA_VALUE                (0 << 0)
>>>
>>> +/* Video clock enable for DP */
>>> +#define DP_CLKCON                            0x27C
>>> +#define DP_CLK_ENABLE                                0x2
>>> +
>>>  /* Notes on per-window bpp settings
>>>   *
>>>   * Value     Win0     Win1     Win2     Win3     Win 4
>>>

  reply	other threads:[~2014-06-27 12:44 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-27 10:12 [PATCH V3 0/7] drm/exynos: Support DP CLKCON register in FIMD driver Ajay Kumar
2014-06-27 10:12 ` [PATCH V3 1/7] " Ajay Kumar
2014-06-27 10:28   ` Jingoo Han
2014-06-27 11:22   ` Andrzej Hajda
2014-06-27 11:48     ` Ajay kumar
2014-06-27 12:44       ` Andrzej Hajda [this message]
2014-06-27 13:02         ` Ajay kumar
2014-06-27 13:09           ` Tomasz Figa
2014-06-30  1:14           ` Jingoo Han
2014-06-30  5:31             ` Andrzej Hajda
2014-06-30  9:01               ` Ajay kumar
2014-06-30 16:09               ` Inki Dae
2014-07-09  6:21                 ` Ajay kumar
2014-06-27 10:12 ` [PATCH V3 2/7] ARM: dts: Add FIMD output property for snow Ajay Kumar
2014-06-27 11:17   ` Ajay kumar
2014-06-27 10:12 ` [PATCH V3 3/7] ARM: dts: Add FIMD output property for peach_pit Ajay Kumar
2014-06-27 11:17   ` Ajay kumar
2014-06-27 10:12 ` [PATCH V3 4/7] ARM: dts: Add FIMD output property for peach_pi Ajay Kumar
2014-06-27 11:17   ` Ajay kumar
2014-06-27 10:12 ` [PATCH V3 5/7] ARM: dts: Add FIMD output property for smdk5250 Ajay Kumar
2014-06-27 11:18   ` Ajay kumar
2014-06-27 10:12 ` [PATCH V3 6/7] ARM: dts: Add FIMD output property for smdk5420 Ajay Kumar
2014-06-27 11:18   ` Ajay kumar
2014-06-27 10:12 ` [PATCH V3 7/7] ARM: dts: Add FIMD output property for arndale Ajay Kumar
2014-06-27 11:18   ` Ajay kumar
2014-06-27 10:24 ` [PATCH V3 0/7] drm/exynos: Support DP CLKCON register in FIMD driver Inki Dae
2014-06-27 10:49   ` Mark Rutland

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=53AD6734.9080909@samsung.com \
    --to=a.hajda@samsung.com \
    --cc=ajaykumar.rs@samsung.com \
    --cc=ajaynumb@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=joshi@samsung.com \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=prashanth.g@samsung.com \
    --cc=seanpaul@google.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.