]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/meson: improve encoder probe / initialization error handling
authorMartin Blumenstingl <martin.blumenstingl@googlemail.com>
Sun, 18 Feb 2024 17:50:35 +0000 (18:50 +0100)
committerNeil Armstrong <neil.armstrong@linaro.org>
Mon, 19 Feb 2024 08:48:41 +0000 (09:48 +0100)
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
drivers/gpu/drm/meson/meson_drv.c
drivers/gpu/drm/meson/meson_encoder_cvbs.c
drivers/gpu/drm/meson/meson_encoder_cvbs.h
drivers/gpu/drm/meson/meson_encoder_dsi.c
drivers/gpu/drm/meson/meson_encoder_dsi.h
drivers/gpu/drm/meson/meson_encoder_hdmi.c
drivers/gpu/drm/meson/meson_encoder_hdmi.h

index cb674966e9aca787e679c77f9661fc1b786d9510..17a5cca007e29c28d1e01e9a59b53d36f2e3cd6f 100644 (file)
@@ -312,7 +312,7 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
 
        /* Encoder Initialization */
 
-       ret = meson_encoder_cvbs_init(priv);
+       ret = meson_encoder_cvbs_probe(priv);
        if (ret)
                goto exit_afbcd;
 
@@ -326,12 +326,12 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
                }
        }
 
-       ret = meson_encoder_hdmi_init(priv);
+       ret = meson_encoder_hdmi_probe(priv);
        if (ret)
                goto exit_afbcd;
 
        if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) {
-               ret = meson_encoder_dsi_init(priv);
+               ret = meson_encoder_dsi_probe(priv);
                if (ret)
                        goto exit_afbcd;
        }
index 3f73b211fa8e3e3bc4812180883c9685f8377f19..17c7b00a18c959a6e3f150ff08446645bd4b97ac 100644 (file)
@@ -219,7 +219,7 @@ static const struct drm_bridge_funcs meson_encoder_cvbs_bridge_funcs = {
        .atomic_reset = drm_atomic_helper_bridge_reset,
 };
 
-int meson_encoder_cvbs_init(struct meson_drm *priv)
+int meson_encoder_cvbs_probe(struct meson_drm *priv)
 {
        struct drm_device *drm = priv->drm;
        struct meson_encoder_cvbs *meson_encoder_cvbs;
@@ -240,10 +240,9 @@ int meson_encoder_cvbs_init(struct meson_drm *priv)
 
        meson_encoder_cvbs->next_bridge = of_drm_find_bridge(remote);
        of_node_put(remote);
-       if (!meson_encoder_cvbs->next_bridge) {
-               dev_err(priv->dev, "Failed to find CVBS Connector bridge\n");
-               return -EPROBE_DEFER;
-       }
+       if (!meson_encoder_cvbs->next_bridge)
+               return dev_err_probe(priv->dev, -EPROBE_DEFER,
+                                    "Failed to find CVBS Connector bridge\n");
 
        /* CVBS Encoder Bridge */
        meson_encoder_cvbs->bridge.funcs = &meson_encoder_cvbs_bridge_funcs;
@@ -259,10 +258,9 @@ int meson_encoder_cvbs_init(struct meson_drm *priv)
        /* Encoder */
        ret = drm_simple_encoder_init(priv->drm, &meson_encoder_cvbs->encoder,
                                      DRM_MODE_ENCODER_TVDAC);
-       if (ret) {
-               dev_err(priv->dev, "Failed to init CVBS encoder: %d\n", ret);
-               return ret;
-       }
+       if (ret)
+               return dev_err_probe(priv->dev, ret,
+                                    "Failed to init CVBS encoder\n");
 
        meson_encoder_cvbs->encoder.possible_crtcs = BIT(0);
 
@@ -276,10 +274,10 @@ int meson_encoder_cvbs_init(struct meson_drm *priv)
 
        /* Initialize & attach Bridge Connector */
        connector = drm_bridge_connector_init(priv->drm, &meson_encoder_cvbs->encoder);
-       if (IS_ERR(connector)) {
-               dev_err(priv->dev, "Unable to create CVBS bridge connector\n");
-               return PTR_ERR(connector);
-       }
+       if (IS_ERR(connector))
+               return dev_err_probe(priv->dev, PTR_ERR(connector),
+                                    "Unable to create CVBS bridge connector\n");
+
        drm_connector_attach_encoder(connector, &meson_encoder_cvbs->encoder);
 
        priv->encoders[MESON_ENC_CVBS] = meson_encoder_cvbs;
index 09710fec3c660e9c82c9bd4f83d5987ae953c32d..7b7bc85c03f7d6987abdb52e0c40a0276ddf7e13 100644 (file)
@@ -24,7 +24,7 @@ struct meson_cvbs_mode {
 /* Modes supported by the CVBS output */
 extern struct meson_cvbs_mode meson_cvbs_modes[MESON_CVBS_MODES_COUNT];
 
-int meson_encoder_cvbs_init(struct meson_drm *priv);
+int meson_encoder_cvbs_probe(struct meson_drm *priv);
 void meson_encoder_cvbs_remove(struct meson_drm *priv);
 
 #endif /* __MESON_VENC_CVBS_H */
index 3f93c70488cad1829bbe488d8bf8f7b3833859f1..79c7ee31677f1710c28f7afa6251b47290d8423c 100644 (file)
@@ -100,7 +100,7 @@ static const struct drm_bridge_funcs meson_encoder_dsi_bridge_funcs = {
        .atomic_reset = drm_atomic_helper_bridge_reset,
 };
 
-int meson_encoder_dsi_init(struct meson_drm *priv)
+int meson_encoder_dsi_probe(struct meson_drm *priv)
 {
        struct meson_encoder_dsi *meson_encoder_dsi;
        struct device_node *remote;
@@ -118,10 +118,9 @@ int meson_encoder_dsi_init(struct meson_drm *priv)
        }
 
        meson_encoder_dsi->next_bridge = of_drm_find_bridge(remote);
-       if (!meson_encoder_dsi->next_bridge) {
-               dev_dbg(priv->dev, "Failed to find DSI transceiver bridge\n");
-               return -EPROBE_DEFER;
-       }
+       if (!meson_encoder_dsi->next_bridge)
+               return dev_err_probe(priv->dev, -EPROBE_DEFER,
+                                    "Failed to find DSI transceiver bridge\n");
 
        /* DSI Encoder Bridge */
        meson_encoder_dsi->bridge.funcs = &meson_encoder_dsi_bridge_funcs;
@@ -135,19 +134,17 @@ int meson_encoder_dsi_init(struct meson_drm *priv)
        /* Encoder */
        ret = drm_simple_encoder_init(priv->drm, &meson_encoder_dsi->encoder,
                                      DRM_MODE_ENCODER_DSI);
-       if (ret) {
-               dev_err(priv->dev, "Failed to init DSI encoder: %d\n", ret);
-               return ret;
-       }
+       if (ret)
+               return dev_err_probe(priv->dev, ret,
+                                    "Failed to init DSI encoder\n");
 
        meson_encoder_dsi->encoder.possible_crtcs = BIT(0);
 
        /* Attach DSI Encoder Bridge to Encoder */
        ret = drm_bridge_attach(&meson_encoder_dsi->encoder, &meson_encoder_dsi->bridge, NULL, 0);
-       if (ret) {
-               dev_err(priv->dev, "Failed to attach bridge: %d\n", ret);
-               return ret;
-       }
+       if (ret)
+               return dev_err_probe(priv->dev, ret,
+                                    "Failed to attach bridge\n");
 
        /*
         * We should have now in place:
index 9277d70151939967cf4f9a98f56d5fbee6ac7ce3..85d5b61805f250b72d0467a155dbd6c6ad93a878 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef __MESON_ENCODER_DSI_H
 #define __MESON_ENCODER_DSI_H
 
-int meson_encoder_dsi_init(struct meson_drm *priv);
+int meson_encoder_dsi_probe(struct meson_drm *priv);
 void meson_encoder_dsi_remove(struct meson_drm *priv);
 
 #endif /* __MESON_ENCODER_DSI_H */
index fff6ce394f98d991450632a392a801ca134f18a6..c2b4a1e336d15e8acedddbd3590961cceb3cb173 100644 (file)
@@ -366,7 +366,7 @@ static const struct drm_bridge_funcs meson_encoder_hdmi_bridge_funcs = {
        .atomic_reset = drm_atomic_helper_bridge_reset,
 };
 
-int meson_encoder_hdmi_init(struct meson_drm *priv)
+int meson_encoder_hdmi_probe(struct meson_drm *priv)
 {
        struct meson_encoder_hdmi *meson_encoder_hdmi;
        struct platform_device *pdev;
@@ -386,8 +386,8 @@ int meson_encoder_hdmi_init(struct meson_drm *priv)
 
        meson_encoder_hdmi->next_bridge = of_drm_find_bridge(remote);
        if (!meson_encoder_hdmi->next_bridge) {
-               dev_err(priv->dev, "Failed to find HDMI transceiver bridge\n");
-               ret = -EPROBE_DEFER;
+               ret = dev_err_probe(priv->dev, -EPROBE_DEFER,
+                                   "Failed to find HDMI transceiver bridge\n");
                goto err_put_node;
        }
 
@@ -405,7 +405,7 @@ int meson_encoder_hdmi_init(struct meson_drm *priv)
        ret = drm_simple_encoder_init(priv->drm, &meson_encoder_hdmi->encoder,
                                      DRM_MODE_ENCODER_TMDS);
        if (ret) {
-               dev_err(priv->dev, "Failed to init HDMI encoder: %d\n", ret);
+               dev_err_probe(priv->dev, ret, "Failed to init HDMI encoder\n");
                goto err_put_node;
        }
 
@@ -415,7 +415,7 @@ int meson_encoder_hdmi_init(struct meson_drm *priv)
        ret = drm_bridge_attach(&meson_encoder_hdmi->encoder, &meson_encoder_hdmi->bridge, NULL,
                                DRM_BRIDGE_ATTACH_NO_CONNECTOR);
        if (ret) {
-               dev_err(priv->dev, "Failed to attach bridge: %d\n", ret);
+               dev_err_probe(priv->dev, ret, "Failed to attach bridge\n");
                goto err_put_node;
        }
 
@@ -423,8 +423,9 @@ int meson_encoder_hdmi_init(struct meson_drm *priv)
        meson_encoder_hdmi->connector = drm_bridge_connector_init(priv->drm,
                                                        &meson_encoder_hdmi->encoder);
        if (IS_ERR(meson_encoder_hdmi->connector)) {
-               dev_err(priv->dev, "Unable to create HDMI bridge connector\n");
-               ret = PTR_ERR(meson_encoder_hdmi->connector);
+               ret = dev_err_probe(priv->dev,
+                                   PTR_ERR(meson_encoder_hdmi->connector),
+                                   "Unable to create HDMI bridge connector\n");
                goto err_put_node;
        }
        drm_connector_attach_encoder(meson_encoder_hdmi->connector,
index a6cd38eb5f71c135d72054d3def51f9a29abf757..fd5485875db806002d7b8e5c03e6767cd83cc422 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef __MESON_ENCODER_HDMI_H
 #define __MESON_ENCODER_HDMI_H
 
-int meson_encoder_hdmi_init(struct meson_drm *priv);
+int meson_encoder_hdmi_probe(struct meson_drm *priv);
 void meson_encoder_hdmi_remove(struct meson_drm *priv);
 
 #endif /* __MESON_ENCODER_HDMI_H */