[PATCH 1/5 v4] V4L/DVB: s5p-fimc: Register definition cleanup

박세운 seuni.park at samsung.com
Mon Oct 11 01:09:39 EDT 2010


Sewoon Park wrote:

> Add MIPI CSI format definitions, prepare DMA address
> definitions for interlaced input frame mode.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki at samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> ---
>  drivers/media/video/s5p-fimc/fimc-reg.c  |    6 +-
>  drivers/media/video/s5p-fimc/regs-fimc.h |   61 ++++++++++++-------------
-
> ---
>  2 files changed, 28 insertions(+), 39 deletions(-)
> 
> diff --git a/drivers/media/video/s5p-fimc/fimc-reg.c
> b/drivers/media/video/s5p-fimc/fimc-reg.c
> index 5570f1c..70f29c5 100644
> --- a/drivers/media/video/s5p-fimc/fimc-reg.c
> +++ b/drivers/media/video/s5p-fimc/fimc-reg.c
> @@ -507,9 +507,9 @@ void fimc_hw_set_input_addr(struct fimc_dev *dev,
> struct fimc_addr *paddr)
>  	cfg |= S5P_CIREAL_ISIZE_ADDR_CH_DIS;
>  	writel(cfg, dev->regs + S5P_CIREAL_ISIZE);
> 
> -	writel(paddr->y, dev->regs + S5P_CIIYSA0);
> -	writel(paddr->cb, dev->regs + S5P_CIICBSA0);
> -	writel(paddr->cr, dev->regs + S5P_CIICRSA0);
> +	writel(paddr->y, dev->regs + S5P_CIIYSA(0));
> +	writel(paddr->cb, dev->regs + S5P_CIICBSA(0));
> +	writel(paddr->cr, dev->regs + S5P_CIICRSA(0));
> 
>  	cfg &= ~S5P_CIREAL_ISIZE_ADDR_CH_DIS;
>  	writel(cfg, dev->regs + S5P_CIREAL_ISIZE);
> diff --git a/drivers/media/video/s5p-fimc/regs-fimc.h
> b/drivers/media/video/s5p-fimc/regs-fimc.h
> index a3cfe82..9e83315 100644
> --- a/drivers/media/video/s5p-fimc/regs-fimc.h
> +++ b/drivers/media/video/s5p-fimc/regs-fimc.h
> @@ -11,10 +11,6 @@
>  #ifndef REGS_FIMC_H_
>  #define REGS_FIMC_H_
> 
> -#define S5P_CIOYSA(__x)			(0x18 + (__x) * 4)
> -#define S5P_CIOCBSA(__x)		(0x28 + (__x) * 4)
> -#define S5P_CIOCRSA(__x)		(0x38 + (__x) * 4)
> -
>  /* Input source format */
>  #define S5P_CISRCFMT			0x00
>  #define S5P_CISRCFMT_ITU601_8BIT	(1 << 31)
> @@ -28,22 +24,21 @@
> 
>  /* Window offset */
>  #define S5P_CIWDOFST			0x04
> -#define S5P_CIWDOFST_WINOFSEN		(1 << 31)
> +#define S5P_CIWDOFST_OFF_EN		(1 << 31)
>  #define S5P_CIWDOFST_CLROVFIY		(1 << 30)
>  #define S5P_CIWDOFST_CLROVRLB		(1 << 29)
> -#define S5P_CIWDOFST_WINHOROFST_MASK	(0x7ff << 16)
> +#define S5P_CIWDOFST_HOROFF_MASK	(0x7ff << 16)
>  #define S5P_CIWDOFST_CLROVFICB		(1 << 15)
>  #define S5P_CIWDOFST_CLROVFICR		(1 << 14)
> -#define S5P_CIWDOFST_WINHOROFST(x)	((x) << 16)
> -#define S5P_CIWDOFST_WINVEROFST(x)	((x) << 0)
> -#define S5P_CIWDOFST_WINVEROFST_MASK	(0xfff << 0)
> +#define S5P_CIWDOFST_HOROFF(x)		((x) << 16)
> +#define S5P_CIWDOFST_VEROFF(x)		((x) << 0)
> +#define S5P_CIWDOFST_VEROFF_MASK	(0xfff << 0)
> 
>  /* Global control */
>  #define S5P_CIGCTRL			0x08
>  #define S5P_CIGCTRL_SWRST		(1 << 31)
>  #define S5P_CIGCTRL_CAMRST_A		(1 << 30)
>  #define S5P_CIGCTRL_SELCAM_ITU_A	(1 << 29)
> -#define S5P_CIGCTRL_SELCAM_ITU_MASK	(1 << 29)
>  #define S5P_CIGCTRL_TESTPAT_NORMAL	(0 << 27)
>  #define S5P_CIGCTRL_TESTPAT_COLOR_BAR	(1 << 27)
>  #define S5P_CIGCTRL_TESTPAT_HOR_INC	(2 << 27)
> @@ -61,6 +56,8 @@
>  #define S5P_CIGCTRL_SHDW_DISABLE	(1 << 12)
>  #define S5P_CIGCTRL_SELCAM_MIPI_A	(1 << 7)
>  #define S5P_CIGCTRL_CAMIF_SELWB		(1 << 6)
> +/* 0 - ITU601; 1 - ITU709 */
> +#define S5P_CIGCTRL_CSC_ITU601_709	(1 << 5)
>  #define S5P_CIGCTRL_INVPOLHSYNC		(1 << 4)
>  #define S5P_CIGCTRL_SELCAM_MIPI		(1 << 3)
>  #define S5P_CIGCTRL_INTERLACE		(1 << 0)
> @@ -72,23 +69,10 @@
>  #define S5P_CIWDOFST2_HOROFF(x)		((x) << 16)
>  #define S5P_CIWDOFST2_VEROFF(x)		((x) << 0)
> 
> -/* Output DMA Y plane start address */
> -#define S5P_CIOYSA1			0x18
> -#define S5P_CIOYSA2			0x1c
> -#define S5P_CIOYSA3			0x20
> -#define S5P_CIOYSA4			0x24
> -
> -/* Output DMA Cb plane start address */
> -#define S5P_CIOCBSA1			0x28
> -#define S5P_CIOCBSA2			0x2c
> -#define S5P_CIOCBSA3			0x30
> -#define S5P_CIOCBSA4			0x34
> -
> -/* Output DMA Cr plane start address */
> -#define S5P_CIOCRSA1			0x38
> -#define S5P_CIOCRSA2			0x3c
> -#define S5P_CIOCRSA3			0x40
> -#define S5P_CIOCRSA4			0x44
> +/* Output DMA Y/Cb/Cr plane start addresses */
> +#define S5P_CIOYSA(n)			(0x18 + (n) * 4)
> +#define S5P_CIOCBSA(n)			(0x28 + (n) * 4)
> +#define S5P_CIOCRSA(n)			(0x38 + (n) * 4)
> 
As you know, S5P series have S5PC210 also.
Then,
Why don't you add S5PC210's 32 registers for Output DMA start address some
other time?
For the next, the better approach would be to do something like:

#define S5P_CIOYSA1	0x18	/* Y 1st frame start address for output DMA
*/
#define S5P_CIOYSA5 0x200 /* Y 5th frame start address for output DMA */
#define S5P_CIOYSA(n) \
        (((n) < 4) ?     \
         (S5P_CIOYSA1  + (n) * 4) : (S5P_CIOYSA5  + ((n) - 4) * 4))


>  /* Target image format */
>  #define S5P_CITRGFMT			0x48
> @@ -168,6 +152,8 @@
>  #define S5P_CISTATUS_OVFICB		(1 << 30)
>  #define S5P_CISTATUS_OVFICR		(1 << 29)
>  #define S5P_CISTATUS_VSYNC		(1 << 28)
> +#define S5P_CISTATUS_FRAMECNT_MASK	(3 << 26)
> +#define S5P_CISTATUS_FRAMECNT_SHIFT	26
>  #define S5P_CISTATUS_WINOFF_EN		(1 << 25)
>  #define S5P_CISTATUS_IMGCPT_EN		(1 << 22)
>  #define S5P_CISTATUS_IMGCPT_SCEN	(1 << 21)
> @@ -206,10 +192,10 @@
>  #define S5P_CIIMGEFF_PAT_CB(x)		((x) << 13)
>  #define S5P_CIIMGEFF_PAT_CR(x)		((x) << 0)
> 
> -/* Input DMA Y/Cb/Cr plane start address 0 */
> -#define S5P_CIIYSA0			0xd4
> -#define S5P_CIICBSA0			0xd8
> -#define S5P_CIICRSA0			0xdc
> +/* Input DMA Y/Cb/Cr plane start address 0/1 */
> +#define S5P_CIIYSA(n)			(0xd4 + (n) * 0x70)
> +#define S5P_CIICBSA(n)			(0xd8 + (n) * 0x70)
> +#define S5P_CIICRSA(n)			(0xdc + (n) * 0x70)
> 
>  /* Real input DMA image size */
>  #define S5P_CIREAL_ISIZE		0xf8
> @@ -250,11 +236,6 @@
>  #define S5P_MSCTRL_ENVID		(1 << 0)
>  #define S5P_MSCTRL_FRAME_COUNT(x)	((x) << 24)
> 
> -/* Input DMA Y/Cb/Cr plane start address 1 */
> -#define S5P_CIIYSA1			0x144
> -#define S5P_CIICBSA1			0x148
> -#define S5P_CIICRSA1			0x14c
> -
>  /* Output DMA Y/Cb/Cr offset */
>  #define S5P_CIOYOFF			0x168
>  #define S5P_CIOCBOFF			0x16c
> @@ -289,5 +270,13 @@
> 
>  /* MIPI CSI image format */
>  #define S5P_CSIIMGFMT			0x194
> +#define S5P_CSIIMGFMT_YCBCR422_8BIT	0x1e
> +#define S5P_CSIIMGFMT_RAW8		0x2a
> +#define S5P_CSIIMGFMT_RAW10		0x2b
> +#define S5P_CSIIMGFMT_RAW12		0x2c
> +#define S5P_CSIIMGFMT_USER1		0x30
> +#define S5P_CSIIMGFMT_USER2		0x31
> +#define S5P_CSIIMGFMT_USER3		0x32
> +#define S5P_CSIIMGFMT_USER4		0x33
> 
>  #endif /* REGS_FIMC_H_ */
> --


I will review another patches soon.

Thanks.

Best regards,
Seuni.
--
Sewoon Park <seuni.park at samsung.com>, Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.




More information about the linux-arm-kernel mailing list