From: Jernej Skrabec <jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
To: maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org,
wens-jdAy2FN1RRM@public.gmane.org,
robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Cc: airlied-cv59FeDIM0c@public.gmane.org,
mark.rutland-5wv7dgnIgG8@public.gmane.org,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: [PATCH 10/17] drm/sun4i: tcon-top: Add helpers for switching mux
Date: Fri, 6 Jul 2018 19:51:06 +0200 [thread overview]
Message-ID: <20180706175113.26698-11-jernej.skrabec@siol.net> (raw)
In-Reply-To: <20180706175113.26698-1-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
We want to be able to set TCON TOP muxes at runtime. Add helpers for
that.
Old, static configuration of muxes at probe time is preserved for now.
It will be removed when R40 TCON starts using them.
Signed-off-by: Jernej Skrabec <jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
---
drivers/gpu/drm/sun4i/sun8i_tcon_top.c | 74 ++++++++++++++++++++++++++
drivers/gpu/drm/sun4i/sun8i_tcon_top.h | 4 ++
2 files changed, 78 insertions(+)
diff --git a/drivers/gpu/drm/sun4i/sun8i_tcon_top.c b/drivers/gpu/drm/sun4i/sun8i_tcon_top.c
index 9fb51940156f..c09b15b64192 100644
--- a/drivers/gpu/drm/sun4i/sun8i_tcon_top.c
+++ b/drivers/gpu/drm/sun4i/sun8i_tcon_top.c
@@ -14,6 +14,79 @@
#include "sun8i_tcon_top.h"
+static bool sun8i_tcon_top_node_is_tcon_top(struct device_node *node)
+{
+ return !!of_match_node(sun8i_tcon_top_of_table, node);
+}
+
+int sun8i_tcon_top_set_hdmi_src(struct device *dev, int tcon)
+{
+ struct sun8i_tcon_top *tcon_top = dev_get_drvdata(dev);
+ unsigned long flags;
+ u32 val;
+
+ if (!sun8i_tcon_top_node_is_tcon_top(dev->of_node)) {
+ dev_err(dev, "Device is not TCON TOP!\n");
+ return -EINVAL;
+ }
+
+ if (tcon < 2 || tcon > 3) {
+ dev_err(dev, "TCON index must be 2 or 3!\n");
+ return -EINVAL;
+ }
+
+ spin_lock_irqsave(&tcon_top->reg_lock, flags);
+
+ val = readl(tcon_top->regs + TCON_TOP_GATE_SRC_REG);
+ val &= ~TCON_TOP_HDMI_SRC_MSK;
+ val |= FIELD_PREP(TCON_TOP_HDMI_SRC_MSK, tcon - 1);
+ writel(val, tcon_top->regs + TCON_TOP_GATE_SRC_REG);
+
+ spin_unlock_irqrestore(&tcon_top->reg_lock, flags);
+
+ return 0;
+}
+EXPORT_SYMBOL(sun8i_tcon_top_set_hdmi_src);
+
+int sun8i_tcon_top_de_config(struct device *dev, int mixer, int tcon)
+{
+ struct sun8i_tcon_top *tcon_top = dev_get_drvdata(dev);
+ unsigned long flags;
+ u32 reg;
+
+ if (!sun8i_tcon_top_node_is_tcon_top(dev->of_node)) {
+ dev_err(dev, "Device is not TCON TOP!\n");
+ return -EINVAL;
+ }
+
+ if (mixer > 1) {
+ dev_err(dev, "Mixer index is too high!\n");
+ return -EINVAL;
+ }
+
+ if (tcon > 3) {
+ dev_err(dev, "TCON index is too high!\n");
+ return -EINVAL;
+ }
+
+ spin_lock_irqsave(&tcon_top->reg_lock, flags);
+
+ reg = readl(tcon_top->regs + TCON_TOP_PORT_SEL_REG);
+ if (mixer == 0) {
+ reg &= ~TCON_TOP_PORT_DE0_MSK;
+ reg |= FIELD_PREP(TCON_TOP_PORT_DE0_MSK, tcon);
+ } else {
+ reg &= ~TCON_TOP_PORT_DE1_MSK;
+ reg |= FIELD_PREP(TCON_TOP_PORT_DE1_MSK, tcon);
+ }
+ writel(reg, tcon_top->regs + TCON_TOP_PORT_SEL_REG);
+
+ spin_unlock_irqrestore(&tcon_top->reg_lock, flags);
+
+ return 0;
+}
+EXPORT_SYMBOL(sun8i_tcon_top_de_config);
+
static int sun8i_tcon_top_get_connected_ep_id(struct device_node *node,
int port_id)
{
@@ -109,6 +182,7 @@ static int sun8i_tcon_top_bind(struct device *dev, struct device *master,
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
regs = devm_ioremap_resource(dev, res);
+ tcon_top->regs = regs;
if (IS_ERR(regs))
return PTR_ERR(regs);
diff --git a/drivers/gpu/drm/sun4i/sun8i_tcon_top.h b/drivers/gpu/drm/sun4i/sun8i_tcon_top.h
index 39838bbfeaee..0390584a330e 100644
--- a/drivers/gpu/drm/sun4i/sun8i_tcon_top.h
+++ b/drivers/gpu/drm/sun4i/sun8i_tcon_top.h
@@ -26,6 +26,7 @@
struct sun8i_tcon_top {
struct clk *bus;
struct clk_hw_onecell_data *clk_data;
+ void __iomem *regs;
struct reset_control *rst;
/*
@@ -37,4 +38,7 @@ struct sun8i_tcon_top {
extern const struct of_device_id sun8i_tcon_top_of_table[];
+int sun8i_tcon_top_set_hdmi_src(struct device *dev, int tcon);
+int sun8i_tcon_top_de_config(struct device *dev, int mixer, int tcon);
+
#endif /* _SUN8I_TCON_TOP_H_ */
--
2.18.0
next prev parent reply other threads:[~2018-07-06 17:51 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-06 17:50 [PATCH 00/17] Allwinner R40 HDMI refactoring Jernej Skrabec
[not found] ` <20180706175113.26698-1-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-06 17:50 ` [PATCH 01/17] dt-bindings: display: sun4i-drm: Add R40 display engine compatible Jernej Skrabec
[not found] ` <20180706175113.26698-2-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:20 ` Chen-Yu Tsai
2018-07-06 17:50 ` [PATCH 02/17] drm/sun4i: " Jernej Skrabec
[not found] ` <20180706175113.26698-3-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:20 ` Chen-Yu Tsai
2018-07-06 17:50 ` [PATCH 03/17] ARM: dts: sun8i: r40: Remove fallback " Jernej Skrabec
[not found] ` <20180706175113.26698-4-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:21 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 04/17] drm/sun4i: tcon-top: Cleanup clock handling Jernej Skrabec
[not found] ` <20180706175113.26698-5-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:23 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 05/17] drm/sun4i: tcon: Release node when traversing of graph Jernej Skrabec
[not found] ` <20180706175113.26698-6-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:23 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 06/17] dt-bindings: display: sun4i-drm: Add R40 TV TCON description Jernej Skrabec
[not found] ` <20180706175113.26698-7-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-06 20:40 ` Rob Herring
2018-07-06 20:44 ` Jernej Škrabec
2018-07-09 14:16 ` Rob Herring
2018-07-10 15:26 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 07/17] drm/sun4i: DW HDMI: Release nodes if error happens during CRTC search Jernej Skrabec
[not found] ` <20180706175113.26698-8-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:31 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 08/17] ARM: dts: sun8i: r40: Add mixer ids to TCON TOP Jernej Skrabec
[not found] ` <20180706175113.26698-9-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:35 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 09/17] drm/sun4i: mixer: Read id from DT Jernej Skrabec
2018-07-10 15:40 ` Chen-Yu Tsai
2018-07-06 17:51 ` Jernej Skrabec [this message]
[not found] ` <20180706175113.26698-11-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:56 ` [PATCH 10/17] drm/sun4i: tcon-top: Add helpers for switching mux Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 11/17] drm/sun4i: tcon: Add another way for matching mixers with tcon Jernej Skrabec
[not found] ` <20180706175113.26698-12-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 16:12 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 12/17] drm/sun4i: tcon: Add support for R40 TCON Jernej Skrabec
[not found] ` <20180706175113.26698-13-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 16:14 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 13/17] ARM: dts: sun8i: r40: Remove fallback compatible for TCON TV Jernej Skrabec
[not found] ` <20180706175113.26698-14-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:49 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 14/17] ARM: dts: sun8i: r40: Add missing TCON-TOP - TCON connections Jernej Skrabec
[not found] ` <20180706175113.26698-15-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 15:53 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 15/17] ARM: dts: sun8i: r40: Disable TCONs by default Jernej Skrabec
2018-07-10 16:16 ` Chen-Yu Tsai
2018-07-06 17:51 ` [PATCH 16/17] drm/sun4i: tcon-top: Remove mux configuration at probe time Jernej Skrabec
[not found] ` <20180706175113.26698-17-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 16:09 ` Chen-Yu Tsai
[not found] ` <CAGb2v64rjUnwnXbWxTSYJyhMyCV5QmV9YSr+Jryx3nEeMP8GJg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-07-10 16:18 ` Jernej Škrabec
2018-07-10 19:41 ` Jernej Škrabec
2018-07-06 17:51 ` [PATCH 17/17] dt-bindings: display: sun4i-drm: Fix order of DW HDMI PHY compatibles Jernej Skrabec
[not found] ` <20180706175113.26698-18-jernej.skrabec-gGgVlfcn5nU@public.gmane.org>
2018-07-10 16:09 ` 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=20180706175113.26698-11-jernej.skrabec@siol.net \
--to=jernej.skrabec-gggvlfcn5nu@public.gmane.org \
--cc=airlied-cv59FeDIM0c@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=wens-jdAy2FN1RRM@public.gmane.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