All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: Daniel Vetter <daniel.vetter@intel.com>,
	David Airlie <airlied@linux.ie>, Chen-Yu Tsai <wens@csie.org>,
	Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	Mark Rutland <mark.rutland@arm.com>,
	Rob Herring <robh+dt@kernel.org>,
	linux-arm-kernel@lists.infradead.org, plaes@plaes.org,
	icenowy@aosc.io,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	jernej.skrabec@siol.net, devicetree@vger.kernel.org
Subject: [PATCH v3 07/15] drm/sun4i: Create minimal multipliers and dividers
Date: Tue,  5 Dec 2017 16:10:19 +0100	[thread overview]
Message-ID: <42424895bd242dceeeeacf3f83e1c24aa03fb60f.1512486553.git-series.maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <cover.825a49a4c1c565a548f3de0375e7537e7e8fd3a4.1512486553.git-series.maxime.ripard@free-electrons.com>
In-Reply-To: <cover.825a49a4c1c565a548f3de0375e7537e7e8fd3a4.1512486553.git-series.maxime.ripard@free-electrons.com>

The various outputs the TCON can provide have different constraints on the
dotclock divider. Let's make them configurable by the various mode_set
functions.

Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/gpu/drm/sun4i/sun4i_dotclock.c | 10 +++++++---
 drivers/gpu/drm/sun4i/sun4i_tcon.c     |  2 ++
 drivers/gpu/drm/sun4i/sun4i_tcon.h     |  2 ++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_dotclock.c b/drivers/gpu/drm/sun4i/sun4i_dotclock.c
index d401156490f3..023f39bda633 100644
--- a/drivers/gpu/drm/sun4i/sun4i_dotclock.c
+++ b/drivers/gpu/drm/sun4i/sun4i_dotclock.c
@@ -17,8 +17,9 @@
 #include "sun4i_dotclock.h"
 
 struct sun4i_dclk {
-	struct clk_hw	hw;
-	struct regmap	*regmap;
+	struct clk_hw		hw;
+	struct regmap		*regmap;
+	struct sun4i_tcon	*tcon;
 };
 
 static inline struct sun4i_dclk *hw_to_dclk(struct clk_hw *hw)
@@ -73,11 +74,13 @@ static unsigned long sun4i_dclk_recalc_rate(struct clk_hw *hw,
 static long sun4i_dclk_round_rate(struct clk_hw *hw, unsigned long rate,
 				  unsigned long *parent_rate)
 {
+	struct sun4i_dclk *dclk = hw_to_dclk(hw);
+	struct sun4i_tcon *tcon = dclk->tcon;
 	unsigned long best_parent = 0;
 	u8 best_div = 1;
 	int i;
 
-	for (i = 6; i <= 127; i++) {
+	for (i = tcon->dclk_min_div; i <= tcon->dclk_max_div; i++) {
 		unsigned long ideal = rate * i;
 		unsigned long rounded;
 
@@ -167,6 +170,7 @@ int sun4i_dclk_create(struct device *dev, struct sun4i_tcon *tcon)
 	dclk = devm_kzalloc(dev, sizeof(*dclk), GFP_KERNEL);
 	if (!dclk)
 		return -ENOMEM;
+	dclk->tcon = tcon;
 
 	init.name = clk_name;
 	init.ops = &sun4i_dclk_ops;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index ea056a3d2131..46e28ca1f676 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -177,6 +177,8 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
 	u8 clk_delay;
 	u32 val = 0;
 
+	tcon->dclk_min_div = 6;
+	tcon->dclk_max_div = 127;
 	sun4i_tcon0_mode_set_common(tcon, mode);
 
 	/* Adjust clock delay */
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index 839266a38505..bd3ad7684870 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -169,6 +169,8 @@ struct sun4i_tcon {
 
 	/* Pixel clock */
 	struct clk			*dclk;
+	u8				dclk_max_div;
+	u8				dclk_min_div;
 
 	/* Reset control */
 	struct reset_control		*lcd_rst;
-- 
git-series 0.9.1

WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: Daniel Vetter <daniel.vetter@intel.com>,
	David Airlie <airlied@linux.ie>, Chen-Yu Tsai <wens@csie.org>,
	Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	jernej.skrabec@siol.net, plaes@plaes.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, Rob Herring <robh+dt@kernel.org>,
	linux-arm-kernel@lists.infradead.org, icenowy@aosc.io
Subject: [PATCH v3 07/15] drm/sun4i: Create minimal multipliers and dividers
Date: Tue,  5 Dec 2017 16:10:19 +0100	[thread overview]
Message-ID: <42424895bd242dceeeeacf3f83e1c24aa03fb60f.1512486553.git-series.maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <cover.825a49a4c1c565a548f3de0375e7537e7e8fd3a4.1512486553.git-series.maxime.ripard@free-electrons.com>
In-Reply-To: <cover.825a49a4c1c565a548f3de0375e7537e7e8fd3a4.1512486553.git-series.maxime.ripard@free-electrons.com>

The various outputs the TCON can provide have different constraints on the
dotclock divider. Let's make them configurable by the various mode_set
functions.

Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/gpu/drm/sun4i/sun4i_dotclock.c | 10 +++++++---
 drivers/gpu/drm/sun4i/sun4i_tcon.c     |  2 ++
 drivers/gpu/drm/sun4i/sun4i_tcon.h     |  2 ++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_dotclock.c b/drivers/gpu/drm/sun4i/sun4i_dotclock.c
index d401156490f3..023f39bda633 100644
--- a/drivers/gpu/drm/sun4i/sun4i_dotclock.c
+++ b/drivers/gpu/drm/sun4i/sun4i_dotclock.c
@@ -17,8 +17,9 @@
 #include "sun4i_dotclock.h"
 
 struct sun4i_dclk {
-	struct clk_hw	hw;
-	struct regmap	*regmap;
+	struct clk_hw		hw;
+	struct regmap		*regmap;
+	struct sun4i_tcon	*tcon;
 };
 
 static inline struct sun4i_dclk *hw_to_dclk(struct clk_hw *hw)
@@ -73,11 +74,13 @@ static unsigned long sun4i_dclk_recalc_rate(struct clk_hw *hw,
 static long sun4i_dclk_round_rate(struct clk_hw *hw, unsigned long rate,
 				  unsigned long *parent_rate)
 {
+	struct sun4i_dclk *dclk = hw_to_dclk(hw);
+	struct sun4i_tcon *tcon = dclk->tcon;
 	unsigned long best_parent = 0;
 	u8 best_div = 1;
 	int i;
 
-	for (i = 6; i <= 127; i++) {
+	for (i = tcon->dclk_min_div; i <= tcon->dclk_max_div; i++) {
 		unsigned long ideal = rate * i;
 		unsigned long rounded;
 
@@ -167,6 +170,7 @@ int sun4i_dclk_create(struct device *dev, struct sun4i_tcon *tcon)
 	dclk = devm_kzalloc(dev, sizeof(*dclk), GFP_KERNEL);
 	if (!dclk)
 		return -ENOMEM;
+	dclk->tcon = tcon;
 
 	init.name = clk_name;
 	init.ops = &sun4i_dclk_ops;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index ea056a3d2131..46e28ca1f676 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -177,6 +177,8 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
 	u8 clk_delay;
 	u32 val = 0;
 
+	tcon->dclk_min_div = 6;
+	tcon->dclk_max_div = 127;
 	sun4i_tcon0_mode_set_common(tcon, mode);
 
 	/* Adjust clock delay */
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index 839266a38505..bd3ad7684870 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -169,6 +169,8 @@ struct sun4i_tcon {
 
 	/* Pixel clock */
 	struct clk			*dclk;
+	u8				dclk_max_div;
+	u8				dclk_min_div;
 
 	/* Reset control */
 	struct reset_control		*lcd_rst;
-- 
git-series 0.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: maxime.ripard@free-electrons.com (Maxime Ripard)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 07/15] drm/sun4i: Create minimal multipliers and dividers
Date: Tue,  5 Dec 2017 16:10:19 +0100	[thread overview]
Message-ID: <42424895bd242dceeeeacf3f83e1c24aa03fb60f.1512486553.git-series.maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <cover.825a49a4c1c565a548f3de0375e7537e7e8fd3a4.1512486553.git-series.maxime.ripard@free-electrons.com>

The various outputs the TCON can provide have different constraints on the
dotclock divider. Let's make them configurable by the various mode_set
functions.

Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/gpu/drm/sun4i/sun4i_dotclock.c | 10 +++++++---
 drivers/gpu/drm/sun4i/sun4i_tcon.c     |  2 ++
 drivers/gpu/drm/sun4i/sun4i_tcon.h     |  2 ++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_dotclock.c b/drivers/gpu/drm/sun4i/sun4i_dotclock.c
index d401156490f3..023f39bda633 100644
--- a/drivers/gpu/drm/sun4i/sun4i_dotclock.c
+++ b/drivers/gpu/drm/sun4i/sun4i_dotclock.c
@@ -17,8 +17,9 @@
 #include "sun4i_dotclock.h"
 
 struct sun4i_dclk {
-	struct clk_hw	hw;
-	struct regmap	*regmap;
+	struct clk_hw		hw;
+	struct regmap		*regmap;
+	struct sun4i_tcon	*tcon;
 };
 
 static inline struct sun4i_dclk *hw_to_dclk(struct clk_hw *hw)
@@ -73,11 +74,13 @@ static unsigned long sun4i_dclk_recalc_rate(struct clk_hw *hw,
 static long sun4i_dclk_round_rate(struct clk_hw *hw, unsigned long rate,
 				  unsigned long *parent_rate)
 {
+	struct sun4i_dclk *dclk = hw_to_dclk(hw);
+	struct sun4i_tcon *tcon = dclk->tcon;
 	unsigned long best_parent = 0;
 	u8 best_div = 1;
 	int i;
 
-	for (i = 6; i <= 127; i++) {
+	for (i = tcon->dclk_min_div; i <= tcon->dclk_max_div; i++) {
 		unsigned long ideal = rate * i;
 		unsigned long rounded;
 
@@ -167,6 +170,7 @@ int sun4i_dclk_create(struct device *dev, struct sun4i_tcon *tcon)
 	dclk = devm_kzalloc(dev, sizeof(*dclk), GFP_KERNEL);
 	if (!dclk)
 		return -ENOMEM;
+	dclk->tcon = tcon;
 
 	init.name = clk_name;
 	init.ops = &sun4i_dclk_ops;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index ea056a3d2131..46e28ca1f676 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -177,6 +177,8 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
 	u8 clk_delay;
 	u32 val = 0;
 
+	tcon->dclk_min_div = 6;
+	tcon->dclk_max_div = 127;
 	sun4i_tcon0_mode_set_common(tcon, mode);
 
 	/* Adjust clock delay */
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index 839266a38505..bd3ad7684870 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -169,6 +169,8 @@ struct sun4i_tcon {
 
 	/* Pixel clock */
 	struct clk			*dclk;
+	u8				dclk_max_div;
+	u8				dclk_min_div;
 
 	/* Reset control */
 	struct reset_control		*lcd_rst;
-- 
git-series 0.9.1

  parent reply	other threads:[~2017-12-05 15:13 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-05 15:10 [PATCH v3 00/15] drm/sun4i: Add A83t LVDS support Maxime Ripard
2017-12-05 15:10 ` Maxime Ripard
2017-12-05 15:10 ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 01/15] dt-bindings: panel: lvds: Document power-supply property Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-06 21:56   ` Rob Herring
2017-12-06 21:56     ` Rob Herring
2017-12-06 21:56     ` Rob Herring
2017-12-05 15:10 ` [PATCH v3 02/15] drm/panel: lvds: Add support for the " Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 03/15] dt-bindings: display: sun4i-drm: Add LVDS properties Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-06 21:57   ` Rob Herring
2017-12-06 21:57     ` Rob Herring
2017-12-06 21:57     ` Rob Herring
2017-12-07  3:57   ` Chen-Yu Tsai
2017-12-07  3:57     ` Chen-Yu Tsai
2017-12-07  3:57     ` Chen-Yu Tsai
2017-12-05 15:10 ` [PATCH v3 04/15] dt-bindings: display: sun4i-drm: Add A83T pipeline Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-06 21:59   ` Rob Herring
2017-12-06 21:59     ` Rob Herring
2017-12-06 21:59     ` Rob Herring
2017-12-07  3:37     ` Chen-Yu Tsai
2017-12-07  3:37       ` Chen-Yu Tsai
2017-12-07  3:37       ` Chen-Yu Tsai
2017-12-05 15:10 ` [PATCH v3 05/15] drm/sun4i: Fix error path handling Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:42   ` Chen-Yu Tsai
2017-12-05 15:42     ` Chen-Yu Tsai
2017-12-05 15:42     ` Chen-Yu Tsai
2017-12-05 15:10 ` [PATCH v3 06/15] drm/sun4i: Force the mixer rate at 150MHz Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10 ` Maxime Ripard [this message]
2017-12-05 15:10   ` [PATCH v3 07/15] drm/sun4i: Create minimal multipliers and dividers Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 08/15] drm/sun4i: Add LVDS support Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-07  6:05   ` Chen-Yu Tsai
2017-12-07  6:05     ` Chen-Yu Tsai
2017-12-07  6:05     ` Chen-Yu Tsai
2017-12-07 12:25     ` Maxime Ripard
2017-12-07 12:25       ` Maxime Ripard
2017-12-07 12:25       ` Maxime Ripard
2017-12-14  3:30       ` Chen-Yu Tsai
2017-12-14  3:30         ` Chen-Yu Tsai
2017-12-14  3:30         ` Chen-Yu Tsai
2017-12-14  9:37         ` Maxime Ripard
2017-12-14  9:37           ` Maxime Ripard
2017-12-07 10:14   ` Philippe Ombredanne
2017-12-07 10:14     ` Philippe Ombredanne
2017-12-07 10:14     ` Philippe Ombredanne
2017-12-07 10:50     ` Maxime Ripard
2017-12-07 10:50       ` Maxime Ripard
2017-12-07 10:50       ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 09/15] drm/sun4i: Add A83T support Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:42   ` Jernej Škrabec
2017-12-05 15:42     ` Jernej Škrabec
2017-12-06 16:37     ` Jernej Škrabec
2017-12-06 16:37       ` Jernej Škrabec
2017-12-07 10:55       ` Maxime Ripard
2017-12-07 10:55         ` Maxime Ripard
2017-12-07 10:55         ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 10/15] ARM: dts: sun8i: a83t: Add display pipeline Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-07  4:02   ` Chen-Yu Tsai
2017-12-07  4:02     ` Chen-Yu Tsai
2017-12-07  4:02     ` Chen-Yu Tsai
2017-12-05 15:10 ` [PATCH v3 11/15] ARM: dts: sun8i: a83t: Enable the PWM Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 12/15] ARM: dts: sun8i: a83t: Add LVDS pins group Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 13/15] ARM: dts: sun8i: a83t: Add the PWM pin group Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10 ` [PATCH v3 14/15] ARM: dts: sun8i: a711: Reinstate the PMIC compatible Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-07  3:34   ` Chen-Yu Tsai
2017-12-07  3:34     ` Chen-Yu Tsai
2017-12-07  3:34     ` Chen-Yu Tsai
2017-12-05 15:10 ` [PATCH v3 15/15] ARM: dts: sun8i: a711: Enable the LCD Maxime Ripard
2017-12-05 15:10   ` Maxime Ripard
2017-12-05 15:10   ` 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=42424895bd242dceeeeacf3f83e1c24aa03fb60f.1512486553.git-series.maxime.ripard@free-electrons.com \
    --to=maxime.ripard@free-electrons.com \
    --cc=airlied@linux.ie \
    --cc=daniel.vetter@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=icenowy@aosc.io \
    --cc=jernej.skrabec@siol.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=plaes@plaes.org \
    --cc=robh+dt@kernel.org \
    --cc=thomas.petazzoni@free-electrons.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 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.