[v2] media: soc_camera: rcar_vin: Add BT.709 24-bit RGB888 input support

Message ID 20141029041103.GB29787@verge.net.au (mailing list archive)
State Superseded, archived
Delegated to: Guennadi Liakhovetski
Headers

Commit Message

Simon Horman Oct. 29, 2014, 4:11 a.m. UTC
  Hi Kaneko-san, Hi Sergei,

On Tue, Oct 21, 2014 at 08:33:52PM +0900, Yoshihiro Kaneko wrote:
> Hello Sergei,
> 
> 2014-10-21 19:22 GMT+09:00 Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>:
> > Hello.
> >
> > On 10/21/2014 9:08 AM, Yoshihiro Kaneko wrote:
> >
> >> From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
> >
> >
> >> Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
> >> Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com>
> >> ---
> >
> >
> >> This patch is against master branch of linuxtv.org/media_tree.git.
> >
> >
> >> v2 [Yoshihiro Kaneko]
> >> * remove unused/useless definition as suggested by Sergei Shtylyov
> >
> >
> >    I didn't say it's useless, I just suspected that you missed the necessary
> > test somewhere...
> 
> Sorry for my inaccurate description.
> 
> >
> >>   drivers/media/platform/soc_camera/rcar_vin.c | 9 +++++++++
> >>   1 file changed, 9 insertions(+)
> >
> >
> >> diff --git a/drivers/media/platform/soc_camera/rcar_vin.c
> >> b/drivers/media/platform/soc_camera/rcar_vin.c
> >> index 20defcb..cb5e682 100644
> >> --- a/drivers/media/platform/soc_camera/rcar_vin.c
> >> +++ b/drivers/media/platform/soc_camera/rcar_vin.c
> >> @@ -74,6 +74,7 @@
> >>   #define VNMC_INF_YUV10_BT656  (2 << 16)
> >>   #define VNMC_INF_YUV10_BT601  (3 << 16)
> >>   #define VNMC_INF_YUV16                (5 << 16)
> >> +#define VNMC_INF_RGB888                (6 << 16)
> >>   #define VNMC_VUP              (1 << 10)
> >>   #define VNMC_IM_ODD           (0 << 3)
> >>   #define VNMC_IM_ODD_EVEN      (1 << 3)
> >
> > [...]
> >>
> >> @@ -331,6 +336,9 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
> >>         if (output_is_yuv)
> >>                 vnmc |= VNMC_BPS;
> >>
> >> +       if (vnmc & VNMC_INF_RGB888)
> >> +               vnmc ^= VNMC_BPS;
> >> +
> >
> >
> >    Hm, this also changes the behavior for VNMC_INF_YUV16 and
> > VNMC_INF_YUV10_BT{601|656}. Is this actually intended?
> 
> Probably this code is incorrect.
> Thank you for your review.

Thanks, I have confirmed with Matsuoka-san that there is a problem here.

He has provided the following fix. Could you see about squashing it into
the above patch and reposting?


From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>

[PATCH] media: soc_camera: rcar_vin: Fix bit field check

Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>

--
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

Sergei Shtylyov Oct. 29, 2014, 11:31 a.m. UTC | #1
Hello.

On 10/29/2014 7:11 AM, Simon Horman wrote:

>>>> From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>

>>>> Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
>>>> Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com>
>>>> ---

>>>> This patch is against master branch of linuxtv.org/media_tree.git.

>>>> v2 [Yoshihiro Kaneko]
>>>> * remove unused/useless definition as suggested by Sergei Shtylyov

>>>     I didn't say it's useless, I just suspected that you missed the necessary
>>> test somewhere...

>> Sorry for my inaccurate description.

>>>>    drivers/media/platform/soc_camera/rcar_vin.c | 9 +++++++++
>>>>    1 file changed, 9 insertions(+)

>>>> diff --git a/drivers/media/platform/soc_camera/rcar_vin.c
>>>> b/drivers/media/platform/soc_camera/rcar_vin.c
>>>> index 20defcb..cb5e682 100644
>>>> --- a/drivers/media/platform/soc_camera/rcar_vin.c
>>>> +++ b/drivers/media/platform/soc_camera/rcar_vin.c
>>>> @@ -74,6 +74,7 @@
>>>>    #define VNMC_INF_YUV10_BT656  (2 << 16)
>>>>    #define VNMC_INF_YUV10_BT601  (3 << 16)
>>>>    #define VNMC_INF_YUV16                (5 << 16)
>>>> +#define VNMC_INF_RGB888                (6 << 16)
>>>>    #define VNMC_VUP              (1 << 10)
>>>>    #define VNMC_IM_ODD           (0 << 3)
>>>>    #define VNMC_IM_ODD_EVEN      (1 << 3)

>>> [...]

>>>> @@ -331,6 +336,9 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
>>>>          if (output_is_yuv)
>>>>                  vnmc |= VNMC_BPS;
>>>>
>>>> +       if (vnmc & VNMC_INF_RGB888)
>>>> +               vnmc ^= VNMC_BPS;
>>>> +

>>>     Hm, this also changes the behavior for VNMC_INF_YUV16 and
>>> VNMC_INF_YUV10_BT{601|656}. Is this actually intended?

>> Probably this code is incorrect.
>> Thank you for your review.

> Thanks, I have confirmed with Matsuoka-san that there is a problem here.

> He has provided the following fix. Could you see about squashing it into
> the above patch and reposting?

> From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>

> [PATCH] media: soc_camera: rcar_vin: Fix bit field check

> Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>

> diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c
> index 013d75c..da62d94 100644
> --- a/drivers/media/platform/soc_camera/rcar_vin.c
> +++ b/drivers/media/platform/soc_camera/rcar_vin.c
> @@ -94,7 +94,7 @@
>   #define VNMC_INF_YUV8_BT601	(1 << 16)
>   #define VNMC_INF_YUV16		(5 << 16)
>   #define VNMC_INF_RGB888		(6 << 16)
> -#define VNMC_INF_RGB_MASK	(6 << 16)
> +#define VNMC_INF_MASK		(7 << 16)

    #define it above VNMC_INF_YUV8_BT656 please.

>   #define VNMC_VUP		(1 << 10)
>   #define VNMC_IM_ODD		(0 << 3)
>   #define VNMC_IM_ODD_EVEN	(1 << 3)
> @@ -675,7 +675,7 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
>   	if (output_is_yuv)
>   		vnmc |= VNMC_BPS;
>
> -	if (vnmc & VNMC_INF_RGB_MASK)
> +	if ((vnmc & VNMC_INF_MASK) == VNMC_INF_RGB888)

    Is he sure it shouldn't be (vnmc & VNMC_INF_RGB888) == VNMC_INF_RGB888 to 
also cover 16-bit RGB666 and 12-bit RGB88?

WBR, Sergei

--
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
  
Simon Horman Oct. 29, 2014, 11:51 p.m. UTC | #2
On Wed, Oct 29, 2014 at 02:31:41PM +0300, Sergei Shtylyov wrote:
> Hello.
> 
> On 10/29/2014 7:11 AM, Simon Horman wrote:
> 
> >>>>From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
> 
> >>>>Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
> >>>>Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com>
> >>>>---
> 
> >>>>This patch is against master branch of linuxtv.org/media_tree.git.
> 
> >>>>v2 [Yoshihiro Kaneko]
> >>>>* remove unused/useless definition as suggested by Sergei Shtylyov
> 
> >>>    I didn't say it's useless, I just suspected that you missed the necessary
> >>>test somewhere...
> 
> >>Sorry for my inaccurate description.
> 
> >>>>   drivers/media/platform/soc_camera/rcar_vin.c | 9 +++++++++
> >>>>   1 file changed, 9 insertions(+)
> 
> >>>>diff --git a/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>b/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>index 20defcb..cb5e682 100644
> >>>>--- a/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>+++ b/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>@@ -74,6 +74,7 @@
> >>>>   #define VNMC_INF_YUV10_BT656  (2 << 16)
> >>>>   #define VNMC_INF_YUV10_BT601  (3 << 16)
> >>>>   #define VNMC_INF_YUV16                (5 << 16)
> >>>>+#define VNMC_INF_RGB888                (6 << 16)
> >>>>   #define VNMC_VUP              (1 << 10)
> >>>>   #define VNMC_IM_ODD           (0 << 3)
> >>>>   #define VNMC_IM_ODD_EVEN      (1 << 3)
> 
> >>>[...]
> 
> >>>>@@ -331,6 +336,9 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
> >>>>         if (output_is_yuv)
> >>>>                 vnmc |= VNMC_BPS;
> >>>>
> >>>>+       if (vnmc & VNMC_INF_RGB888)
> >>>>+               vnmc ^= VNMC_BPS;
> >>>>+
> 
> >>>    Hm, this also changes the behavior for VNMC_INF_YUV16 and
> >>>VNMC_INF_YUV10_BT{601|656}. Is this actually intended?
> 
> >>Probably this code is incorrect.
> >>Thank you for your review.
> 
> >Thanks, I have confirmed with Matsuoka-san that there is a problem here.
> 
> >He has provided the following fix. Could you see about squashing it into
> >the above patch and reposting?
> 
> >From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
> 
> >[PATCH] media: soc_camera: rcar_vin: Fix bit field check
> 
> >Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
> 
> >diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c
> >index 013d75c..da62d94 100644
> >--- a/drivers/media/platform/soc_camera/rcar_vin.c
> >+++ b/drivers/media/platform/soc_camera/rcar_vin.c
> >@@ -94,7 +94,7 @@
> >  #define VNMC_INF_YUV8_BT601	(1 << 16)
> >  #define VNMC_INF_YUV16		(5 << 16)
> >  #define VNMC_INF_RGB888		(6 << 16)
> >-#define VNMC_INF_RGB_MASK	(6 << 16)
> >+#define VNMC_INF_MASK		(7 << 16)
> 
>    #define it above VNMC_INF_YUV8_BT656 please.
> 
> >  #define VNMC_VUP		(1 << 10)
> >  #define VNMC_IM_ODD		(0 << 3)
> >  #define VNMC_IM_ODD_EVEN	(1 << 3)
> >@@ -675,7 +675,7 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
> >  	if (output_is_yuv)
> >  		vnmc |= VNMC_BPS;
> >
> >-	if (vnmc & VNMC_INF_RGB_MASK)
> >+	if ((vnmc & VNMC_INF_MASK) == VNMC_INF_RGB888)
> 
>    Is he sure it shouldn't be (vnmc & VNMC_INF_RGB888) == VNMC_INF_RGB888 to
> also cover 16-bit RGB666 and 12-bit RGB88?

Nice, I think that is a good idea (although the latter formats aren't
supported by the driver yet, right?).

Its somewhat unobvious how that logic works so perhaps we should add a
comment like this

	/* If input and output use the same colorspace, use bypass mode */
	if (output_is_yuv)
		vnmc |= VNMC_BPS;

	/* The above assumes YUV input, toggle BPS for RGB input.
	 * RGB inputs can be detected by checking that the most-significant
	 * two bits of INF are set. This corresponds to the bits
	 * set in VNMC_INF_RGB888. */
	if ((vnmc & VNMC_INF_RGB888)) == VNMC_INF_RGB888)
		vnmc ^= VNMC_BPS;
--
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
  

Patch

diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c
index 013d75c..da62d94 100644
--- a/drivers/media/platform/soc_camera/rcar_vin.c
+++ b/drivers/media/platform/soc_camera/rcar_vin.c
@@ -94,7 +94,7 @@ 
 #define VNMC_INF_YUV8_BT601	(1 << 16)
 #define VNMC_INF_YUV16		(5 << 16)
 #define VNMC_INF_RGB888		(6 << 16)
-#define VNMC_INF_RGB_MASK	(6 << 16)
+#define VNMC_INF_MASK		(7 << 16)
 #define VNMC_VUP		(1 << 10)
 #define VNMC_IM_ODD		(0 << 3)
 #define VNMC_IM_ODD_EVEN	(1 << 3)
@@ -675,7 +675,7 @@  static int rcar_vin_setup(struct rcar_vin_priv *priv)
 	if (output_is_yuv)
 		vnmc |= VNMC_BPS;
 
-	if (vnmc & VNMC_INF_RGB_MASK)
+	if ((vnmc & VNMC_INF_MASK) == VNMC_INF_RGB888)
 		vnmc ^= VNMC_BPS;
 
 	/* progressive or interlaced mode */