From: Jagan Teki <jagan@amarulasolutions.com>
To: Anatolij Gustschin <agust@denx.de>,
Neil Armstrong <neil.armstrong@linaro.org>,
Andre Przywara <andre.przywara@arm.com>,
Kever Yang <kever.yang@rock-chips.com>,
Simon Glass <sjg@chromium.org>, Heiko Stuebner <heiko@sntech.de>,
Andy Yan <andyshrk@163.com>, Robin Murphy <robin.murphy@arm.com>
Cc: Da Xue <da.xue@libretech.co>,
u-boot@lists.denx.de, Jagan Teki <jagan@edgeble.ai>
Subject: [PATCH v3 12/17] video: rockchip: Add rk3328 hdmi support
Date: Wed, 17 Jan 2024 13:21:49 +0530 [thread overview]
Message-ID: <20240117075154.58747-13-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20240117075154.58747-1-jagan@amarulasolutions.com>
From: Jagan Teki <jagan@edgeble.ai>
Add Rockchip RK3328 HDMI Out driver.
Signed-off-by: Jagan Teki <jagan@edgeble.ai>
---
Changes for v3:
- drop data
Changes for v2:
- none
drivers/video/rockchip/Makefile | 1 +
drivers/video/rockchip/rk3328_hdmi.c | 126 +++++++++++++++++++++++++++
drivers/video/rockchip/rk_hdmi.h | 3 +
3 files changed, 130 insertions(+)
create mode 100644 drivers/video/rockchip/rk3328_hdmi.c
diff --git a/drivers/video/rockchip/Makefile b/drivers/video/rockchip/Makefile
index 8128289cc8..4991303c73 100644
--- a/drivers/video/rockchip/Makefile
+++ b/drivers/video/rockchip/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399_vop.o
obj-$(CONFIG_DISPLAY_ROCKCHIP_EDP) += rk_edp.o
obj-$(CONFIG_DISPLAY_ROCKCHIP_LVDS) += rk_lvds.o
obj-hdmi-$(CONFIG_ROCKCHIP_RK3288) += rk3288_hdmi.o
+obj-hdmi-$(CONFIG_ROCKCHIP_RK3328) += rk3328_hdmi.o
obj-hdmi-$(CONFIG_ROCKCHIP_RK3399) += rk3399_hdmi.o
obj-$(CONFIG_DISPLAY_ROCKCHIP_HDMI) += rk_hdmi.o $(obj-hdmi-y)
obj-mipi-$(CONFIG_ROCKCHIP_RK3288) += rk3288_mipi.o
diff --git a/drivers/video/rockchip/rk3328_hdmi.c b/drivers/video/rockchip/rk3328_hdmi.c
new file mode 100644
index 0000000000..763669c09b
--- /dev/null
+++ b/drivers/video/rockchip/rk3328_hdmi.c
@@ -0,0 +1,126 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2023 Edgeble AI Technologies Pvt. Ltd.
+ */
+
+#include <clk.h>
+#include <display.h>
+#include <dm.h>
+#include <dw_hdmi.h>
+#include <asm/io.h>
+#include <asm/arch-rockchip/grf_rk3328.h>
+#include "rk_hdmi.h"
+
+#define RK3328_IO_3V_DOMAIN (7 << (9 + 16))
+#define RK3328_IO_5V_DOMAIN ((7 << 9) | (3 << (9 + 16)))
+#define RK3328_IO_DDC_IN_MSK ((3 << 10) | (3 << (10 + 16)))
+#define RK3328_IO_CTRL_BY_HDMI ((1 << 13) | (1 << (13 + 16)))
+
+static int rk3328_hdmi_enable(struct udevice *dev, int panel_bpp,
+ const struct display_timing *edid)
+{
+ struct rk_hdmi_priv *priv = dev_get_priv(dev);
+
+ return dw_hdmi_enable(&priv->hdmi, edid);
+}
+
+static int rk3328_dw_hdmi_phy_cfg(struct dw_hdmi *hdmi, uint pixclock)
+{
+ struct rk_hdmi_priv *priv = container_of(hdmi, struct rk_hdmi_priv, hdmi);
+ int ret;
+
+ ret = generic_phy_init(&priv->phy);
+ if (ret) {
+ printf("failed to init phy (ret=%d)\n", ret);
+ return ret;
+ }
+
+ ret = generic_phy_power_on(&priv->phy);
+ if (ret) {
+ printf("failed to power on phy (ret=%d)\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static void rk3328_dw_hdmi_setup_hpd(struct dw_hdmi *hdmi)
+{
+ struct rk_hdmi_priv *priv = container_of(hdmi, struct rk_hdmi_priv, hdmi);
+ struct rk3328_grf_regs *grf = priv->grf;
+
+ writel(RK3328_IO_DDC_IN_MSK, &grf->soc_con[2]);
+ writel(RK3328_IO_CTRL_BY_HDMI, &grf->soc_con[3]);
+}
+
+static void rk3328_dw_hdmi_read_hpd(struct dw_hdmi *hdmi, bool hpd_status)
+{
+ struct rk_hdmi_priv *priv = container_of(hdmi, struct rk_hdmi_priv, hdmi);
+ struct rk3328_grf_regs *grf = priv->grf;
+
+ if (hpd_status)
+ writel(RK3328_IO_5V_DOMAIN, &grf->soc_con[4]);
+ else
+ writel(RK3328_IO_3V_DOMAIN, &grf->soc_con[4]);
+}
+
+static const struct dw_hdmi_phy_ops dw_hdmi_rk3328_phy_ops = {
+ .phy_set = rk3328_dw_hdmi_phy_cfg,
+ .setup_hpd = rk3328_dw_hdmi_setup_hpd,
+ .read_hpd = rk3328_dw_hdmi_read_hpd,
+};
+
+static int rk3328_hdmi_of_to_plat(struct udevice *dev)
+{
+ struct rk_hdmi_priv *priv = dev_get_priv(dev);
+ struct dw_hdmi *hdmi = &priv->hdmi;
+
+ hdmi->i2c_clk_high = 0x71;
+ hdmi->i2c_clk_low = 0x76;
+
+ rk_hdmi_of_to_plat(dev);
+
+ hdmi->ops = &dw_hdmi_rk3328_phy_ops;
+
+ return 0;
+}
+
+static int rk3328_hdmi_probe(struct udevice *dev)
+{
+ struct rk_hdmi_priv *priv = dev_get_priv(dev);
+ int ret;
+
+ ret = generic_phy_get_by_name(dev, "hdmi", &priv->phy);
+ if (ret) {
+ printf("failed to get hdmi phy\n");
+ return ret;
+ };
+
+ ret = rk_hdmi_probe(dev);
+ if (ret) {
+ printf("failed to probe rk hdmi\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static const struct dm_display_ops rk3328_hdmi_ops = {
+ .read_edid = rk_hdmi_read_edid,
+ .enable = rk3328_hdmi_enable,
+};
+
+static const struct udevice_id rk3328_hdmi_ids[] = {
+ { .compatible = "rockchip,rk3328-dw-hdmi" },
+ { }
+};
+
+U_BOOT_DRIVER(rk3328_hdmi_rockchip) = {
+ .name = "rk3328_hdmi_rockchip",
+ .id = UCLASS_DISPLAY,
+ .of_match = rk3328_hdmi_ids,
+ .ops = &rk3328_hdmi_ops,
+ .of_to_plat = rk3328_hdmi_of_to_plat,
+ .probe = rk3328_hdmi_probe,
+ .priv_auto = sizeof(struct rk_hdmi_priv),
+};
diff --git a/drivers/video/rockchip/rk_hdmi.h b/drivers/video/rockchip/rk_hdmi.h
index 200dbaea74..dcfba3d3d7 100644
--- a/drivers/video/rockchip/rk_hdmi.h
+++ b/drivers/video/rockchip/rk_hdmi.h
@@ -6,6 +6,8 @@
#ifndef __RK_HDMI_H__
#define __RK_HDMI_H__
+#include <generic-phy.h>
+
struct rkhdmi_driverdata {
/* configuration */
u8 i2c_clk_high;
@@ -19,6 +21,7 @@ struct rkhdmi_driverdata {
struct rk_hdmi_priv {
struct dw_hdmi hdmi;
+ struct phy phy;
void *grf;
};
--
2.25.1
next prev parent reply other threads:[~2024-01-17 7:54 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-17 7:51 [PATCH v3 00/17] video: dw_hdmi: Support Vendor PHY Jagan Teki
2024-01-17 7:51 ` [PATCH v3 01/17] video: rockchip: hdmi: Detect hpd after controller init Jagan Teki
2024-01-17 7:51 ` [PATCH v3 02/17] video: dw_hdmi: Add Vendor PHY handling Jagan Teki
2024-01-17 8:58 ` Neil Armstrong
2024-01-17 7:51 ` [PATCH v3 03/17] video: dw_hdmi: Extend the HPD detection Jagan Teki
2024-01-17 8:59 ` Neil Armstrong
2024-01-17 7:51 ` [PATCH v3 04/17] video: dw_hdmi: Add read_hpd hook Jagan Teki
2024-01-17 8:59 ` Neil Armstrong
2024-01-17 7:51 ` [PATCH v3 05/17] video: dw_hdmi: Add setup_hpd hook Jagan Teki
2024-01-17 8:59 ` Neil Armstrong
2024-01-17 7:51 ` [PATCH v3 06/17] video: rockchip: vop: Simplify rkvop_enable Jagan Teki
2024-01-17 7:51 ` [PATCH v3 07/17] video: rockchip: vop: Add win offset support Jagan Teki
2024-01-17 7:51 ` [PATCH v3 08/17] video: rockchip: vop: Add dsp " Jagan Teki
2024-01-17 7:51 ` [PATCH v3 09/17] clk: rockchip: rk3328: Add VOP clk support Jagan Teki
2024-01-17 7:51 ` [PATCH v3 10/17] clk: rk3328: Add get hdmiphy clock Jagan Teki
2024-01-17 7:51 ` [PATCH v3 11/17] phy: rockchip: Add Rockchip INNO HDMI PHY driver Jagan Teki
2024-01-17 7:51 ` Jagan Teki [this message]
2024-01-17 7:51 ` [PATCH v3 13/17] video: rockchip: Add rk3328 vop support Jagan Teki
2024-01-17 7:51 ` [PATCH v3 14/17] ARM: dts: rk3328: Enable VOP for bootph-all Jagan Teki
2024-02-19 17:21 ` Jonas Karlman
2024-02-19 18:32 ` Jagan Teki
2024-01-17 7:51 ` [PATCH v3 15/17] rockchip: Enable preconsole for rk3328 Jagan Teki
2024-01-17 7:51 ` [PATCH v3 16/17] configs: evb-rk3328: Enable vidconsole " Jagan Teki
2024-01-17 7:51 ` [PATCH v3 17/17] configs: Enable HDMI Out for ROC-RK3328-CC Jagan Teki
2024-02-19 11:49 ` [PATCH v3 00/17] video: dw_hdmi: Support Vendor PHY Jagan Teki
2024-03-14 9:25 ` Jagan Teki
2024-04-20 23:19 ` Anatolij Gustschin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240117075154.58747-13-jagan@amarulasolutions.com \
--to=jagan@amarulasolutions.com \
--cc=agust@denx.de \
--cc=andre.przywara@arm.com \
--cc=andyshrk@163.com \
--cc=da.xue@libretech.co \
--cc=heiko@sntech.de \
--cc=jagan@edgeble.ai \
--cc=kever.yang@rock-chips.com \
--cc=neil.armstrong@linaro.org \
--cc=robin.murphy@arm.com \
--cc=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.