drm/msm/mdp5: Avoid printing error messages for optional clocks
authorStephane Viau <sviau@codeaurora.org>
Tue, 15 Sep 2015 12:41:47 +0000 (08:41 -0400)
committerRob Clark <robdclark@gmail.com>
Thu, 22 Oct 2015 19:39:55 +0000 (15:39 -0400)
The current behavior is to try to get optional clocks and print a
dev_err message in case of failure. This looks rather confusing
and may increase with the amount of optional clocks.

We may need a cleaner way to handle per-device clocks but in the
meantime, let's reduce the amount of dev_err messages during the
probe.

Signed-off-by: Stephane Viau <sviau@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>
Documentation/devicetree/bindings/drm/msm/mdp.txt
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c

index 1a0598e5279df04cf63e581066309744f06df3ab..0833edaba4c3704717726af66a105d0aade1d4ea 100644 (file)
@@ -11,13 +11,14 @@ Required properties:
 - clock-names: the following clocks are required:
   * "core_clk"
   * "iface_clk"
-  * "lut_clk"
   * "src_clk"
   * "hdmi_clk"
   * "mpd_clk"
 
 Optional properties:
 - gpus: phandle for gpu device
+- clock-names: the following clocks are optional:
+  * "lut_clk"
 
 Example:
 
index 7dbdced1fa3ca116fa3e8b7859b797fc43bf30e3..34c4ad54c269a60949bb769dd1c12c877a14b1a8 100644 (file)
@@ -452,15 +452,19 @@ static void read_hw_revision(struct mdp5_kms *mdp5_kms,
 }
 
 static int get_clk(struct platform_device *pdev, struct clk **clkp,
-               const char *name)
+               const char *name, bool mandatory)
 {
        struct device *dev = &pdev->dev;
        struct clk *clk = devm_clk_get(dev, name);
-       if (IS_ERR(clk)) {
+       if (IS_ERR(clk) && mandatory) {
                dev_err(dev, "failed to get %s (%ld)\n", name, PTR_ERR(clk));
                return PTR_ERR(clk);
        }
-       *clkp = clk;
+       if (IS_ERR(clk))
+               DBG("skipping %s", name);
+       else
+               *clkp = clk;
+
        return 0;
 }
 
@@ -514,25 +518,26 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
                goto fail;
        }
 
-       ret = get_clk(pdev, &mdp5_kms->axi_clk, "bus_clk");
+       /* mandatory clocks: */
+       ret = get_clk(pdev, &mdp5_kms->axi_clk, "bus_clk", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->ahb_clk, "iface_clk");
+       ret = get_clk(pdev, &mdp5_kms->ahb_clk, "iface_clk", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->src_clk, "core_clk_src");
+       ret = get_clk(pdev, &mdp5_kms->src_clk, "core_clk_src", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->core_clk, "core_clk");
+       ret = get_clk(pdev, &mdp5_kms->core_clk, "core_clk", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->lut_clk, "lut_clk");
-       if (ret)
-               DBG("failed to get (optional) lut_clk clock");
-       ret = get_clk(pdev, &mdp5_kms->vsync_clk, "vsync_clk");
+       ret = get_clk(pdev, &mdp5_kms->vsync_clk, "vsync_clk", true);
        if (ret)
                goto fail;
 
+       /* optional clocks: */
+       get_clk(pdev, &mdp5_kms->lut_clk, "lut_clk", false);
+
        /* we need to set a default rate before enabling.  Set a safe
         * rate first, then figure out hw revision, and then set a
         * more optimal rate: