Skip to content

Commit e43d586

Browse files
Laurent Pinchartrobertfoss
authored andcommitted
drm/bridge: ti-sn65dsi86: Support DisplayPort (non-eDP) mode
Despite the SN65DSI86 being an eDP bridge, on some systems its output is routed to a DisplayPort connector. Enable DisplayPort mode when the next component in the display pipeline is detected as a DisplayPort connector, and disable eDP features in that case. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reworked to set bridge type based on the next bridge/connector. Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Douglas Anderson <dianders@chromium.org> Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> -- Changes since v1/RFC: - Rebased on top of "drm/bridge: ti-sn65dsi86: switch to devm_drm_of_get_bridge" - eDP/DP mode determined from the next bridge connector type. Changes since v2: - Remove setting of Standard DP Scrambler Seed. (It's read-only). - Prevent setting DP_EDP_CONFIGURATION_SET in ti_sn_bridge_atomic_enable() - Use Doug's suggested text for disabling ASSR on DP mode. Changes since v3: - Remove ASSR_CONTROL definition Changes since v4: - Refactor code to configure the DP/eDP scrambler in one place. Signed-off-by: Robert Foss <robert.foss@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220831082653.20449-3-tomi.valkeinen@ideasonboard.com
1 parent 3fc307d commit e43d586

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

drivers/gpu/drm/bridge/ti-sn65dsi86.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
#define SN_DATARATE_CONFIG_REG 0x94
9393
#define DP_DATARATE_MASK GENMASK(7, 5)
9494
#define DP_DATARATE(x) ((x) << 5)
95+
#define SN_TRAINING_SETTING_REG 0x95
96+
#define SCRAMBLE_DISABLE BIT(4)
9597
#define SN_ML_TX_MODE_REG 0x96
9698
#define ML_TX_MAIN_LINK_OFF 0
9799
#define ML_TX_NORMAL_MODE BIT(0)
@@ -1070,12 +1072,23 @@ static void ti_sn_bridge_atomic_enable(struct drm_bridge *bridge,
10701072

10711073
/*
10721074
* The SN65DSI86 only supports ASSR Display Authentication method and
1073-
* this method is enabled by default. An eDP panel must support this
1075+
* this method is enabled for eDP panels. An eDP panel must support this
10741076
* authentication method. We need to enable this method in the eDP panel
10751077
* at DisplayPort address 0x0010A prior to link training.
1078+
*
1079+
* As only ASSR is supported by SN65DSI86, for full DisplayPort displays
1080+
* we need to disable the scrambler.
10761081
*/
1077-
drm_dp_dpcd_writeb(&pdata->aux, DP_EDP_CONFIGURATION_SET,
1078-
DP_ALTERNATE_SCRAMBLER_RESET_ENABLE);
1082+
if (pdata->bridge.type == DRM_MODE_CONNECTOR_eDP) {
1083+
drm_dp_dpcd_writeb(&pdata->aux, DP_EDP_CONFIGURATION_SET,
1084+
DP_ALTERNATE_SCRAMBLER_RESET_ENABLE);
1085+
1086+
regmap_update_bits(pdata->regmap, SN_TRAINING_SETTING_REG,
1087+
SCRAMBLE_DISABLE, 0);
1088+
} else {
1089+
regmap_update_bits(pdata->regmap, SN_TRAINING_SETTING_REG,
1090+
SCRAMBLE_DISABLE, SCRAMBLE_DISABLE);
1091+
}
10791092

10801093
bpp = ti_sn_bridge_get_bpp(connector);
10811094
/* Set the DP output format (18 bpp or 24 bpp) */
@@ -1241,6 +1254,8 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,
12411254

12421255
pdata->bridge.funcs = &ti_sn_bridge_funcs;
12431256
pdata->bridge.of_node = np;
1257+
pdata->bridge.type = pdata->next_bridge->type == DRM_MODE_CONNECTOR_DisplayPort
1258+
? DRM_MODE_CONNECTOR_DisplayPort : DRM_MODE_CONNECTOR_eDP;
12441259

12451260
drm_bridge_add(&pdata->bridge);
12461261

0 commit comments

Comments
 (0)