]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/rockchip: dw_hdmi_qp: Provide ref clock rate in dw_hdmi_qp_plat_data
authorCristian Ciocaltea <cristian.ciocaltea@collabora.com>
Wed, 3 Sep 2025 18:51:03 +0000 (21:51 +0300)
committerHeiko Stuebner <heiko@sntech.de>
Wed, 15 Oct 2025 20:28:07 +0000 (22:28 +0200)
In order to support correct initialization of the timer base in the HDMI
QP IP block, setup platform data to include the required reference clock
rate.

While at it, ensure plat_data is zero-initialized in
dw_hdmi_qp_rockchip_bind().

Reviewed-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20250903-rk3588-hdmi-cec-v4-5-fa25163c4b08@collabora.com
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c

index 9191a74a568fb38c2b2ff7ead1e703b3af9addc9..931343b072adc05877db9ae867e31a3cd1134e6c 100644 (file)
@@ -429,14 +429,15 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
                                    void *data)
 {
        struct platform_device *pdev = to_platform_device(dev);
+       struct dw_hdmi_qp_plat_data plat_data = {};
        const struct rockchip_hdmi_qp_cfg *cfg;
-       struct dw_hdmi_qp_plat_data plat_data;
        struct drm_device *drm = data;
        struct drm_connector *connector;
        struct drm_encoder *encoder;
        struct rockchip_hdmi_qp *hdmi;
        struct resource *res;
        struct clk_bulk_data *clks;
+       struct clk *ref_clk;
        int ret, irq, i;
 
        if (!pdev->dev.of_node)
@@ -506,6 +507,14 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
        if (ret < 0)
                return dev_err_probe(hdmi->dev, ret, "Failed to get clocks\n");
 
+       ref_clk = clk_get(hdmi->dev, "ref");
+       if (IS_ERR(ref_clk))
+               return dev_err_probe(hdmi->dev, PTR_ERR(ref_clk),
+                                    "Failed to get ref clock\n");
+
+       plat_data.ref_clk_rate = clk_get_rate(ref_clk);
+       clk_put(ref_clk);
+
        hdmi->enable_gpio = devm_gpiod_get_optional(hdmi->dev, "enable",
                                                    GPIOD_OUT_HIGH);
        if (IS_ERR(hdmi->enable_gpio))