Commit 1a9e51be authored by Martin Blumenstingl's avatar Martin Blumenstingl Committed by Neil Armstrong
Browse files

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: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
Reviewed-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20240218175035.1948165-1-martin.blumenstingl@googlemail.com


Signed-off-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240218175035.1948165-1-martin.blumenstingl@googlemail.com
parent 239cce65
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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;
	}
+11 −13
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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 */
+10 −13
Original line number Diff line number Diff line
@@ -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:
+1 −1
Original line number Diff line number Diff line
@@ -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 */
Loading