diff mbox series

[2/2] media: max9271: Ignore busy loop read errors

Message ID 20211103204654.223699-3-jacopo+renesas@jmondi.org (mailing list archive)
State New
Delegated to: Kieran Bingham
Headers show
Series media: max9271: Fix pclk_detect silent failure | expand

Commit Message

Jacopo Mondi Nov. 3, 2021, 8:46 p.m. UTC
Valid pixel clock detection is performed by spinning on a register read,
which if repeated too frequently might fail. As the error is not fatal
ignore it instead of bailing out to continue spinning until the timeout
completion.

Also relax the time between bus transactions and slightly increase the
wait interval to mitigate the failure risk.

Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
---
 drivers/media/i2c/max9271.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--
2.33.1

Comments

Niklas Söderlund Nov. 3, 2021, 10:10 p.m. UTC | #1
Hi Jacopo,

Thanks for your work.

On 2021-11-03 21:46:54 +0100, Jacopo Mondi wrote:
> Valid pixel clock detection is performed by spinning on a register read,
> which if repeated too frequently might fail. As the error is not fatal
> ignore it instead of bailing out to continue spinning until the timeout
> completion.
> 
> Also relax the time between bus transactions and slightly increase the
> wait interval to mitigate the failure risk.
> 
> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>

Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>

> ---
>  drivers/media/i2c/max9271.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/i2c/max9271.c b/drivers/media/i2c/max9271.c
> index aa9ab6831574..5c4248de64c2 100644
> --- a/drivers/media/i2c/max9271.c
> +++ b/drivers/media/i2c/max9271.c
> @@ -55,7 +55,7 @@ static int max9271_write(struct max9271_device *dev, u8 reg, u8 val)
>  /*
>   * max9271_pclk_detect() - Detect valid pixel clock from image sensor
>   *
> - * Wait up to 10ms for a valid pixel clock.
> + * Wait up to 15ms for a valid pixel clock.
>   *
>   * Returns 0 for success, < 0 for pixel clock not properly detected
>   */
> @@ -64,15 +64,15 @@ static int max9271_pclk_detect(struct max9271_device *dev)
>  	unsigned int i;
>  	int ret;
> 
> -	for (i = 0; i < 100; i++) {
> +	for (i = 0; i < 10; i++) {
>  		ret = max9271_read(dev, 0x15);
>  		if (ret < 0)
> -			return ret;
> +			continue;
> 
>  		if (ret & MAX9271_PCLKDET)
>  			return 0;
> 
> -		usleep_range(50, 100);
> +		usleep_range(1000, 1500);
>  	}
> 
>  	dev_err(&dev->client->dev, "Unable to detect valid pixel clock\n");
> --
> 2.33.1
>
diff mbox series

Patch

diff --git a/drivers/media/i2c/max9271.c b/drivers/media/i2c/max9271.c
index aa9ab6831574..5c4248de64c2 100644
--- a/drivers/media/i2c/max9271.c
+++ b/drivers/media/i2c/max9271.c
@@ -55,7 +55,7 @@  static int max9271_write(struct max9271_device *dev, u8 reg, u8 val)
 /*
  * max9271_pclk_detect() - Detect valid pixel clock from image sensor
  *
- * Wait up to 10ms for a valid pixel clock.
+ * Wait up to 15ms for a valid pixel clock.
  *
  * Returns 0 for success, < 0 for pixel clock not properly detected
  */
@@ -64,15 +64,15 @@  static int max9271_pclk_detect(struct max9271_device *dev)
 	unsigned int i;
 	int ret;

-	for (i = 0; i < 100; i++) {
+	for (i = 0; i < 10; i++) {
 		ret = max9271_read(dev, 0x15);
 		if (ret < 0)
-			return ret;
+			continue;

 		if (ret & MAX9271_PCLKDET)
 			return 0;

-		usleep_range(50, 100);
+		usleep_range(1000, 1500);
 	}

 	dev_err(&dev->client->dev, "Unable to detect valid pixel clock\n");