Re: [PATCH v2 1/1] media: video: s5p-g2d: Add support for FIMG2D v41 H/W logic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ajay,

Thanks for the patch. I have a few comments below.

On Sat, Mar 17, 2012 at 04:52:14PM +0530, Ajay Kumar wrote:
> Modify the G2D driver(which initially supported only FIMG2D v3 style H/W)
> to support FIMG2D v41 style hardware present on Exynos4x12 and Exynos52x0 SOC.
> 
> 	-- Set the SRC and DST type to 'memory' instead of using reset values.
> 	-- FIMG2D v41 H/W uses different logic for stretching(scaling).
> 	-- Use CACHECTL_REG only with FIMG2D v3.
> 
> Signed-off-by: Ajay Kumar <ajaykumar.rs@xxxxxxxxxxx>
> ---
>  drivers/media/video/s5p-g2d/g2d-hw.c   |   39 ++++++++++++++++++++++++++++---
>  drivers/media/video/s5p-g2d/g2d-regs.h |    6 +++++
>  drivers/media/video/s5p-g2d/g2d.c      |   23 +++++++++++++++++-
>  drivers/media/video/s5p-g2d/g2d.h      |    9 ++++++-
>  4 files changed, 70 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/media/video/s5p-g2d/g2d-hw.c b/drivers/media/video/s5p-g2d/g2d-hw.c
> index 5b86cbe..f8225b8 100644
> --- a/drivers/media/video/s5p-g2d/g2d-hw.c
> +++ b/drivers/media/video/s5p-g2d/g2d-hw.c
> @@ -28,6 +28,8 @@ void g2d_set_src_size(struct g2d_dev *d, struct g2d_frame *f)
>  {
>  	u32 n;
>  
> +	w(0, SRC_SELECT_REG);
> +
>  	w(f->stride & 0xFFFF, SRC_STRIDE_REG);
>  
>  	n = f->o_height & 0xFFF;
> @@ -52,6 +54,8 @@ void g2d_set_dst_size(struct g2d_dev *d, struct g2d_frame *f)
>  {
>  	u32 n;
>  
> +	w(0, DST_SELECT_REG);
> +
>  	w(f->stride & 0xFFFF, DST_STRIDE_REG);
>  
>  	n = f->o_height & 0xFFF;
> @@ -82,10 +86,36 @@ void g2d_set_flip(struct g2d_dev *d, u32 r)
>  	w(r, SRC_MSK_DIRECT_REG);
>  }
>  
> -u32 g2d_cmd_stretch(u32 e)
> +/**
> + * g2d_calc_scale_factor - convert scale factor to fixed pint 16

Point, perhaps?

> + * @n: numerator
> + * @d: denominator
> + */
> +static unsigned long g2d_calc_scale_factor(int n, int d)
> +{
> +	return (n << 16) / d;
> +}
> +
> +void g2d_set_v41_stretch(struct g2d_dev *d, struct g2d_frame *src,
> +					struct g2d_frame *dst)
>  {
> -	e &= 1;
> -	return e << 4;
> +	int src_w, src_h, dst_w, dst_h;

Is int intentional --- width and height usually can't be negative.

> +	u32 wcfg, hcfg;
> +
> +	w(DEFAULT_SCALE_MODE, SRC_SCALE_CTRL_REG);
> +
> +	src_w = src->c_width;
> +	src_h = src->c_height;
> +
> +	dst_w = dst->c_width;
> +	dst_h = dst->c_height;
> +
> +	/* inversed scaling factor: src is numerator */
> +	wcfg = g2d_calc_scale_factor(src_w, dst_w);
> +	hcfg = g2d_calc_scale_factor(src_h, dst_h);

I think this would be more simple without that many temporary variables and
an extra function.

> +	w(wcfg, SRC_XSCALE_REG);
> +	w(hcfg, SRC_YSCALE_REG);
>  }
>  
>  void g2d_set_cmd(struct g2d_dev *d, u32 c)
> @@ -96,7 +126,8 @@ void g2d_set_cmd(struct g2d_dev *d, u32 c)
>  void g2d_start(struct g2d_dev *d)
>  {
>  	/* Clear cache */
> -	w(0x7, CACHECTL_REG);
> +	if (d->device_type == TYPE_G2D_3X)
> +		w(0x7, CACHECTL_REG);
>  	/* Enable interrupt */
>  	w(1, INTEN_REG);
>  	/* Start G2D engine */

Kind regards,

-- 
Sakari Ailus
e-mail: sakari.ailus@xxxxxx	jabber/XMPP/Gmail: sailus@xxxxxxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux