drm/bridge: maxim-max96745: Check training state

Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
Change-Id: I6f68dc0b155cd6e8a5ac314449ffe0f263f64046
This commit is contained in:
Wyon Bi
2022-07-28 07:25:50 +00:00
parent 66fee6290f
commit 38fbb24eeb
2 changed files with 11 additions and 7 deletions

View File

@@ -203,8 +203,16 @@ max96745_bridge_detect(struct drm_bridge *bridge)
return connector_status_disconnected;
if (connector->status == connector_status_connected) {
u32 dprx_trn_status2;
if (atomic_cmpxchg(&ser->lock.triggered, 1, 0))
return connector_status_disconnected;
if (regmap_read(ser->regmap, 0x641a, &dprx_trn_status2))
return connector_status_disconnected;
if ((dprx_trn_status2 & DPRX_TRAIN_STATE) != DPRX_TRAIN_STATE)
return connector_status_disconnected;
} else {
atomic_set(&ser->lock.triggered, 0);
}
@@ -269,13 +277,6 @@ static int max96745_bridge_probe(struct platform_device *pdev)
return dev_err_probe(dev, ret,
"failed to register extcon device\n");
regmap_update_bits(ser->regmap, 0x7070, MAX_LANE_COUNT,
FIELD_PREP(MAX_LANE_COUNT, 0x04));
regmap_update_bits(ser->regmap, 0x7074, MAX_LINK_RATE,
FIELD_PREP(MAX_LINK_RATE, 0x14));
regmap_update_bits(ser->regmap, 0x7000, LINK_ENABLE,
FIELD_PREP(LINK_ENABLE, 1));
ser->lock.irq = gpiod_to_irq(ser->lock.gpio);
if (ser->lock.irq < 0)
return ser->lock.irq;

View File

@@ -102,6 +102,9 @@
/* 0752h */
#define FRCDCMODE GENMASK(1, 0)
/* 641Ah */
#define DPRX_TRAIN_STATE GENMASK(7, 4)
/* 7000h */
#define LINK_ENABLE BIT(0)