mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Paul Cercueil <paul@crapouillou.net>
To: Christophe Branchereau <cbranchereau@gmail.com>
Cc: David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
	Thierry Reding <thierry.reding@gmail.com>,
	Sam Ravnborg <sam@ravnborg.org>,
	linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org,
	dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v1 3/3] drm/panel : innolux-ej030na and abt-y030xx067a : add .enable and .disable
Date: Mon, 14 Mar 2022 20:54:43 +0000	[thread overview]
Message-ID: <736R8R.46MVQ2VHV6IY1@crapouillou.net> (raw)
In-Reply-To: <CAFsFa85Wb7HcxCqGCYQoSOHOTLJY9xtUHc85PoxO3XTbr=HN4g@mail.gmail.com>

Hi Christophe,

Le lun., mars 7 2022 at 19:12:49 +0100, Christophe Branchereau 
<cbranchereau@gmail.com> a écrit :
> Hi Paul, it should in theory, but doesn't work in practice, the
> display doesn't like having that bit set outside of the init sequence.
> 
> Feel free to experiment if you think you can make it work though, you
> should have that panel on 1 or 2 devices I think.

It does actually work in practice; what probably fails for you is the 
regmap_set_bits(), which causes a spi-read-then-write. Since AFAIK it 
is not possible to read registers from this panel (only write), then 
this does not work.

An easy fix would be to just use REGCACHE_FLAT as the cache type in the 
regmap_config. Then regmap_set_bits() can be used.

Cheers,
-Paul

> 
> KR
> CB
> 
> On Wed, Mar 2, 2022 at 12:22 PM Paul Cercueil <paul@crapouillou.net> 
> wrote:
>> 
>>  Hi Christophe,
>> 
>>  Le mar., mars 1 2022 at 16:31:22 +0100, Christophe Branchereau
>>  <cbranchereau@gmail.com> a écrit :
>>  > Following the introduction of bridge_atomic_enable in the ingenic
>>  > drm driver, the crtc is enabled between .prepare and .enable, if
>>  > it exists.
>>  >
>>  > Add it so the backlight is only enabled after the crtc is, to 
>> avoid
>>  > graphical issues.
>>  >
>>  > Signed-off-by: Christophe Branchereau <cbranchereau@gmail.com>
>>  > ---
>>  >  drivers/gpu/drm/panel/panel-abt-y030xx067a.c  | 23 ++++++++++++--
>>  >  drivers/gpu/drm/panel/panel-innolux-ej030na.c | 31
>>  > ++++++++++++++++---
>>  >  2 files changed, 48 insertions(+), 6 deletions(-)
>>  >
>>  > diff --git a/drivers/gpu/drm/panel/panel-abt-y030xx067a.c
>>  > b/drivers/gpu/drm/panel/panel-abt-y030xx067a.c
>>  > index f043b484055b..b5736344e3ec 100644
>>  > --- a/drivers/gpu/drm/panel/panel-abt-y030xx067a.c
>>  > +++ b/drivers/gpu/drm/panel/panel-abt-y030xx067a.c
>>  > @@ -183,8 +183,6 @@ static int y030xx067a_prepare(struct drm_panel
>>  > *panel)
>>  >               goto err_disable_regulator;
>>  >       }
>>  >
>>  > -     msleep(120);
>>  > -
>>  >       return 0;
>>  >
>>  >  err_disable_regulator:
>>  > @@ -202,6 +200,25 @@ static int y030xx067a_unprepare(struct 
>> drm_panel
>>  > *panel)
>>  >       return 0;
>>  >  }
>>  >
>>  > +static int y030xx067a_enable(struct drm_panel *panel)
>>  > +{
>>  > +     if (panel->backlight) {
>>  > +             /* Wait for the picture to be ready before enabling 
>> backlight */
>>  > +             msleep(120);
>>  > +     }
>>  > +
>>  > +     return 0;
>>  > +}
>>  > +
>>  > +static int y030xx067a_disable(struct drm_panel *panel)
>>  > +{
>>  > +     struct y030xx067a *priv = to_y030xx067a(panel);
>>  > +
>>  > +     regmap_clear_bits(priv->map, 0x06, REG06_XPSAVE);
>> 
>>  Shouldn't that be balanced by a regmap_set_bits() in the .enable()
>>  function?
>> 
>>  Cheers,
>>  -Paul
>> 
>>  > +
>>  > +     return 0;
>>  > +}
>>  > +
>>  >  static int y030xx067a_get_modes(struct drm_panel *panel,
>>  >                               struct drm_connector *connector)
>>  >  {
>>  > @@ -239,6 +256,8 @@ static int y030xx067a_get_modes(struct 
>> drm_panel
>>  > *panel,
>>  >  static const struct drm_panel_funcs y030xx067a_funcs = {
>>  >       .prepare        = y030xx067a_prepare,
>>  >       .unprepare      = y030xx067a_unprepare,
>>  > +     .enable         = y030xx067a_enable,
>>  > +     .disable        = y030xx067a_disable,
>>  >       .get_modes      = y030xx067a_get_modes,
>>  >  };
>>  >
>>  > diff --git a/drivers/gpu/drm/panel/panel-innolux-ej030na.c
>>  > b/drivers/gpu/drm/panel/panel-innolux-ej030na.c
>>  > index c558de3f99be..6de7370185cd 100644
>>  > --- a/drivers/gpu/drm/panel/panel-innolux-ej030na.c
>>  > +++ b/drivers/gpu/drm/panel/panel-innolux-ej030na.c
>>  > @@ -80,8 +80,6 @@ static const struct reg_sequence
>>  > ej030na_init_sequence[] = {
>>  >       { 0x47, 0x08 },
>>  >       { 0x48, 0x0f },
>>  >       { 0x49, 0x0f },
>>  > -
>>  > -     { 0x2b, 0x01 },
>>  >  };
>>  >
>>  >  static int ej030na_prepare(struct drm_panel *panel)
>>  > @@ -109,8 +107,6 @@ static int ej030na_prepare(struct drm_panel
>>  > *panel)
>>  >               goto err_disable_regulator;
>>  >       }
>>  >
>>  > -     msleep(120);
>>  > -
>>  >       return 0;
>>  >
>>  >  err_disable_regulator:
>>  > @@ -128,6 +124,31 @@ static int ej030na_unprepare(struct drm_panel
>>  > *panel)
>>  >       return 0;
>>  >  }
>>  >
>>  > +static int ej030na_enable(struct drm_panel *panel)
>>  > +{
>>  > +     struct ej030na *priv = to_ej030na(panel);
>>  > +
>>  > +     /* standby off */
>>  > +     regmap_write(priv->map, 0x2b, 0x01);
>>  > +
>>  > +     if (panel->backlight) {
>>  > +             /* Wait for the picture to be ready before enabling 
>> backlight */
>>  > +             msleep(120);
>>  > +     }
>>  > +
>>  > +     return 0;
>>  > +}
>>  > +
>>  > +static int ej030na_disable(struct drm_panel *panel)
>>  > +{
>>  > +     struct ej030na *priv = to_ej030na(panel);
>>  > +
>>  > +     /* standby on */
>>  > +     regmap_write(priv->map, 0x2b, 0x00);
>>  > +
>>  > +     return 0;
>>  > +}
>>  > +
>>  >  static int ej030na_get_modes(struct drm_panel *panel,
>>  >                            struct drm_connector *connector)
>>  >  {
>>  > @@ -165,6 +186,8 @@ static int ej030na_get_modes(struct drm_panel
>>  > *panel,
>>  >  static const struct drm_panel_funcs ej030na_funcs = {
>>  >       .prepare        = ej030na_prepare,
>>  >       .unprepare      = ej030na_unprepare,
>>  > +     .enable         = ej030na_enable,
>>  > +     .disable        = ej030na_disable,
>>  >       .get_modes      = ej030na_get_modes,
>>  >  };
>>  >
>>  > --
>>  > 2.34.1
>>  >
>> 
>> 



  reply	other threads:[~2022-03-14 20:55 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-01 15:31 [PATCH v1 0/3] Ingenic DRM bridge_atomic_enable proposal Christophe Branchereau
2022-03-01 15:31 ` [PATCH v1 1/3] drm/ingenic : add ingenic_drm_bridge_atomic_enable Christophe Branchereau
2022-03-01 15:31 ` [PATCH v1 2/3] drm/panel: Add panel driver for NewVision NV3052C based LCDs Christophe Branchereau
2022-03-02 10:38   ` Paul Cercueil
2022-03-01 15:31 ` [PATCH v1 3/3] drm/panel : innolux-ej030na and abt-y030xx067a : add .enable and .disable Christophe Branchereau
2022-03-02 10:40   ` Paul Cercueil
2022-03-07 18:12     ` Christophe Branchereau
2022-03-14 20:54       ` Paul Cercueil [this message]
2022-03-21 13:12         ` Christophe Branchereau

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=736R8R.46MVQ2VHV6IY1@crapouillou.net \
    --to=paul@crapouillou.net \
    --cc=airlied@linux.ie \
    --cc=cbranchereau@gmail.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=sam@ravnborg.org \
    --cc=thierry.reding@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®