drivers: video: tegra: Blacklist pclk for a TV
Aly Hirani [Wed, 9 Dec 2015 20:49:34 +0000 (12:49 -0800)]
Adds a blacklist for the SUHD 8500 HDR TV. It apparently doesn't like us
setting 60/1.001 and rather us do 59.94.

Given the time frame, this is the lowest risk fix.

Bug 200158125

Change-Id: I865a81300d36508977521c25653442b4915f5774
Signed-off-by: Aly Hirani <ahirani@nvidia.com>
Reviewed-on: http://git-master/r/843751
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>

drivers/video/tegra/dc/edid.h
drivers/video/tegra/dc/edid_quirks.c
drivers/video/tegra/dc/hdmi2.0.c

index 867d98c..1e4bdb4 100644 (file)
@@ -106,9 +106,11 @@ enum {
 /* Flag fallback edid is in use. */
 #define EDID_ERRORS_USING_FALLBACK     0x04
 
-#define TEGRA_EDID_QUIRK_NONE      (0)
+#define TEGRA_EDID_QUIRK_NONE          (0)
 /* TV doesn't support YUV420, but declares support */
-#define TEGRA_EDID_QUIRK_NO_YUV (1 << 0)
+#define TEGRA_EDID_QUIRK_NO_YUV        (1 << 0)
+/* TV doesn't like 60/1.001, but is okay with 59.94 */
+#define TEGRA_EDID_QUIRK_370_BUMP_DOWN (1 << 1)
 
 struct tegra_edid {
        struct tegra_edid_pvt   *data;
index 9dcb9af..ec55818 100644 (file)
@@ -24,6 +24,8 @@ static const struct hdmi_blacklist {
 } edid_blacklist[] = {
        /* Bauhn ATVS65-815 65" 4K TV */
        { "CTV", 48, "Tempo 4K TV", TEGRA_EDID_QUIRK_NO_YUV },
+       /* Samsung JS8500 */
+       { "SAM", 3077, "SAMSUNG",   TEGRA_EDID_QUIRK_370_BUMP_DOWN },
 };
 
 u32 tegra_edid_lookup_quirks(const char *manufacturer, u32 model,
index b10afe9..72d83cd 100644 (file)
@@ -1988,9 +1988,16 @@ static long tegra_dc_hdmi_setup_clk(struct tegra_dc *dc, struct clk *clk)
        struct clk *parent_clk = clk_get(NULL,
                                dc->out->parent_clk ? : "pll_d2");
 #endif
+       struct tegra_hdmi *hdmi = tegra_dc_get_outdata(dc);
 
        dc->mode.pclk = tegra_hdmi_get_pclk(&dc->mode);
 
+       if (dc->mode.pclk == 370878125 &&
+               tegra_edid_get_quirks(hdmi->edid) &
+                       TEGRA_EDID_QUIRK_370_BUMP_DOWN) {
+               dc->mode.pclk = 370875000;
+       }
+
        if (IS_ERR_OR_NULL(parent_clk)) {
                dev_err(&dc->ndev->dev, "hdmi: parent clk get failed\n");
                return 0;