video/drm: analogix_dp: add edp reset control support

This patch adds eDP software reset operation to make sure
register access successfully on RK3288 and it fixes possible
register default value abnormal issue during boot up.

1) normal case:
Rockchip UBOOT DRM driver version: v1.0.1
0x120: 0x00000007
0x390: 0x00000003
Using display timing dts
Detailed mode clock 200000 kHz, flags[a]
H: 1536 1548 1564 1612
V: 2048 2056 2060 2068
bus_format: 100e
Link Training success!
final link rate = 0x06, lane count = 0x04

2) abnormal case:
Rockchip UBOOT DRM driver version: v1.0.1
0x120: 0x00000066
0x390: 0x00000202
Using display timing dts
Detailed mode clock 200000 kHz, flags[a]
H: 1536 1548 1564 1612
V: 2048 2056 2060 2068
bus_format: 100e
failed to get Rx Max Link Rate
failed to init training
unable to do link train

Change-Id: Idacbb0c72a40442da3a87e60bfe1d9965f3ca79c
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
Wyon Bi 2019-01-30 18:38:07 +08:00 committed by Jianhong Chen
parent 9136a2d39c
commit dddde95be4
2 changed files with 14 additions and 0 deletions

View File

@ -828,6 +828,11 @@ static int analogix_dp_connector_init(struct display_state *state)
break;
}
/* eDP software reset request */
reset_assert(&dp->reset);
udelay(1);
reset_deassert(&dp->reset);
analogix_dp_init_dp(dp);
return 0;
@ -917,6 +922,12 @@ static int analogix_dp_probe(struct udevice *dev)
if (IS_ERR(dp->grf))
return PTR_ERR(dp->grf);
ret = reset_get_by_name(dev, "dp", &dp->reset);
if (ret) {
dev_err(dev, "failed to get reset control: %d\n", ret);
return ret;
}
ret = gpio_request_by_name(dev, "hpd-gpios", 0, &dp->hpd_gpio,
GPIOD_IS_IN);
if (ret && ret != -ENOENT) {

View File

@ -7,6 +7,8 @@
#ifndef __DRM_ANALOGIX_DP_H__
#define __DRM_ANALOGIX_DP_H__
#include <reset.h>
/*
* Unless otherwise noted, all values are from the DP 1.1a spec. Note that
* DP and DPCD versions are independent. Differences from 1.0 are not noted,
@ -1071,6 +1073,7 @@ struct analogix_dp_device {
struct udevice *dev;
void *reg_base;
void *grf;
struct reset_ctl reset;
struct gpio_desc hpd_gpio;
struct video_info video_info;
struct link_train link_train;