Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92618b15 authored by Chandan Uddaraju's avatar Chandan Uddaraju
Browse files

mdss: DisplayPort: update link-training settings and do DP reset



Add new settings for link-training parameters. Add
code in DP OFF to set the DP state to IDLE mode.

Add support for DP global reset before
initializing DP controller.

Change-Id: Ica893a9b56ae51b12f5d4a192b995aa966dc934e
Signed-off-by: default avatarChandan Uddaraju <chandanu@codeaurora.org>
parent a1b989e0
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1162,8 +1162,7 @@ int mdss_dp_off(struct mdss_panel_data *pdata)
	mutex_lock(&dp_drv->train_mutex);

	reinit_completion(&dp_drv->idle_comp);

	mdss_dp_state_ctrl(&dp_drv->ctrl_io, 0);
	mdss_dp_state_ctrl(&dp_drv->ctrl_io, ST_PUSH_IDLE);

	if (dp_drv->link_clks_on)
		mdss_dp_mainlink_ctrl(&dp_drv->ctrl_io, false);
@@ -1305,9 +1304,10 @@ static int mdss_dp_host_init(struct mdss_panel_data *pdata)

	mdss_dp_aux_init(dp_drv);

	mdss_dp_phy_initialize(dp_drv);
	mdss_dp_ctrl_reset(&dp_drv->ctrl_io);
	mdss_dp_phy_reset(&dp_drv->ctrl_io);
	mdss_dp_aux_reset(&dp_drv->ctrl_io);
	mdss_dp_phy_initialize(dp_drv);
	mdss_dp_aux_ctrl(&dp_drv->ctrl_io, true);

	pr_debug("Ctrl_hw_rev =0x%x, phy hw_rev =0x%x\n",
+7 −7
Original line number Diff line number Diff line
@@ -1113,17 +1113,17 @@ static void dp_host_train_set(struct mdss_dp_drv_pdata *ep, int train)
}

char vm_pre_emphasis[4][4] = {
	{0x00, 0x06, 0x09, 0x0C},	/* pe0, 0 db */
	{0x00, 0x06, 0x09, 0xFF},	/* pe1, 3.5 db */
	{0x03, 0x06, 0xFF, 0xFF},	/* pe2, 6.0 db */
	{0x03, 0xFF, 0xFF, 0xFF}	/* pe3, 9.5 db */
	{0x00, 0x09, 0x11, 0x0C},	/* pe0, 0 db */
	{0x00, 0x0A, 0x10, 0xFF},	/* pe1, 3.5 db */
	{0x00, 0x0C, 0xFF, 0xFF},	/* pe2, 6.0 db */
	{0x00, 0xFF, 0xFF, 0xFF}	/* pe3, 9.5 db */
};

/* voltage swing, 0.2v and 1.0v are not support */
char vm_voltage_swing[4][4] = {
	{0x0a, 0x18, 0x1A, 0x1E}, /* sw0, 0.4v  */
	{0x07, 0x1A, 0x1E, 0xFF}, /* sw1, 0.6 v */
	{0x1A, 0x1E, 0xFF, 0xFF}, /* sw1, 0.8 v */
	{0x07, 0x0f, 0x12, 0x1E}, /* sw0, 0.4v  */
	{0x11, 0x1D, 0x1F, 0xFF}, /* sw1, 0.6 v */
	{0x18, 0x1F, 0xFF, 0xFF}, /* sw1, 0.8 v */
	{0x1E, 0xFF, 0xFF, 0xFF}  /* sw1, 1.2 v, optional */
};

+12 −0
Original line number Diff line number Diff line
@@ -143,6 +143,18 @@ void mdss_dp_aux_reset(struct dss_io_data *ctrl_io)
	writel_relaxed(aux_ctrl, ctrl_io->base + DP_AUX_CTRL);
}

/* reset DP controller */
void mdss_dp_ctrl_reset(struct dss_io_data *ctrl_io)
{
	u32 sw_reset = readl_relaxed(ctrl_io->base + DP_SW_RESET);

	sw_reset |= BIT(0);
	writel_relaxed(sw_reset, ctrl_io->base + DP_SW_RESET);
	udelay(1000);
	sw_reset &= ~BIT(0);
	writel_relaxed(sw_reset, ctrl_io->base + DP_SW_RESET);
}

/* reset DP Mainlink */
void mdss_dp_mainlink_reset(struct dss_io_data *ctrl_io)
{
+1 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ int dp_aux_write(void *ep, struct edp_cmd *cmd);
void mdss_dp_state_ctrl(struct dss_io_data *ctrl_io, u32 data);
u32 mdss_dp_get_ctrl_hw_version(struct dss_io_data *ctrl_io);
u32 mdss_dp_get_phy_hw_version(struct dss_io_data *phy_io);
void mdss_dp_ctrl_reset(struct dss_io_data *ctrl_io);
void mdss_dp_aux_reset(struct dss_io_data *ctrl_io);
void mdss_dp_mainlink_reset(struct dss_io_data *ctrl_io);
void mdss_dp_phy_reset(struct dss_io_data *ctrl_io);