video/drm: edp: code style cleanup and fixes

Change-Id: I7ae761ca7a493e72fc4b4ed55f6cb2aa40a7cbfa
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
Wyon Bi 2018-12-18 08:52:20 +08:00 committed by Jianhong Chen
parent 95351b7a0e
commit 9c3b19b6a2
3 changed files with 185 additions and 269 deletions

View File

@ -136,7 +136,7 @@ static int analogix_dp_link_start(struct analogix_dp_device *dp)
pll_tries = 0;
while (analogix_dp_get_pll_lock_status(dp) == PLL_UNLOCKED) {
if (pll_tries == DP_TIMEOUT_LOOP_COUNT) {
pr_err("Wait for PLL lock timed out\n");
dev_err(dp->dev, "Wait for PLL lock timed out\n");
return -ETIMEDOUT;
}
@ -334,7 +334,7 @@ static int analogix_dp_process_clock_recovery(struct analogix_dp_device *dp)
if (retval)
return retval;
pr_info("Link Training Clock Recovery success\n");
dev_info(dp->dev, "Link Training Clock Recovery success\n");
dp->link_train.lt_state = EQUALIZER_TRAINING;
} else {
for (lane = 0; lane < lane_count; lane++) {
@ -354,7 +354,7 @@ static int analogix_dp_process_clock_recovery(struct analogix_dp_device *dp)
if (dp->link_train.cr_loop[lane] == MAX_CR_LOOP ||
voltage_swing == VOLTAGE_LEVEL_3 ||
pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
pr_err("CR Max reached (%d,%d,%d)\n",
dev_err(dp->dev, "CR Max reached (%d,%d,%d)\n",
dp->link_train.cr_loop[lane],
voltage_swing, pre_emphasis);
analogix_dp_reduce_link_rate(dp);
@ -414,17 +414,15 @@ static int analogix_dp_process_equalizer_training(struct analogix_dp_device *dp)
/* traing pattern Set to Normal */
analogix_dp_training_pattern_dis(dp);
pr_info("Link Training success!\n");
printf("Link Training success!\n");
analogix_dp_get_link_bandwidth(dp, &reg);
dp->link_train.link_rate = reg;
pr_debug("final bandwidth = %.2x\n",
dp->link_train.link_rate);
analogix_dp_get_lane_count(dp, &reg);
dp->link_train.lane_count = reg;
pr_debug("final lane count = %.2x\n",
dp->link_train.lane_count);
printf("final link rate = 0x%.2x, lane count = 0x%.2x\n",
dp->link_train.link_rate, dp->link_train.lane_count);
/* set enhanced mode if available */
analogix_dp_set_enhanced_mode(dp);
@ -437,7 +435,7 @@ static int analogix_dp_process_equalizer_training(struct analogix_dp_device *dp)
dp->link_train.eq_loop++;
if (dp->link_train.eq_loop > MAX_EQ_LOOP) {
pr_err("EQ Max loop\n");
dev_dbg(dp->dev, "EQ Max loop\n");
analogix_dp_reduce_link_rate(dp);
return -EIO;
}
@ -480,9 +478,9 @@ static void analogix_dp_get_max_rx_lane_count(struct analogix_dp_device *dp,
*lane_count = DPCD_MAX_LANE_COUNT(data);
}
static void analogix_dp_init_training(struct analogix_dp_device *dp,
enum link_lane_count_type max_lane,
int max_rate)
static int analogix_dp_init_training(struct analogix_dp_device *dp,
enum link_lane_count_type max_lane,
int max_rate)
{
/*
* MACRO_RST must be applied after the PLL_LOCK to avoid
@ -497,15 +495,13 @@ static void analogix_dp_init_training(struct analogix_dp_device *dp,
if ((dp->link_train.link_rate != DP_LINK_BW_1_62) &&
(dp->link_train.link_rate != DP_LINK_BW_2_7) &&
(dp->link_train.link_rate != DP_LINK_BW_5_4)) {
pr_err("Rx Max Link Rate is abnormal :%x !\n",
dp->link_train.link_rate);
dp->link_train.link_rate = DP_LINK_BW_1_62;
dev_err(dp->dev, "failed to get Rx Max Link Rate\n");
return -ENODEV;
}
if (dp->link_train.lane_count == 0) {
pr_err("Rx Max Lane count is abnormal :%x !\n",
dp->link_train.lane_count);
dp->link_train.lane_count = (u8)LANE_COUNT1;
dev_err(dp->dev, "failed to get Rx Max Lane Count\n");
return -ENODEV;
}
/* Setup TX lane count & rate */
@ -516,6 +512,8 @@ static void analogix_dp_init_training(struct analogix_dp_device *dp,
/* All DP analog module power up */
analogix_dp_set_analog_power_down(dp, POWER_ALL, 0);
return 0;
}
static int analogix_dp_sw_link_training(struct analogix_dp_device *dp)
@ -530,17 +528,17 @@ static int analogix_dp_sw_link_training(struct analogix_dp_device *dp)
case START:
retval = analogix_dp_link_start(dp);
if (retval)
pr_err("LT link start failed!\n");
dev_err(dp->dev, "LT link start failed!\n");
break;
case CLOCK_RECOVERY:
retval = analogix_dp_process_clock_recovery(dp);
if (retval)
pr_err("LT CR failed!\n");
dev_err(dp->dev, "LT CR failed!\n");
break;
case EQUALIZER_TRAINING:
retval = analogix_dp_process_equalizer_training(dp);
if (retval)
pr_err("LT EQ failed!\n");
dev_err(dp->dev, "LT EQ failed!\n");
break;
case FINISHED:
training_finished = 1;
@ -549,8 +547,6 @@ static int analogix_dp_sw_link_training(struct analogix_dp_device *dp)
return -EREMOTEIO;
}
}
if (retval)
pr_err("eDP link training failed (%d)\n", retval);
return retval;
}
@ -558,24 +554,25 @@ static int analogix_dp_sw_link_training(struct analogix_dp_device *dp)
static int analogix_dp_set_link_train(struct analogix_dp_device *dp,
u32 count, u32 bwtype)
{
int i;
int retval;
int ret;
for (i = 0; i < DP_TIMEOUT_LOOP_COUNT; i++) {
analogix_dp_init_training(dp, count, bwtype);
retval = analogix_dp_sw_link_training(dp);
if (retval == 0)
break;
udelay(110);
ret = analogix_dp_init_training(dp, count, bwtype);
if (ret < 0) {
dev_err(dp->dev, "failed to init training\n");
return ret;
}
return retval;
ret = analogix_dp_sw_link_training(dp);
if (ret < 0) {
dev_err(dp->dev, "failed to do sw link training\n");
return ret;
}
return 0;
}
static int analogix_dp_config_video(struct analogix_dp_device *dp)
{
int retval = 0;
int timeout_loop = 0;
int done_count = 0;
@ -584,7 +581,7 @@ static int analogix_dp_config_video(struct analogix_dp_device *dp)
analogix_dp_set_video_color_format(dp);
if (analogix_dp_get_pll_lock_status(dp) == PLL_UNLOCKED) {
pr_err("PLL is not locked yet.\n");
dev_err(dp->dev, "PLL is not locked yet.\n");
return -EINVAL;
}
@ -593,7 +590,7 @@ static int analogix_dp_config_video(struct analogix_dp_device *dp)
if (analogix_dp_is_slave_video_stream_clock_on(dp) == 0)
break;
if (timeout_loop > DP_TIMEOUT_LOOP_COUNT) {
pr_err("Timeout of video streamclk ok\n");
dev_err(dp->dev, "Timeout of video streamclk ok\n");
return -ETIMEDOUT;
}
@ -627,17 +624,14 @@ static int analogix_dp_config_video(struct analogix_dp_device *dp)
done_count = 0;
}
if (timeout_loop > DP_TIMEOUT_LOOP_COUNT) {
pr_err("Timeout of video streamclk ok\n");
dev_err(dp->dev, "Timeout of video streamclk ok\n");
return -ETIMEDOUT;
}
udelay(1001);
}
if (retval != 0)
pr_err("Video stream is not detected!\n");
return retval;
return 0;
}
static void analogix_dp_enable_scramble(struct analogix_dp_device *dp,
@ -698,7 +692,6 @@ static int analogix_dp_read_edid(struct analogix_dp_device *dp)
{
unsigned char *edid = dp->edid;
unsigned int extend_block = 0;
unsigned char sum;
unsigned char test_vector;
int retval;
@ -724,15 +717,11 @@ static int analogix_dp_read_edid(struct analogix_dp_device *dp)
EDID_HEADER_PATTERN,
EDID_BLOCK_LENGTH,
&edid[EDID_HEADER_PATTERN]);
if (retval != 0) {
pr_err("EDID Read failed!\n");
return -EIO;
}
sum = analogix_dp_calc_edid_check_sum(edid);
if (sum != 0) {
pr_err("EDID bad checksum!\n");
return -EIO;
}
if (retval < 0)
return retval;
if (analogix_dp_calc_edid_check_sum(edid))
return -EINVAL;
/* Read additional EDID data */
retval = analogix_dp_read_bytes_from_i2c(dp,
@ -740,15 +729,11 @@ static int analogix_dp_read_edid(struct analogix_dp_device *dp)
EDID_BLOCK_LENGTH,
EDID_BLOCK_LENGTH,
&edid[EDID_BLOCK_LENGTH]);
if (retval != 0) {
pr_err("EDID Read failed!\n");
return -EIO;
}
sum = analogix_dp_calc_edid_check_sum(&edid[EDID_BLOCK_LENGTH]);
if (sum != 0) {
pr_err("EDID bad checksum!\n");
return -EIO;
}
if (retval < 0)
return retval;
if (analogix_dp_calc_edid_check_sum(&edid[EDID_BLOCK_LENGTH]))
return -EINVAL;
analogix_dp_read_byte_from_dpcd(dp, DP_TEST_REQUEST,
&test_vector);
@ -761,21 +746,18 @@ static int analogix_dp_read_edid(struct analogix_dp_device *dp)
DP_TEST_EDID_CHECKSUM_WRITE);
}
} else {
pr_info("EDID data does not include any extensions.\n");
dev_info(dp->dev,
"EDID data does not include any extensions.\n");
/* Read EDID data */
retval = analogix_dp_read_bytes_from_i2c(dp,
I2C_EDID_DEVICE_ADDR, EDID_HEADER_PATTERN,
EDID_BLOCK_LENGTH, &edid[EDID_HEADER_PATTERN]);
if (retval != 0) {
pr_err("EDID Read failed!\n");
return -EIO;
}
sum = analogix_dp_calc_edid_check_sum(edid);
if (sum != 0) {
pr_err("EDID bad checksum!\n");
return -EIO;
}
if (retval < 0)
return retval;
if (analogix_dp_calc_edid_check_sum(edid))
return -EINVAL;
analogix_dp_read_byte_from_dpcd(dp, DP_TEST_REQUEST,
&test_vector);
@ -787,7 +769,6 @@ static int analogix_dp_read_edid(struct analogix_dp_device *dp)
}
}
debug("EDID Read success!\n");
return 0;
}
@ -819,165 +800,61 @@ retry:
return retval;
}
const struct rockchip_dp_chip_data rk3399_analogix_edp_drv_data = {
.lcdsel_grf_reg = 0x6250,
.lcdsel_big = 0 | BIT(21),
.lcdsel_lit = BIT(5) | BIT(21),
.chip_type = RK3399_EDP,
.has_vop_sel = true,
};
const struct rockchip_dp_chip_data rk3288_analogix_dp_drv_data = {
.lcdsel_grf_reg = 0x025c,
.lcdsel_big = 0 | BIT(21),
.lcdsel_lit = BIT(5) | BIT(21),
.chip_type = RK3288_DP,
.has_vop_sel = true,
};
const struct rockchip_dp_chip_data rk3368_analogix_edp_drv_data = {
.chip_type = RK3368_EDP,
.has_vop_sel = false,
};
static int rockchip_analogix_dp_init(struct display_state *state)
static int analogix_dp_connector_init(struct display_state *state)
{
struct connector_state *conn_state = &state->conn_state;
const struct rockchip_connector *connector = conn_state->connector;
const struct rockchip_dp_chip_data *pdata = connector->data;
struct analogix_dp_device *dp;
struct analogix_dp_plat_data *plat_data;
int ret;
struct analogix_dp_device *dp = dev_get_priv(conn_state->dev);
dp = malloc(sizeof(*dp));
if (!dp)
return -ENOMEM;
memset(dp, 0, sizeof(*dp));
plat_data = malloc(sizeof(*pdata));
if (!plat_data)
return -ENOMEM;
dp->reg_base = dev_read_addr_ptr(conn_state->dev);
dp->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
if (dp->grf <= 0) {
printf("%s: Get syscon grf failed (ret=%p)\n",
__func__, dp->grf);
return -ENXIO;
}
ret = gpio_request_by_name(conn_state->dev, "hpd-gpios", 0,
&dp->hpd_gpio, GPIOD_IS_IN);
if (ret != -ENOENT) {
printf("%s: Warning: cannot get hpd GPIO: ret=%d\n",
__func__, ret);
return ret;
}
dp->plat_data = plat_data;
dp->plat_data->dev_type = ROCKCHIP_DP;
dp->plat_data->subdev_type = pdata->chip_type;
/*
* Like Rockchip DisplayPort TRM indicate that "Main link
* containing 4 physical lanes of 2.7/1.62 Gbps/lane".
*/
dp->video_info.max_link_rate = 0x0A;
dp->video_info.max_lane_count = 0x04;
conn_state->private = dp;
conn_state->type = DRM_MODE_CONNECTOR_eDP;
conn_state->output_mode = ROCKCHIP_OUT_MODE_AAAA;
conn_state->color_space = V4L2_COLORSPACE_DEFAULT;
#if 0
if (pdata->chip_type == RK3399_EDP) {
/*
* reset edp controller.
*/
writel(0x20002000, RKIO_CRU_PHYS + 0x444);
mdelay(10);
writel(0x20000000, RKIO_CRU_PHYS + 0x444);
mdelay(10);
} else if (pdata->chip_type == RK3368_EDP) {
/* edp ref clk sel */
writel(0x00010001, RKIO_GRF_PHYS + 0x410);
/* edp 24m clock domain software reset */
writel(0x80008000, RKIO_CRU_PHYS + 0x318);
udelay(20);
writel(0x80000000, RKIO_CRU_PHYS + 0x318);
/* edp ctrl apb bus software reset */
writel(0x04000400, RKIO_CRU_PHYS + 0x31c);
udelay(20);
writel(0x04000000, RKIO_CRU_PHYS + 0x31c);
} else if (pdata->chip_type == RK3288_DP) {
/* edp ref clk sel */
writel(0x00100010, RKIO_GRF_PHYS + 0x274);
/* edp 24m clock domain software reset */
writel(0x80008000, RKIO_CRU_PHYS + 0x1d0);
udelay(20);
writel(0x80000000, RKIO_CRU_PHYS + 0x1d0);
udelay(20);
}
#endif
analogix_dp_init_dp(dp);
return 0;
}
static void rockchip_analogix_dp_deinit(struct display_state *state)
{
/* TODO */
}
static int rockchip_analogix_dp_get_edid(struct display_state *state)
static int analogix_dp_connector_get_edid(struct display_state *state)
{
struct connector_state *conn_state = &state->conn_state;
struct analogix_dp_device *dp = conn_state->private;
struct analogix_dp_device *dp = dev_get_priv(conn_state->dev);
int ret;
ret = analogix_dp_handle_edid(dp);
if (ret)
if (ret) {
dev_err(dp->dev, "failed to get edid\n");
return ret;
}
memcpy(&conn_state->edid, &dp->edid, sizeof(dp->edid));
return 0;
}
static int rockchip_analogix_dp_prepare(struct display_state *state)
static int analogix_dp_connector_enable(struct display_state *state)
{
struct connector_state *conn_state = &state->conn_state;
struct crtc_state *crtc_state = &state->crtc_state;
const struct rockchip_connector *connector = conn_state->connector;
const struct rockchip_dp_chip_data *pdata = connector->data;
struct analogix_dp_device *dp = conn_state->private;
struct analogix_dp_device *dp = dev_get_priv(conn_state->dev);
u32 val;
if (!pdata->has_vop_sel)
return 0;
if (crtc_state->crtc_id)
val = pdata->lcdsel_lit;
else
val = pdata->lcdsel_big;
writel(val, dp->grf + pdata->lcdsel_grf_reg);
debug("vop %s output to edp\n", (crtc_state->crtc_id) ? "LIT" : "BIG");
return 0;
}
static int rockchip_analogix_dp_enable(struct display_state *state)
{
struct connector_state *conn_state = &state->conn_state;
struct analogix_dp_device *dp = conn_state->private;
int ret;
if (pdata->has_vop_sel) {
if (crtc_state->crtc_id)
val = pdata->lcdsel_lit;
else
val = pdata->lcdsel_big;
writel(val, dp->grf + pdata->lcdsel_grf_reg);
}
ret = analogix_dp_set_link_train(dp, dp->video_info.max_lane_count,
dp->video_info.max_link_rate);
if (ret) {
pr_err("unable to do link train\n");
return 0;
dev_err(dp->dev, "unable to do link train\n");
return ret;
}
analogix_dp_enable_scramble(dp, 1);
@ -986,58 +863,116 @@ static int rockchip_analogix_dp_enable(struct display_state *state)
analogix_dp_init_video(dp);
ret = analogix_dp_config_video(dp);
if (ret)
pr_err("unable to config video\n");
if (ret) {
dev_err(dp->dev, "unable to config video\n");
return ret;
}
return 0;
}
static int rockchip_analogix_dp_disable(struct display_state *state)
static int analogix_dp_connector_disable(struct display_state *state)
{
/* TODO */
return 0;
}
const struct rockchip_connector_funcs rockchip_analogix_dp_funcs = {
.init = rockchip_analogix_dp_init,
.deinit = rockchip_analogix_dp_deinit,
.get_edid = rockchip_analogix_dp_get_edid,
.prepare = rockchip_analogix_dp_prepare,
.enable = rockchip_analogix_dp_enable,
.disable = rockchip_analogix_dp_disable,
static const struct rockchip_connector_funcs analogix_dp_connector_funcs = {
.init = analogix_dp_connector_init,
.get_edid = analogix_dp_connector_get_edid,
.enable = analogix_dp_connector_enable,
.disable = analogix_dp_connector_disable,
};
static const struct rockchip_connector rk3288_analogix_dp_data = {
.funcs = &rockchip_analogix_dp_funcs,
.data = &rk3288_analogix_dp_drv_data,
static int analogix_dp_probe(struct udevice *dev)
{
struct analogix_dp_device *dp = dev_get_priv(dev);
const struct rockchip_connector *connector =
(const struct rockchip_connector *)dev_get_driver_data(dev);
const struct rockchip_dp_chip_data *pdata = connector->data;
int ret;
dp->reg_base = dev_read_addr_ptr(dev);
dp->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
if (IS_ERR(dp->grf))
return PTR_ERR(dp->grf);
ret = gpio_request_by_name(dev, "hpd-gpios", 0, &dp->hpd_gpio,
GPIOD_IS_IN);
if (ret && ret != -ENOENT) {
dev_err(dev, "failed to get hpd GPIO: %d\n", ret);
return ret;
}
dp->plat_data.dev_type = ROCKCHIP_DP;
dp->plat_data.subdev_type = pdata->chip_type;
/*
* Like Rockchip DisplayPort TRM indicate that "Main link
* containing 4 physical lanes of 2.7/1.62 Gbps/lane".
*/
dp->video_info.max_link_rate = 0x0A;
dp->video_info.max_lane_count = 0x04;
dp->dev = dev;
return 0;
}
static const struct rockchip_dp_chip_data rk3288_edp_platform_data = {
.lcdsel_grf_reg = 0x025c,
.lcdsel_big = 0 | BIT(21),
.lcdsel_lit = BIT(5) | BIT(21),
.chip_type = RK3288_DP,
.has_vop_sel = true,
};
static const struct rockchip_connector rk3399_analogix_edp_data = {
.funcs = &rockchip_analogix_dp_funcs,
.data = &rk3399_analogix_edp_drv_data,
static const struct rockchip_connector rk3288_edp_driver_data = {
.funcs = &analogix_dp_connector_funcs,
.data = &rk3288_edp_platform_data,
};
static const struct rockchip_connector rk3368_analogix_edp_data = {
.funcs = &rockchip_analogix_dp_funcs,
.data = &rk3368_analogix_edp_drv_data,
static const struct rockchip_dp_chip_data rk3368_edp_platform_data = {
.chip_type = RK3368_EDP,
.has_vop_sel = false,
};
static const struct udevice_id rockchip_analogix_dp_ids[] = {
static const struct rockchip_connector rk3368_edp_driver_data = {
.funcs = &analogix_dp_connector_funcs,
.data = &rk3368_edp_platform_data,
};
static const struct rockchip_dp_chip_data rk3399_edp_platform_data = {
.lcdsel_grf_reg = 0x6250,
.lcdsel_big = 0 | BIT(21),
.lcdsel_lit = BIT(5) | BIT(21),
.chip_type = RK3399_EDP,
.has_vop_sel = true,
};
static const struct rockchip_connector rk3399_edp_driver_data = {
.funcs = &analogix_dp_connector_funcs,
.data = &rk3399_edp_platform_data,
};
static const struct udevice_id analogix_dp_ids[] = {
{
.compatible = "rockchip,rk3288-dp",
.data = (ulong)&rk3288_analogix_dp_data,
},{
.compatible = "rockchip,rk3399-edp",
.data = (ulong)&rk3399_analogix_edp_data,
},{
.compatible = "rockchip,rk3368-edp",
.data = (ulong)&rk3368_analogix_edp_data,
}, {}
.compatible = "rockchip,rk3288-dp",
.data = (ulong)&rk3288_edp_driver_data,
}, {
.compatible = "rockchip,rk3368-edp",
.data = (ulong)&rk3368_edp_driver_data,
}, {
.compatible = "rockchip,rk3399-edp",
.data = (ulong)&rk3399_edp_driver_data,
},
{}
};
U_BOOT_DRIVER(rockchip_analogix_dp) = {
.name = "rockchip_analogix_dp",
U_BOOT_DRIVER(analogix_dp) = {
.name = "analogix_dp",
.id = UCLASS_DISPLAY,
.of_match = rockchip_analogix_dp_ids,
.of_match = analogix_dp_ids,
.probe = analogix_dp_probe,
.priv_auto_alloc_size = sizeof(struct analogix_dp_device),
};

View File

@ -1068,13 +1068,14 @@ struct analogix_dp_plat_data {
};
struct analogix_dp_device {
struct udevice *dev;
void *reg_base;
void *grf;
struct gpio_desc hpd_gpio;
struct video_info video_info;
struct link_train link_train;
struct drm_display_mode *mode;
struct analogix_dp_plat_data *plat_data;
struct analogix_dp_plat_data plat_data;
unsigned char edid[EDID_BLOCK_LENGTH * 2];
};

View File

@ -81,10 +81,10 @@ void analogix_dp_init_analog_param(struct analogix_dp_device *dp)
reg = SEL_24M | TX_DVDD_BIT_1_0625V;
writel(reg, dp->reg_base + ANALOGIX_DP_ANALOG_CTL_2);
if (dp->plat_data && (dp->plat_data->dev_type == ROCKCHIP_DP)) {
if (dp->plat_data.dev_type == ROCKCHIP_DP) {
reg = REF_CLK_24M;
if (dp->plat_data->subdev_type == RK3288_DP ||
dp->plat_data->subdev_type == RK3368_EDP)
if (dp->plat_data.subdev_type == RK3288_DP ||
dp->plat_data.subdev_type == RK3368_EDP)
reg ^= REF_CLK_MASK;
writel(reg, dp->reg_base + ANALOGIX_DP_PLL_REG_1);
@ -256,7 +256,7 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
u32 reg;
u32 phy_pd_addr = ANALOGIX_DP_PHY_PD;
if (dp->plat_data && (dp->plat_data->dev_type == ROCKCHIP_DP))
if (dp->plat_data.dev_type == ROCKCHIP_DP)
phy_pd_addr = ANALOGIX_DP_PD;
switch (block) {
@ -360,8 +360,9 @@ void analogix_dp_init_analog_func(struct analogix_dp_device *dp)
while (analogix_dp_get_pll_lock_status(dp) == PLL_UNLOCKED) {
timeout_loop++;
if(DP_TIMEOUT_LOOP_COUNT < timeout_loop) {
pr_err("failed to get pll lock status\n");
if (timeout_loop > DP_TIMEOUT_LOOP_COUNT) {
dev_err(dp->dev,
"failed to get pll lock status\n");
return;
}
udelay(20);
@ -460,7 +461,7 @@ void analogix_dp_init_aux(struct analogix_dp_device *dp)
analogix_dp_reset_aux(dp);
/* Disable AUX transaction H/W retry */
if (dp->plat_data && (dp->plat_data->dev_type == ROCKCHIP_DP))
if (dp->plat_data.dev_type == ROCKCHIP_DP)
reg = AUX_BIT_PERIOD_EXPECTED_DELAY(0) |
AUX_HW_RETRY_COUNT_SEL(3) |
AUX_HW_RETRY_INTERVAL_600_MICROSECONDS;
@ -521,9 +522,10 @@ int analogix_dp_start_aux_transaction(struct analogix_dp_device *dp)
while (!(reg & RPLY_RECEIV)) {
timeout_loop++;
if (DP_TIMEOUT_LOOP_COUNT < timeout_loop) {
pr_err("AUX CH command reply failed!\n");
dev_err(dp->dev, "AUX CH command reply failed!\n");
return -ETIMEDOUT;
}
reg = readl(dp->reg_base + ANALOGIX_DP_INT_STA);
udelay(11);
}
@ -541,8 +543,8 @@ int analogix_dp_start_aux_transaction(struct analogix_dp_device *dp)
/* Check AUX CH error access status */
reg = readl(dp->reg_base + ANALOGIX_DP_AUX_CH_STA);
if ((reg & AUX_STATUS_MASK) != 0) {
pr_err("AUX CH error happens: %d\n\n",
reg & AUX_STATUS_MASK);
dev_err(dp->dev,
"AUX CH error happens: %d\n", reg & AUX_STATUS_MASK);
return -EREMOTEIO;
}
@ -586,8 +588,6 @@ int analogix_dp_write_byte_to_dpcd(struct analogix_dp_device *dp,
retval = analogix_dp_start_aux_transaction(dp);
if (retval == 0)
break;
pr_debug("%s: Aux Transaction fail!\n", __func__);
}
return retval;
@ -626,8 +626,6 @@ int analogix_dp_read_byte_from_dpcd(struct analogix_dp_device *dp,
retval = analogix_dp_start_aux_transaction(dp);
if (retval == 0)
break;
pr_info("%s: Aux Transaction fail!\n", __func__);
}
/* Read data buffer */
@ -691,9 +689,6 @@ int analogix_dp_write_bytes_to_dpcd(struct analogix_dp_device *dp,
retval = analogix_dp_start_aux_transaction(dp);
if (retval == 0)
break;
pr_debug("%s: Aux Transaction fail!\n",
__func__);
}
start_offset += cur_data_count;
@ -749,9 +744,6 @@ int analogix_dp_read_bytes_from_dpcd(struct analogix_dp_device *dp,
retval = analogix_dp_start_aux_transaction(dp);
if (retval == 0)
break;
pr_debug("%s: Aux Transaction fail!\n",
__func__);
}
for (cur_data_idx = 0; cur_data_idx < cur_data_count;
@ -795,10 +787,10 @@ int analogix_dp_select_i2c_device(struct analogix_dp_device *dp,
/* Start AUX transaction */
retval = analogix_dp_start_aux_transaction(dp);
if (retval != 0)
pr_debug("%s: Aux Transaction fail!\n", __func__);
if (retval < 0)
return retval;
return retval;
return 0;
}
int analogix_dp_read_byte_from_i2c(struct analogix_dp_device *dp,
@ -834,8 +826,6 @@ int analogix_dp_read_byte_from_i2c(struct analogix_dp_device *dp,
retval = analogix_dp_start_aux_transaction(dp);
if (retval == 0)
break;
pr_debug("%s: Aux Transaction fail!\n", __func__);
}
/* Read data */
@ -894,15 +884,12 @@ int analogix_dp_read_bytes_from_i2c(struct analogix_dp_device *dp,
retval = analogix_dp_start_aux_transaction(dp);
if (retval == 0)
break;
pr_debug("%s: Aux Transaction fail!\n",
__func__);
}
/* Check if Rx sends defer */
reg = readl(dp->reg_base + ANALOGIX_DP_AUX_RX_COMM);
if (reg == AUX_RX_COMM_AUX_DEFER ||
reg == AUX_RX_COMM_I2C_DEFER) {
pr_err("Defer: %d\n\n", reg);
dev_dbg(dp->dev, "Defer: %d\n\n", reg);
defer = 1;
}
}
@ -1175,21 +1162,16 @@ int analogix_dp_is_slave_video_stream_clock_on(struct analogix_dp_device *dp)
reg = readl(dp->reg_base + ANALOGIX_DP_SYS_CTL_1);
if (!(reg & DET_STA)) {
pr_debug("Input stream clock not detected.\n");
if (!(reg & DET_STA))
return -EINVAL;
}
reg = readl(dp->reg_base + ANALOGIX_DP_SYS_CTL_2);
writel(reg, dp->reg_base + ANALOGIX_DP_SYS_CTL_2);
reg = readl(dp->reg_base + ANALOGIX_DP_SYS_CTL_2);
pr_debug("wait SYS_CTL_2.\n");
if (reg & CHA_STA) {
pr_debug("Input stream clk is changing\n");
if (reg & CHA_STA)
return -EINVAL;
}
return 0;
}
@ -1277,10 +1259,8 @@ int analogix_dp_is_video_stream_on(struct analogix_dp_device *dp)
writel(reg, dp->reg_base + ANALOGIX_DP_SYS_CTL_3);
reg = readl(dp->reg_base + ANALOGIX_DP_SYS_CTL_3);
if (!(reg & STRM_VALID)) {
pr_debug("Input video stream is not detected.\n");
if (!(reg & STRM_VALID))
return -EINVAL;
}
return 0;
}