[PATCH v2] drm: imx: imx-tve: Check and propagate the errors

Philipp Zabel p.zabel at pengutronix.de
Mon Jan 19 00:31:12 PST 2015


Hi Fabio,

thank you for the patch.

Am Samstag, den 17.01.2015, 19:49 -0200 schrieb Fabio Estevam:
> From: Fabio Estevam <fabio.estevam at freescale.com>
> 
> In the case of errors we should propagate them.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
> ---
> Changes since v1:
> - Fixed a typo on my FSL address
> 
>  drivers/gpu/drm/imx/imx-tve.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
> index a729f4f7..a281723 100644
> --- a/drivers/gpu/drm/imx/imx-tve.c
> +++ b/drivers/gpu/drm/imx/imx-tve.c
> @@ -191,10 +191,18 @@ static int tve_setup_vga(struct imx_tve *tve)
>  	/* set gain to (1 + 10/128) to provide 0.7V peak-to-peak amplitude */
>  	ret = regmap_update_bits(tve->regmap, TVE_TVDAC0_CONT_REG,
>  				 TVE_TVDAC_GAIN_MASK, 0x0a);
> +	if (ret)
> +		return ret;
> +
>  	ret = regmap_update_bits(tve->regmap, TVE_TVDAC1_CONT_REG,
>  				 TVE_TVDAC_GAIN_MASK, 0x0a);
> +	if (ret)
> +		return ret;
> +
>  	ret = regmap_update_bits(tve->regmap, TVE_TVDAC2_CONT_REG,
>  				 TVE_TVDAC_GAIN_MASK, 0x0a);
> +	if (ret)
> +		return ret;
>  
>  	/* set configuration register */
>  	mask = TVE_DATA_SOURCE_MASK | TVE_INP_VIDEO_FORM;

Oh yes. I think the idea here was that if any regmap_* call fails, all
of them should fail, and since the return value of tve_setup_vga is not
checked, the proper return value was not a concern.

> @@ -210,10 +218,8 @@ static int tve_setup_vga(struct imx_tve *tve)
>  	}
>  
>  	/* set test mode (as documented) */
> -	ret = regmap_update_bits(tve->regmap, TVE_TST_MODE_REG,
> +	return regmap_update_bits(tve->regmap, TVE_TST_MODE_REG,
>  				 TVE_TVDAC_TEST_MODE_MASK, 1);
> -
> -	return 0;
>  }
>  
>  static enum drm_connector_status imx_tve_connector_detect(
> @@ -671,6 +677,8 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data)
>  
>  	/* disable cable detection for VGA mode */
>  	ret = regmap_write(tve->regmap, TVE_CD_CONT_REG, 0);
> +	if (ret)
> +		return ret;
>  
>  	ret = imx_tve_register(drm, tve);
>  	if (ret)

How about adding the following change:

-----8<-----
diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
index ad77a11..76a4509 100644
--- a/drivers/gpu/drm/imx/imx-tve.c
+++ b/drivers/gpu/drm/imx/imx-tve.c
@@ -212,10 +212,8 @@ static int tve_setup_vga(struct imx_tve *tve)
 	mask |= TVE_TV_OUT_MODE_MASK | TVE_SYNC_CH_0_EN;
 	val  |= TVE_TV_OUT_RGB       | TVE_SYNC_CH_0_EN;
 	ret = regmap_update_bits(tve->regmap, TVE_COM_CONF_REG, mask, val);
-	if (ret < 0) {
-		dev_err(tve->dev, "failed to set configuration: %d\n", ret);
+	if (ret)
 		return ret;
-	}
 
 	/* set test mode (as documented) */
 	return regmap_update_bits(tve->regmap, TVE_TST_MODE_REG,
@@ -341,9 +339,11 @@ static void imx_tve_encoder_mode_set(struct drm_encoder *encoder,
 	}
 
 	if (tve->mode == TVE_MODE_VGA)
-		tve_setup_vga(tve);
+		ret = tve_setup_vga(tve);
 	else
-		tve_setup_tvout(tve);
+		ret = tve_setup_tvout(tve);
+	if (ret)
+		dev_err(tve->dev, "failed to set configuration: %d\n", ret);
 }
 
 static void imx_tve_encoder_commit(struct drm_encoder *encoder)
-- 
2.1.4
----->8-----

regards
Philipp



More information about the dri-devel mailing list