[PATCH v2 5/6] drm/rockchip: analogix_dp: Add support for RK3568

From: Damon Ding

Date: Mon Oct 19 2026 - 06:31:05 EST


The RK3568 eDP controller does not require any GRF configurations,
so make the "rockchip,grf" property optional. Also enable the
optional avdd-0v9 and avdd-1v8 supplies which power the eDP PHY.

Add the "rockchip,rk3568-edp" compatible along with its chip data;
the register base in the chip data is used to match the platform
device memory resource.

Signed-off-by: Damon Ding <damon.ding@xxxxxxxxxxxxxx>

---

Changes in v2:
- Fail the probe when the chip data requires GRF configurations while
the "rockchip,grf" property is missing.(Sashiko)
---
.../gpu/drm/rockchip/analogix_dp-rockchip.c | 24 ++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index ccdd4b9ecdb8..38c78360842f 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -320,12 +320,17 @@ static int rockchip_dp_of_probe(struct rockchip_dp_device *dp)
struct device *dev = dp->dev;
struct device_node *np = dev->of_node;
struct clk *clk;
+ int ret;

- dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
+ dp->grf = syscon_regmap_lookup_by_phandle_optional(np, "rockchip,grf");
if (IS_ERR(dp->grf))
return dev_err_probe(dev, PTR_ERR(dp->grf),
"failed to get rockchip,grf property\n");

+ if (!dp->grf && (dp->data->lcdc_sel.valid || dp->data->edp_mode.valid))
+ return dev_err_probe(dev, -EINVAL,
+ "missing the required rockchip,grf property\n");
+
dp->grfclk = devm_clk_get_optional(dev, "grf");
if (IS_ERR(dp->grfclk))
return dev_err_probe(dev, PTR_ERR(dp->grfclk),
@@ -351,6 +356,14 @@ static int rockchip_dp_of_probe(struct rockchip_dp_device *dp)
return dev_err_probe(dev, PTR_ERR(dp->apbrst),
"failed to get apb reset control\n");

+ ret = devm_regulator_get_enable_optional(dev, "avdd-0v9");
+ if (ret && ret != -ENODEV)
+ return dev_err_probe(dev, ret, "failed to enable avdd-0v9\n");
+
+ ret = devm_regulator_get_enable_optional(dev, "avdd-1v8");
+ if (ret && ret != -ENODEV)
+ return dev_err_probe(dev, ret, "failed to enable avdd-1v8\n");
+
return 0;
}

@@ -530,6 +543,14 @@ static const struct rockchip_dp_chip_data rk3288_dp[] = {
{ /* sentinel */ }
};

+static const struct rockchip_dp_chip_data rk3568_edp[] = {
+ {
+ .chip_type = RK3568_EDP,
+ .reg = 0xfe0c0000,
+ },
+ { /* sentinel */ }
+};
+
static const struct rockchip_dp_chip_data rk3576_edp[] = {
{
.chip_type = RK3576_EDP,
@@ -555,6 +576,7 @@ static const struct rockchip_dp_chip_data rk3588_edp[] = {
static const struct of_device_id rockchip_dp_dt_ids[] = {
{.compatible = "rockchip,rk3288-dp", .data = &rk3288_dp },
{.compatible = "rockchip,rk3399-edp", .data = &rk3399_edp },
+ {.compatible = "rockchip,rk3568-edp", .data = &rk3568_edp },
{.compatible = "rockchip,rk3576-edp", .data = &rk3576_edp },
{.compatible = "rockchip,rk3588-edp", .data = &rk3588_edp },
{}
--
2.34.1