Commit c9533131 authored by Thierry Reding's avatar Thierry Reding

drm/tegra: sor: Filter eDP rates

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: default avatarThierry Reding <treding@nvidia.com>
parent 38b445bc
...@@ -605,6 +605,30 @@ static struct clk *tegra_clk_sor_pad_register(struct tegra_sor *sor, ...@@ -605,6 +605,30 @@ static struct clk *tegra_clk_sor_pad_register(struct tegra_sor *sor,
return clk; 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) static int tegra_sor_power_up_lanes(struct tegra_sor *sor, unsigned int lanes)
{ {
unsigned long timeout; unsigned long timeout;
...@@ -1897,6 +1921,8 @@ static void tegra_sor_edp_enable(struct drm_encoder *encoder) ...@@ -1897,6 +1921,8 @@ static void tegra_sor_edp_enable(struct drm_encoder *encoder)
if (err < 0) if (err < 0)
dev_err(sor->dev, "failed to probe eDP link: %d\n", err); 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); err = drm_dp_link_choose(&sor->link, mode, info);
if (err < 0) if (err < 0)
dev_err(sor->dev, "failed to choose link: %d\n", err); dev_err(sor->dev, "failed to choose link: %d\n", err);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment