Skip to content

Commit 988dbd2

Browse files
committed
Merge tag 'du-next-20210728' of git://linuxtv.org/pinchartl/media into drm-next
- R-Car DU shutdown fixes - R-Car DU conversion to bridge connector helper - Misc small fixes Signed-off-by: Dave Airlie <[email protected]> From: Laurent Pinchart <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 15d27b1 + 6571a76 commit 988dbd2

32 files changed

+134
-224
lines changed

drivers/gpu/drm/bridge/analogix/analogix_dp_core.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,7 +1583,6 @@ static int analogix_dp_create_bridge(struct drm_device *drm_dev,
15831583
struct analogix_dp_device *dp)
15841584
{
15851585
struct drm_bridge *bridge;
1586-
int ret;
15871586

15881587
bridge = devm_kzalloc(drm_dev->dev, sizeof(*bridge), GFP_KERNEL);
15891588
if (!bridge) {
@@ -1596,13 +1595,7 @@ static int analogix_dp_create_bridge(struct drm_device *drm_dev,
15961595
bridge->driver_private = dp;
15971596
bridge->funcs = &analogix_dp_bridge_funcs;
15981597

1599-
ret = drm_bridge_attach(dp->encoder, bridge, NULL, 0);
1600-
if (ret) {
1601-
DRM_ERROR("failed to attach drm bridge\n");
1602-
return -EINVAL;
1603-
}
1604-
1605-
return 0;
1598+
return drm_bridge_attach(dp->encoder, bridge, NULL, 0);
16061599
}
16071600

16081601
static int analogix_dp_dt_parse_pdata(struct analogix_dp_device *dp)

drivers/gpu/drm/bridge/analogix/anx7625.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,11 +1359,8 @@ static int anx7625_bridge_attach(struct drm_bridge *bridge,
13591359
err = drm_bridge_attach(bridge->encoder,
13601360
ctx->pdata.panel_bridge,
13611361
&ctx->bridge, flags);
1362-
if (err) {
1363-
DRM_DEV_ERROR(dev,
1364-
"Fail to attach panel bridge: %d\n", err);
1362+
if (err)
13651363
return err;
1366-
}
13671364
}
13681365

13691366
ctx->bridge_attached = 1;

drivers/gpu/drm/bridge/synopsys/dw-hdmi.c

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ struct dw_hdmi_phy_data {
143143
struct dw_hdmi {
144144
struct drm_connector connector;
145145
struct drm_bridge bridge;
146+
struct drm_bridge *next_bridge;
146147

147148
unsigned int version;
148149

@@ -2775,7 +2776,8 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *bridge,
27752776
struct dw_hdmi *hdmi = bridge->driver_private;
27762777

27772778
if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
2778-
return 0;
2779+
return drm_bridge_attach(bridge->encoder, hdmi->next_bridge,
2780+
bridge, flags);
27792781

27802782
return dw_hdmi_connector_create(hdmi);
27812783
}
@@ -3160,6 +3162,52 @@ static void dw_hdmi_init_hw(struct dw_hdmi *hdmi)
31603162
/* -----------------------------------------------------------------------------
31613163
* Probe/remove API, used from platforms based on the DRM bridge API.
31623164
*/
3165+
3166+
static int dw_hdmi_parse_dt(struct dw_hdmi *hdmi)
3167+
{
3168+
struct device_node *endpoint;
3169+
struct device_node *remote;
3170+
3171+
if (!hdmi->plat_data->output_port)
3172+
return 0;
3173+
3174+
endpoint = of_graph_get_endpoint_by_regs(hdmi->dev->of_node,
3175+
hdmi->plat_data->output_port,
3176+
-1);
3177+
if (!endpoint) {
3178+
/*
3179+
* On platforms whose bindings don't make the output port
3180+
* mandatory (such as Rockchip) the plat_data->output_port
3181+
* field isn't set, so it's safe to make this a fatal error.
3182+
*/
3183+
dev_err(hdmi->dev, "Missing endpoint in port@%u\n",
3184+
hdmi->plat_data->output_port);
3185+
return -ENODEV;
3186+
}
3187+
3188+
remote = of_graph_get_remote_port_parent(endpoint);
3189+
of_node_put(endpoint);
3190+
if (!remote) {
3191+
dev_err(hdmi->dev, "Endpoint in port@%u unconnected\n",
3192+
hdmi->plat_data->output_port);
3193+
return -ENODEV;
3194+
}
3195+
3196+
if (!of_device_is_available(remote)) {
3197+
dev_err(hdmi->dev, "port@%u remote device is disabled\n",
3198+
hdmi->plat_data->output_port);
3199+
of_node_put(remote);
3200+
return -ENODEV;
3201+
}
3202+
3203+
hdmi->next_bridge = of_drm_find_bridge(remote);
3204+
of_node_put(remote);
3205+
if (!hdmi->next_bridge)
3206+
return -EPROBE_DEFER;
3207+
3208+
return 0;
3209+
}
3210+
31633211
struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev,
31643212
const struct dw_hdmi_plat_data *plat_data)
31653213
{
@@ -3196,6 +3244,10 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev,
31963244
mutex_init(&hdmi->cec_notifier_mutex);
31973245
spin_lock_init(&hdmi->audio_lock);
31983246

3247+
ret = dw_hdmi_parse_dt(hdmi);
3248+
if (ret < 0)
3249+
return ERR_PTR(ret);
3250+
31993251
ddc_node = of_parse_phandle(np, "ddc-i2c-bus", 0);
32003252
if (ddc_node) {
32013253
hdmi->ddc = of_get_i2c_adapter_by_node(ddc_node);
@@ -3474,7 +3526,6 @@ struct dw_hdmi *dw_hdmi_bind(struct platform_device *pdev,
34743526
ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL, 0);
34753527
if (ret) {
34763528
dw_hdmi_remove(hdmi);
3477-
DRM_ERROR("Failed to initialize bridge with drm\n");
34783529
return ERR_PTR(ret);
34793530
}
34803531

drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,15 +1229,7 @@ EXPORT_SYMBOL_GPL(dw_mipi_dsi_remove);
12291229
*/
12301230
int dw_mipi_dsi_bind(struct dw_mipi_dsi *dsi, struct drm_encoder *encoder)
12311231
{
1232-
int ret;
1233-
1234-
ret = drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
1235-
if (ret) {
1236-
DRM_ERROR("Failed to initialize bridge with drm\n");
1237-
return ret;
1238-
}
1239-
1240-
return ret;
1232+
return drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
12411233
}
12421234
EXPORT_SYMBOL_GPL(dw_mipi_dsi_bind);
12431235

drivers/gpu/drm/bridge/tc358768.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ static int tc358768_calc_pll(struct tc358768_priv *priv,
291291
const struct drm_display_mode *mode,
292292
bool verify_only)
293293
{
294-
const u32 frs_limits[] = {
294+
static const u32 frs_limits[] = {
295295
1000000000,
296296
500000000,
297297
250000000,

drivers/gpu/drm/drm_bridge.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <drm/drm_atomic_state_helper.h>
2929
#include <drm/drm_bridge.h>
3030
#include <drm/drm_encoder.h>
31+
#include <drm/drm_print.h>
3132

3233
#include "drm_crtc_internal.h"
3334

@@ -225,6 +226,15 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
225226
bridge->dev = NULL;
226227
bridge->encoder = NULL;
227228
list_del(&bridge->chain_node);
229+
230+
#ifdef CONFIG_OF
231+
DRM_ERROR("failed to attach bridge %pOF to encoder %s: %d\n",
232+
bridge->of_node, encoder->name, ret);
233+
#else
234+
DRM_ERROR("failed to attach bridge to encoder %s: %d\n",
235+
encoder->name, ret);
236+
#endif
237+
228238
return ret;
229239
}
230240
EXPORT_SYMBOL(drm_bridge_attach);

drivers/gpu/drm/exynos/exynos_dp.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,8 @@ static int exynos_dp_bridge_attach(struct analogix_dp_plat_data *plat_data,
109109
if (dp->ptn_bridge) {
110110
ret = drm_bridge_attach(&dp->encoder, dp->ptn_bridge, bridge,
111111
0);
112-
if (ret) {
113-
DRM_DEV_ERROR(dp->dev,
114-
"Failed to attach bridge to drm\n");
112+
if (ret)
115113
return ret;
116-
}
117114
}
118115

119116
return 0;

drivers/gpu/drm/exynos/exynos_hdmi.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -970,11 +970,8 @@ static int hdmi_create_connector(struct drm_encoder *encoder)
970970
drm_connector_helper_add(connector, &hdmi_connector_helper_funcs);
971971
drm_connector_attach_encoder(connector, encoder);
972972

973-
if (hdata->bridge) {
973+
if (hdata->bridge)
974974
ret = drm_bridge_attach(encoder, hdata->bridge, NULL, 0);
975-
if (ret)
976-
DRM_DEV_ERROR(hdata->dev, "Failed to attach bridge\n");
977-
}
978975

979976
cec_fill_conn_info_from_drm(&conn_info, connector);
980977

drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -769,16 +769,9 @@ static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
769769
{
770770
struct drm_encoder *encoder = &dsi->encoder;
771771
struct drm_bridge *bridge = dsi->bridge;
772-
int ret;
773772

774773
/* associate the bridge to dsi encoder */
775-
ret = drm_bridge_attach(encoder, bridge, NULL, 0);
776-
if (ret) {
777-
DRM_ERROR("failed to attach external bridge\n");
778-
return ret;
779-
}
780-
781-
return 0;
774+
return drm_bridge_attach(encoder, bridge, NULL, 0);
782775
}
783776

784777
static int dsi_bind(struct device *dev, struct device *master, void *data)

drivers/gpu/drm/imx/dcss/dcss-kms.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,8 @@ static int dcss_kms_bridge_connector_init(struct dcss_kms_dev *kms)
9393

9494
ret = drm_bridge_attach(encoder, bridge, NULL,
9595
DRM_BRIDGE_ATTACH_NO_CONNECTOR);
96-
if (ret < 0) {
97-
dev_err(ddev->dev, "Unable to attach bridge %pOF\n",
98-
bridge->of_node);
96+
if (ret < 0)
9997
return ret;
100-
}
10198

10299
kms->connector = drm_bridge_connector_init(ddev, encoder);
103100
if (IS_ERR(kms->connector)) {

0 commit comments

Comments
 (0)