From: Chen-Yu Tsai <wens@csie.org>
To: Mark Brown <broonie@kernel.org>,
Maxime Ripard <maxime.ripard@free-electrons.com>,
David Airlie <airlied@linux.ie>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@codeaurora.org>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>
Cc: Chen-Yu Tsai <wens@csie.org>,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-sunxi@googlegroups.com
Subject: [PATCH v3 03/14] drm/sun4i: tcon: Add variant callback for TCON output muxing
Date: Fri, 29 Sep 2017 16:22:55 +0800 [thread overview]
Message-ID: <20170929082306.16193-4-wens@csie.org> (raw)
In-Reply-To: <20170929082306.16193-1-wens@csie.org>
Different SoCs have different muxing options and values for the TCON
outputs. Instead of stuffing every possibility in sun4i_tcon_set_mux(),
add a callback pointer to sun4i_tcon_quirks that each TCON variant
can use to provide muxing support.
The current muxing options in sun4i_tcon_set_mux() for sun5i-a13 are
moved to a new sun5i-specific callback function.
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
---
drivers/gpu/drm/sun4i/sun4i_tcon.c | 45 ++++++++++++++++++++++++--------------
drivers/gpu/drm/sun4i/sun4i_tcon.h | 5 +++++
2 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index e853dfe51389..7bf51abaee97 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -14,9 +14,12 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_encoder.h>
#include <drm/drm_modes.h>
#include <drm/drm_of.h>
+#include <uapi/drm/drm_mode.h>
+
#include <linux/component.h>
#include <linux/ioport.h>
#include <linux/of_address.h>
@@ -112,23 +115,13 @@ EXPORT_SYMBOL(sun4i_tcon_enable_vblank);
void sun4i_tcon_set_mux(struct sun4i_tcon *tcon, int channel,
struct drm_encoder *encoder)
{
- u32 val;
-
- if (!tcon->quirks->has_unknown_mux)
- return;
+ int ret = -ENOTSUPP;
- if (channel != 1)
- return;
-
- if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
- val = 1;
- else
- val = 0;
+ if (tcon->quirks->set_mux)
+ ret = tcon->quirks->set_mux(tcon, encoder);
- /*
- * FIXME: Undocumented bits
- */
- regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
+ DRM_DEBUG_DRIVER("Muxing encoder %s to CRTC %s: %d\n",
+ encoder->name, encoder->crtc->name, ret);
}
EXPORT_SYMBOL(sun4i_tcon_set_mux);
@@ -767,9 +760,27 @@ static int sun4i_tcon_remove(struct platform_device *pdev)
return 0;
}
+/* platform specific TCON muxing callbacks */
+static int sun5i_a13_tcon_set_mux(struct sun4i_tcon *tcon,
+ struct drm_encoder *encoder)
+{
+ u32 val;
+
+ if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
+ val = 1;
+ else
+ val = 0;
+
+ /*
+ * FIXME: Undocumented bits
+ */
+ return regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
+}
+
static const struct sun4i_tcon_quirks sun5i_a13_quirks = {
- .has_unknown_mux = true,
- .has_channel_1 = true,
+ .has_unknown_mux = true,
+ .has_channel_1 = true,
+ .set_mux = sun5i_a13_tcon_set_mux,
};
static const struct sun4i_tcon_quirks sun6i_a31_quirks = {
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index 5a219d1ccc26..6e699cbcf768 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -145,10 +145,15 @@
#define SUN4I_TCON_MAX_CHANNELS 2
+struct sun4i_tcon;
+
struct sun4i_tcon_quirks {
bool has_unknown_mux; /* sun5i has undocumented mux */
bool has_channel_1; /* a33 does not have channel 1 */
bool needs_de_be_mux; /* sun6i needs mux to select backend */
+
+ /* callback to handle tcon muxing options */
+ int (*set_mux)(struct sun4i_tcon *, struct drm_encoder *);
};
struct sun4i_tcon {
--
2.14.2
WARNING: multiple messages have this Message-ID (diff)
From: wens@csie.org (Chen-Yu Tsai)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 03/14] drm/sun4i: tcon: Add variant callback for TCON output muxing
Date: Fri, 29 Sep 2017 16:22:55 +0800 [thread overview]
Message-ID: <20170929082306.16193-4-wens@csie.org> (raw)
In-Reply-To: <20170929082306.16193-1-wens@csie.org>
Different SoCs have different muxing options and values for the TCON
outputs. Instead of stuffing every possibility in sun4i_tcon_set_mux(),
add a callback pointer to sun4i_tcon_quirks that each TCON variant
can use to provide muxing support.
The current muxing options in sun4i_tcon_set_mux() for sun5i-a13 are
moved to a new sun5i-specific callback function.
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
---
drivers/gpu/drm/sun4i/sun4i_tcon.c | 45 ++++++++++++++++++++++++--------------
drivers/gpu/drm/sun4i/sun4i_tcon.h | 5 +++++
2 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index e853dfe51389..7bf51abaee97 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -14,9 +14,12 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_encoder.h>
#include <drm/drm_modes.h>
#include <drm/drm_of.h>
+#include <uapi/drm/drm_mode.h>
+
#include <linux/component.h>
#include <linux/ioport.h>
#include <linux/of_address.h>
@@ -112,23 +115,13 @@ EXPORT_SYMBOL(sun4i_tcon_enable_vblank);
void sun4i_tcon_set_mux(struct sun4i_tcon *tcon, int channel,
struct drm_encoder *encoder)
{
- u32 val;
-
- if (!tcon->quirks->has_unknown_mux)
- return;
+ int ret = -ENOTSUPP;
- if (channel != 1)
- return;
-
- if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
- val = 1;
- else
- val = 0;
+ if (tcon->quirks->set_mux)
+ ret = tcon->quirks->set_mux(tcon, encoder);
- /*
- * FIXME: Undocumented bits
- */
- regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
+ DRM_DEBUG_DRIVER("Muxing encoder %s to CRTC %s: %d\n",
+ encoder->name, encoder->crtc->name, ret);
}
EXPORT_SYMBOL(sun4i_tcon_set_mux);
@@ -767,9 +760,27 @@ static int sun4i_tcon_remove(struct platform_device *pdev)
return 0;
}
+/* platform specific TCON muxing callbacks */
+static int sun5i_a13_tcon_set_mux(struct sun4i_tcon *tcon,
+ struct drm_encoder *encoder)
+{
+ u32 val;
+
+ if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
+ val = 1;
+ else
+ val = 0;
+
+ /*
+ * FIXME: Undocumented bits
+ */
+ return regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
+}
+
static const struct sun4i_tcon_quirks sun5i_a13_quirks = {
- .has_unknown_mux = true,
- .has_channel_1 = true,
+ .has_unknown_mux = true,
+ .has_channel_1 = true,
+ .set_mux = sun5i_a13_tcon_set_mux,
};
static const struct sun4i_tcon_quirks sun6i_a31_quirks = {
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index 5a219d1ccc26..6e699cbcf768 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -145,10 +145,15 @@
#define SUN4I_TCON_MAX_CHANNELS 2
+struct sun4i_tcon;
+
struct sun4i_tcon_quirks {
bool has_unknown_mux; /* sun5i has undocumented mux */
bool has_channel_1; /* a33 does not have channel 1 */
bool needs_de_be_mux; /* sun6i needs mux to select backend */
+
+ /* callback to handle tcon muxing options */
+ int (*set_mux)(struct sun4i_tcon *, struct drm_encoder *);
};
struct sun4i_tcon {
--
2.14.2
WARNING: multiple messages have this Message-ID (diff)
From: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
To: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Maxime Ripard
<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
David Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
Michael Turquette
<mturquette-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>,
Stephen Boyd <sboyd-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
Cc: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: [PATCH v3 03/14] drm/sun4i: tcon: Add variant callback for TCON output muxing
Date: Fri, 29 Sep 2017 16:22:55 +0800 [thread overview]
Message-ID: <20170929082306.16193-4-wens@csie.org> (raw)
In-Reply-To: <20170929082306.16193-1-wens-jdAy2FN1RRM@public.gmane.org>
Different SoCs have different muxing options and values for the TCON
outputs. Instead of stuffing every possibility in sun4i_tcon_set_mux(),
add a callback pointer to sun4i_tcon_quirks that each TCON variant
can use to provide muxing support.
The current muxing options in sun4i_tcon_set_mux() for sun5i-a13 are
moved to a new sun5i-specific callback function.
Signed-off-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
---
drivers/gpu/drm/sun4i/sun4i_tcon.c | 45 ++++++++++++++++++++++++--------------
drivers/gpu/drm/sun4i/sun4i_tcon.h | 5 +++++
2 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index e853dfe51389..7bf51abaee97 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -14,9 +14,12 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_encoder.h>
#include <drm/drm_modes.h>
#include <drm/drm_of.h>
+#include <uapi/drm/drm_mode.h>
+
#include <linux/component.h>
#include <linux/ioport.h>
#include <linux/of_address.h>
@@ -112,23 +115,13 @@ EXPORT_SYMBOL(sun4i_tcon_enable_vblank);
void sun4i_tcon_set_mux(struct sun4i_tcon *tcon, int channel,
struct drm_encoder *encoder)
{
- u32 val;
-
- if (!tcon->quirks->has_unknown_mux)
- return;
+ int ret = -ENOTSUPP;
- if (channel != 1)
- return;
-
- if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
- val = 1;
- else
- val = 0;
+ if (tcon->quirks->set_mux)
+ ret = tcon->quirks->set_mux(tcon, encoder);
- /*
- * FIXME: Undocumented bits
- */
- regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
+ DRM_DEBUG_DRIVER("Muxing encoder %s to CRTC %s: %d\n",
+ encoder->name, encoder->crtc->name, ret);
}
EXPORT_SYMBOL(sun4i_tcon_set_mux);
@@ -767,9 +760,27 @@ static int sun4i_tcon_remove(struct platform_device *pdev)
return 0;
}
+/* platform specific TCON muxing callbacks */
+static int sun5i_a13_tcon_set_mux(struct sun4i_tcon *tcon,
+ struct drm_encoder *encoder)
+{
+ u32 val;
+
+ if (encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
+ val = 1;
+ else
+ val = 0;
+
+ /*
+ * FIXME: Undocumented bits
+ */
+ return regmap_write(tcon->regs, SUN4I_TCON_MUX_CTRL_REG, val);
+}
+
static const struct sun4i_tcon_quirks sun5i_a13_quirks = {
- .has_unknown_mux = true,
- .has_channel_1 = true,
+ .has_unknown_mux = true,
+ .has_channel_1 = true,
+ .set_mux = sun5i_a13_tcon_set_mux,
};
static const struct sun4i_tcon_quirks sun6i_a31_quirks = {
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
index 5a219d1ccc26..6e699cbcf768 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
@@ -145,10 +145,15 @@
#define SUN4I_TCON_MAX_CHANNELS 2
+struct sun4i_tcon;
+
struct sun4i_tcon_quirks {
bool has_unknown_mux; /* sun5i has undocumented mux */
bool has_channel_1; /* a33 does not have channel 1 */
bool needs_de_be_mux; /* sun6i needs mux to select backend */
+
+ /* callback to handle tcon muxing options */
+ int (*set_mux)(struct sun4i_tcon *, struct drm_encoder *);
};
struct sun4i_tcon {
--
2.14.2
next prev parent reply other threads:[~2017-09-29 8:22 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-29 8:22 [PATCH v3 00/14] drm/sun4i: hdmi: Support HDMI controller on A31 Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` [PATCH v3 01/14] clk: sunxi-ng: sun6i: Export video PLLs Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:46 ` Maxime Ripard
2017-09-29 8:46 ` Maxime Ripard
2017-09-29 8:46 ` Maxime Ripard
2017-09-29 8:22 ` [PATCH v3 02/14] clk: sunxi-ng: sun6i: Rename HDMI DDC clock to avoid name collision Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:47 ` Maxime Ripard
2017-09-29 8:47 ` Maxime Ripard
2017-09-29 8:47 ` Maxime Ripard
2017-09-29 8:22 ` Chen-Yu Tsai [this message]
2017-09-29 8:22 ` [PATCH v3 03/14] drm/sun4i: tcon: Add variant callback for TCON output muxing Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 10:19 ` Maxime Ripard
2017-09-29 10:19 ` Maxime Ripard
2017-09-29 10:19 ` Maxime Ripard
2017-10-02 13:03 ` Chen-Yu Tsai
2017-10-02 13:03 ` Chen-Yu Tsai
2017-10-02 13:03 ` Chen-Yu Tsai
2017-09-29 8:22 ` [PATCH v3 04/14] drm/sun4i: tcon: Add support for demuxing TCON output on A31 Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 10:20 ` Maxime Ripard
2017-09-29 10:20 ` Maxime Ripard
2017-09-29 10:20 ` Maxime Ripard
2017-09-29 10:22 ` Chen-Yu Tsai
2017-09-29 10:22 ` Chen-Yu Tsai
2017-09-29 10:22 ` Chen-Yu Tsai
2017-09-30 5:35 ` [linux-sunxi] " Julian Calaby
2017-09-30 5:35 ` Julian Calaby
2017-09-30 5:58 ` Chen-Yu Tsai
2017-09-30 5:58 ` Chen-Yu Tsai
2017-09-30 5:58 ` [linux-sunxi] " Chen-Yu Tsai
2017-09-30 6:26 ` Julian Calaby
2017-09-30 6:26 ` Julian Calaby
2017-10-02 7:11 ` Chen-Yu Tsai
2017-10-02 7:11 ` Chen-Yu Tsai
2017-10-02 7:11 ` [linux-sunxi] " Chen-Yu Tsai
2017-09-29 8:22 ` [PATCH v3 05/14] drm/sun4i: hdmi: Disable clks in bind function error path and unbind function Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-10-02 20:02 ` Maxime Ripard
2017-10-02 20:02 ` Maxime Ripard
2017-10-02 20:02 ` Maxime Ripard
2017-09-29 8:22 ` [PATCH v3 06/14] drm/sun4i: hdmi: create a regmap for later use Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` [PATCH v3 07/14] drm/sun4i: hdmi: Allow using second PLL as TMDS clk parent Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:22 ` Chen-Yu Tsai
2017-09-29 8:23 ` [PATCH v3 08/14] dt-bindings: display: sun4i: Add binding for A31 HDMI controller Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` [PATCH v3 09/14] regmap: add iopoll-like polling macro for regmap_field Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-10-04 10:47 ` Mark Brown
2017-10-04 10:47 ` Mark Brown
2017-10-11 11:24 ` Daniel Vetter
2017-10-11 11:24 ` Daniel Vetter
2017-10-11 11:24 ` Daniel Vetter
2017-09-29 8:23 ` [PATCH v3 10/14] drm/sun4i: hdmi: Add support for controller hardware variants Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` [PATCH v3 11/14] drm/sun4i: hdmi: Add A31 specific DDC register definitions Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` [PATCH v3 12/14] drm/sun4i: hdmi: Add support for A31's HDMI controller Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` [PATCH v3 13/14] ARM: dts: sun6i: Add device node for " Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` [PATCH v3 14/14] ARM: dts: sun6i: Enable HDMI support on some A31/A31s devices Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
2017-09-29 8:23 ` Chen-Yu Tsai
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=20170929082306.16193-4-wens@csie.org \
--to=wens@csie.org \
--cc=airlied@linux.ie \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@googlegroups.com \
--cc=mark.rutland@arm.com \
--cc=maxime.ripard@free-electrons.com \
--cc=mturquette@baylibre.com \
--cc=robh+dt@kernel.org \
--cc=sboyd@codeaurora.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.