forked from rubenslte/android_kernel_samsung_msm8226
Merge "msm: mdss: do not shut down edp link during link training"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
f80c44abb5
@@ -604,6 +604,8 @@ int mdss_edp_off(struct mdss_panel_data *pdata)
|
||||
}
|
||||
pr_debug("%s:+, cont_splash=%d\n", __func__, edp_drv->cont_splash);
|
||||
|
||||
/* wait until link training is completed */
|
||||
mutex_lock(&edp_drv->train_mutex);
|
||||
|
||||
INIT_COMPLETION(edp_drv->idle_comp);
|
||||
mdss_edp_state_ctrl(edp_drv, ST_PUSH_IDLE);
|
||||
@@ -637,6 +639,8 @@ int mdss_edp_off(struct mdss_panel_data *pdata)
|
||||
|
||||
pr_debug("%s-: state_ctrl=%x\n", __func__,
|
||||
edp_read(edp_drv->base + 0x8));
|
||||
|
||||
mutex_unlock(&edp_drv->train_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -821,7 +825,6 @@ static void mdss_edp_do_link_train(struct mdss_edp_drv_pdata *ep)
|
||||
if (ep->cont_splash)
|
||||
return;
|
||||
|
||||
INIT_COMPLETION(ep->train_comp);
|
||||
mdss_edp_link_train(ep);
|
||||
}
|
||||
|
||||
|
||||
@@ -315,6 +315,7 @@ struct mdss_edp_drv_pdata {
|
||||
struct completion idle_comp;
|
||||
struct completion video_comp;
|
||||
struct mutex aux_mutex;
|
||||
struct mutex train_mutex;
|
||||
u32 aux_cmd_busy;
|
||||
u32 aux_cmd_i2c;
|
||||
int aux_trans_num;
|
||||
|
||||
@@ -1196,7 +1196,6 @@ static int edp_link_rate_down_shift(struct mdss_edp_drv_pdata *ep)
|
||||
static void edp_clear_training_pattern(struct mdss_edp_drv_pdata *ep)
|
||||
{
|
||||
pr_debug("%s:\n", __func__);
|
||||
edp_write(ep->base + EDP_STATE_CTRL, 0);
|
||||
edp_train_pattern_set_write(ep, 0);
|
||||
usleep(ep->dpcd.training_read_interval);
|
||||
}
|
||||
@@ -1224,6 +1223,7 @@ train_start:
|
||||
mdss_edp_config_ctrl(ep);
|
||||
mdss_edp_lane_power_ctrl(ep, 1);
|
||||
|
||||
mdss_edp_state_ctrl(ep, 0);
|
||||
edp_clear_training_pattern(ep);
|
||||
usleep(ep->dpcd.training_read_interval);
|
||||
|
||||
@@ -1240,6 +1240,7 @@ train_start:
|
||||
|
||||
pr_debug("%s: Training 1 completed successfully", __func__);
|
||||
|
||||
mdss_edp_state_ctrl(ep, 0);
|
||||
edp_clear_training_pattern(ep);
|
||||
ret = edp_start_link_train_2(ep);
|
||||
if (ret < 0) {
|
||||
@@ -1312,12 +1313,18 @@ int mdss_edp_sink_power_state(struct mdss_edp_drv_pdata *ep, char state)
|
||||
|
||||
int mdss_edp_link_train(struct mdss_edp_drv_pdata *ep)
|
||||
{
|
||||
return edp_aux_link_train(ep);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&ep->train_mutex);
|
||||
ret = edp_aux_link_train(ep);
|
||||
mutex_unlock(&ep->train_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mdss_edp_aux_init(struct mdss_edp_drv_pdata *ep)
|
||||
{
|
||||
mutex_init(&ep->aux_mutex);
|
||||
mutex_init(&ep->train_mutex);
|
||||
init_completion(&ep->aux_comp);
|
||||
init_completion(&ep->train_comp);
|
||||
init_completion(&ep->idle_comp);
|
||||
|
||||
Reference in New Issue
Block a user