Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/meson: improve encoder probe / initialization error handling

Rename meson_encoder_{cvbs,dsi,hdmi}_init() to
meson_encoder_{cvbs,dsi,hdmi}_probe() so it's clear that these functions
are used at probe time during driver initialization. Also switch all
error prints inside those functions to use dev_err_probe() for
consistency.

This makes the code more straight forward to read and makes the error
prints within those functions consistent (by logging all -EPROBE_DEFER
with dev_dbg(), while actual errors are logged with dev_err() and get
the error value printed).

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20240218175035.1948165-1-martin.blumenstingl@googlemail.com
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240218175035.1948165-1-martin.blumenstingl@googlemail.com

authored by

Martin Blumenstingl and committed by
Neil Armstrong
1a9e51be 239cce65

+35 -39
+3 -3
drivers/gpu/drm/meson/meson_drv.c
··· 312 312 313 313 /* Encoder Initialization */ 314 314 315 - ret = meson_encoder_cvbs_init(priv); 315 + ret = meson_encoder_cvbs_probe(priv); 316 316 if (ret) 317 317 goto exit_afbcd; 318 318 ··· 326 326 } 327 327 } 328 328 329 - ret = meson_encoder_hdmi_init(priv); 329 + ret = meson_encoder_hdmi_probe(priv); 330 330 if (ret) 331 331 goto exit_afbcd; 332 332 333 333 if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) { 334 - ret = meson_encoder_dsi_init(priv); 334 + ret = meson_encoder_dsi_probe(priv); 335 335 if (ret) 336 336 goto exit_afbcd; 337 337 }
+11 -13
drivers/gpu/drm/meson/meson_encoder_cvbs.c
··· 219 219 .atomic_reset = drm_atomic_helper_bridge_reset, 220 220 }; 221 221 222 - int meson_encoder_cvbs_init(struct meson_drm *priv) 222 + int meson_encoder_cvbs_probe(struct meson_drm *priv) 223 223 { 224 224 struct drm_device *drm = priv->drm; 225 225 struct meson_encoder_cvbs *meson_encoder_cvbs; ··· 240 240 241 241 meson_encoder_cvbs->next_bridge = of_drm_find_bridge(remote); 242 242 of_node_put(remote); 243 - if (!meson_encoder_cvbs->next_bridge) { 244 - dev_err(priv->dev, "Failed to find CVBS Connector bridge\n"); 245 - return -EPROBE_DEFER; 246 - } 243 + if (!meson_encoder_cvbs->next_bridge) 244 + return dev_err_probe(priv->dev, -EPROBE_DEFER, 245 + "Failed to find CVBS Connector bridge\n"); 247 246 248 247 /* CVBS Encoder Bridge */ 249 248 meson_encoder_cvbs->bridge.funcs = &meson_encoder_cvbs_bridge_funcs; ··· 258 259 /* Encoder */ 259 260 ret = drm_simple_encoder_init(priv->drm, &meson_encoder_cvbs->encoder, 260 261 DRM_MODE_ENCODER_TVDAC); 261 - if (ret) { 262 - dev_err(priv->dev, "Failed to init CVBS encoder: %d\n", ret); 263 - return ret; 264 - } 262 + if (ret) 263 + return dev_err_probe(priv->dev, ret, 264 + "Failed to init CVBS encoder\n"); 265 265 266 266 meson_encoder_cvbs->encoder.possible_crtcs = BIT(0); 267 267 ··· 274 276 275 277 /* Initialize & attach Bridge Connector */ 276 278 connector = drm_bridge_connector_init(priv->drm, &meson_encoder_cvbs->encoder); 277 - if (IS_ERR(connector)) { 278 - dev_err(priv->dev, "Unable to create CVBS bridge connector\n"); 279 - return PTR_ERR(connector); 280 - } 279 + if (IS_ERR(connector)) 280 + return dev_err_probe(priv->dev, PTR_ERR(connector), 281 + "Unable to create CVBS bridge connector\n"); 282 + 281 283 drm_connector_attach_encoder(connector, &meson_encoder_cvbs->encoder); 282 284 283 285 priv->encoders[MESON_ENC_CVBS] = meson_encoder_cvbs;
+1 -1
drivers/gpu/drm/meson/meson_encoder_cvbs.h
··· 24 24 /* Modes supported by the CVBS output */ 25 25 extern struct meson_cvbs_mode meson_cvbs_modes[MESON_CVBS_MODES_COUNT]; 26 26 27 - int meson_encoder_cvbs_init(struct meson_drm *priv); 27 + int meson_encoder_cvbs_probe(struct meson_drm *priv); 28 28 void meson_encoder_cvbs_remove(struct meson_drm *priv); 29 29 30 30 #endif /* __MESON_VENC_CVBS_H */
+10 -13
drivers/gpu/drm/meson/meson_encoder_dsi.c
··· 100 100 .atomic_reset = drm_atomic_helper_bridge_reset, 101 101 }; 102 102 103 - int meson_encoder_dsi_init(struct meson_drm *priv) 103 + int meson_encoder_dsi_probe(struct meson_drm *priv) 104 104 { 105 105 struct meson_encoder_dsi *meson_encoder_dsi; 106 106 struct device_node *remote; ··· 118 118 } 119 119 120 120 meson_encoder_dsi->next_bridge = of_drm_find_bridge(remote); 121 - if (!meson_encoder_dsi->next_bridge) { 122 - dev_dbg(priv->dev, "Failed to find DSI transceiver bridge\n"); 123 - return -EPROBE_DEFER; 124 - } 121 + if (!meson_encoder_dsi->next_bridge) 122 + return dev_err_probe(priv->dev, -EPROBE_DEFER, 123 + "Failed to find DSI transceiver bridge\n"); 125 124 126 125 /* DSI Encoder Bridge */ 127 126 meson_encoder_dsi->bridge.funcs = &meson_encoder_dsi_bridge_funcs; ··· 134 135 /* Encoder */ 135 136 ret = drm_simple_encoder_init(priv->drm, &meson_encoder_dsi->encoder, 136 137 DRM_MODE_ENCODER_DSI); 137 - if (ret) { 138 - dev_err(priv->dev, "Failed to init DSI encoder: %d\n", ret); 139 - return ret; 140 - } 138 + if (ret) 139 + return dev_err_probe(priv->dev, ret, 140 + "Failed to init DSI encoder\n"); 141 141 142 142 meson_encoder_dsi->encoder.possible_crtcs = BIT(0); 143 143 144 144 /* Attach DSI Encoder Bridge to Encoder */ 145 145 ret = drm_bridge_attach(&meson_encoder_dsi->encoder, &meson_encoder_dsi->bridge, NULL, 0); 146 - if (ret) { 147 - dev_err(priv->dev, "Failed to attach bridge: %d\n", ret); 148 - return ret; 149 - } 146 + if (ret) 147 + return dev_err_probe(priv->dev, ret, 148 + "Failed to attach bridge\n"); 150 149 151 150 /* 152 151 * We should have now in place:
+1 -1
drivers/gpu/drm/meson/meson_encoder_dsi.h
··· 7 7 #ifndef __MESON_ENCODER_DSI_H 8 8 #define __MESON_ENCODER_DSI_H 9 9 10 - int meson_encoder_dsi_init(struct meson_drm *priv); 10 + int meson_encoder_dsi_probe(struct meson_drm *priv); 11 11 void meson_encoder_dsi_remove(struct meson_drm *priv); 12 12 13 13 #endif /* __MESON_ENCODER_DSI_H */
+8 -7
drivers/gpu/drm/meson/meson_encoder_hdmi.c
··· 366 366 .atomic_reset = drm_atomic_helper_bridge_reset, 367 367 }; 368 368 369 - int meson_encoder_hdmi_init(struct meson_drm *priv) 369 + int meson_encoder_hdmi_probe(struct meson_drm *priv) 370 370 { 371 371 struct meson_encoder_hdmi *meson_encoder_hdmi; 372 372 struct platform_device *pdev; ··· 386 386 387 387 meson_encoder_hdmi->next_bridge = of_drm_find_bridge(remote); 388 388 if (!meson_encoder_hdmi->next_bridge) { 389 - dev_err(priv->dev, "Failed to find HDMI transceiver bridge\n"); 390 - ret = -EPROBE_DEFER; 389 + ret = dev_err_probe(priv->dev, -EPROBE_DEFER, 390 + "Failed to find HDMI transceiver bridge\n"); 391 391 goto err_put_node; 392 392 } 393 393 ··· 405 405 ret = drm_simple_encoder_init(priv->drm, &meson_encoder_hdmi->encoder, 406 406 DRM_MODE_ENCODER_TMDS); 407 407 if (ret) { 408 - dev_err(priv->dev, "Failed to init HDMI encoder: %d\n", ret); 408 + dev_err_probe(priv->dev, ret, "Failed to init HDMI encoder\n"); 409 409 goto err_put_node; 410 410 } 411 411 ··· 415 415 ret = drm_bridge_attach(&meson_encoder_hdmi->encoder, &meson_encoder_hdmi->bridge, NULL, 416 416 DRM_BRIDGE_ATTACH_NO_CONNECTOR); 417 417 if (ret) { 418 - dev_err(priv->dev, "Failed to attach bridge: %d\n", ret); 418 + dev_err_probe(priv->dev, ret, "Failed to attach bridge\n"); 419 419 goto err_put_node; 420 420 } 421 421 ··· 423 423 meson_encoder_hdmi->connector = drm_bridge_connector_init(priv->drm, 424 424 &meson_encoder_hdmi->encoder); 425 425 if (IS_ERR(meson_encoder_hdmi->connector)) { 426 - dev_err(priv->dev, "Unable to create HDMI bridge connector\n"); 427 - ret = PTR_ERR(meson_encoder_hdmi->connector); 426 + ret = dev_err_probe(priv->dev, 427 + PTR_ERR(meson_encoder_hdmi->connector), 428 + "Unable to create HDMI bridge connector\n"); 428 429 goto err_put_node; 429 430 } 430 431 drm_connector_attach_encoder(meson_encoder_hdmi->connector,
+1 -1
drivers/gpu/drm/meson/meson_encoder_hdmi.h
··· 7 7 #ifndef __MESON_ENCODER_HDMI_H 8 8 #define __MESON_ENCODER_HDMI_H 9 9 10 - int meson_encoder_hdmi_init(struct meson_drm *priv); 10 + int meson_encoder_hdmi_probe(struct meson_drm *priv); 11 11 void meson_encoder_hdmi_remove(struct meson_drm *priv); 12 12 13 13 #endif /* __MESON_ENCODER_HDMI_H */