msm: mdss: displayport: fix link training 2 for dp dongles

Fix the link training sequence so that dp dongle or sink
can be correctly programmed with link pattern and drive
settings.

Change-Id: I71139c504d9031839ff3c14cdd8cd6fdd885719d
Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
This commit is contained in:
Ajay Singh Parmar 2016-10-04 10:50:25 -07:00 committed by Gerrit - the friendly Code Review server
parent 76f4f7c532
commit d82b3f3565

View file

@ -1220,7 +1220,7 @@ static int dp_start_link_train_1(struct mdss_dp_drv_pdata *ep)
static int dp_start_link_train_2(struct mdss_dp_drv_pdata *ep) static int dp_start_link_train_2(struct mdss_dp_drv_pdata *ep)
{ {
int tries; int tries = 0;
int ret = 0; int ret = 0;
int usleep_time; int usleep_time;
char pattern; char pattern;
@ -1232,12 +1232,12 @@ static int dp_start_link_train_2(struct mdss_dp_drv_pdata *ep)
else else
pattern = 0x02; pattern = 0x02;
dp_host_train_set(ep, pattern); /* train_2 */
dp_voltage_pre_emphasise_set(ep);
dp_train_pattern_set_write(ep, pattern | 0x20);/* train_2 */ dp_train_pattern_set_write(ep, pattern | 0x20);/* train_2 */
tries = 0; do {
while (1) { dp_voltage_pre_emphasise_set(ep);
dp_host_train_set(ep, pattern);
usleep_time = ep->dpcd.training_read_interval; usleep_time = ep->dpcd.training_read_interval;
usleep_range(usleep_time, usleep_time); usleep_range(usleep_time, usleep_time);
@ -1249,14 +1249,13 @@ static int dp_start_link_train_2(struct mdss_dp_drv_pdata *ep)
} }
tries++; tries++;
if (tries > 5) { if (tries > 4) {
ret = -1; ret = -1;
break; break;
} }
dp_sink_train_set_adjust(ep); dp_sink_train_set_adjust(ep);
dp_voltage_pre_emphasise_set(ep); } while (1);
}
return ret; return ret;
} }
@ -1328,7 +1327,6 @@ static void dp_clear_training_pattern(struct mdss_dp_drv_pdata *ep)
int mdss_dp_link_train(struct mdss_dp_drv_pdata *dp) int mdss_dp_link_train(struct mdss_dp_drv_pdata *dp)
{ {
int ret = 0; int ret = 0;
int usleep_time;
ret = dp_aux_chan_ready(dp); ret = dp_aux_chan_ready(dp);
if (ret) { if (ret) {
@ -1349,8 +1347,6 @@ train_start:
mdss_dp_state_ctrl(&dp->ctrl_io, 0); mdss_dp_state_ctrl(&dp->ctrl_io, 0);
dp_clear_training_pattern(dp); dp_clear_training_pattern(dp);
usleep_time = dp->dpcd.training_read_interval;
usleep_range(usleep_time, usleep_time);
ret = dp_start_link_train_1(dp); ret = dp_start_link_train_1(dp);
if (ret < 0) { if (ret < 0) {
@ -1365,8 +1361,6 @@ train_start:
pr_debug("Training 1 completed successfully\n"); pr_debug("Training 1 completed successfully\n");
mdss_dp_state_ctrl(&dp->ctrl_io, 0);
dp_clear_training_pattern(dp);
ret = dp_start_link_train_2(dp); ret = dp_start_link_train_2(dp);
if (ret < 0) { if (ret < 0) {
if (dp_link_rate_down_shift(dp) == 0) { if (dp_link_rate_down_shift(dp) == 0) {