diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 5749bdaba95b..3b383f73fcb0 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -197,7 +197,7 @@ struct dw_hdmi { hdmi_codec_plugged_cb plugged_cb; struct device *codec_dev; - enum drm_connector_status last_connector_result; + enum drm_connector_status last_connector_status; }; #define HDMI_IH_PHY_STAT0_RX_SENSE \ @@ -236,7 +236,7 @@ int dw_hdmi_set_plugged_cb(struct dw_hdmi *hdmi, hdmi_codec_plugged_cb fn, mutex_lock(&hdmi->mutex); hdmi->plugged_cb = fn; hdmi->codec_dev = codec_dev; - plugged = hdmi->last_connector_result == connector_status_connected; + plugged = hdmi->last_connector_status == connector_status_connected; handle_plugged_change(hdmi, plugged); mutex_unlock(&hdmi->mutex); @@ -2277,7 +2277,7 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force) { struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, connector); - enum drm_connector_status result; + enum drm_connector_status status; mutex_lock(&hdmi->mutex); hdmi->force = DRM_FORCE_UNSPECIFIED; @@ -2285,18 +2285,18 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force) dw_hdmi_update_phy_mask(hdmi); mutex_unlock(&hdmi->mutex); - result = hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data); + status = hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data); mutex_lock(&hdmi->mutex); - if (result != hdmi->last_connector_result) { - dev_dbg(hdmi->dev, "read_hpd result: %d", result); + if (status != hdmi->last_connector_status) { + dev_dbg(hdmi->dev, "connector status: %d", status); handle_plugged_change(hdmi, - result == connector_status_connected); - hdmi->last_connector_result = result; + status == connector_status_connected); + hdmi->last_connector_status = status; } mutex_unlock(&hdmi->mutex); - return result; + return status; } static int dw_hdmi_connector_get_modes(struct drm_connector *connector) @@ -3059,7 +3059,7 @@ __dw_hdmi_probe(struct platform_device *pdev, hdmi->rxsense = true; hdmi->phy_mask = (u8)~(HDMI_PHY_HPD | HDMI_PHY_RX_SENSE); hdmi->mc_clkdis = 0x7f; - hdmi->last_connector_result = connector_status_disconnected; + hdmi->last_connector_status = connector_status_disconnected; mutex_init(&hdmi->mutex); mutex_init(&hdmi->audio_mutex); -- 2.17.1 From 2cdd6cd8eae12254226b6f3e30c5bcc52ac93ca7 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 1 Dec 2019 20:51:22 +0000 Subject: [PATCH] drm: dw-hdmi: extract handle_plugged_change call Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 3b383f73fcb0..bb430c48488f 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -228,6 +228,19 @@ static void handle_plugged_change(struct dw_hdmi *hdmi, bool plugged) hdmi->plugged_cb(hdmi->codec_dev, plugged); } +static void dw_hdmi_update_connector_status(struct dw_hdmi *hdmi, + enum drm_connector_status status) +{ + mutex_lock(&hdmi->mutex); + if (status != hdmi->last_connector_status) { + dev_dbg(hdmi->dev, "connector status: %d", status); + handle_plugged_change(hdmi, + status == connector_status_connected); + hdmi->last_connector_status = status; + } + mutex_unlock(&hdmi->mutex); +} + int dw_hdmi_set_plugged_cb(struct dw_hdmi *hdmi, hdmi_codec_plugged_cb fn, struct device *codec_dev) { @@ -2287,14 +2300,7 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force) status = hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data); - mutex_lock(&hdmi->mutex); - if (status != hdmi->last_connector_status) { - dev_dbg(hdmi->dev, "connector status: %d", status); - handle_plugged_change(hdmi, - status == connector_status_connected); - hdmi->last_connector_status = status; - } - mutex_unlock(&hdmi->mutex); + dw_hdmi_update_connector_status(hdmi, status); return status; } -- 2.17.1 From 979981e11fa3ba5e94d25d22f7d0cdc55e8f9348 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 28 Sep 2019 13:34:46 +0000 Subject: [PATCH] drm: dw-hdmi: remove unused struct member Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index bb430c48488f..06620adfed95 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -41,8 +41,6 @@ #define DDC_CI_ADDR 0x37 #define DDC_SEGMENT_ADDR 0x30 -#define HDMI_EDID_LEN 512 - /* DW-HDMI Controller >= 0x200a are at least compliant with SCDC version 1 */ #define SCDC_MIN_SOURCE_VERSION 0x1 @@ -152,8 +150,6 @@ struct dw_hdmi { int vic; - u8 edid[HDMI_EDID_LEN]; - struct { const struct dw_hdmi_phy_ops *ops; const char *name; -- 2.17.1 From 74adf054fd1d83d31f03085ec4574318cb135c95 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 28 Sep 2019 13:34:46 +0000 Subject: [PATCH] drm: dw-hdmi: read edid in detect callback Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 79 +++++++++++++++++------ 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 06620adfed95..a304dff5f1be 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -150,6 +150,8 @@ struct dw_hdmi { int vic; + struct edid *cached_edid; + struct { const struct dw_hdmi_phy_ops *ops; const char *name; @@ -2223,9 +2225,55 @@ static void initialize_hdmi_ih_mutes(struct dw_hdmi *hdmi) hdmi_writeb(hdmi, ih_mute, HDMI_IH_MUTE); } +static void dw_hdmi_clear_edid(struct drm_connector *connector) +{ + struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, + connector); + + if (!hdmi->cached_edid) + return; + + hdmi->sink_is_hdmi = false; + hdmi->sink_has_audio = false; + + kfree(hdmi->cached_edid); + hdmi->cached_edid = NULL; +} + +static void dw_hdmi_get_edid(struct drm_connector *connector) +{ + struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, + connector); + struct edid *edid; + + if (!hdmi->ddc || hdmi->cached_edid) + return; + + edid = drm_get_edid(connector, hdmi->ddc); + + if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) { + dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n", + edid->width_cm, edid->height_cm); + + hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid); + hdmi->sink_has_audio = drm_detect_monitor_audio(edid); + + hdmi->cached_edid = edid; + } else { + dev_dbg(hdmi->dev, "failed to get edid\n"); + + kfree(edid); + edid = NULL; + } + + drm_connector_update_edid_property(connector, edid); + cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); +} + static void dw_hdmi_poweron(struct dw_hdmi *hdmi) { hdmi->bridge_is_on = true; + dw_hdmi_get_edid(&hdmi->connector); dw_hdmi_setup(hdmi, &hdmi->previous_mode); } @@ -2296,6 +2344,11 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force) status = hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data); + if (status == connector_status_disconnected) + dw_hdmi_clear_edid(connector); + else + dw_hdmi_get_edid(connector); + dw_hdmi_update_connector_status(hdmi, status); return status; @@ -2305,28 +2358,8 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) { struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, connector); - struct edid *edid; - int ret = 0; - - if (!hdmi->ddc) - return 0; - edid = drm_get_edid(connector, hdmi->ddc); - if (edid) { - dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n", - edid->width_cm, edid->height_cm); - - hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid); - hdmi->sink_has_audio = drm_detect_monitor_audio(edid); - drm_connector_update_edid_property(connector, edid); - cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); - ret = drm_add_edid_modes(connector, edid); - kfree(edid); - } else { - dev_dbg(hdmi->dev, "failed to get edid\n"); - } - - return ret; + return drm_add_edid_modes(connector, hdmi->cached_edid); } static bool hdr_metadata_equal(const struct drm_connector_state *old_state, @@ -2705,6 +2738,9 @@ static void dw_hdmi_bridge_detach(struct drm_bridge *bridge) cec_notifier_conn_unregister(hdmi->cec_notifier); hdmi->cec_notifier = NULL; mutex_unlock(&hdmi->cec_notifier_mutex); + + kfree(hdmi->cached_edid); + hdmi->cached_edid = NULL; } static enum drm_mode_status @@ -3394,6 +3430,7 @@ EXPORT_SYMBOL_GPL(dw_hdmi_unbind); void dw_hdmi_resume(struct dw_hdmi *hdmi) { + dw_hdmi_clear_edid(&hdmi->connector); dw_hdmi_init_hw(hdmi); } EXPORT_SYMBOL_GPL(dw_hdmi_resume); -- 2.17.1 From f44056d77b1e928d0eec26eef9d35ce3c7b04d30 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 28 Sep 2019 13:34:47 +0000 Subject: [PATCH] drm: dw-hdmi: read edid in force callback Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index a304dff5f1be..49a9611249d2 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2411,6 +2411,13 @@ static void dw_hdmi_connector_force(struct drm_connector *connector) dw_hdmi_update_power(hdmi); dw_hdmi_update_phy_mask(hdmi); mutex_unlock(&hdmi->mutex); + + dw_hdmi_clear_edid(connector); + + if (connector->status != connector_status_connected) + return; + + dw_hdmi_get_edid(connector); } static const struct drm_connector_funcs dw_hdmi_connector_funcs = { -- 2.17.1 From 27119e85c5368957ac0182418a26d473dd94ab49 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 28 Sep 2019 13:34:47 +0000 Subject: [PATCH] drm: dw-hdmi: invalidate cec phys addr in detect callback Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 49a9611249d2..b9fa6c3b07c0 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -190,7 +190,6 @@ struct dw_hdmi { void (*enable_audio)(struct dw_hdmi *hdmi); void (*disable_audio)(struct dw_hdmi *hdmi); - struct mutex cec_notifier_mutex; struct cec_notifier *cec_notifier; hdmi_codec_plugged_cb plugged_cb; @@ -2238,6 +2237,8 @@ static void dw_hdmi_clear_edid(struct drm_connector *connector) kfree(hdmi->cached_edid); hdmi->cached_edid = NULL; + + cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); } static void dw_hdmi_get_edid(struct drm_connector *connector) @@ -2730,9 +2731,7 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *bridge) if (!notifier) return -ENOMEM; - mutex_lock(&hdmi->cec_notifier_mutex); hdmi->cec_notifier = notifier; - mutex_unlock(&hdmi->cec_notifier_mutex); return 0; } @@ -2741,10 +2740,8 @@ static void dw_hdmi_bridge_detach(struct drm_bridge *bridge) { struct dw_hdmi *hdmi = bridge->driver_private; - mutex_lock(&hdmi->cec_notifier_mutex); cec_notifier_conn_unregister(hdmi->cec_notifier); hdmi->cec_notifier = NULL; - mutex_unlock(&hdmi->cec_notifier_mutex); kfree(hdmi->cached_edid); hdmi->cached_edid = NULL; @@ -2912,18 +2909,11 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) * ask the source to re-read the EDID. */ if (intr_stat & - (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) { + (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) dw_hdmi_setup_rx_sense(hdmi, phy_stat & HDMI_PHY_HPD, phy_stat & HDMI_PHY_RX_SENSE); - if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) == 0) { - mutex_lock(&hdmi->cec_notifier_mutex); - cec_notifier_phys_addr_invalidate(hdmi->cec_notifier); - mutex_unlock(&hdmi->cec_notifier_mutex); - } - } - if (intr_stat & HDMI_IH_PHY_STAT0_HPD) { dev_dbg(hdmi->dev, "EVENT=%s\n", phy_int_pol & HDMI_PHY_HPD ? "plugin" : "plugout"); @@ -3108,7 +3098,6 @@ __dw_hdmi_probe(struct platform_device *pdev, mutex_init(&hdmi->mutex); mutex_init(&hdmi->audio_mutex); - mutex_init(&hdmi->cec_notifier_mutex); spin_lock_init(&hdmi->audio_lock); ddc_node = of_parse_phandle(np, "ddc-i2c-bus", 0); -- 2.17.1 From d6fca8d650a43ed3ef7d8efb3b51b2e7c3a0a8ba Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 23:41:44 +0000 Subject: [PATCH] WIP: drm: dw-hdmi: do not force none scan mode Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index b9fa6c3b07c0..4d253e5a1c79 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -1664,8 +1664,6 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) HDMI_EXTENDED_COLORIMETRY_XV_YCC_601; } - frame.scan_mode = HDMI_SCAN_MODE_NONE; - /* * The Designware IP uses a different byte format from standard * AVI info frames, though generally the bits are in the correct -- 2.17.1 From b16f499ce83d7b9084073e813943ae98d4f5c716 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 23:42:44 +0000 Subject: [PATCH] WIP: drm: dw-hdmi: add content type connector property Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 4d253e5a1c79..cd10554cde76 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -1617,6 +1617,7 @@ static void hdmi_tx_hdcp_config(struct dw_hdmi *hdmi) static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) { + const struct drm_connector_state *conn_state = hdmi->connector.state; struct hdmi_avi_infoframe frame; u8 val; @@ -1664,6 +1665,8 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) HDMI_EXTENDED_COLORIMETRY_XV_YCC_601; } + drm_hdmi_avi_infoframe_content_type(&frame, conn_state); + /* * The Designware IP uses a different byte format from standard * AVI info frames, though generally the bits are in the correct @@ -2389,7 +2392,8 @@ static int dw_hdmi_connector_atomic_check(struct drm_connector *connector, if (!crtc) return 0; - if (!hdr_metadata_equal(old_state, new_state)) { + if (!hdr_metadata_equal(old_state, new_state) || + old_state->content_type != new_state->content_type) { crtc_state = drm_atomic_get_crtc_state(state, crtc); if (IS_ERR(crtc_state)) return PTR_ERR(crtc_state); @@ -2717,6 +2721,8 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *bridge) drm_connector_attach_max_bpc_property(connector, 8, 16); + drm_connector_attach_content_type_property(connector); + if (hdmi->version >= 0x200a && hdmi->plat_data->use_drm_infoframe) drm_object_attach_property(&connector->base, connector->dev->mode_config.hdr_output_metadata_property, 0); -- 2.17.1 From 2203d10f59f25af58fe1f5aaaceb3980ccea2f39 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 23:43:55 +0000 Subject: [PATCH] WIP: drm: dw-hdmi: add SPD infoframe Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 42 +++++++++++++++++++---- drivers/gpu/drm/bridge/synopsys/dw-hdmi.h | 32 +++++++++-------- 2 files changed, 53 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index cd10554cde76..5377c55e9927 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -1733,6 +1733,35 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) hdmi_writeb(hdmi, (frame.right_bar >> 8) & 0xff, HDMI_FC_AVISRB1); } +static void hdmi_config_spd_infoframe(struct dw_hdmi *hdmi) +{ + struct hdmi_spd_infoframe frame; + u8 buffer[29]; + ssize_t err; + int i; + + hdmi_mask_writeb(hdmi, 0, HDMI_FC_DATAUTO0, HDMI_FC_DATAUTO0_SPD_OFFSET, + HDMI_FC_DATAUTO0_SPD_MASK); + + err = hdmi_spd_infoframe_init(&frame, "DW", "HDMI"); + if (err < 0) + return; + + frame.sdi = HDMI_SPD_SDI_PC; + + err = hdmi_spd_infoframe_pack(&frame, buffer, sizeof(buffer)); + if (err < 0) { + dev_err(hdmi->dev, "Failed to pack spd infoframe: %zd\n", err); + return; + } + + for (i = 0; i < frame.length; i++) + hdmi_writeb(hdmi, buffer[4 + i], HDMI_FC_SPDVENDORNAME0 + i); + + hdmi_mask_writeb(hdmi, 1, HDMI_FC_DATAUTO0, HDMI_FC_DATAUTO0_SPD_OFFSET, + HDMI_FC_DATAUTO0_SPD_MASK); +} + static void hdmi_config_vendor_specific_infoframe(struct dw_hdmi *hdmi, struct drm_display_mode *mode) { @@ -1776,12 +1805,6 @@ static void hdmi_config_vendor_specific_infoframe(struct dw_hdmi *hdmi, if (frame.s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF) hdmi_writeb(hdmi, buffer[9], HDMI_FC_VSDPAYLOAD2); - /* Packet frame interpolation */ - hdmi_writeb(hdmi, 1, HDMI_FC_DATAUTO1); - - /* Auto packets per frame and line spacing */ - hdmi_writeb(hdmi, 0x11, HDMI_FC_DATAUTO2); - /* Configures the Frame Composer On RDRB mode */ hdmi_mask_writeb(hdmi, 1, HDMI_FC_DATAUTO0, HDMI_FC_DATAUTO0_VSD_OFFSET, HDMI_FC_DATAUTO0_VSD_MASK); @@ -2158,8 +2181,15 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, struct drm_display_mode *mode) /* HDMI Initialization Step F - Configure AVI InfoFrame */ hdmi_config_AVI(hdmi, mode); + hdmi_config_spd_infoframe(hdmi); hdmi_config_vendor_specific_infoframe(hdmi, mode); hdmi_config_drm_infoframe(hdmi); + + /* Packet frame interpolation */ + hdmi_writeb(hdmi, 1, HDMI_FC_DATAUTO1); + + /* Auto packets per frame and line spacing */ + hdmi_writeb(hdmi, 0x11, HDMI_FC_DATAUTO2); } else { dev_dbg(hdmi->dev, "%s DVI mode\n", __func__); } diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h index 1999db05bc3b..27a91128d0cc 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h @@ -139,21 +139,21 @@ #define HDMI_FC_SPDVENDORNAME5 0x104F #define HDMI_FC_SPDVENDORNAME6 0x1050 #define HDMI_FC_SPDVENDORNAME7 0x1051 -#define HDMI_FC_SDPPRODUCTNAME0 0x1052 -#define HDMI_FC_SDPPRODUCTNAME1 0x1053 -#define HDMI_FC_SDPPRODUCTNAME2 0x1054 -#define HDMI_FC_SDPPRODUCTNAME3 0x1055 -#define HDMI_FC_SDPPRODUCTNAME4 0x1056 -#define HDMI_FC_SDPPRODUCTNAME5 0x1057 -#define HDMI_FC_SDPPRODUCTNAME6 0x1058 -#define HDMI_FC_SDPPRODUCTNAME7 0x1059 -#define HDMI_FC_SDPPRODUCTNAME8 0x105A -#define HDMI_FC_SDPPRODUCTNAME9 0x105B -#define HDMI_FC_SDPPRODUCTNAME10 0x105C -#define HDMI_FC_SDPPRODUCTNAME11 0x105D -#define HDMI_FC_SDPPRODUCTNAME12 0x105E -#define HDMI_FC_SDPPRODUCTNAME13 0x105F -#define HDMI_FC_SDPPRODUCTNAME14 0x1060 +#define HDMI_FC_SPDPRODUCTNAME0 0x1052 +#define HDMI_FC_SPDPRODUCTNAME1 0x1053 +#define HDMI_FC_SPDPRODUCTNAME2 0x1054 +#define HDMI_FC_SPDPRODUCTNAME3 0x1055 +#define HDMI_FC_SPDPRODUCTNAME4 0x1056 +#define HDMI_FC_SPDPRODUCTNAME5 0x1057 +#define HDMI_FC_SPDPRODUCTNAME6 0x1058 +#define HDMI_FC_SPDPRODUCTNAME7 0x1059 +#define HDMI_FC_SPDPRODUCTNAME8 0x105A +#define HDMI_FC_SPDPRODUCTNAME9 0x105B +#define HDMI_FC_SPDPRODUCTNAME10 0x105C +#define HDMI_FC_SPDPRODUCTNAME11 0x105D +#define HDMI_FC_SPDPRODUCTNAME12 0x105E +#define HDMI_FC_SPDPRODUCTNAME13 0x105F +#define HDMI_FC_SPDPRODUCTNAME14 0x1060 #define HDMI_FC_SPDPRODUCTNAME15 0x1061 #define HDMI_FC_SPDDEVICEINF 0x1062 #define HDMI_FC_AUDSCONF 0x1063 @@ -849,6 +849,8 @@ enum { /* FC_DATAUTO0 field values */ HDMI_FC_DATAUTO0_VSD_MASK = 0x08, HDMI_FC_DATAUTO0_VSD_OFFSET = 3, + HDMI_FC_DATAUTO0_SPD_MASK = 0x10, + HDMI_FC_DATAUTO0_SPD_OFFSET = 4, /* PHY_CONF0 field values */ HDMI_PHY_CONF0_PDZ_MASK = 0x80, -- 2.17.1 From 02f9cee9acb20262ed704ac658c1f61fbcbb8294 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 29 Sep 2019 13:47:38 +0000 Subject: [PATCH] WIP: drm: dw-hdmi: debugging logging --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 28 +++++++++++++-- drivers/video/hdmi.c | 44 +++++++++++++++++------ 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 5377c55e9927..cc39b544ae6e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -1667,6 +1667,8 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) drm_hdmi_avi_infoframe_content_type(&frame, conn_state); + hdmi_infoframe_log(KERN_INFO, hdmi->dev, (union hdmi_infoframe *)&frame); + /* * The Designware IP uses a different byte format from standard * AVI info frames, though generally the bits are in the correct @@ -1755,6 +1757,8 @@ static void hdmi_config_spd_infoframe(struct dw_hdmi *hdmi) return; } + hdmi_infoframe_log(KERN_INFO, hdmi->dev, (union hdmi_infoframe *)&frame); + for (i = 0; i < frame.length; i++) hdmi_writeb(hdmi, buffer[4 + i], HDMI_FC_SPDVENDORNAME0 + i); @@ -1769,6 +1773,9 @@ static void hdmi_config_vendor_specific_infoframe(struct dw_hdmi *hdmi, u8 buffer[10]; ssize_t err; + hdmi_mask_writeb(hdmi, 0, HDMI_FC_DATAUTO0, HDMI_FC_DATAUTO0_VSD_OFFSET, + HDMI_FC_DATAUTO0_VSD_MASK); + err = drm_hdmi_vendor_infoframe_from_display_mode(&frame, &hdmi->connector, mode); @@ -1787,8 +1794,8 @@ static void hdmi_config_vendor_specific_infoframe(struct dw_hdmi *hdmi, err); return; } - hdmi_mask_writeb(hdmi, 0, HDMI_FC_DATAUTO0, HDMI_FC_DATAUTO0_VSD_OFFSET, - HDMI_FC_DATAUTO0_VSD_MASK); + + hdmi_infoframe_log(KERN_INFO, hdmi->dev, (union hdmi_infoframe *)&frame); /* Set the length of HDMI vendor specific InfoFrame payload */ hdmi_writeb(hdmi, buffer[2], HDMI_FC_VSDSIZE); @@ -1834,6 +1841,8 @@ static void hdmi_config_drm_infoframe(struct dw_hdmi *hdmi) return; } + hdmi_infoframe_log(KERN_INFO, hdmi->dev, (union hdmi_infoframe *)&frame); + hdmi_writeb(hdmi, frame.version, HDMI_FC_DRM_HB0); hdmi_writeb(hdmi, frame.length, HDMI_FC_DRM_HB1); @@ -2368,6 +2377,9 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force) connector); enum drm_connector_status status; + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n", + connector->base.id, connector->name, force); + mutex_lock(&hdmi->mutex); hdmi->force = DRM_FORCE_UNSPECIFIED; dw_hdmi_update_power(hdmi); @@ -2391,6 +2403,9 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, connector); + DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", + connector->base.id, connector->name); + return drm_add_edid_modes(connector, hdmi->cached_edid); } @@ -2429,6 +2444,12 @@ static int dw_hdmi_connector_atomic_check(struct drm_connector *connector, return PTR_ERR(crtc_state); crtc_state->mode_changed = true; + + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] hdr_metadata_equal=false\n", + connector->base.id, connector->name); + } else { + DRM_DEBUG_KMS("[CONNECTOR:%d:%s] hdr_metadata_equal=true\n", + connector->base.id, connector->name); } return 0; @@ -2439,6 +2460,9 @@ static void dw_hdmi_connector_force(struct drm_connector *connector) struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, connector); + DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", + connector->base.id, connector->name); + mutex_lock(&hdmi->mutex); hdmi->force = connector->force; dw_hdmi_update_power(hdmi); diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c index 9c82e2a0a411..c3b96d3c59e1 100644 --- a/drivers/video/hdmi.c +++ b/drivers/video/hdmi.c @@ -1419,6 +1419,27 @@ static void hdmi_audio_infoframe_log(const char *level, frame->downmix_inhibit ? "Yes" : "No"); } +static const char * +hdmi_eotf_get_name(enum hdmi_eotf eotf) +{ + if (eotf < 0 || eotf > 7) + return "Invalid"; + + switch (eotf) { + case HDMI_EOTF_TRADITIONAL_GAMMA_SDR: + return "Traditional Gamma - SDR"; + case HDMI_EOTF_TRADITIONAL_GAMMA_HDR: + return "Traditional Gamma - HDR"; + case HDMI_EOTF_SMPTE_ST2084: + return "SMPTE ST 2084"; + case HDMI_EOTF_BT_2100_HLG: + return "Hybrid Log-Gamma (HLG)"; + default: + break; + } + return "Reserved"; +} + static void hdmi_drm_infoframe_log(const char *level, struct device *dev, const struct hdmi_drm_infoframe *frame) @@ -1427,24 +1448,25 @@ static void hdmi_drm_infoframe_log(const char *level, hdmi_infoframe_log_header(level, dev, (struct hdmi_any_infoframe *)frame); - hdmi_log("length: %d\n", frame->length); - hdmi_log("metadata type: %d\n", frame->metadata_type); - hdmi_log("eotf: %d\n", frame->eotf); + hdmi_log(" metadata type: %d\n", frame->metadata_type); + hdmi_log(" eotf: %s\n", hdmi_eotf_get_name(frame->eotf)); + + hdmi_log(" display primaries:\n"); for (i = 0; i < 3; i++) { - hdmi_log("x[%d]: %d\n", i, frame->display_primaries[i].x); - hdmi_log("y[%d]: %d\n", i, frame->display_primaries[i].y); + hdmi_log(" x[%d]: %d\n", i, frame->display_primaries[i].x); + hdmi_log(" y[%d]: %d\n", i, frame->display_primaries[i].y); } - hdmi_log("white point x: %d\n", frame->white_point.x); - hdmi_log("white point y: %d\n", frame->white_point.y); + hdmi_log(" white point x: %d\n", frame->white_point.x); + hdmi_log(" white point y: %d\n", frame->white_point.y); - hdmi_log("max_display_mastering_luminance: %d\n", + hdmi_log(" max display mastering luminance: %d\n", frame->max_display_mastering_luminance); - hdmi_log("min_display_mastering_luminance: %d\n", + hdmi_log(" min display mastering luminance: %d\n", frame->min_display_mastering_luminance); - hdmi_log("max_cll: %d\n", frame->max_cll); - hdmi_log("max_fall: %d\n", frame->max_fall); + hdmi_log(" max cll: %d\n", frame->max_cll); + hdmi_log(" max fall: %d\n", frame->max_fall); } static const char * -- 2.17.1 From 3c3374a1fbf631037b9fa87a6ddbfdc921cdf16c Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Tue, 26 Feb 2019 20:45:14 +0000 Subject: [PATCH] WIP: dw-hdmi-cec: sleep 100ms on error Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c index 70ab4fbdc23e..f6a85f73b90d 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c @@ -4,6 +4,7 @@ * * Copyright (C) 2015-2017 Russell King. */ +#include #include #include #include @@ -129,8 +130,16 @@ static irqreturn_t dw_hdmi_cec_hardirq(int irq, void *data) dw_hdmi_write(cec, stat, HDMI_IH_CEC_STAT0); - if (stat & CEC_STAT_ERROR_INIT) { - cec->tx_status = CEC_TX_STATUS_ERROR; + /* + * Status with both done and error_initiator bits have been seen + * on Rockchip RK3328 devices, transmit attempt seems to have failed + * when this happens, report as low drive and block cec-framework + * 100ms before core retransmits the failed message, this seems to + * mitigate the issue with failed transmit attempts. + */ + if ((stat & (CEC_STAT_DONE|CEC_STAT_ERROR_INIT)) == (CEC_STAT_DONE|CEC_STAT_ERROR_INIT)) { + pr_info("dw_hdmi_cec_hardirq: stat=%02x LOW_DRIVE\n", stat); + cec->tx_status = CEC_TX_STATUS_LOW_DRIVE; cec->tx_done = true; ret = IRQ_WAKE_THREAD; } else if (stat & CEC_STAT_DONE) { @@ -141,6 +150,10 @@ static irqreturn_t dw_hdmi_cec_hardirq(int irq, void *data) cec->tx_status = CEC_TX_STATUS_NACK; cec->tx_done = true; ret = IRQ_WAKE_THREAD; + } else if (stat & CEC_STAT_ERROR_INIT) { + cec->tx_status = CEC_TX_STATUS_ERROR; + cec->tx_done = true; + ret = IRQ_WAKE_THREAD; } if (stat & CEC_STAT_EOM) { @@ -173,6 +186,8 @@ static irqreturn_t dw_hdmi_cec_thread(int irq, void *data) if (cec->tx_done) { cec->tx_done = false; + if (cec->tx_status == CEC_TX_STATUS_LOW_DRIVE) + msleep(100); cec_transmit_attempt_done(adap, cec->tx_status); } if (cec->rx_done) { -- 2.17.1 From 8a6b932299c4cf68942cbe1809c4f6a846ef54a1 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 11 Oct 2019 08:01:37 +0000 Subject: [PATCH] mmc: dw_mmc: add power_off callback Signed-off-by: Jonas Karlman --- drivers/mmc/host/dw_mmc.c | 3 +++ drivers/mmc/host/dw_mmc.h | 1 + 2 files changed, 4 insertions(+) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index bc5278ab5707..f192963c2c68 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1495,6 +1495,9 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) regulator_disable(mmc->supply.vqmmc); slot->host->vqmmc_enabled = false; + if (drv_data && drv_data->power_off) + drv_data->power_off(slot->host); + regs = mci_readl(slot->host, PWREN); regs &= ~(1 << slot->id); mci_writel(slot->host, PWREN, regs); diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h index da5923a92e60..0b5c880364c5 100644 --- a/drivers/mmc/host/dw_mmc.h +++ b/drivers/mmc/host/dw_mmc.h @@ -563,5 +563,6 @@ struct dw_mci_drv_data { struct mmc_ios *ios); int (*switch_voltage)(struct mmc_host *mmc, struct mmc_ios *ios); + void (*power_off)(struct dw_mci *host); }; #endif /* _DW_MMC_H_ */ -- 2.17.1 From bcde49e61ee5dc752e4af4b0195a1c91c550e299 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 11 Oct 2019 08:01:37 +0000 Subject: [PATCH] mmc: dw_mmc-rockchip: try set vqmmc regulator to 3.3V on power_off Signed-off-by: Jonas Karlman --- drivers/mmc/host/dw_mmc-rockchip.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c index d4d02134848c..05410f90ddd3 100644 --- a/drivers/mmc/host/dw_mmc-rockchip.c +++ b/drivers/mmc/host/dw_mmc-rockchip.c @@ -24,6 +24,32 @@ struct dw_mci_rockchip_priv_data { int num_phases; }; +static void dw_mci_rk3288_power_off(struct dw_mci *host) +{ + struct mmc_host *mmc = host->slot->mmc; + struct mmc_ios *ios = &mmc->ios; + int old_signal_voltage; + + if (IS_ERR(mmc->supply.vqmmc)) + return; + + if (mmc_host_is_spi(mmc)) + return; + + if (ios->vdd != 0 || ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) + return; + + old_signal_voltage = ios->signal_voltage; + + ios->signal_voltage = MMC_SIGNAL_VOLTAGE_330; + ios->vdd = fls(mmc->ocr_avail) - 1; + + if (mmc_regulator_set_vqmmc(mmc, ios)) + ios->signal_voltage = old_signal_voltage; + + ios->vdd = 0; +} + static void dw_mci_rk3288_set_ios(struct dw_mci *host, struct mmc_ios *ios) { struct dw_mci_rockchip_priv_data *priv = host->priv; @@ -319,6 +345,7 @@ static const struct dw_mci_drv_data rk3288_drv_data = { .execute_tuning = dw_mci_rk3288_execute_tuning, .parse_dt = dw_mci_rk3288_parse_dt, .init = dw_mci_rockchip_init, + .power_off = dw_mci_rk3288_power_off, }; static const struct of_device_id dw_mci_rockchip_match[] = { -- 2.17.1 From 0cf5aae67b723a0e2e0d1d7041214920b5bf1e59 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 11 Oct 2019 08:01:37 +0000 Subject: [PATCH] ARM: dts: rockchip: enable sd ultra-high speeds on rk3288-tinker Signed-off-by: Jonas Karlman --- arch/arm/boot/dts/rk3288-tinker.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi index 312582c1bd37..67b32dc42220 100644 --- a/arch/arm/boot/dts/rk3288-tinker.dtsi +++ b/arch/arm/boot/dts/rk3288-tinker.dtsi @@ -461,6 +461,7 @@ disable-wp; /* wp not hooked up */ pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; + sd-uhs-sdr104; status = "okay"; vmmc-supply = <&vcc33_sd>; vqmmc-supply = <&vccio_sd>; -- 2.17.1 From f74e8d61abd366cee71da7779109e5589b4c6c6e Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 13:49:45 +0000 Subject: [PATCH] ARM: dts: rockchip: enable sd ultra-high speeds on rk3288-miqi Signed-off-by: Jonas Karlman --- arch/arm/boot/dts/rk3288-miqi.dts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts index c41d012c8850..820926e2feb1 100644 --- a/arch/arm/boot/dts/rk3288-miqi.dts +++ b/arch/arm/boot/dts/rk3288-miqi.dts @@ -60,7 +60,7 @@ vcc_sd: sdmmc-regulator { compatible = "regulator-fixed"; - gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>; + gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_pwr>; regulator-name = "vcc_sd"; @@ -197,7 +197,7 @@ vccio_sd: REG5 { regulator-name = "vccio_sd"; - regulator-min-microvolt = <3300000>; + regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; regulator-always-on; }; @@ -367,6 +367,7 @@ disable-wp; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk>, <&sdmmc_cmd>, <&sdmmc_cd>, <&sdmmc_bus4>; + sd-uhs-sdr104; vmmc-supply = <&vcc_sd>; vqmmc-supply = <&vccio_sd>; status = "okay"; -- 2.17.1 From f9ec6529193530bff8905ca5ffe36b884c93b12b Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 11 Oct 2019 08:01:37 +0000 Subject: [PATCH] arm64: dts: rockchip: enable sd ultra-high speeds on rk3399-sapphire Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi index 1bc1579674e5..0885d48011ab 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi @@ -77,7 +77,7 @@ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0_pwr_h>; - regulator-always-on; + regulator-boot-on; regulator-max-microvolt = <3000000>; regulator-min-microvolt = <3000000>; regulator-name = "vcc3v0_sd"; @@ -540,6 +540,7 @@ max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; + sd-uhs-sdr104; vmmc-supply = <&vcc3v0_sd>; vqmmc-supply = <&vcc_sdio>; status = "okay"; -- 2.17.1 From c73762d9ab7c852d7dc691b4d83a42b32ad09771 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 11 Oct 2019 08:01:37 +0000 Subject: [PATCH] arm64: dts: rockchip: enable sd ultra-high speeds on rk3399-rock-pi-4 Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts index 3923ec01ef66..e4c71c77c3ef 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts @@ -307,7 +307,7 @@ regulator-name = "vcc_sdio"; regulator-always-on; regulator-boot-on; - regulator-min-microvolt = <3000000>; + regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3000000>; regulator-state-mem { regulator-on-in-suspend; @@ -609,6 +609,9 @@ max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk &sdmmc_cd &sdmmc_cmd &sdmmc_bus4>; + sd-uhs-sdr104; + vmmc-supply = <&vcc3v3_sys>; + vqmmc-supply = <&vcc_sdio>; status = "okay"; }; -- 2.17.1 From c52ee775bd43bcecb26f464c28cdc9eb5bcc08b2 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 11 Oct 2019 08:01:38 +0000 Subject: [PATCH] arm64: dts: rockchip: enable sd ultra-high speeds on rk3399-rockpro64 Signed-off-by: Jonas Karlman --- .../boot/dts/rockchip/rk3399-rockpro64.dtsi | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi index 9bca25801260..72c9bb2cfceb 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi @@ -108,6 +108,19 @@ vin-supply = <&vcc12v_dcin>; }; + vcc3v0_sd: vcc3v0-sd { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc0_pwr_h>; + regulator-boot-on; + regulator-max-microvolt = <3000000>; + regulator-min-microvolt = <3000000>; + regulator-name = "vcc3v0_sd"; + vin-supply = <&vcc3v3_sys>; + }; + vcc3v3_sys: vcc3v3-sys { compatible = "regulator-fixed"; regulator-name = "vcc3v3_sys"; @@ -603,6 +616,12 @@ }; }; + sd { + sdmmc0_pwr_h: sdmmc0-pwr-h { + rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + sdio-pwrseq { wifi_enable_h: wifi-enable-h { rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; @@ -661,6 +680,9 @@ max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>; + sd-uhs-sdr104; + vmmc-supply = <&vcc3v0_sd>; + vqmmc-supply = <&vcc_sdio>; status = "okay"; }; -- 2.17.1 From 5d729739be59fe9a3435f80f6b13945b0a50e3a1 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 13:27:12 +0000 Subject: [PATCH] ARM: dts: rockchip: fix sdmmc-regulator gpio warning on rk3288-tinker Fixes sdmmc-regulator GPIO handle specifies active low - ignored Signed-off-by: Jonas Karlman --- arch/arm/boot/dts/rk3288-tinker.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi index 67b32dc42220..dc5b4d81a46c 100644 --- a/arch/arm/boot/dts/rk3288-tinker.dtsi +++ b/arch/arm/boot/dts/rk3288-tinker.dtsi @@ -98,7 +98,7 @@ vcc_sd: sdmmc-regulator { compatible = "regulator-fixed"; - gpio = <&gpio7 11 GPIO_ACTIVE_LOW>; + gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_pwr>; regulator-name = "vcc_sd"; -- 2.17.1 From 896ce763b751403f9dcae8732335d53e5a6dcce9 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Thu, 7 Feb 2019 22:03:38 +0000 Subject: [PATCH] ARM: dts: rockchip: rename hdmi sound card on rk3288-tinker --- arch/arm/boot/dts/rk3288-tinker.dtsi | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi index dc5b4d81a46c..49b64f4908cd 100644 --- a/arch/arm/boot/dts/rk3288-tinker.dtsi +++ b/arch/arm/boot/dts/rk3288-tinker.dtsi @@ -75,7 +75,7 @@ sound { compatible = "simple-audio-card"; simple-audio-card,format = "i2s"; - simple-audio-card,name = "rockchip,tinker-codec"; + simple-audio-card,name = "HDMI"; simple-audio-card,mclk-fs = <512>; simple-audio-card,codec { @@ -352,7 +352,6 @@ }; &i2s { - #sound-dai-cells = <0>; status = "okay"; }; -- 2.17.1 From de9b4be54fd5ad12a33aa35aa46421b74411ee75 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 13:49:19 +0000 Subject: [PATCH] ARM: dts: rockchip: add hdmi sound node on rk3288-miqi Signed-off-by: Jonas Karlman --- arch/arm/boot/dts/rk3288-miqi.dts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts index 820926e2feb1..0e17f66f142f 100644 --- a/arch/arm/boot/dts/rk3288-miqi.dts +++ b/arch/arm/boot/dts/rk3288-miqi.dts @@ -37,6 +37,21 @@ }; }; + sound { + compatible = "simple-audio-card"; + simple-audio-card,format = "i2s"; + simple-audio-card,name = "HDMI"; + simple-audio-card,mclk-fs = <512>; + + simple-audio-card,codec { + sound-dai = <&hdmi>; + }; + + simple-audio-card,cpu { + sound-dai = <&i2s>; + }; + }; + vcc_flash: flash-regulator { compatible = "regulator-fixed"; regulator-name = "vcc_flash"; @@ -267,6 +282,10 @@ status = "okay"; }; +&i2s { + status = "okay"; +}; + &io_domains { status = "okay"; -- 2.17.1 From 882e6f0dcf1af01c4bfcf18b07c54894cc6b441e Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Mon, 2 Dec 2019 22:35:51 +0000 Subject: [PATCH] ARM: dts: rockchip: enable ARM Mali GPU on rk3288-miqi Signed-off-by: Jonas Karlman --- arch/arm/boot/dts/rk3288-miqi.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts index 0e17f66f142f..2bee891466f5 100644 --- a/arch/arm/boot/dts/rk3288-miqi.dts +++ b/arch/arm/boot/dts/rk3288-miqi.dts @@ -126,6 +126,11 @@ status = "ok"; }; +&gpu { + mali-supply = <&vdd_gpu>; + status = "okay"; +}; + &hdmi { ddc-i2c-bus = <&i2c5>; status = "okay"; -- 2.17.1 From 72c61d5558abf21a5bb3e9ac4603a99a2594a647 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 14 Dec 2019 01:43:17 +0000 Subject: [PATCH] ARM: dts: rockchip: enable cec on rk3288-miqi Signed-off-by: Jonas Karlman --- arch/arm/boot/dts/rk3288-miqi.dts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts index 2bee891466f5..8428095934f5 100644 --- a/arch/arm/boot/dts/rk3288-miqi.dts +++ b/arch/arm/boot/dts/rk3288-miqi.dts @@ -133,6 +133,8 @@ &hdmi { ddc-i2c-bus = <&i2c5>; + pinctrl-names = "default"; + pinctrl-0 = <&hdmi_cec_c0>; status = "okay"; }; -- 2.17.1 From d189fcfc6950f6a2f67662e3b024eff83b929322 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 10 Mar 2019 19:18:36 +0000 Subject: [PATCH] arm64: dts: rockchip: remove dc_12v regulator on rk3328-roc-cc Remove unnecessary dc_12v regulator node on ROC-RK3328-CC, the device uses 5v micro-usb as power input. Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 8d553c92182a..c4d908bcc82c 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -21,15 +21,6 @@ #clock-cells = <0>; }; - dc_12v: dc-12v { - compatible = "regulator-fixed"; - regulator-name = "dc_12v"; - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <12000000>; - regulator-max-microvolt = <12000000>; - }; - vcc_sd: sdmmc-regulator { compatible = "regulator-fixed"; gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>; @@ -73,7 +64,6 @@ regulator-boot-on; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; - vin-supply = <&dc_12v>; }; vcc_phy: vcc-phy-regulator { -- 2.17.1 From f6da47eada3ffa241c3c37917827ffa278391991 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 10 Mar 2019 19:23:58 +0000 Subject: [PATCH] arm64: dts: rockchip: add ir-receiver node on rk3328-roc-cc Add ir-receiver node to enable on-board IR on ROC-RK3328-CC. Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index c4d908bcc82c..5a4aadffe9de 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -73,6 +73,13 @@ regulator-boot-on; }; + ir-receiver { + compatible = "gpio-ir-receiver"; + gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&ir_int>; + pinctrl-names = "default"; + }; + leds { compatible = "gpio-leds"; @@ -273,6 +280,12 @@ }; &pinctrl { + ir { + ir_int: ir-int { + rockchip,pins = <2 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + pmic { pmic_int_l: pmic-int-l { rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>; -- 2.17.1 From 5b7cc260ec063a6cd695ab0119d355b5a72c1a19 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 24 Mar 2019 11:20:51 +0000 Subject: [PATCH] arm64: dts: rockchip: set tshut mode and priority on rk3328-roc-cc Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 5a4aadffe9de..71f3cd206e13 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -317,6 +317,8 @@ }; &tsadc { + rockchip,hw-tshut-mode = <0>; + rockchip,hw-tshut-polarity = <0>; status = "okay"; }; -- 2.17.1 From 456c5f7d3accc12acfc84cf6baddb5dcf05836aa Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 24 Mar 2019 11:22:06 +0000 Subject: [PATCH] arm64: dts: rockchip: rename vcc_sdio regulator on rk3328-roc-cc Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 71f3cd206e13..95ff8f60e21f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -33,12 +33,12 @@ vin-supply = <&vcc_io>; }; - vcc_sdio: sdmmcio-regulator { + vccio_sd: sdmmcio-regulator { compatible = "regulator-gpio"; gpios = <&grf_gpio 0 GPIO_ACTIVE_HIGH>; states = <1800000 0x1 3300000 0x0>; - regulator-name = "vcc_sdio"; + regulator-name = "vccio_sd"; regulator-type = "voltage"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; @@ -272,7 +272,7 @@ vccio1-supply = <&vcc_io>; vccio2-supply = <&vcc18_emmc>; - vccio3-supply = <&vcc_sdio>; + vccio3-supply = <&vccio_sd>; vccio4-supply = <&vcc_18>; vccio5-supply = <&vcc_io>; vccio6-supply = <&vcc_io>; @@ -312,7 +312,7 @@ sd-uhs-sdr50; sd-uhs-sdr104; vmmc-supply = <&vcc_sd>; - vqmmc-supply = <&vcc_sdio>; + vqmmc-supply = <&vccio_sd>; status = "okay"; }; -- 2.17.1 From e077bfec3ae60d827dd8c4a6c1f777e88f2c2a53 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 24 Mar 2019 17:18:39 +0000 Subject: [PATCH] arm64: dts: rockchip: use recommended regulator limits on rk3328-roc-cc Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 95ff8f60e21f..35d1f89f844c 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -185,8 +185,9 @@ regulators { vdd_logic: DCDC_REG1 { regulator-name = "vdd_logic"; - regulator-min-microvolt = <712500>; - regulator-max-microvolt = <1450000>; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1150000>; + regulator-ramp-delay = <12500>; regulator-always-on; regulator-boot-on; regulator-state-mem { @@ -197,8 +198,9 @@ vdd_arm: DCDC_REG2 { regulator-name = "vdd_arm"; - regulator-min-microvolt = <712500>; - regulator-max-microvolt = <1450000>; + regulator-min-microvolt = <950000>; + regulator-max-microvolt = <1350000>; + regulator-ramp-delay = <12500>; regulator-always-on; regulator-boot-on; regulator-state-mem { -- 2.17.1 From b66dcf8f337f9308ba232880f48a93d6594bbf5b Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 21 Apr 2019 10:28:27 +0000 Subject: [PATCH] arm64: dts: rockchip: use recommended regulator limits on rk3328-rock64 Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts index 62936b432f9a..3725fcc7bb38 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -193,8 +193,8 @@ regulators { vdd_logic: DCDC_REG1 { regulator-name = "vdd_logic"; - regulator-min-microvolt = <712500>; - regulator-max-microvolt = <1450000>; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1150000>; regulator-ramp-delay = <12500>; regulator-always-on; regulator-boot-on; @@ -206,8 +206,8 @@ vdd_arm: DCDC_REG2 { regulator-name = "vdd_arm"; - regulator-min-microvolt = <712500>; - regulator-max-microvolt = <1450000>; + regulator-min-microvolt = <950000>; + regulator-max-microvolt = <1350000>; regulator-ramp-delay = <12500>; regulator-always-on; regulator-boot-on; -- 2.17.1 From 52aeabe772f86828a7fd7b2d5f5ca4706214d09f Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 24 Mar 2019 11:23:55 +0000 Subject: [PATCH] arm64: dts: rockchip: fix vccio4-supply on rk3328-roc-cc Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 35d1f89f844c..dd18510fa473 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -275,7 +275,7 @@ vccio1-supply = <&vcc_io>; vccio2-supply = <&vcc18_emmc>; vccio3-supply = <&vccio_sd>; - vccio4-supply = <&vcc_18>; + vccio4-supply = <&vcc_io>; vccio5-supply = <&vcc_io>; vccio6-supply = <&vcc_io>; pmuio-supply = <&vcc_io>; -- 2.17.1 From 589b2803582c476ae058e4fe2157eaa332c15bbf Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 21 Apr 2019 18:13:30 +0000 Subject: [PATCH] arm64: dts: rockchip: fix vccio4-supply on rk3328-rock64 --- arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts index 3725fcc7bb38..1af6c56a4451 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -295,7 +295,7 @@ vccio1-supply = <&vcc_io>; vccio2-supply = <&vcc18_emmc>; vccio3-supply = <&vcc_io>; - vccio4-supply = <&vcc_18>; + vccio4-supply = <&vcc_io>; vccio5-supply = <&vcc_io>; vccio6-supply = <&vcc_io>; pmuio-supply = <&vcc_io>; -- 2.17.1 From 23aa1a305bffe72c7fb26afac16c475569bef79a Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 21 Apr 2019 18:07:33 +0000 Subject: [PATCH] arm64: dts: rockchip: fix fixed-regulator gpio warning on rk3328 --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index dd18510fa473..48695a2dce7d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -23,7 +23,7 @@ vcc_sd: sdmmc-regulator { compatible = "regulator-fixed"; - gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>; + gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0m1_gpio>; regulator-boot-on; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts index 1af6c56a4451..7cca8808257e 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -23,7 +23,7 @@ vcc_sd: sdmmc-regulator { compatible = "regulator-fixed"; - gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>; + gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0m1_gpio>; regulator-name = "vcc_sd"; @@ -34,7 +34,7 @@ vcc_host_5v: vcc-host-5v-regulator { compatible = "regulator-fixed"; - gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>; + gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&usb20_host_drv>; regulator-name = "vcc_host_5v"; @@ -45,7 +45,7 @@ vcc_host1_5v: vcc_otg_5v: vcc-host1-5v-regulator { compatible = "regulator-fixed"; - gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>; + gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&usb20_host_drv>; regulator-name = "vcc_host1_5v"; -- 2.17.1 From b05c9d16191a716ba106abf6226410270ffa89a0 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 17 Mar 2019 22:38:09 +0000 Subject: [PATCH] arm64: dts: rockchip: update gpu node on rk3328 --- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index 1f53ead52c7f..1b45131e8e48 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -319,6 +319,10 @@ #address-cells = <1>; #size-cells = <0>; + pd_gpu@RK3328_PD_GPU { + reg = ; + clocks = <&cru ACLK_GPU>; + }; pd_hevc@RK3328_PD_HEVC { reg = ; }; @@ -621,6 +625,7 @@ "ppmmu1"; clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>; clock-names = "bus", "core"; + power-domains = <&power RK3328_PD_GPU>; resets = <&cru SRST_GPU_A>; }; @@ -793,6 +798,7 @@ <&cru ACLK_BUS_PRE>, <&cru HCLK_BUS_PRE>, <&cru PCLK_BUS_PRE>, <&cru ACLK_PERI_PRE>, <&cru HCLK_PERI>, <&cru PCLK_PERI>, + <&cru ACLK_GPU>, <&cru SCLK_RTC32K>; assigned-clock-parents = <&cru HDMIPHY>, <&cru PLL_APLL>, @@ -814,6 +820,7 @@ <150000000>, <75000000>, <75000000>, <150000000>, <75000000>, <75000000>, + <500000000>, <32768>; }; -- 2.17.1 From c047d9759f3b5376259657dc0608a51252371219 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 23:12:19 +0000 Subject: [PATCH] arm64: dts: rockchip: add spdif audio pipeline on rk3328 Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index 1b45131e8e48..c6f7cec13d15 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -210,6 +210,26 @@ method = "smc"; }; + spdif_out: spdif-out { + compatible = "linux,spdif-dit"; + #sound-dai-cells = <0>; + status = "disabled"; + }; + + spdif_sound: spdif-sound { + compatible = "simple-audio-card"; + simple-audio-card,name = "SPDIF"; + status = "disabled"; + + simple-audio-card,cpu { + sound-dai = <&spdif>; + }; + + simple-audio-card,codec { + sound-dai = <&spdif_out>; + }; + }; + timer { compatible = "arm,armv8-timer"; interrupts = , -- 2.17.1 From 8d8e7349b476ae980239abfdb8c460ccd5e3df0a Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Tue, 19 Mar 2019 22:18:47 +0000 Subject: [PATCH] arm64: dts: rockchip: enable sound nodes on rk3328-roc-cc --- .../arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 48695a2dce7d..a340a23cf073 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -101,6 +101,14 @@ }; }; +&analog_sound { + status = "okay"; +}; + +&codec { + status = "okay"; +}; + &cpu0 { cpu-supply = <&vdd_arm>; }; @@ -158,6 +166,10 @@ status = "okay"; }; +&hdmi_sound { + status = "okay"; +}; + &i2c1 { status = "okay"; @@ -269,6 +281,14 @@ }; }; +&i2s0 { + status = "okay"; +}; + +&i2s1 { + status = "okay"; +}; + &io_domains { status = "okay"; @@ -318,6 +338,19 @@ status = "okay"; }; +&spdif { + pinctrl-0 = <&spdifm0_tx>; + status = "okay"; +}; + +&spdif_out { + status = "okay"; +}; + +&spdif_sound { + status = "okay"; +}; + &tsadc { rockchip,hw-tshut-mode = <0>; rockchip,hw-tshut-polarity = <0>; -- 2.17.1 From b906dcd1489dd042dc67d9328952e18011fd6960 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 29 Dec 2019 22:13:22 +0000 Subject: [PATCH] arm64: dts: rockchip: add mmc reset on rk3328 --- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index c6f7cec13d15..b92645187b19 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -890,6 +890,8 @@ clock-names = "biu", "ciu", "ciu-drive", "ciu-sample"; fifo-depth = <0x100>; max-frequency = <150000000>; + resets = <&cru SRST_MMC0>; + reset-names = "reset"; status = "disabled"; }; @@ -902,6 +904,8 @@ clock-names = "biu", "ciu", "ciu-drive", "ciu-sample"; fifo-depth = <0x100>; max-frequency = <150000000>; + resets = <&cru SRST_SDIO>; + reset-names = "reset"; status = "disabled"; }; @@ -914,6 +918,8 @@ clock-names = "biu", "ciu", "ciu-drive", "ciu-sample"; fifo-depth = <0x100>; max-frequency = <150000000>; + resets = <&cru SRST_EMMC>; + reset-names = "reset"; status = "disabled"; }; -- 2.17.1 From 584300ab010fa3ab29f5f402d94274740d231e1c Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 29 Dec 2019 22:14:02 +0000 Subject: [PATCH] arm64: dts: rockchip: add sdmmc_ext node on rk3328 --- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index b92645187b19..cc44e17c8c43 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -1018,6 +1018,20 @@ status = "disabled"; }; + sdmmc_ext: dwmmc@ff5f0000 { + compatible = "rockchip,rk3328-dw-mshc", "rockchip,rk3288-dw-mshc"; + reg = <0x0 0xff5f0000 0x0 0x4000>; + interrupts = ; + clocks = <&cru HCLK_SDMMC_EXT>, <&cru SCLK_SDMMC_EXT>, + <&cru SCLK_SDMMC_EXT_DRV>, <&cru SCLK_SDMMC_EXT_SAMPLE>; + clock-names = "biu", "ciu", "ciu-drive", "ciu-sample"; + fifo-depth = <0x100>; + max-frequency = <150000000>; + resets = <&cru SRST_SDMMCEXT>; + reset-names = "reset"; + status = "disabled"; + }; + gic: interrupt-controller@ff811000 { compatible = "arm,gic-400"; #interrupt-cells = <3>; -- 2.17.1 From af46e567772628417233844bb0994437f842d2a3 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 29 Dec 2019 22:14:36 +0000 Subject: [PATCH] WIP: arm64: dts: rockchip: add rkvdec power domain on rk3328 --- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index cc44e17c8c43..a4b0947f82a7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -348,6 +348,10 @@ }; pd_video@RK3328_PD_VIDEO { reg = ; + clocks = <&cru ACLK_RKVDEC>, + <&cru HCLK_RKVDEC>, + <&cru SCLK_VDEC_CABAC>, + <&cru SCLK_VDEC_CORE>; }; pd_vpu@RK3328_PD_VPU { reg = ; @@ -701,6 +705,7 @@ clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>; clock-names = "aclk", "iface"; #iommu-cells = <0>; + power-domains = <&power RK3328_PD_VIDEO>; status = "disabled"; }; -- 2.17.1 From fe5ff9c9fcb07b629f57282a25eba796616fbb50 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 23:23:41 +0000 Subject: [PATCH] WIP: arm64: dts: rockchip: split sound cards on rk3328-rock64 Signed-off-by: Jonas Karlman --- .../arm64/boot/dts/rockchip/rk3328-rock64.dts | 54 +++++++------------ 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts index 7cca8808257e..e926616b4a0c 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -83,34 +83,14 @@ linux,default-trigger = "heartbeat"; }; }; +}; - sound { - compatible = "audio-graph-card"; - label = "rockchip,rk3328"; - dais = <&i2s1_p0 - &spdif_p0>; - }; - - spdif-dit { - compatible = "linux,spdif-dit"; - #sound-dai-cells = <0>; - - port { - dit_p0_0: endpoint { - remote-endpoint = <&spdif_p0_0>; - }; - }; - }; +&analog_sound { + status = "okay"; }; &codec { status = "okay"; - - port@0 { - codec_p0_0: endpoint { - remote-endpoint = <&i2s1_p0_0>; - }; - }; }; &cpu0 { @@ -166,6 +146,10 @@ status = "okay"; }; +&hdmi_sound { + status = "okay"; +}; + &i2c1 { status = "okay"; @@ -277,16 +261,12 @@ }; }; -&i2s1 { +&i2s0 { status = "okay"; +}; - i2s1_p0: port { - i2s1_p0_0: endpoint { - dai-format = "i2s"; - mclk-fs = <256>; - remote-endpoint = <&codec_p0_0>; - }; - }; +&i2s1 { + status = "okay"; }; &io_domains { @@ -336,12 +316,14 @@ &spdif { pinctrl-0 = <&spdifm0_tx>; status = "okay"; +}; - spdif_p0: port { - spdif_p0_0: endpoint { - remote-endpoint = <&dit_p0_0>; - }; - }; +&spdif_out { + status = "okay"; +}; + +&spdif_sound { + status = "okay"; }; &spi0 { -- 2.17.1 From 1c472df59bdd77b5f9dc651e4c25959cd53a2778 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 23:26:37 +0000 Subject: [PATCH] WIP: arm64: dts: rockchip: add mali-supply on rk3328-rock64 and rk3328-roc-cc Signed-off-by: Jonas Karlman --- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 4 ++++ arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index a340a23cf073..3e564ba682b6 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -158,6 +158,10 @@ status = "okay"; }; +&gpu { + mali-supply = <&vdd_logic>; +}; + &hdmi { status = "okay"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts index e926616b4a0c..9023f311f89b 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -138,6 +138,10 @@ status = "okay"; }; +&gpu { + mali-supply = <&vdd_logic>; +}; + &hdmi { status = "okay"; }; -- 2.17.1 From 2fae05a90a56a71c1ad749a96fac8eeb8beefaf0 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Mon, 30 Dec 2019 00:30:38 +0000 Subject: [PATCH] WIP: arm64: dts: rockchip: misc updates on rk3328-rock64 and rk3328-roc-cc --- .../arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 34 +++++----------- .../arm64/boot/dts/rockchip/rk3328-rock64.dts | 39 +++++++------------ 2 files changed, 22 insertions(+), 51 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts index 3e564ba682b6..b58948f478a1 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -26,7 +26,6 @@ gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0m1_gpio>; - regulator-boot-on; regulator-name = "vcc_sd"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; @@ -54,25 +53,17 @@ pinctrl-0 = <&usb20_host_drv>; regulator-name = "vcc_host1_5v"; regulator-always-on; + regulator-boot-on; vin-supply = <&vcc_sys>; }; vcc_sys: vcc-sys { compatible = "regulator-fixed"; regulator-name = "vcc_sys"; - regulator-always-on; - regulator-boot-on; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; }; - vcc_phy: vcc-phy-regulator { - compatible = "regulator-fixed"; - regulator-name = "vcc_phy"; - regulator-always-on; - regulator-boot-on; - }; - ir-receiver { compatible = "gpio-ir-receiver"; gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_LOW>; @@ -128,7 +119,6 @@ &emmc { bus-width = <8>; cap-mmc-highspeed; - max-frequency = <150000000>; mmc-ddr-1_8v; mmc-hs200-1_8v; non-removable; @@ -143,16 +133,15 @@ assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>; assigned-clock-parents = <&gmac_clkin>, <&gmac_clkin>; clock_in_out = "input"; - phy-supply = <&vcc_phy>; phy-mode = "rgmii"; + phy-supply = <&vcc_io>; pinctrl-names = "default"; pinctrl-0 = <&rgmiim1_pins>; snps,aal; + snps,pbl = <0x4>; snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 10000 50000>; - snps,rxpbl = <0x4>; - snps,txpbl = <0x4>; tx_delay = <0x24>; rx_delay = <0x18>; status = "okay"; @@ -294,8 +283,6 @@ }; &io_domains { - status = "okay"; - vccio1-supply = <&vcc_io>; vccio2-supply = <&vcc18_emmc>; vccio3-supply = <&vccio_sd>; @@ -303,6 +290,7 @@ vccio5-supply = <&vcc_io>; vccio6-supply = <&vcc_io>; pmuio-supply = <&vcc_io>; + status = "okay"; }; &pinctrl { @@ -330,13 +318,8 @@ cap-mmc-highspeed; cap-sd-highspeed; disable-wp; - max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_dectn &sdmmc0_bus4>; - sd-uhs-sdr12; - sd-uhs-sdr25; - sd-uhs-sdr50; - sd-uhs-sdr104; vmmc-supply = <&vcc_sd>; vqmmc-supply = <&vccio_sd>; status = "okay"; @@ -361,23 +344,24 @@ status = "okay"; }; -&u2phy { +&uart2 { status = "okay"; }; -&u2phy_host { +&u2phy { status = "okay"; }; -&u2phy_otg { +&u2phy_host { status = "okay"; }; -&uart2 { +&u2phy_otg { status = "okay"; }; &usb20_otg { + dr_mode = "host"; status = "okay"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts index 9023f311f89b..345c045c58e6 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -32,7 +32,7 @@ vin-supply = <&vcc_io>; }; - vcc_host_5v: vcc-host-5v-regulator { + vcc_host_5v: vcc_host1_5v: vcc_otg_5v: vcc-host-5v-regulator { compatible = "regulator-fixed"; gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; @@ -43,22 +43,9 @@ vin-supply = <&vcc_sys>; }; - vcc_host1_5v: vcc_otg_5v: vcc-host1-5v-regulator { - compatible = "regulator-fixed"; - gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; - pinctrl-names = "default"; - pinctrl-0 = <&usb20_host_drv>; - regulator-name = "vcc_host1_5v"; - regulator-always-on; - regulator-boot-on; - vin-supply = <&vcc_sys>; - }; - vcc_sys: vcc-sys { compatible = "regulator-fixed"; regulator-name = "vcc_sys"; - regulator-always-on; - regulator-boot-on; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; }; @@ -112,6 +99,7 @@ &emmc { bus-width = <8>; cap-mmc-highspeed; + mmc-ddr-1_8v; mmc-hs200-1_8v; non-removable; pinctrl-names = "default"; @@ -125,11 +113,12 @@ assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>; assigned-clock-parents = <&gmac_clkin>, <&gmac_clkin>; clock_in_out = "input"; - phy-supply = <&vcc_io>; phy-mode = "rgmii"; + phy-supply = <&vcc_io>; pinctrl-names = "default"; pinctrl-0 = <&rgmiim1_pins>; - snps,force_thresh_dma_mode; + snps,aal; + snps,pbl = <0x4>; snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 10000 50000>; @@ -176,7 +165,7 @@ vcc3-supply = <&vcc_sys>; vcc4-supply = <&vcc_sys>; vcc5-supply = <&vcc_io>; - vcc6-supply = <&vcc_sys>; + vcc6-supply = <&vcc_io>; regulators { vdd_logic: DCDC_REG1 { @@ -274,8 +263,6 @@ }; &io_domains { - status = "okay"; - vccio1-supply = <&vcc_io>; vccio2-supply = <&vcc18_emmc>; vccio3-supply = <&vcc_io>; @@ -283,6 +270,7 @@ vccio5-supply = <&vcc_io>; vccio6-supply = <&vcc_io>; pmuio-supply = <&vcc_io>; + status = "okay"; }; &pinctrl { @@ -310,7 +298,6 @@ cap-mmc-highspeed; cap-sd-highspeed; disable-wp; - max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_dectn &sdmmc0_bus4>; vmmc-supply = <&vcc_sd>; @@ -354,14 +341,14 @@ &u2phy { status = "okay"; +}; - u2phy_host: host-port { - status = "okay"; - }; +&u2phy_host { + status = "okay"; +}; - u2phy_otg: otg-port { - status = "okay"; - }; +&u2phy_otg { + status = "okay"; }; &usb20_otg { -- 2.17.1 From 902ee56bf269bf4337eec25f0dc7d343bb9172b9 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 12 May 2019 12:40:00 +0000 Subject: [PATCH] arm64: dts: rockchip: add rk3328-rockbox --- arch/arm64/boot/dts/rockchip/Makefile | 1 + .../boot/dts/rockchip/rk3328-rockbox.dts | 349 ++++++++++++++++++ 2 files changed, 350 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3328-rockbox.dts diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile index 60d9437096c7..1df8933cb084 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile @@ -5,6 +5,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-roc-cc.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-a1.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-evb.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-rock64.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-rockbox.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-roc-cc.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-evb-act8846.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox.dtb diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rockbox.dts b/arch/arm64/boot/dts/rockchip/rk3328-rockbox.dts new file mode 100644 index 000000000000..b82708cfe742 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-rockbox.dts @@ -0,0 +1,349 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2017 PINE64 + */ + +/dts-v1/; +#include "rk3328.dtsi" + +/ { + model = "Popcorn Hour RockBox Basic"; + compatible = "popcornhour,rockbox", "rockchip,rk3328"; + + chosen { + stdout-path = "serial2:1500000n8"; + }; + + vcc_sd: sdmmc-regulator { + compatible = "regulator-fixed"; + gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc0m1_gpio>; + regulator-name = "vcc_sd"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc_io>; + }; + + vcc_host_5v: vcc_host1_5v: vcc_otg_5v: vcc-host-5v-regulator { + compatible = "regulator-fixed"; + regulator-name = "vcc_host_5v"; + regulator-always-on; + regulator-boot-on; + vin-supply = <&vcc_sys>; + }; + + vcc_sys: vcc-sys { + compatible = "regulator-fixed"; + regulator-name = "vcc_sys"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + }; + + ir-receiver { + compatible = "gpio-ir-receiver"; + gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_LOW>; + linux,rc-map-name = "rc-pine64"; + pinctrl-0 = <&ir_int>; + pinctrl-names = "default"; + }; + + leds { + compatible = "gpio-leds"; + + power { + gpios = <&rk805 0 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "default-on"; + default-state = "on"; + }; + }; + + sdio_pwrseq: sdio-pwrseq { + compatible = "mmc-pwrseq-simple"; + pinctrl-names = "default"; + pinctrl-0 = <&wifi_enable_h>; + reset-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>; + }; +}; + +&cpu0 { + cpu-supply = <&vdd_arm>; +}; + +&cpu1 { + cpu-supply = <&vdd_arm>; +}; + +&cpu2 { + cpu-supply = <&vdd_arm>; +}; + +&cpu3 { + cpu-supply = <&vdd_arm>; +}; + +&emmc { + bus-width = <8>; + cap-mmc-highspeed; + mmc-ddr-1_8v; + mmc-hs200-1_8v; + non-removable; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>; + vmmc-supply = <&vcc_io>; + vqmmc-supply = <&vcc18_emmc>; + status = "okay"; +}; + +&gmac2phy { + assigned-clocks = <&cru SCLK_MAC2PHY_SRC>; + assigned-clock-rate = <50000000>; + assigned-clocks = <&cru SCLK_MAC2PHY>; + assigned-clock-parents = <&cru SCLK_MAC2PHY_SRC>; + clock_in_out = "output"; + phy-supply = <&vcc_io>; + status = "okay"; +}; + +&gpu { + mali-supply = <&vdd_logic>; +}; + +&hdmi { + status = "okay"; +}; + +&hdmiphy { + status = "okay"; +}; + +&hdmi_sound { + status = "okay"; +}; + +&i2c1 { + status = "okay"; + + rk805: rk805@18 { + compatible = "rockchip,rk805"; + reg = <0x18>; + interrupt-parent = <&gpio2>; + interrupts = <6 IRQ_TYPE_LEVEL_LOW>; + #clock-cells = <1>; + clock-output-names = "xin32k", "rk805-clkout2"; + gpio-controller; + #gpio-cells = <2>; + pinctrl-names = "default"; + pinctrl-0 = <&pmic_int_l>; + rockchip,system-power-controller; + wakeup-source; + + vcc1-supply = <&vcc_sys>; + vcc2-supply = <&vcc_sys>; + vcc3-supply = <&vcc_sys>; + vcc4-supply = <&vcc_sys>; + vcc5-supply = <&vcc_io>; + vcc6-supply = <&vcc_io>; + + regulators { + vdd_logic: DCDC_REG1 { + regulator-name = "vdd_logic"; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1150000>; + regulator-ramp-delay = <12500>; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1000000>; + }; + }; + + vdd_arm: DCDC_REG2 { + regulator-name = "vdd_arm"; + regulator-min-microvolt = <950000>; + regulator-max-microvolt = <1350000>; + regulator-ramp-delay = <12500>; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <950000>; + }; + }; + + vcc_ddr: DCDC_REG3 { + regulator-name = "vcc_ddr"; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + }; + }; + + vcc_io: DCDC_REG4 { + regulator-name = "vcc_io"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <3300000>; + }; + }; + + vcc_18: LDO_REG1 { + regulator-name = "vcc_18"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1800000>; + }; + }; + + vcc18_emmc: LDO_REG2 { + regulator-name = "vcc18_emmc"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1800000>; + }; + }; + + vdd_10: LDO_REG3 { + regulator-name = "vdd_10"; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1000000>; + regulator-always-on; + regulator-boot-on; + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1000000>; + }; + }; + }; + }; +}; + +&i2s0 { + status = "okay"; +}; + +&io_domains { + vccio1-supply = <&vcc_io>; + vccio2-supply = <&vcc18_emmc>; + vccio3-supply = <&vcc_io>; + vccio4-supply = <&vcc_io>; + vccio5-supply = <&vcc_io>; + vccio6-supply = <&vcc_io>; + pmuio-supply = <&vcc_io>; + status = "okay"; +}; + +&pinctrl { + ir { + ir_int: ir-int { + rockchip,pins = <2 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + pmic { + pmic_int_l: pmic-int-l { + rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + + sdio-pwrseq { + wifi_enable_h: wifi-enable-h { + rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none_4ma>, + <1 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none_4ma>; + }; + }; +}; + +&sdio { + bus-width = <4>; + cap-sd-highspeed; + cap-sdio-irq; + keep-power-in-suspend; + mmc-pwrseq = <&sdio_pwrseq>; + non-removable; + num-slots = <1>; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc1_bus4 &sdmmc1_cmd &sdmmc1_clk>; + status = "disabled"; +}; + +&sdmmc { + bus-width = <4>; + cap-mmc-highspeed; + cap-sd-highspeed; + disable-wp; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_dectn &sdmmc0_bus4>; + vmmc-supply = <&vcc_sd>; + status = "okay"; +}; + +&spdif { + pinctrl-0 = <&spdifm0_tx>; + status = "okay"; +}; + +&spdif_out { + status = "okay"; +}; + +&spdif_sound { + status = "okay"; +}; + +&tsadc { + rockchip,hw-tshut-mode = <0>; + rockchip,hw-tshut-polarity = <0>; + status = "okay"; +}; + +&uart2 { + status = "okay"; +}; + +&u2phy { + status = "okay"; +}; + +&u2phy_host { + status = "okay"; +}; + +&u2phy_otg { + status = "okay"; +}; + +&usb20_otg { + dr_mode = "host"; + status = "okay"; +}; + +&usb_host0_ehci { + status = "okay"; +}; + +&usb_host0_ohci { + status = "okay"; +}; + +&vop { + status = "okay"; +}; + +&vop_mmu { + status = "okay"; +}; -- 2.17.1 From 175d289ac91694f01eaf5914a7e124ec1de1f9ac Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 8 Dec 2019 21:29:55 +0000 Subject: [PATCH] arm64: dts: rockchip: enable hdmi sound on rk3399-firefly --- arch/arm64/boot/dts/rockchip/rk3399-firefly.dts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts index d63faf38cc81..e9e2a6fb623b 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts @@ -263,6 +263,10 @@ status = "okay"; }; +&hdmi_sound { + status = "okay"; +}; + &i2c0 { clock-frequency = <400000>; i2c-scl-rising-time-ns = <168>; -- 2.17.1 From f8982a639da0310faf15639a8a068e7534b97b57 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sun, 14 Apr 2019 21:25:34 +0000 Subject: [PATCH] arm64: dts: rockchip: enable hdmi sound on rk3399-orangepi --- arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts b/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts index 9c659f3115c8..bfb9fa11adcc 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts @@ -517,6 +517,10 @@ }; }; +&i2s2 { + status = "okay"; +}; + &io_domains { status = "okay"; bt656-supply = <&vcc_3v0>; -- 2.17.1