* [PATCH 1/8] drm/rockchip: dw_hdmi: update dw_hdmi_rockchip_dt_ids
[not found] <1506339543-46171-0>
@ 2017-09-25 11:40 ` Algea Cao
2017-09-25 11:41 ` [PATCH 2/8] drm/rockchip: dw_hdmi: add device type Algea Cao
` (6 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:40 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Add rk3328-dw-hdmi to support rk3328.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index ccd5d59..b031005 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -313,6 +313,10 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = {
.lcdsel_lit = HIWORD_UPDATE(RK3399_HDMI_LCDC_SEL, RK3399_HDMI_LCDC_SEL),
};
+static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
+ .mode_valid = dw_hdmi_rockchip_mode_valid,
+};
+
static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
.mode_valid = dw_hdmi_rockchip_mode_valid,
.mpll_cfg = rockchip_mpll_cfg,
@@ -328,6 +332,9 @@ static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = {
{ .compatible = "rockchip,rk3399-dw-hdmi",
.data = &rk3399_hdmi_drv_data
},
+ { .compatible = "rockchip,rk3328-dw-hdmi",
+ .data = &rk3328_hdmi_drv_data
+ },
{},
};
MODULE_DEVICE_TABLE(of, dw_hdmi_rockchip_dt_ids);
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/8] drm/rockchip: dw_hdmi: add device type
[not found] <1506339543-46171-0>
2017-09-25 11:40 ` [PATCH 1/8] drm/rockchip: dw_hdmi: update dw_hdmi_rockchip_dt_ids Algea Cao
@ 2017-09-25 11:41 ` Algea Cao
2017-09-25 11:41 ` [PATCH 3/8] drm: bridge: dw-hdmi: change hdmi phy hpd read function to export Algea Cao
` (5 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:41 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
To determine type of SOC, we add a parameter dev_type.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 5 +++++
include/drm/bridge/dw_hdmi.h | 10 ++++++++++
2 files changed, 15 insertions(+)
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index b031005..fdab383 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -46,6 +46,7 @@ struct rockchip_hdmi {
struct regmap *regmap;
struct drm_encoder encoder;
const struct rockchip_hdmi_chip_data *chip_data;
+ enum dw_hdmi_devtype dev_type;
struct clk *vpll_clk;
struct clk *grf_clk;
};
@@ -305,6 +306,7 @@ static const struct dw_hdmi_plat_data rk3288_hdmi_drv_data = {
.cur_ctr = rockchip_cur_ctr,
.phy_config = rockchip_phy_config,
.phy_data = &rk3288_chip_data,
+ .dev_type = RK3288_HDMI,
};
static struct rockchip_hdmi_chip_data rk3399_chip_data = {
@@ -315,6 +317,7 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = {
static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
.mode_valid = dw_hdmi_rockchip_mode_valid,
+ .dev_type = RK3328_HDMI,
};
static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
@@ -323,6 +326,7 @@ static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
.cur_ctr = rockchip_cur_ctr,
.phy_config = rockchip_phy_config,
.phy_data = &rk3399_chip_data,
+ .dev_type = RK3399_HDMI,
};
static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = {
@@ -361,6 +365,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
plat_data = match->data;
hdmi->dev = &pdev->dev;
hdmi->chip_data = plat_data->phy_data;
+ hdmi->dev_type = plat_data->dev_type;
encoder = &hdmi->encoder;
encoder->possible_crtcs = drm_of_find_possible_crtcs(drm, dev->of_node);
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
index 182f832..fdb1f0a 100644
--- a/include/drm/bridge/dw_hdmi.h
+++ b/include/drm/bridge/dw_hdmi.h
@@ -92,6 +92,15 @@ enum dw_hdmi_phy_type {
DW_HDMI_PHY_VENDOR_PHY = 0xfe,
};
+enum dw_hdmi_devtype {
+ RK3228_HDMI,
+ RK3288_HDMI,
+ RK3328_HDMI,
+ RK3366_HDMI,
+ RK3368_HDMI,
+ RK3399_HDMI,
+};
+
struct dw_hdmi_mpll_config {
unsigned long mpixelclock;
struct {
@@ -124,6 +133,7 @@ struct dw_hdmi_phy_ops {
struct dw_hdmi_plat_data {
struct regmap *regm;
+ enum dw_hdmi_devtype dev_type;
enum drm_mode_status (*mode_valid)(struct drm_connector *connector,
const struct drm_display_mode *mode);
unsigned long input_bus_format;
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/8] drm: bridge: dw-hdmi: change hdmi phy hpd read function to export
[not found] <1506339543-46171-0>
2017-09-25 11:40 ` [PATCH 1/8] drm/rockchip: dw_hdmi: update dw_hdmi_rockchip_dt_ids Algea Cao
2017-09-25 11:41 ` [PATCH 2/8] drm/rockchip: dw_hdmi: add device type Algea Cao
@ 2017-09-25 11:41 ` Algea Cao
2017-09-25 11:42 ` [PATCH 4/8] drm/rockchip: dw_hdmi: add inno hdmi phy ops Algea Cao
` (4 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:41 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Change dw_hdmi_phy_read_hpd from static to export.
inno hdmi phy ops will call this interface to get
hpd status.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 5 +++--
include/drm/bridge/dw_hdmi.h | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 5e023cb..5adb04b 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -1239,12 +1239,13 @@ static void dw_hdmi_phy_disable(struct dw_hdmi *hdmi, void *data)
dw_hdmi_phy_power_off(hdmi);
}
-static enum drm_connector_status dw_hdmi_phy_read_hpd(struct dw_hdmi *hdmi,
- void *data)
+enum drm_connector_status dw_hdmi_phy_read_hpd(struct dw_hdmi *hdmi,
+ void *data)
{
return hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_HPD ?
connector_status_connected : connector_status_disconnected;
}
+EXPORT_SYMBOL_GPL(dw_hdmi_phy_read_hpd);
static void dw_hdmi_phy_update_hpd(struct dw_hdmi *hdmi, void *data,
bool force, bool disabled, bool rxsense)
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
index fdb1f0a..01e4979 100644
--- a/include/drm/bridge/dw_hdmi.h
+++ b/include/drm/bridge/dw_hdmi.h
@@ -161,7 +161,8 @@ int dw_hdmi_bind(struct platform_device *pdev, struct drm_encoder *encoder,
const struct dw_hdmi_plat_data *plat_data);
void dw_hdmi_setup_rx_sense(struct device *dev, bool hpd, bool rx_sense);
-
+enum drm_connector_status dw_hdmi_phy_read_hpd(struct dw_hdmi *hdmi,
+ void *data);
void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate);
void dw_hdmi_audio_enable(struct dw_hdmi *hdmi);
void dw_hdmi_audio_disable(struct dw_hdmi *hdmi);
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/8] drm/rockchip: dw_hdmi: add inno hdmi phy ops
[not found] <1506339543-46171-0>
` (2 preceding siblings ...)
2017-09-25 11:41 ` [PATCH 3/8] drm: bridge: dw-hdmi: change hdmi phy hpd read function to export Algea Cao
@ 2017-09-25 11:42 ` Algea Cao
2017-09-25 11:42 ` [PATCH 5/8] drm/rockchip: dw_hdmi: add hclk_vio Algea Cao
` (3 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:42 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Because some RK chips use inno hdmi phy, such as RK3328, we add
inno hdmi phy ops. Ultimately, these ops will call functions in
/drivers/phy/rockchip/phy-rockchip-inno-hdmi-phy.c.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 110 +++++++++++++++++++++++++++-
1 file changed, 107 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index fdab383..35b466b 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -12,7 +12,7 @@
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
-
+#include <linux/phy/phy.h>
#include <drm/drm_of.h>
#include <drm/drmP.h>
#include <drm/drm_crtc_helper.h>
@@ -26,6 +26,18 @@
#define RK3288_HDMI_LCDC_SEL BIT(4)
#define RK3399_GRF_SOC_CON20 0x6250
#define RK3399_HDMI_LCDC_SEL BIT(6)
+#define RK3328_GRF_SOC_CON2 0x0408
+#define RK3328_DDC_MASK_EN ((3 << 10) | (3 << (10 + 16)))
+#define RK3328_GRF_SOC_CON3 0x040c
+#define RK3328_IO_CTRL_BY_HDMI (0xf0000000 | BIT(13) | BIT(12))
+#define RK3328_GRF_SOC_CON4 0x0410
+#define RK3328_IO_3V_DOMAIN (7 << (9 + 16))
+#define RK3328_IO_5V_DOMAIN ((7 << 9) | (3 << (9 + 16)))
+#define RK3328_HPD_3V (BIT(8 + 16) | BIT(13 + 16))
+#define RK3228_GRF_SOC_CON2 0x0408
+#define RK3228_DDC_MASK_EN ((3 << 13) | (3 << (13 + 16)))
+#define RK3228_GRF_SOC_CON6 0x0418
+#define RK3228_IO_3V_DOMAIN ((7 << 4) | (7 << (4 + 16)))
#define HIWORD_UPDATE(val, mask) (val | (mask) << 16)
@@ -49,10 +61,82 @@ struct rockchip_hdmi {
enum dw_hdmi_devtype dev_type;
struct clk *vpll_clk;
struct clk *grf_clk;
+ struct phy *phy;
};
#define to_rockchip_hdmi(x) container_of(x, struct rockchip_hdmi, x)
+static int
+inno_dw_hdmi_phy_init(struct dw_hdmi *dw_hdmi, void *data,
+ struct drm_display_mode *mode)
+{
+ struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
+
+ return phy_power_on(hdmi->phy);
+}
+
+static void inno_dw_hdmi_phy_disable(struct dw_hdmi *dw_hdmi, void *data)
+{
+ struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
+
+ phy_power_off(hdmi->phy);
+}
+
+static enum drm_connector_status
+inno_dw_hdmi_phy_read_hpd(struct dw_hdmi *dw_hdmi, void *data)
+{
+ struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
+ enum drm_connector_status status;
+
+ status = dw_hdmi_phy_read_hpd(dw_hdmi, data);
+
+ if (hdmi->dev_type == RK3228_HDMI)
+ return status;
+
+ if (status == connector_status_connected)
+ regmap_write(hdmi->regmap,
+ RK3328_GRF_SOC_CON4,
+ RK3328_IO_5V_DOMAIN);
+ else
+ regmap_write(hdmi->regmap,
+ RK3328_GRF_SOC_CON4,
+ RK3328_IO_3V_DOMAIN);
+ return status;
+}
+
+static int inno_dw_hdmi_init(struct rockchip_hdmi *hdmi)
+{
+ int ret;
+
+ ret = clk_prepare_enable(hdmi->grf_clk);
+ if (ret < 0) {
+ dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
+ return -EPROBE_DEFER;
+ }
+ if (hdmi->dev_type == RK3328_HDMI) {
+ /* Map HPD pin to 3V io */
+ regmap_write(hdmi->regmap,
+ RK3328_GRF_SOC_CON4,
+ RK3328_IO_3V_DOMAIN |
+ RK3328_HPD_3V);
+ /* Map ddc pin to 5V io */
+ regmap_write(hdmi->regmap,
+ RK3328_GRF_SOC_CON3,
+ RK3328_IO_CTRL_BY_HDMI);
+ regmap_write(hdmi->regmap,
+ RK3328_GRF_SOC_CON2,
+ RK3328_DDC_MASK_EN |
+ BIT(18));
+ } else {
+ regmap_write(hdmi->regmap, RK3228_GRF_SOC_CON2,
+ RK3228_DDC_MASK_EN);
+ regmap_write(hdmi->regmap, RK3228_GRF_SOC_CON6,
+ RK3228_IO_3V_DOMAIN);
+ }
+ clk_disable_unprepare(hdmi->grf_clk);
+ return 0;
+}
+
static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = {
{
27000000, {
@@ -294,6 +378,12 @@ static const struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_fun
.atomic_check = dw_hdmi_rockchip_encoder_atomic_check,
};
+static const struct dw_hdmi_phy_ops inno_dw_hdmi_phy_ops = {
+ .init = inno_dw_hdmi_phy_init,
+ .disable = inno_dw_hdmi_phy_disable,
+ .read_hpd = inno_dw_hdmi_phy_read_hpd,
+};
+
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),
@@ -317,6 +407,8 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = {
static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
.mode_valid = dw_hdmi_rockchip_mode_valid,
+ .phy_ops = &inno_dw_hdmi_phy_ops,
+ .phy_name = "inno_dw_hdmi_phy2",
.dev_type = RK3328_HDMI,
};
@@ -347,7 +439,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
void *data)
{
struct platform_device *pdev = to_platform_device(dev);
- const struct dw_hdmi_plat_data *plat_data;
+ struct dw_hdmi_plat_data *plat_data;
const struct of_device_id *match;
struct drm_device *drm = data;
struct drm_encoder *encoder;
@@ -362,7 +454,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
return -ENOMEM;
match = of_match_node(dw_hdmi_rockchip_dt_ids, pdev->dev.of_node);
- plat_data = match->data;
+ plat_data = (struct dw_hdmi_plat_data *)match->data;
hdmi->dev = &pdev->dev;
hdmi->chip_data = plat_data->phy_data;
hdmi->dev_type = plat_data->dev_type;
@@ -384,6 +476,18 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
return ret;
}
+ if (hdmi->dev_type == RK3328_HDMI || hdmi->dev_type == RK3228_HDMI) {
+ hdmi->phy = devm_phy_get(dev, "hdmi_phy");
+ if (IS_ERR(hdmi->phy)) {
+ ret = PTR_ERR(hdmi->phy);
+ dev_err(dev, "failed to get phy: %d\n", ret);
+ return ret;
+ }
+ plat_data->phy_data = hdmi;
+ ret = inno_dw_hdmi_init(hdmi);
+ if (ret < 0)
+ return ret;
+ }
drm_encoder_helper_add(encoder, &dw_hdmi_rockchip_encoder_helper_funcs);
drm_encoder_init(drm, encoder, &dw_hdmi_rockchip_encoder_funcs,
DRM_MODE_ENCODER_TMDS, NULL);
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/8] drm/rockchip: dw_hdmi: add hclk_vio
[not found] <1506339543-46171-0>
` (3 preceding siblings ...)
2017-09-25 11:42 ` [PATCH 4/8] drm/rockchip: dw_hdmi: add inno hdmi phy ops Algea Cao
@ 2017-09-25 11:42 ` Algea Cao
2017-09-25 11:43 ` [PATCH 6/8] drm/rockchip: dw_hdmi: update dw-hdmi encoder enable Algea Cao
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:42 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Add clk hclk_vio and enable it when hdmi bind.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 35b466b..ab44e13 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -61,6 +61,7 @@ struct rockchip_hdmi {
enum dw_hdmi_devtype dev_type;
struct clk *vpll_clk;
struct clk *grf_clk;
+ struct clk *hclk_vio;
struct phy *phy;
};
@@ -277,12 +278,27 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
return PTR_ERR(hdmi->grf_clk);
}
+ hdmi->hclk_vio = devm_clk_get(hdmi->dev, "hclk_vio");
+ if (PTR_ERR(hdmi->hclk_vio) == -ENOENT) {
+ hdmi->hclk_vio = NULL;
+ } else if (PTR_ERR(hdmi->hclk_vio) == -EPROBE_DEFER) {
+ return -EPROBE_DEFER;
+ } else if (IS_ERR(hdmi->hclk_vio)) {
+ dev_dbg(hdmi->dev, "failed to get hclk_vio clock\n");
+ return PTR_ERR(hdmi->hclk_vio);
+ }
ret = clk_prepare_enable(hdmi->vpll_clk);
if (ret) {
dev_err(hdmi->dev, "Failed to enable HDMI vpll: %d\n", ret);
return ret;
}
+ ret = clk_prepare_enable(hdmi->hclk_vio);
+ if (ret) {
+ dev_dbg(hdmi->dev, "Failed to eanble HDMI hclk_vio: %d\n",
+ ret);
+ return ret;
+ }
return 0;
}
@@ -507,6 +523,11 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
static void dw_hdmi_rockchip_unbind(struct device *dev, struct device *master,
void *data)
{
+ struct rockchip_hdmi *hdmi = container_of(&dev, struct rockchip_hdmi,
+ dev);
+
+ clk_disable_unprepare(hdmi->hclk_vio);
+
return dw_hdmi_unbind(dev);
}
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/8] drm/rockchip: dw_hdmi: update dw-hdmi encoder enable
[not found] <1506339543-46171-0>
` (4 preceding siblings ...)
2017-09-25 11:42 ` [PATCH 5/8] drm/rockchip: dw_hdmi: add hclk_vio Algea Cao
@ 2017-09-25 11:43 ` Algea Cao
2017-09-25 11:43 ` [PATCH 7/8] drm: bridge: dw-hdmi: get phy ops by device type Algea Cao
2017-09-25 11:43 ` [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile Algea Cao
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:43 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Writing grf register according to device type.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index ab44e13..e86ea47 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -349,9 +349,26 @@ static void dw_hdmi_rockchip_encoder_mode_set(struct drm_encoder *encoder,
static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
{
struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
- u32 val;
+ struct drm_crtc *crtc = encoder->crtc;
+ u32 val, lcdsel_grf_reg, lcdsel_mask;
int ret;
+ if (WARN_ON(!crtc || !crtc->state))
+ return;
+
+ switch (hdmi->dev_type) {
+ case RK3288_HDMI:
+ lcdsel_grf_reg = RK3288_GRF_SOC_CON6;
+ lcdsel_mask = RK3288_HDMI_LCDC_SEL;
+ break;
+ case RK3399_HDMI:
+ lcdsel_grf_reg = RK3399_GRF_SOC_CON20;
+ lcdsel_mask = RK3399_HDMI_LCDC_SEL;
+ break;
+ default:
+ return;
+ }
+
ret = drm_of_encoder_active_endpoint_id(hdmi->dev->of_node, encoder);
if (ret)
val = hdmi->chip_data->lcdsel_lit;
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/8] drm: bridge: dw-hdmi: get phy ops by device type
[not found] <1506339543-46171-0>
` (5 preceding siblings ...)
2017-09-25 11:43 ` [PATCH 6/8] drm/rockchip: dw_hdmi: update dw-hdmi encoder enable Algea Cao
@ 2017-09-25 11:43 ` Algea Cao
2017-09-25 11:43 ` [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile Algea Cao
7 siblings, 0 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:43 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Add device type to distinguish different chips.Different chips
use different phy ops, get them by device type.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 6 +++++-
1 file 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 5adb04b..bfb76cd 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -139,6 +139,7 @@ struct dw_hdmi {
const struct dw_hdmi_plat_data *plat_data;
int vic;
+ enum dw_hdmi_devtype dev_type;
u8 edid[HDMI_EDID_LEN];
bool cable_plugin;
@@ -2185,7 +2186,9 @@ static int dw_hdmi_detect_phy(struct dw_hdmi *hdmi)
phy_type = hdmi_readb(hdmi, HDMI_CONFIG2_ID);
- if (phy_type == DW_HDMI_PHY_VENDOR_PHY) {
+ if (phy_type == DW_HDMI_PHY_VENDOR_PHY ||
+ hdmi->dev_type == RK3328_HDMI ||
+ hdmi->dev_type == RK3228_HDMI) {
/* Vendor PHYs require support from the glue layer. */
if (!hdmi->plat_data->phy_ops || !hdmi->plat_data->phy_name) {
dev_err(hdmi->dev,
@@ -2257,6 +2260,7 @@ __dw_hdmi_probe(struct platform_device *pdev,
if (!hdmi)
return ERR_PTR(-ENOMEM);
+ hdmi->dev_type = plat_data->dev_type;
hdmi->plat_data = plat_data;
hdmi->dev = dev;
hdmi->sample_rate = 48000;
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile
[not found] <1506339543-46171-0>
` (6 preceding siblings ...)
2017-09-25 11:43 ` [PATCH 7/8] drm: bridge: dw-hdmi: get phy ops by device type Algea Cao
@ 2017-09-25 11:43 ` Algea Cao
2017-09-27 8:56 ` kbuild test robot
` (2 more replies)
7 siblings, 3 replies; 11+ messages in thread
From: Algea Cao @ 2017-09-25 11:43 UTC (permalink / raw)
To: daniel.vetter, jani.nikula, seanpaul, airlied, dri-devel
Cc: Algea Cao, yang.zheng, kever.yang
Support some SOCs,such as RK3328.
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
---
drivers/phy/rockchip/Kconfig | 7 +++++++
drivers/phy/rockchip/Makefile | 1 +
2 files changed, 8 insertions(+)
diff --git a/drivers/phy/rockchip/Kconfig b/drivers/phy/rockchip/Kconfig
index f5325b2..b021dc7 100644
--- a/drivers/phy/rockchip/Kconfig
+++ b/drivers/phy/rockchip/Kconfig
@@ -8,6 +8,13 @@ config PHY_ROCKCHIP_DP
help
Enable this to support the Rockchip Display Port PHY.
+config PHY_ROCKCHIP_INNO_HDMI_PHY
+ tristate "Rockchip INNO HDMI PHY Driver"
+ depends on ARCH_ROCKCHIP && OF
+ select GENERIC_PHY
+ help
+ Enable this to support the Rockchip HDMI PHY with Innosilicon IP block.
+
config PHY_ROCKCHIP_EMMC
tristate "Rockchip EMMC PHY Driver"
depends on ARCH_ROCKCHIP && OF
diff --git a/drivers/phy/rockchip/Makefile b/drivers/phy/rockchip/Makefile
index bd0acdf..6c1adc0 100644
--- a/drivers/phy/rockchip/Makefile
+++ b/drivers/phy/rockchip/Makefile
@@ -4,3 +4,4 @@ obj-$(CONFIG_PHY_ROCKCHIP_INNO_USB2) += phy-rockchip-inno-usb2.o
obj-$(CONFIG_PHY_ROCKCHIP_PCIE) += phy-rockchip-pcie.o
obj-$(CONFIG_PHY_ROCKCHIP_TYPEC) += phy-rockchip-typec.o
obj-$(CONFIG_PHY_ROCKCHIP_USB) += phy-rockchip-usb.o
+obj-$(CONFIG_PHY_ROCKCHIP_INNO_HDMI_PHY) += phy-rockchip-inno-hdmi-phy.o
\ No newline at end of file
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile
2017-09-25 11:43 ` [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile Algea Cao
@ 2017-09-27 8:56 ` kbuild test robot
2017-09-27 10:16 ` kbuild test robot
2017-12-09 11:39 ` Heiko Stuebner
2 siblings, 0 replies; 11+ messages in thread
From: kbuild test robot @ 2017-09-27 8:56 UTC (permalink / raw)
Cc: Algea Cao, kever.yang, dri-devel, kbuild-all, daniel.vetter,
yang.zheng
[-- Attachment #1: Type: text/plain, Size: 1172 bytes --]
Hi Algea,
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on v4.14-rc2 next-20170927]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Algea-Cao/drm-rockchip-dw_hdmi-update-dw_hdmi_rockchip_dt_ids/20170927-114356
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: arm64-allyesconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm64
All errors (new ones prefixed by >>):
>> make[4]: *** No rule to make target 'drivers/phy/rockchip/phy-rockchip-inno-hdmi-phy.o', needed by 'drivers/phy/rockchip/built-in.o'.
make[4]: Target '__build' not remade because of errors.
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 57643 bytes --]
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile
2017-09-25 11:43 ` [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile Algea Cao
2017-09-27 8:56 ` kbuild test robot
@ 2017-09-27 10:16 ` kbuild test robot
2017-12-09 11:39 ` Heiko Stuebner
2 siblings, 0 replies; 11+ messages in thread
From: kbuild test robot @ 2017-09-27 10:16 UTC (permalink / raw)
Cc: Algea Cao, kever.yang, dri-devel, kbuild-all, daniel.vetter,
yang.zheng
[-- Attachment #1: Type: text/plain, Size: 1186 bytes --]
Hi Algea,
[auto build test ERROR on rockchip/for-next]
[also build test ERROR on v4.14-rc2 next-20170927]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Algea-Cao/drm-rockchip-dw_hdmi-update-dw_hdmi_rockchip_dt_ids/20170927-114356
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm
All errors (new ones prefixed by >>):
>> make[4]: *** No rule to make target 'drivers/phy/rockchip/phy-rockchip-inno-hdmi-phy.c', needed by 'drivers/phy/rockchip/phy-rockchip-inno-hdmi-phy.o'.
make[4]: Target '__build' not remade because of errors.
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 64012 bytes --]
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile
2017-09-25 11:43 ` [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile Algea Cao
2017-09-27 8:56 ` kbuild test robot
2017-09-27 10:16 ` kbuild test robot
@ 2017-12-09 11:39 ` Heiko Stuebner
2 siblings, 0 replies; 11+ messages in thread
From: Heiko Stuebner @ 2017-12-09 11:39 UTC (permalink / raw)
To: dri-devel; +Cc: Algea Cao, airlied, kever.yang, daniel.vetter, yang.zheng
Hi Algea,
Am Montag, 25. September 2017, 19:43:56 CET schrieb Algea Cao:
> Support some SOCs,such as RK3328.
>
> Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
I've tried tracking down the 8 patches of this series,
but the only one I could find was this patch 8/8.
Are you still working on this and could you resend
the series (potentially rebased onto a recent kernel)
including the same lists for all patches please?
(dri-devel but also linux-rockchip)
Thanks
Heiko
> drivers/phy/rockchip/Kconfig | 7 +++++++
> drivers/phy/rockchip/Makefile | 1 +
> 2 files changed, 8 insertions(+)
>
> diff --git a/drivers/phy/rockchip/Kconfig b/drivers/phy/rockchip/Kconfig
> index f5325b2..b021dc7 100644
> --- a/drivers/phy/rockchip/Kconfig
> +++ b/drivers/phy/rockchip/Kconfig
> @@ -8,6 +8,13 @@ config PHY_ROCKCHIP_DP
> help
> Enable this to support the Rockchip Display Port PHY.
>
> +config PHY_ROCKCHIP_INNO_HDMI_PHY
> + tristate "Rockchip INNO HDMI PHY Driver"
> + depends on ARCH_ROCKCHIP && OF
> + select GENERIC_PHY
> + help
> + Enable this to support the Rockchip HDMI PHY with Innosilicon IP block.
> +
> config PHY_ROCKCHIP_EMMC
> tristate "Rockchip EMMC PHY Driver"
> depends on ARCH_ROCKCHIP && OF
> diff --git a/drivers/phy/rockchip/Makefile b/drivers/phy/rockchip/Makefile
> index bd0acdf..6c1adc0 100644
> --- a/drivers/phy/rockchip/Makefile
> +++ b/drivers/phy/rockchip/Makefile
> @@ -4,3 +4,4 @@ obj-$(CONFIG_PHY_ROCKCHIP_INNO_USB2) += phy-rockchip-inno-usb2.o
> obj-$(CONFIG_PHY_ROCKCHIP_PCIE) += phy-rockchip-pcie.o
> obj-$(CONFIG_PHY_ROCKCHIP_TYPEC) += phy-rockchip-typec.o
> obj-$(CONFIG_PHY_ROCKCHIP_USB) += phy-rockchip-usb.o
> +obj-$(CONFIG_PHY_ROCKCHIP_INNO_HDMI_PHY) += phy-rockchip-inno-hdmi-phy.o
> \ No newline at end of file
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-12-09 11:39 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1506339543-46171-0>
2017-09-25 11:40 ` [PATCH 1/8] drm/rockchip: dw_hdmi: update dw_hdmi_rockchip_dt_ids Algea Cao
2017-09-25 11:41 ` [PATCH 2/8] drm/rockchip: dw_hdmi: add device type Algea Cao
2017-09-25 11:41 ` [PATCH 3/8] drm: bridge: dw-hdmi: change hdmi phy hpd read function to export Algea Cao
2017-09-25 11:42 ` [PATCH 4/8] drm/rockchip: dw_hdmi: add inno hdmi phy ops Algea Cao
2017-09-25 11:42 ` [PATCH 5/8] drm/rockchip: dw_hdmi: add hclk_vio Algea Cao
2017-09-25 11:43 ` [PATCH 6/8] drm/rockchip: dw_hdmi: update dw-hdmi encoder enable Algea Cao
2017-09-25 11:43 ` [PATCH 7/8] drm: bridge: dw-hdmi: get phy ops by device type Algea Cao
2017-09-25 11:43 ` [PATCH 8/8] phy: rockchip: add inno hdmi phy to makefile Algea Cao
2017-09-27 8:56 ` kbuild test robot
2017-09-27 10:16 ` kbuild test robot
2017-12-09 11:39 ` Heiko Stuebner
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.