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:
parent
76f4f7c532
commit
d82b3f3565
1 changed files with 7 additions and 13 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue