diff mbox

[2/2] mt9m111: fix pixel clock

Message ID Pine.LNX.4.64.1105181309320.16324@axis700.grange (mailing list archive)
State Accepted
Headers show

Commit Message

Guennadi Liakhovetski May 18, 2011, 11:12 a.m. UTC
Hi Teresa

I've verified the mt9v022 patch - finally I have noticed the difference, 
it does look correct! As for this one, how about this version of your 
patch:


It reduces the number of I2C accesses and avoids writing some not 
necessarily desired value to the register. Does this look ok to you? Could 
you maybe test - I've got no mt9m111 cameras.

Thanks
Guennadi

On Wed, 6 Apr 2011, Teresa Gámez wrote:

> This camera driver supports only rising edge, which is the default
> setting of the device. The function mt9m111_setup_pixfmt() overwrites
> this setting. So the driver actually uses falling edge.
> This patch corrects that.
> 
> Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
> ---
>  drivers/media/video/mt9m111.c |   14 ++++++++++++--
>  1 files changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c
> index 53fa2a7..4040a96 100644
> --- a/drivers/media/video/mt9m111.c
> +++ b/drivers/media/video/mt9m111.c
> @@ -315,10 +315,20 @@ static int mt9m111_setup_rect(struct i2c_client *client,
>  static int mt9m111_setup_pixfmt(struct i2c_client *client, u16 outfmt)
>  {
>  	int ret;
> +	u16 mask = MT9M111_OUTFMT_PROCESSED_BAYER | MT9M111_OUTFMT_RGB |
> +		MT9M111_OUTFMT_BYPASS_IFP | MT9M111_OUTFMT_SWAP_RGB_EVEN |
> +		MT9M111_OUTFMT_RGB565 | MT9M111_OUTFMT_RGB555 |
> +		MT9M111_OUTFMT_SWAP_YCbCr_Cb_Cr |
> +		MT9M111_OUTFMT_SWAP_YCbCr_C_Y;
>  
> -	ret = reg_write(OUTPUT_FORMAT_CTRL2_A, outfmt);
> +	ret = reg_clear(OUTPUT_FORMAT_CTRL2_A, mask);
>  	if (!ret)
> -		ret = reg_write(OUTPUT_FORMAT_CTRL2_B, outfmt);
> +		ret = reg_set(OUTPUT_FORMAT_CTRL2_A, outfmt);
> +	if (!ret)
> +		ret = reg_clear(OUTPUT_FORMAT_CTRL2_B, mask);
> +	if (!ret)
> +		ret = reg_set(OUTPUT_FORMAT_CTRL2_B, outfmt);
> +
>  	return ret;
>  }
>  
> -- 
> 1.7.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Teresa Gámez May 19, 2011, 11:07 a.m. UTC | #1
Am Mittwoch, den 18.05.2011, 13:12 +0200 schrieb Guennadi Liakhovetski:
> Hi Teresa
> 
> I've verified the mt9v022 patch - finally I have noticed the difference, 
> it does look correct! As for this one, how about this version of your 
> patch:

Great! Thank you.

> 
> diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c
> index 53fa2a7..ebebed9 100644
> --- a/drivers/media/video/mt9m111.c
> +++ b/drivers/media/video/mt9m111.c
> @@ -315,10 +315,20 @@ static int mt9m111_setup_rect(struct i2c_client *client,
>  static int mt9m111_setup_pixfmt(struct i2c_client *client, u16 outfmt)
>  {
>  	int ret;
> +	u16 mask = MT9M111_OUTFMT_PROCESSED_BAYER | MT9M111_OUTFMT_RGB |
> +		MT9M111_OUTFMT_BYPASS_IFP | MT9M111_OUTFMT_SWAP_RGB_EVEN |
> +		MT9M111_OUTFMT_RGB565 | MT9M111_OUTFMT_RGB555 |
> +		MT9M111_OUTFMT_SWAP_YCbCr_Cb_Cr |
> +		MT9M111_OUTFMT_SWAP_YCbCr_C_Y;
>  
> -	ret = reg_write(OUTPUT_FORMAT_CTRL2_A, outfmt);
> +	ret = reg_read(OUTPUT_FORMAT_CTRL2_A);
> +	if (ret >= 0)
> +		ret = reg_write(OUTPUT_FORMAT_CTRL2_A, (ret & ~mask) | outfmt);
>  	if (!ret)
> -		ret = reg_write(OUTPUT_FORMAT_CTRL2_B, outfmt);
> +		ret = reg_read(OUTPUT_FORMAT_CTRL2_B);
> +	if (ret >= 0)
> +		ret = reg_write(OUTPUT_FORMAT_CTRL2_B, (ret & ~mask) | outfmt);
> +
>  	return ret;
>  }
>  
> 
> It reduces the number of I2C accesses and avoids writing some not 
> necessarily desired value to the register. Does this look ok to you? Could 
> you maybe test - I've got no mt9m111 cameras.
> 

Yes, this looks good. And I tested it successfully with a mt9m131.

Tested-by: Teresa Gámez <t.gamez@phytec.de>

Teresa

> Thanks
> Guennadi
> 
> On Wed, 6 Apr 2011, Teresa Gámez wrote:
> 
> > This camera driver supports only rising edge, which is the default
> > setting of the device. The function mt9m111_setup_pixfmt() overwrites
> > this setting. So the driver actually uses falling edge.
> > This patch corrects that.
> > 
> > Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
> > ---
> >  drivers/media/video/mt9m111.c |   14 ++++++++++++--
> >  1 files changed, 12 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c
> > index 53fa2a7..4040a96 100644
> > --- a/drivers/media/video/mt9m111.c
> > +++ b/drivers/media/video/mt9m111.c
> > @@ -315,10 +315,20 @@ static int mt9m111_setup_rect(struct i2c_client *client,
> >  static int mt9m111_setup_pixfmt(struct i2c_client *client, u16 outfmt)
> >  {
> >  	int ret;
> > +	u16 mask = MT9M111_OUTFMT_PROCESSED_BAYER | MT9M111_OUTFMT_RGB |
> > +		MT9M111_OUTFMT_BYPASS_IFP | MT9M111_OUTFMT_SWAP_RGB_EVEN |
> > +		MT9M111_OUTFMT_RGB565 | MT9M111_OUTFMT_RGB555 |
> > +		MT9M111_OUTFMT_SWAP_YCbCr_Cb_Cr |
> > +		MT9M111_OUTFMT_SWAP_YCbCr_C_Y;
> >  
> > -	ret = reg_write(OUTPUT_FORMAT_CTRL2_A, outfmt);
> > +	ret = reg_clear(OUTPUT_FORMAT_CTRL2_A, mask);
> >  	if (!ret)
> > -		ret = reg_write(OUTPUT_FORMAT_CTRL2_B, outfmt);
> > +		ret = reg_set(OUTPUT_FORMAT_CTRL2_A, outfmt);
> > +	if (!ret)
> > +		ret = reg_clear(OUTPUT_FORMAT_CTRL2_B, mask);
> > +	if (!ret)
> > +		ret = reg_set(OUTPUT_FORMAT_CTRL2_B, outfmt);
> > +
> >  	return ret;
> >  }
> >  
> > -- 
> > 1.7.0.4
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-media" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> 
> ---
> Guennadi Liakhovetski, Ph.D.
> Freelance Open-Source Software Developer
> http://www.open-technology.de/


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c
index 53fa2a7..ebebed9 100644
--- a/drivers/media/video/mt9m111.c
+++ b/drivers/media/video/mt9m111.c
@@ -315,10 +315,20 @@  static int mt9m111_setup_rect(struct i2c_client *client,
 static int mt9m111_setup_pixfmt(struct i2c_client *client, u16 outfmt)
 {
 	int ret;
+	u16 mask = MT9M111_OUTFMT_PROCESSED_BAYER | MT9M111_OUTFMT_RGB |
+		MT9M111_OUTFMT_BYPASS_IFP | MT9M111_OUTFMT_SWAP_RGB_EVEN |
+		MT9M111_OUTFMT_RGB565 | MT9M111_OUTFMT_RGB555 |
+		MT9M111_OUTFMT_SWAP_YCbCr_Cb_Cr |
+		MT9M111_OUTFMT_SWAP_YCbCr_C_Y;
 
-	ret = reg_write(OUTPUT_FORMAT_CTRL2_A, outfmt);
+	ret = reg_read(OUTPUT_FORMAT_CTRL2_A);
+	if (ret >= 0)
+		ret = reg_write(OUTPUT_FORMAT_CTRL2_A, (ret & ~mask) | outfmt);
 	if (!ret)
-		ret = reg_write(OUTPUT_FORMAT_CTRL2_B, outfmt);
+		ret = reg_read(OUTPUT_FORMAT_CTRL2_B);
+	if (ret >= 0)
+		ret = reg_write(OUTPUT_FORMAT_CTRL2_B, (ret & ~mask) | outfmt);
+
 	return ret;
 }