linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Andrey Lebedev <andrey.lebedev@gmail.com>
Cc: airlied@linux.ie, linux-sunxi@googlegroups.com,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Andrey Lebedev <andrey@lebedev.lt>,
	wens@csie.org, daniel@ffwll.ch,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 2/2] ARM: sun7i: dts: Add LVDS panel support on A20
Date: Mon, 17 Feb 2020 18:51:35 +0100	[thread overview]
Message-ID: <20200217175135.ldtqji4mrwz2wbn5@gilmour.lan> (raw)
In-Reply-To: <20200214213231.GA6583@kedthinkpad>


[-- Attachment #1.1: Type: text/plain, Size: 5590 bytes --]

Hi Andrey,

On Fri, Feb 14, 2020 at 11:32:31PM +0200, Andrey Lebedev wrote:
> On Fri, Feb 14, 2020 at 09:53:51AM +0100, Maxime Ripard wrote:
> > On Fri, Feb 14, 2020 at 10:43:58AM +0200, Andrey Lebedev wrote:
> > > On Fri, Feb 14, 2020 at 08:52:18AM +0100, Maxime Ripard wrote:
> > > > > > This will create a spurious warning message for TCON1, since we
> > > > > > adjusted the driver to tell it supports LVDS, but there's no LVDS
> > > > > > reset line, so we need to make it finer grained.
> > > > >
> > > > > Yes, I can attribute two of the messages in my dmesg log [1] to this
> > > > > ("Missing LVDS properties" and "LVDS output disabled". "sun4i-tcon
> > > > > 1c0d000.lcd-controller" is indeed tcon1). And yes, I can see how they
> > > > > can be confusing to someone.
> > > > >
> > > > > I'd need some pointers on how to deal with that though (if we want to do
> > > > > it in this scope).
> > > >
> > > > Like I was mentionning, you could introduce a new compatible for each
> > > > TCON (tcon0 and tcon1) and only set the support_lvds flag for tcon0
> > >
> > > Can you give me an idea how that compatible might look like?
> > >
> > > 		tcon0: lcd-controller@1c0c000 {
> > > 			compatible = "allwinner,sun7i-a20-tcon", "allwinner,lvds";
> > >
> > > or
> > >
> > > 		tcon0: lcd-controller@1c0c000 {
> > > 			compatible = "allwinner,sun7i-a20-tcon", "allwinner,tcon0";
> > >
> > > ? Or something completely different?
> >
> > Something like
> >
> > &tcon0 {
> >     compatible = "allwinner,sun7i-a20-tcon0", "allwinner,sun7i-a20-tcon";
> > };
> >
> > &tcon1 {
> >     compatible = "allwinner,sun7i-a20-tcon1", "allwinner,sun7i-a20-tcon";
> > };
> >
>
> Hi Maxime, here is what I came up with, please take a look. If the
> approach is right, I'll split it up and include into the patch set.
>
> From f3e45c958a9551a52ac26435785bdb572e54d8db Mon Sep 17 00:00:00 2001
> From: Andrey Lebedev <andrey@lebedev.lt>
> Date: Fri, 14 Feb 2020 23:21:59 +0200
> Subject: [PATCH] Mark tcon0 to be the only tcon capable of LVDS on sun7i-a20
>
> This allows to avoid warnings about reset line not provided for tcon1.
>
> Signed-off-by: Andrey Lebedev <andrey@lebedev.lt>
> ---
>  arch/arm/boot/dts/sun7i-a20.dtsi   |  2 +-
>  drivers/gpu/drm/sun4i/sun4i_tcon.c | 22 +++++++++++++++++++++-
>  drivers/gpu/drm/sun4i/sun4i_tcon.h |  2 ++
>  3 files changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
> index 3b3c366a2bee..bab59fc4d9b1 100644
> --- a/arch/arm/boot/dts/sun7i-a20.dtsi
> +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
> @@ -405,7 +405,7 @@
>  		};
>
>  		tcon0: lcd-controller@1c0c000 {
> -			compatible = "allwinner,sun7i-a20-tcon";
> +			compatible = "allwinner,sun7i-a20-tcon0", "allwinner,sun7i-a20-tcon";

That's correct

>  			reg = <0x01c0c000 0x1000>;
>  			interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
>  			resets = <&ccu RST_TCON0>, <&ccu RST_LVDS>;
> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> index 800a9bd86112..cb2040aec436 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> @@ -1107,6 +1107,25 @@ static struct sunxi_engine *sun4i_tcon_find_engine(struct sun4i_drv *drv,
>  	return sun4i_tcon_find_engine_traverse(drv, node, 0);
>  }
>
> +/*
> + * Check if given tcon supports LVDS
> + *
> + * Some of the sunxi SoC variants contain several timing controllers, but only
> + * one of them can be used to drive LVDS screen. In this case such tcon is
> + * identified in respective quirks struct: lvds_compatible_tcon property will
> + * hold "compatible" string of the tcon, that supports LVDS.
> + *
> + * If lvds_compatible_tcon is not set, all tcons are considered capable of
> + * driving LVDS.
> + */
> +static bool sun4i_tcon_lvds_compat(struct device *dev, struct sun4i_tcon *tcon)
> +{
> +	if (tcon->quirks->lvds_compatible_tcon == NULL)
> +		return true;
> +	return of_device_is_compatible(dev->of_node,
> +	                               tcon->quirks->lvds_compatible_tcon);
> +}
> +
>  static int sun4i_tcon_bind(struct device *dev, struct device *master,
>  			   void *data)
>  {
> @@ -1161,7 +1180,7 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master,
>  		return ret;
>  	}
>
> -	if (tcon->quirks->supports_lvds) {
> +	if (tcon->quirks->supports_lvds && sun4i_tcon_lvds_compat(dev, tcon)) {
>  		/*
>  		 * This can only be made optional since we've had DT
>  		 * nodes without the LVDS reset properties.
> @@ -1481,6 +1500,7 @@ static const struct sun4i_tcon_quirks sun6i_a31s_quirks = {
>
>  static const struct sun4i_tcon_quirks sun7i_a20_quirks = {
>  	.supports_lvds		= true,
> +	.lvds_compatible_tcon	= "allwinner,sun7i-a20-tcon0",
>  	.has_channel_0		= true,
>  	.has_channel_1		= true,
>  	.dclk_min_div		= 4,
> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
> index cfbf4e6c1679..bc87d28ee341 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
> @@ -235,6 +235,8 @@ struct sun4i_tcon_quirks {
>  	bool	needs_de_be_mux; /* sun6i needs mux to select backend */
>  	bool    needs_edp_reset; /* a80 edp reset needed for tcon0 access */
>  	bool	supports_lvds;   /* Does the TCON support an LVDS output? */
> +	/* "compatible" string of TCON that exclusively supports LVDS */
> +	const char *lvds_compatible_tcon;

However this is far more complicated than needed, you can simply add a
new quirks structure associated to the tcon0 compatible in
sun4i_tcon_of_table, and that will do

Maxime

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-02-17 17:51 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-10 19:56 [PATCH 1/1] Support LVDS output on Allwinner A20 Andrey Lebedev
2020-02-11  7:20 ` Maxime Ripard
2020-02-11 20:48   ` Andrey Lebedev
2020-02-12 12:53     ` Maxime Ripard
2020-02-12 22:46       ` Andrey Lebedev
2020-02-13  9:24         ` Maxime Ripard
2020-02-13 18:11           ` Andrey Lebedev
2020-02-14  7:58             ` Maxime Ripard
2020-02-12 22:23 ` [PATCH v2 1/2] ARM: sun7i: " andrey.lebedev
2020-02-13  9:32   ` Maxime Ripard
2020-02-12 22:23 ` [PATCH v2 2/2] ARM: sun7i: dts: Add LVDS panel support on A20 andrey.lebedev
2020-02-13  9:43   ` Maxime Ripard
2020-02-13 20:08     ` Andrey Lebedev
2020-02-14  7:52       ` Maxime Ripard
2020-02-14  8:43         ` Andrey Lebedev
2020-02-14  8:53           ` Maxime Ripard
2020-02-14 21:32             ` Andrey Lebedev
2020-02-17 17:51               ` Maxime Ripard [this message]
2020-02-18 17:50                 ` Andrey Lebedev
2020-02-19 12:06                   ` Maxime Ripard
2020-02-13 20:18 ` [PATCH v3 1/3] drm/sun4i: tcon: Introduce LVDS setup routine setting Andrey Lebedev
2020-02-13 20:18 ` [PATCH v3 2/3] drm/sun4i: tcon: Support LVDS output on Allwinner A20 Andrey Lebedev
2020-02-13 20:18 ` [PATCH v3 3/3] ARM: dts: sun7i: Add LVDS panel support on A20 Andrey Lebedev
2020-02-14  8:55   ` Maxime Ripard
2020-02-19 18:08 ` PATCH v4 Andrey Lebedev
2020-02-19 18:08   ` [PATCH 1/5] drm/sun4i: tcon: Introduce LVDS setup routine setting Andrey Lebedev
2020-02-20 17:21     ` Maxime Ripard
2020-02-20 18:19       ` Andrey Lebedev
2020-02-19 18:08   ` [PATCH 2/5] drm/sun4i: tcon: Separate quirks for tcon0 and tcon1 on A20 Andrey Lebedev
2020-02-20 17:22     ` Maxime Ripard
2020-02-19 18:08   ` [PATCH 3/5] ARM: dts: sun7i: Add LVDS panel support " Andrey Lebedev
2020-02-20 17:23     ` Maxime Ripard
2020-02-19 18:08   ` [PATCH 4/5] dt-bindings: display: sun4i: New compatibles for A20 tcons Andrey Lebedev
2020-02-20 17:24     ` Maxime Ripard
2020-02-19 18:08   ` [PATCH 5/5] drm/sun4i: tcon: Support LVDS output on Allwinner A20 Andrey Lebedev
2020-02-20 17:25     ` Maxime Ripard
2020-04-01 10:59       ` Andrey Lebedev
2020-04-01 12:14         ` Maxime Ripard

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=20200217175135.ldtqji4mrwz2wbn5@gilmour.lan \
    --to=maxime@cerno.tech \
    --cc=airlied@linux.ie \
    --cc=andrey.lebedev@gmail.com \
    --cc=andrey@lebedev.lt \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=wens@csie.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).