Adjust the training sequence.Detects the actual link condition
and calculates the bandwidth where the relevant resolution resides.
The bandwidth is recalculated and modes that exceed the bandwidth are
filtered.
Example Modify bandwidth filtering requirements.
Signed-off-by: Liankun Yang <liankun.yang@xxxxxxxxxxxx>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 81 ++++++++++++++++++-------------
1 file changed, 46 insertions(+), 35 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 2136a596efa1..3e645bd6fe27 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -66,6 +66,13 @@ enum {
MTK_DP_CAL_MAX,
};
+enum mtk_dp_color_format {
+ MTK_DP_COLOR_FORMAT_RGB = 0,
+ MTK_DP_COLOR_FORMAT_YUV422 = 0x1,
+ MTK_DP_COLOR_FORMAT_YUV444 = 0x2,
+ MTK_DP_COLOR_FORMAT_YUV420 = 0x3,
+};
+
struct mtk_dp_train_info {
bool sink_ssc;
bool cable_plugged_in;
@@ -84,7 +91,7 @@ struct mtk_dp_audio_cfg {
};
struct mtk_dp_info {
- enum dp_pixelformat format;
+ enum mtk_dp_color_format format;
struct videomode vm;
struct mtk_dp_audio_cfg audio_cur_cfg;
};
@@ -457,7 +464,7 @@ static void mtk_dp_set_msa(struct mtk_dp *mtk_dp)
@@ -1888,9 +1896,28 @@ static irqreturn_t mtk_dp_hpd_event_thread(int hpd, void *dev)
memset(&mtk_dp->info.audio_cur_cfg, 0,
sizeof(mtk_dp->info.audio_cur_cfg));
+ mtk_dp->enabled = false;
+ /* power off aux */
+ mtk_dp_update_bits(mtk_dp, MTK_DP_TOP_PWR_STATE,
+ DP_PWR_STATE_BANDGAP_TPLL,
+ DP_PWR_STATE_MASK);
+