]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/tegra: sor: Filter eDP rates
authorThierry Reding <treding@nvidia.com>
Thu, 1 Feb 2018 16:47:07 +0000 (17:47 +0100)
committerThierry Reding <treding@nvidia.com>
Mon, 28 Oct 2019 10:18:54 +0000 (11:18 +0100)
The SOR found on Tegra SoCs does not support all the rates potentially
advertised by eDP 1.4. Make sure that the rates that are not supported
are filtered out.

Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/sor.c

index 2023244ad328563b5a8e5da4583d26b0229a81c4..9e6a1ab7ef656f7a2a4cb08b94ba4c9f76f281e8 100644 (file)
@@ -605,6 +605,30 @@ static struct clk *tegra_clk_sor_pad_register(struct tegra_sor *sor,
        return clk;
 }
 
+static void tegra_sor_filter_rates(struct tegra_sor *sor)
+{
+       struct drm_dp_link *link = &sor->link;
+       unsigned int i;
+
+       /* Tegra only supports RBR, HBR and HBR2 */
+       for (i = 0; i < link->num_rates; i++) {
+               switch (link->rates[i]) {
+               case 1620000:
+               case 2700000:
+               case 5400000:
+                       break;
+
+               default:
+                       DRM_DEBUG_KMS("link rate %lu kHz not supported\n",
+                                     link->rates[i]);
+                       link->rates[i] = 0;
+                       break;
+               }
+       }
+
+       drm_dp_link_update_rates(link);
+}
+
 static int tegra_sor_power_up_lanes(struct tegra_sor *sor, unsigned int lanes)
 {
        unsigned long timeout;
@@ -1897,6 +1921,8 @@ static void tegra_sor_edp_enable(struct drm_encoder *encoder)
        if (err < 0)
                dev_err(sor->dev, "failed to probe eDP link: %d\n", err);
 
+       tegra_sor_filter_rates(sor);
+
        err = drm_dp_link_choose(&sor->link, mode, info);
        if (err < 0)
                dev_err(sor->dev, "failed to choose link: %d\n", err);