linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Add RK3399 HDMI Support
@ 2017-06-09  2:41 Mark Yao
  2017-06-09  2:45 ` [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx Mark Yao
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Mark Yao @ 2017-06-09  2:41 UTC (permalink / raw)
  To: Archit Taneja, David Airlie, Laurent Pinchart, Jose Abreu,
	Neil Armstrong, Daniel Vetter, Kieran Bingham, Mark Yao,
	Heiko Stuebner, Rob Herring, Mark Rutland
  Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-rockchip, devicetree

RK3399 and RK3288 shared the same HDMI IP controller, only some
light difference with GRF configure, and an external VPLL clock
need to configure.

base on Yakir's v1 thread:
   http://lkml.iu.edu/hypermail/linux/kernel/1607.1/01468.html

Some Yakir's hdmi patches cause hdmi no display on my test,
so I remove them on this thread.

Tested on rk3399 evb board with kernel 4.12.0-rc1.

Changes in v2:
  rebase to newest uptream, reuse hdmi_phy_configure_dwc_hdmi_3d_tx

Mark Yao (2):
  drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx
  drm/rockchip: dw_hdmi: add RK3399 HDMI support

Yakir Yang (2):
  drm/rockchip: dw_hdmi: introduce the VPLL clock setting
  drm/rockchip: dw_hdmi: introduce the pclk for grf

 .../bindings/display/rockchip/dw_hdmi-rockchip.txt |   3 +-
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c          |   3 +-
 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c        | 112 ++++++++++++++++++---
 include/drm/bridge/dw_hdmi.h                       |   3 +
 4 files changed, 107 insertions(+), 14 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx
  2017-06-09  2:41 [PATCH v2 0/4] Add RK3399 HDMI Support Mark Yao
@ 2017-06-09  2:45 ` Mark Yao
  2017-06-09  4:03   ` Mark yao
  2017-06-09  3:05 ` [PATCH v2 2/4] drm/rockchip: dw_hdmi: add RK3399 HDMI support Mark Yao
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Mark Yao @ 2017-06-09  2:45 UTC (permalink / raw)
  To: Archit Taneja, David Airlie, Laurent Pinchart, Jose Abreu,
	Neil Armstrong, Daniel Vetter, Kieran Bingham, Mark Yao
  Cc: dri-devel, linux-kernel

So dw-hdmi vendor driver can reuse hdmi_phy_configure_dwc_hdmi_3d_tx
to configure their hardware.

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 ++-
 include/drm/bridge/dw_hdmi.h              | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 4e1f54a..c1ceec7 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -1097,7 +1097,7 @@ static int dw_hdmi_phy_power_on(struct dw_hdmi *hdmi)
  * information the DWC MHL PHY has the same register layout and is thus also
  * supported by this function.
  */
-static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
+int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
 		const struct dw_hdmi_plat_data *pdata,
 		unsigned long mpixelclock)
 {
@@ -1146,6 +1146,7 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(hdmi_phy_configure_dwc_hdmi_3d_tx);
 
 static int hdmi_phy_configure(struct dw_hdmi *hdmi)
 {
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
index ed599be..7eb67e6 100644
--- a/include/drm/bridge/dw_hdmi.h
+++ b/include/drm/bridge/dw_hdmi.h
@@ -150,6 +150,9 @@ int dw_hdmi_probe(struct platform_device *pdev,
 int dw_hdmi_bind(struct platform_device *pdev, struct drm_encoder *encoder,
 		 const struct dw_hdmi_plat_data *plat_data);
 
+int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
+		const struct dw_hdmi_plat_data *pdata,
+		unsigned long mpixelclock);
 void dw_hdmi_setup_rx_sense(struct device *dev, bool hpd, bool rx_sense);
 
 void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 2/4] drm/rockchip: dw_hdmi: add RK3399 HDMI support
  2017-06-09  2:41 [PATCH v2 0/4] Add RK3399 HDMI Support Mark Yao
  2017-06-09  2:45 ` [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx Mark Yao
@ 2017-06-09  3:05 ` Mark Yao
  2017-06-09  3:18 ` [PATCH v2 3/4] drm/rockchip: dw_hdmi: introduce the VPLL clock setting Mark Yao
  2017-06-09  3:18 ` [PATCH v2 4/4] drm/rockchip: dw_hdmi: introduce the pclk for grf Mark Yao
  3 siblings, 0 replies; 7+ messages in thread
From: Mark Yao @ 2017-06-09  3:05 UTC (permalink / raw)
  To: David Airlie, Heiko Stuebner, Rob Herring, Mark Rutland
  Cc: dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel,
	devicetree, Mark Yao

RK3399 and RK3288 shared the same HDMI IP controller, only some light
difference with GRF configure.

base on Yakir Yang's rk3399 patch, rebase to newest upstrem kernel:
    https://patchwork.kernel.org/patch/9223323

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
Signed-off-by: Yakir Yang <ykk@rock-chips.com>

Changes in v2:
  reuse hdmi_phy_configure_dwc_hdmi_3d_tx for phy configure
  fixup Documentation

---
 .../bindings/display/rockchip/dw_hdmi-rockchip.txt |  3 +-
 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c        | 69 ++++++++++++++++++----
 2 files changed, 60 insertions(+), 12 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
index 046076c..495bcf5 100644
--- a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
+++ b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
@@ -11,7 +11,8 @@ following device-specific properties.
 
 Required properties:
 
-- compatible: Shall contain "rockchip,rk3288-dw-hdmi".
+- compatible: "rockchip,rk3288-dw-hdmi",
+              "rockchip,rk3399-dw-hdmi";
 - reg: See dw_hdmi.txt.
 - reg-io-width: See dw_hdmi.txt. Shall be 4.
 - interrupts: HDMI interrupt number
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 63dab6f..15a8989 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -20,13 +20,30 @@
 #include "rockchip_drm_drv.h"
 #include "rockchip_drm_vop.h"
 
-#define GRF_SOC_CON6                    0x025c
-#define HDMI_SEL_VOP_LIT                (1 << 4)
+#define RK3288_GRF_SOC_CON6		0x025C
+#define RK3288_HDMI_LCDC_SEL		BIT(4)
+#define RK3399_GRF_SOC_CON20		0x6250
+#define RK3399_HDMI_LCDC_SEL		BIT(6)
+
+#define HIWORD_UPDATE(val, mask)	(val | (mask) << 16)
+
+/**
+ * struct rockchip_hdmi_chip_data - splite the grf setting of kind of chips
+ * @lcdsel_grf_reg: grf register offset of lcdc select
+ * @lcdsel_big: reg value of selecting vop big for HDMI
+ * @lcdsel_lit: reg value of selecting vop little for HDMI
+ */
+struct rockchip_hdmi_chip_data {
+	u32	lcdsel_grf_reg;
+	u32	lcdsel_big;
+	u32	lcdsel_lit;
+};
 
 struct rockchip_hdmi {
 	struct device *dev;
 	struct regmap *regmap;
 	struct drm_encoder encoder;
+	const struct rockchip_hdmi_chip_data *chip_data;
 };
 
 #define to_rockchip_hdmi(x)	container_of(x, struct rockchip_hdmi, x)
@@ -198,17 +215,20 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
 {
 	struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
 	u32 val;
-	int mux;
+	int ret;
 
-	mux = drm_of_encoder_active_endpoint_id(hdmi->dev->of_node, encoder);
-	if (mux)
-		val = HDMI_SEL_VOP_LIT | (HDMI_SEL_VOP_LIT << 16);
+	ret = drm_of_encoder_active_endpoint_id(hdmi->dev->of_node, encoder);
+	if (ret)
+		val = hdmi->chip_data->lcdsel_lit;
 	else
-		val = HDMI_SEL_VOP_LIT << 16;
+		val = hdmi->chip_data->lcdsel_big;
+
+	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
+	if (ret != 0)
+		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
 
-	regmap_write(hdmi->regmap, GRF_SOC_CON6, val);
 	dev_dbg(hdmi->dev, "vop %s output to hdmi\n",
-		(mux) ? "LIT" : "BIG");
+		ret ? "LIT" : "BIG");
 }
 
 static int
@@ -232,16 +252,42 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
 	.atomic_check = dw_hdmi_rockchip_encoder_atomic_check,
 };
 
-static const struct dw_hdmi_plat_data rockchip_hdmi_drv_data = {
+static struct rockchip_hdmi_chip_data rk3288_chip_data = {
+	.lcdsel_grf_reg = RK3288_GRF_SOC_CON6,
+	.lcdsel_big = HIWORD_UPDATE(0, RK3288_HDMI_LCDC_SEL),
+	.lcdsel_lit = HIWORD_UPDATE(RK3288_HDMI_LCDC_SEL, RK3288_HDMI_LCDC_SEL),
+};
+
+static const struct dw_hdmi_plat_data rk3288_hdmi_drv_data = {
+	.mode_valid = dw_hdmi_rockchip_mode_valid,
+	.mpll_cfg   = rockchip_mpll_cfg,
+	.cur_ctr    = rockchip_cur_ctr,
+	.phy_config = rockchip_phy_config,
+	.configure_phy = hdmi_phy_configure_dwc_hdmi_3d_tx,
+	.phy_data = &rk3288_chip_data,
+};
+
+static struct rockchip_hdmi_chip_data rk3399_chip_data = {
+	.lcdsel_grf_reg = RK3399_GRF_SOC_CON20,
+	.lcdsel_big = HIWORD_UPDATE(0, RK3399_HDMI_LCDC_SEL),
+	.lcdsel_lit = HIWORD_UPDATE(RK3399_HDMI_LCDC_SEL, RK3399_HDMI_LCDC_SEL),
+};
+
+static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
 	.mode_valid = dw_hdmi_rockchip_mode_valid,
 	.mpll_cfg   = rockchip_mpll_cfg,
 	.cur_ctr    = rockchip_cur_ctr,
 	.phy_config = rockchip_phy_config,
+	.configure_phy = hdmi_phy_configure_dwc_hdmi_3d_tx,
+	.phy_data = &rk3399_chip_data,
 };
 
 static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = {
 	{ .compatible = "rockchip,rk3288-dw-hdmi",
-	  .data = &rockchip_hdmi_drv_data
+	  .data = &rk3288_hdmi_drv_data
+	},
+	{ .compatible = "rockchip,rk3399-dw-hdmi",
+	  .data = &rk3399_hdmi_drv_data
 	},
 	{},
 };
@@ -268,6 +314,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
 	match = of_match_node(dw_hdmi_rockchip_dt_ids, pdev->dev.of_node);
 	plat_data = match->data;
 	hdmi->dev = &pdev->dev;
+	hdmi->chip_data = plat_data->phy_data;
 	encoder = &hdmi->encoder;
 
 	encoder->possible_crtcs = drm_of_find_possible_crtcs(drm, dev->of_node);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 3/4] drm/rockchip: dw_hdmi: introduce the VPLL clock setting
  2017-06-09  2:41 [PATCH v2 0/4] Add RK3399 HDMI Support Mark Yao
  2017-06-09  2:45 ` [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx Mark Yao
  2017-06-09  3:05 ` [PATCH v2 2/4] drm/rockchip: dw_hdmi: add RK3399 HDMI support Mark Yao
@ 2017-06-09  3:18 ` Mark Yao
  2017-06-09  3:18 ` [PATCH v2 4/4] drm/rockchip: dw_hdmi: introduce the pclk for grf Mark Yao
  3 siblings, 0 replies; 7+ messages in thread
From: Mark Yao @ 2017-06-09  3:18 UTC (permalink / raw)
  To: David Airlie, Heiko Stuebner, Rob Herring, Mark Rutland
  Cc: dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel,
	devicetree, Mark Yao

For RK3399 HDMI, there is an external clock need for HDMI PHY,
and it should keep the same clock rate with VOP DCLK.

VPLL have supported the clock for HDMI PHY, but there is no
clock divider bewteen VPLL and HDMI PHY. So we need to set the
VPLL rate manually in HDMI driver.

Signed-off-by: Yakir Yang <ykk@rock-chips.com>
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>

Changes in v2: describe vpll on Documentation.
---
 .../bindings/display/rockchip/dw_hdmi-rockchip.txt |  2 +-
 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c        | 25 +++++++++++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
index 046076c..b76b7ee 100644
--- a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
+++ b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
@@ -30,7 +30,7 @@ Optional properties
   I2C master controller.
 - clock-names: See dw_hdmi.txt. The "cec" clock is optional.
 - clock-names: May contain "cec" as defined in dw_hdmi.txt.
-
+- clock-names: May contain "vpll", external clock for some hdmi phy.
 
 Example:
 
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 15a8989..69256cf 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -7,10 +7,12 @@
  * (at your option) any later version.
  */
 
+#include <linux/clk.h>
+#include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
-#include <linux/mfd/syscon.h>
 #include <linux/regmap.h>
+
 #include <drm/drm_of.h>
 #include <drm/drmP.h>
 #include <drm/drm_crtc_helper.h>
@@ -44,6 +46,7 @@ struct rockchip_hdmi {
 	struct regmap *regmap;
 	struct drm_encoder encoder;
 	const struct rockchip_hdmi_chip_data *chip_data;
+	struct clk *vpll_clk;
 };
 
 #define to_rockchip_hdmi(x)	container_of(x, struct rockchip_hdmi, x)
@@ -160,6 +163,7 @@ struct rockchip_hdmi {
 static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
 {
 	struct device_node *np = hdmi->dev->of_node;
+	int ret;
 
 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
 	if (IS_ERR(hdmi->regmap)) {
@@ -167,6 +171,22 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
 		return PTR_ERR(hdmi->regmap);
 	}
 
+	hdmi->vpll_clk = devm_clk_get(hdmi->dev, "vpll");
+	if (PTR_ERR(hdmi->vpll_clk) == -ENOENT) {
+		hdmi->vpll_clk = NULL;
+	} else if (PTR_ERR(hdmi->vpll_clk) == -EPROBE_DEFER) {
+		return -EPROBE_DEFER;
+	} else if (IS_ERR(hdmi->vpll_clk)) {
+		dev_err(hdmi->dev, "failed to get grf clock\n");
+		return PTR_ERR(hdmi->vpll_clk);
+	}
+
+	ret = clk_prepare_enable(hdmi->vpll_clk);
+	if (ret) {
+		dev_err(hdmi->dev, "Failed to enable HDMI vpll: %d\n", ret);
+		return ret;
+	}
+
 	return 0;
 }
 
@@ -209,6 +229,9 @@ static void dw_hdmi_rockchip_encoder_mode_set(struct drm_encoder *encoder,
 					      struct drm_display_mode *mode,
 					      struct drm_display_mode *adj_mode)
 {
+	struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
+
+	clk_set_rate(hdmi->vpll_clk, adj_mode->clock * 1000);
 }
 
 static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 4/4] drm/rockchip: dw_hdmi: introduce the pclk for grf
  2017-06-09  2:41 [PATCH v2 0/4] Add RK3399 HDMI Support Mark Yao
                   ` (2 preceding siblings ...)
  2017-06-09  3:18 ` [PATCH v2 3/4] drm/rockchip: dw_hdmi: introduce the VPLL clock setting Mark Yao
@ 2017-06-09  3:18 ` Mark Yao
  3 siblings, 0 replies; 7+ messages in thread
From: Mark Yao @ 2017-06-09  3:18 UTC (permalink / raw)
  To: David Airlie, Heiko Stuebner, Rob Herring, Mark Rutland
  Cc: dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel,
	devicetree, Mark Yao

For RK3399's GRF module, if we want to operate the graphic related grf
registers, we need to enable the pclk_vio_grf which supply power for VIO
GRF IOs, so it's better to introduce an optional grf clock in driver.

Signed-off-by: Yakir Yang <ykk@rock-chips.com>
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>

Changes in v2: describe grf on Documentation.
---

 .../bindings/display/rockchip/dw_hdmi-rockchip.txt     |  1 +
 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c            | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
index b76b7ee..b4ef61a 100644
--- a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
+++ b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
@@ -30,6 +30,7 @@ Optional properties
   I2C master controller.
 - clock-names: See dw_hdmi.txt. The "cec" clock is optional.
 - clock-names: May contain "cec" as defined in dw_hdmi.txt.
+- clock-names: May contain "grf", power for grf io.
 - clock-names: May contain "vpll", external clock for some hdmi phy.
 
 Example:
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 69256cf..a090fc6 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -47,6 +47,7 @@ struct rockchip_hdmi {
 	struct drm_encoder encoder;
 	const struct rockchip_hdmi_chip_data *chip_data;
 	struct clk *vpll_clk;
+	struct clk *grf_clk;
 };
 
 #define to_rockchip_hdmi(x)	container_of(x, struct rockchip_hdmi, x)
@@ -181,6 +182,16 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
 		return PTR_ERR(hdmi->vpll_clk);
 	}
 
+	hdmi->grf_clk = devm_clk_get(hdmi->dev, "grf");
+	if (PTR_ERR(hdmi->grf_clk) == -ENOENT) {
+		hdmi->grf_clk = NULL;
+	} else if (PTR_ERR(hdmi->grf_clk) == -EPROBE_DEFER) {
+		return -EPROBE_DEFER;
+	} else if (IS_ERR(hdmi->grf_clk)) {
+		dev_err(hdmi->dev, "failed to get grf clock\n");
+		return PTR_ERR(hdmi->grf_clk);
+	}
+
 	ret = clk_prepare_enable(hdmi->vpll_clk);
 	if (ret) {
 		dev_err(hdmi->dev, "Failed to enable HDMI vpll: %d\n", ret);
@@ -246,10 +257,17 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
 	else
 		val = hdmi->chip_data->lcdsel_big;
 
+	ret = clk_prepare_enable(hdmi->grf_clk);
+	if (ret < 0) {
+		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
+		return;
+	}
+
 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
 	if (ret != 0)
 		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
 
+	clk_disable_unprepare(hdmi->grf_clk);
 	dev_dbg(hdmi->dev, "vop %s output to hdmi\n",
 		ret ? "LIT" : "BIG");
 }
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx
  2017-06-09  2:45 ` [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx Mark Yao
@ 2017-06-09  4:03   ` Mark yao
  2017-06-09  8:37     ` Jose Abreu
  0 siblings, 1 reply; 7+ messages in thread
From: Mark yao @ 2017-06-09  4:03 UTC (permalink / raw)
  To: Archit Taneja, David Airlie, Laurent Pinchart, Jose Abreu,
	Neil Armstrong, Daniel Vetter, Kieran Bingham
  Cc: dri-devel, linux-kernel

Ignore this patch, Jose has a better patch to solve rk3399 hdmi phy 
configure.

Hi Jose

Sorry for missing your patch about hdmi 2.0 vendor phy fixup: 
https://patchwork.kernel.org/patch/9702229
It works fine on rk3399/rk3288, can you resend a standard patch to upstream?

Thanks

On 2017年06月09日 10:45, Mark Yao wrote:
> So dw-hdmi vendor driver can reuse hdmi_phy_configure_dwc_hdmi_3d_tx
> to configure their hardware.
>
> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
> ---
>   drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 ++-
>   include/drm/bridge/dw_hdmi.h              | 3 +++
>   2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> index 4e1f54a..c1ceec7 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> @@ -1097,7 +1097,7 @@ static int dw_hdmi_phy_power_on(struct dw_hdmi *hdmi)
>    * information the DWC MHL PHY has the same register layout and is thus also
>    * supported by this function.
>    */
> -static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
> +int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
>   		const struct dw_hdmi_plat_data *pdata,
>   		unsigned long mpixelclock)
>   {
> @@ -1146,6 +1146,7 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
>   
>   	return 0;
>   }
> +EXPORT_SYMBOL_GPL(hdmi_phy_configure_dwc_hdmi_3d_tx);
>   
>   static int hdmi_phy_configure(struct dw_hdmi *hdmi)
>   {
> diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
> index ed599be..7eb67e6 100644
> --- a/include/drm/bridge/dw_hdmi.h
> +++ b/include/drm/bridge/dw_hdmi.h
> @@ -150,6 +150,9 @@ int dw_hdmi_probe(struct platform_device *pdev,
>   int dw_hdmi_bind(struct platform_device *pdev, struct drm_encoder *encoder,
>   		 const struct dw_hdmi_plat_data *plat_data);
>   
> +int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
> +		const struct dw_hdmi_plat_data *pdata,
> +		unsigned long mpixelclock);
>   void dw_hdmi_setup_rx_sense(struct device *dev, bool hpd, bool rx_sense);
>   
>   void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate);


-- 
Mark Yao

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx
  2017-06-09  4:03   ` Mark yao
@ 2017-06-09  8:37     ` Jose Abreu
  0 siblings, 0 replies; 7+ messages in thread
From: Jose Abreu @ 2017-06-09  8:37 UTC (permalink / raw)
  To: Mark yao
  Cc: Archit Taneja, David Airlie, Laurent Pinchart, Jose Abreu,
	Neil Armstrong, Daniel Vetter, Kieran Bingham, dri-devel,
	linux-kernel

Hi Mark,


On 09-06-2017 05:03, Mark yao wrote:
> Ignore this patch, Jose has a better patch to solve rk3399 hdmi
> phy configure.
>
> Hi Jose
>
> Sorry for missing your patch about hdmi 2.0 vendor phy fixup:
> https://urldefense.proofpoint.com/v2/url?u=https-3A__patchwork.kernel.org_patch_9702229&d=DwIDaQ&c=DPL6_X_6JkXFx7AXWqB0tg&r=WHDsc6kcWAl4i96Vm5hJ_19IJiuxx_p_Rzo2g-uHDKw&m=8R_vb_WsWrT4y-nLrSn1RBR3e11-CkyKvht1NtJ2ZgM&s=ajY_TW_nm7T6pUv_I9ZZctUjTaEEDe9BnF-mnlvxEEs&e=
> It works fine on rk3399/rk3288, can you resend a standard patch
> to upstream?

Sure. I forgot to send this earlier. I will send it today.

Best regards,
Jose Miguel Abreu

>
> Thanks
>
> On 2017年06月09日 10:45, Mark Yao wrote:
>> So dw-hdmi vendor driver can reuse
>> hdmi_phy_configure_dwc_hdmi_3d_tx
>> to configure their hardware.
>>
>> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
>> ---
>>   drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 ++-
>>   include/drm/bridge/dw_hdmi.h              | 3 +++
>>   2 files changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>> b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>> index 4e1f54a..c1ceec7 100644
>> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
>> @@ -1097,7 +1097,7 @@ static int dw_hdmi_phy_power_on(struct
>> dw_hdmi *hdmi)
>>    * information the DWC MHL PHY has the same register layout
>> and is thus also
>>    * supported by this function.
>>    */
>> -static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi
>> *hdmi,
>> +int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
>>           const struct dw_hdmi_plat_data *pdata,
>>           unsigned long mpixelclock)
>>   {
>> @@ -1146,6 +1146,7 @@ static int
>> hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
>>         return 0;
>>   }
>> +EXPORT_SYMBOL_GPL(hdmi_phy_configure_dwc_hdmi_3d_tx);
>>     static int hdmi_phy_configure(struct dw_hdmi *hdmi)
>>   {
>> diff --git a/include/drm/bridge/dw_hdmi.h
>> b/include/drm/bridge/dw_hdmi.h
>> index ed599be..7eb67e6 100644
>> --- a/include/drm/bridge/dw_hdmi.h
>> +++ b/include/drm/bridge/dw_hdmi.h
>> @@ -150,6 +150,9 @@ int dw_hdmi_probe(struct platform_device
>> *pdev,
>>   int dw_hdmi_bind(struct platform_device *pdev, struct
>> drm_encoder *encoder,
>>            const struct dw_hdmi_plat_data *plat_data);
>>   +int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
>> +        const struct dw_hdmi_plat_data *pdata,
>> +        unsigned long mpixelclock);
>>   void dw_hdmi_setup_rx_sense(struct device *dev, bool hpd,
>> bool rx_sense);
>>     void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi,
>> unsigned int rate);
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-06-09  8:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-09  2:41 [PATCH v2 0/4] Add RK3399 HDMI Support Mark Yao
2017-06-09  2:45 ` [PATCH 1/4] drm: bridge: dw-hdmi: Export hdmi_phy_configure_dwc_hdmi_3d_tx Mark Yao
2017-06-09  4:03   ` Mark yao
2017-06-09  8:37     ` Jose Abreu
2017-06-09  3:05 ` [PATCH v2 2/4] drm/rockchip: dw_hdmi: add RK3399 HDMI support Mark Yao
2017-06-09  3:18 ` [PATCH v2 3/4] drm/rockchip: dw_hdmi: introduce the VPLL clock setting Mark Yao
2017-06-09  3:18 ` [PATCH v2 4/4] drm/rockchip: dw_hdmi: introduce the pclk for grf Mark Yao

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).