diff mbox

[13/15,media] marvell-ccic: add dma burst mode support in marvell-ccic driver

Message ID 1353677673-24397-1-git-send-email-twang13@marvell.com (mailing list archive)
State New, archived
Headers show

Commit Message

Albert Wang Nov. 23, 2012, 1:34 p.m. UTC
This patch adds the dma burst size config support for marvell-ccic.
Developer can set the dma burst size in specified board driver.

Signed-off-by: Libin Yang <lbyang@marvell.com>
Signed-off-by: Albert Wang <twang13@marvell.com>
---
 .../media/platform/marvell-ccic/mcam-core-soc.c    |    2 +-
 drivers/media/platform/marvell-ccic/mcam-core.h    |    7 ++++---
 drivers/media/platform/marvell-ccic/mmp-driver.c   |   11 +++++++++++
 include/media/mmp-camera.h                         |    1 +
 4 files changed, 17 insertions(+), 4 deletions(-)

Comments

Guennadi Liakhovetski Nov. 27, 2012, 3:55 p.m. UTC | #1
On Fri, 23 Nov 2012, Albert Wang wrote:

> This patch adds the dma burst size config support for marvell-ccic.
> Developer can set the dma burst size in specified board driver.
> 
> Signed-off-by: Libin Yang <lbyang@marvell.com>
> Signed-off-by: Albert Wang <twang13@marvell.com>
> ---
>  .../media/platform/marvell-ccic/mcam-core-soc.c    |    2 +-
>  drivers/media/platform/marvell-ccic/mcam-core.h    |    7 ++++---
>  drivers/media/platform/marvell-ccic/mmp-driver.c   |   11 +++++++++++
>  include/media/mmp-camera.h                         |    1 +
>  4 files changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/platform/marvell-ccic/mcam-core-soc.c b/drivers/media/platform/marvell-ccic/mcam-core-soc.c
> index a0df8b4..518e6dc 100644
> --- a/drivers/media/platform/marvell-ccic/mcam-core-soc.c
> +++ b/drivers/media/platform/marvell-ccic/mcam-core-soc.c
> @@ -100,7 +100,7 @@ static int mcam_camera_add_device(struct soc_camera_device *icd)
>  	mcam_ctlr_stop(mcam);
>  	mcam_set_config_needed(mcam, 1);
>  	mcam_reg_write(mcam, REG_CTRL1,
> -				   C1_RESERVED | C1_DMAPOSTED);
> +			mcam->burst |  C1_RESERVED | C1_DMAPOSTED);
>  	mcam_reg_write(mcam, REG_CLKCTRL,
>  		(mcam->mclk_src << 29) | mcam->mclk_div);
>  	cam_dbg(mcam, "camera: set sensor mclk = %dMHz\n", mcam->mclk_min);
> diff --git a/drivers/media/platform/marvell-ccic/mcam-core.h b/drivers/media/platform/marvell-ccic/mcam-core.h
> index e149aa3..999b581 100755
> --- a/drivers/media/platform/marvell-ccic/mcam-core.h
> +++ b/drivers/media/platform/marvell-ccic/mcam-core.h
> @@ -132,6 +132,7 @@ struct mcam_camera {
>  	short int use_smbus;	/* SMBUS or straight I2c? */
>  	enum mcam_buffer_mode buffer_mode;
>  
> +	int burst;
>  	int mclk_min;
>  	int mclk_src;
>  	int mclk_div;
> @@ -419,9 +420,9 @@ int mcam_soc_camera_host_register(struct mcam_camera *mcam);
>  #define   C1_DESC_3WORD   0x00000200	/* Three-word descriptors used */
>  #define	  C1_444ALPHA	  0x00f00000	/* Alpha field in RGB444 */
>  #define	  C1_ALPHA_SHFT	  20
> -#define	  C1_DMAB32	  0x00000000	/* 32-byte DMA burst */
> -#define	  C1_DMAB16	  0x02000000	/* 16-byte DMA burst */
> -#define	  C1_DMAB64	  0x04000000	/* 64-byte DMA burst */
> +#define	  C1_DMAB64	  0x00000000	/* 64-byte DMA burst */
> +#define	  C1_DMAB128	  0x02000000	/* 128-byte DMA burst */
> +#define	  C1_DMAB256	  0x04000000	/* 256-byte DMA burst */

Was this a bug in the driver or is it a different IP version?

Thanks
Guennadi

>  #define	  C1_DMAB_MASK	  0x06000000
>  #define	  C1_TWOBUFS	  0x08000000	/* Use only two DMA buffers */
>  #define	  C1_PWRDWN	  0x10000000	/* Power down */
> diff --git a/drivers/media/platform/marvell-ccic/mmp-driver.c b/drivers/media/platform/marvell-ccic/mmp-driver.c
> index bea7224..e840941 100755
> --- a/drivers/media/platform/marvell-ccic/mmp-driver.c
> +++ b/drivers/media/platform/marvell-ccic/mmp-driver.c
> @@ -365,6 +365,17 @@ static int mmpcam_probe(struct platform_device *pdev)
>  	mcam->dphy = &(pdata->dphy);
>  	mcam->mipi_enabled = 0;
>  	mcam->lane = pdata->lane;
> +	switch (pdata->dma_burst) {
> +	case 128:
> +		mcam->burst = C1_DMAB128;
> +		break;
> +	case 256:
> +		mcam->burst = C1_DMAB256;
> +		break;
> +	default:
> +		mcam->burst = C1_DMAB64;
> +		break;
> +	}
>  	INIT_LIST_HEAD(&mcam->buffers);
>  
>  	/*
> diff --git a/include/media/mmp-camera.h b/include/media/mmp-camera.h
> index 731f81f..7a5e63c 100755
> --- a/include/media/mmp-camera.h
> +++ b/include/media/mmp-camera.h
> @@ -11,6 +11,7 @@ struct mmp_camera_platform_data {
>  	int mclk_src;
>  	int mclk_div;
>  	int chip_id;
> +	int dma_burst;
>  	/*
>  	 * MIPI support
>  	 */
> -- 
> 1.7.9.5
> 

---
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
Albert Wang Nov. 27, 2012, 4:07 p.m. UTC | #2
Hi, Guennadi


>-----Original Message-----
>From: Guennadi Liakhovetski [mailto:g.liakhovetski@gmx.de]
>Sent: Tuesday, 27 November, 2012 23:56
>To: Albert Wang
>Cc: corbet@lwn.net; linux-media@vger.kernel.org; Libin Yang
>Subject: Re: [PATCH 13/15] [media] marvell-ccic: add dma burst mode support in
>marvell-ccic driver
>
>On Fri, 23 Nov 2012, Albert Wang wrote:
>
>> This patch adds the dma burst size config support for marvell-ccic.
>> Developer can set the dma burst size in specified board driver.
>>
>> Signed-off-by: Libin Yang <lbyang@marvell.com>
>> Signed-off-by: Albert Wang <twang13@marvell.com>
>> ---
>>  .../media/platform/marvell-ccic/mcam-core-soc.c    |    2 +-
>>  drivers/media/platform/marvell-ccic/mcam-core.h    |    7 ++++---
>>  drivers/media/platform/marvell-ccic/mmp-driver.c   |   11 +++++++++++
>>  include/media/mmp-camera.h                         |    1 +
>>  4 files changed, 17 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/media/platform/marvell-ccic/mcam-core-soc.c
>> b/drivers/media/platform/marvell-ccic/mcam-core-soc.c
>> index a0df8b4..518e6dc 100644
>> --- a/drivers/media/platform/marvell-ccic/mcam-core-soc.c
>> +++ b/drivers/media/platform/marvell-ccic/mcam-core-soc.c
>> @@ -100,7 +100,7 @@ static int mcam_camera_add_device(struct
>soc_camera_device *icd)
>>  	mcam_ctlr_stop(mcam);
>>  	mcam_set_config_needed(mcam, 1);
>>  	mcam_reg_write(mcam, REG_CTRL1,
>> -				   C1_RESERVED | C1_DMAPOSTED);
>> +			mcam->burst |  C1_RESERVED | C1_DMAPOSTED);
>>  	mcam_reg_write(mcam, REG_CLKCTRL,
>>  		(mcam->mclk_src << 29) | mcam->mclk_div);
>>  	cam_dbg(mcam, "camera: set sensor mclk = %dMHz\n", mcam->mclk_min);
>> diff --git a/drivers/media/platform/marvell-ccic/mcam-core.h
>> b/drivers/media/platform/marvell-ccic/mcam-core.h
>> index e149aa3..999b581 100755
>> --- a/drivers/media/platform/marvell-ccic/mcam-core.h
>> +++ b/drivers/media/platform/marvell-ccic/mcam-core.h
>> @@ -132,6 +132,7 @@ struct mcam_camera {
>>  	short int use_smbus;	/* SMBUS or straight I2c? */
>>  	enum mcam_buffer_mode buffer_mode;
>>
>> +	int burst;
>>  	int mclk_min;
>>  	int mclk_src;
>>  	int mclk_div;
>> @@ -419,9 +420,9 @@ int mcam_soc_camera_host_register(struct mcam_camera
>*mcam);
>>  #define   C1_DESC_3WORD   0x00000200	/* Three-word descriptors used */
>>  #define	  C1_444ALPHA	  0x00f00000	/* Alpha field in RGB444 */
>>  #define	  C1_ALPHA_SHFT	  20
>> -#define	  C1_DMAB32	  0x00000000	/* 32-byte DMA burst */
>> -#define	  C1_DMAB16	  0x02000000	/* 16-byte DMA burst */
>> -#define	  C1_DMAB64	  0x04000000	/* 64-byte DMA burst */
>> +#define	  C1_DMAB64	  0x00000000	/* 64-byte DMA burst */
>> +#define	  C1_DMAB128	  0x02000000	/* 128-byte DMA burst */
>> +#define	  C1_DMAB256	  0x04000000	/* 256-byte DMA burst */
>
>Was this a bug in the driver or is it a different IP version?
>
I think it's a bug in old code. We didn't find the definition in our specs.

>Thanks
>Guennadi
>
>>  #define	  C1_DMAB_MASK	  0x06000000
>>  #define	  C1_TWOBUFS	  0x08000000	/* Use only two DMA buffers */
>>  #define	  C1_PWRDWN	  0x10000000	/* Power down */
>> diff --git a/drivers/media/platform/marvell-ccic/mmp-driver.c
>> b/drivers/media/platform/marvell-ccic/mmp-driver.c
>> index bea7224..e840941 100755
>> --- a/drivers/media/platform/marvell-ccic/mmp-driver.c
>> +++ b/drivers/media/platform/marvell-ccic/mmp-driver.c
>> @@ -365,6 +365,17 @@ static int mmpcam_probe(struct platform_device *pdev)
>>  	mcam->dphy = &(pdata->dphy);
>>  	mcam->mipi_enabled = 0;
>>  	mcam->lane = pdata->lane;
>> +	switch (pdata->dma_burst) {
>> +	case 128:
>> +		mcam->burst = C1_DMAB128;
>> +		break;
>> +	case 256:
>> +		mcam->burst = C1_DMAB256;
>> +		break;
>> +	default:
>> +		mcam->burst = C1_DMAB64;
>> +		break;
>> +	}
>>  	INIT_LIST_HEAD(&mcam->buffers);
>>
>>  	/*
>> diff --git a/include/media/mmp-camera.h b/include/media/mmp-camera.h
>> index 731f81f..7a5e63c 100755
>> --- a/include/media/mmp-camera.h
>> +++ b/include/media/mmp-camera.h
>> @@ -11,6 +11,7 @@ struct mmp_camera_platform_data {
>>  	int mclk_src;
>>  	int mclk_div;
>>  	int chip_id;
>> +	int dma_burst;
>>  	/*
>>  	 * MIPI support
>>  	 */
>> --
>> 1.7.9.5
>>
>
>---
>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/platform/marvell-ccic/mcam-core-soc.c b/drivers/media/platform/marvell-ccic/mcam-core-soc.c
index a0df8b4..518e6dc 100644
--- a/drivers/media/platform/marvell-ccic/mcam-core-soc.c
+++ b/drivers/media/platform/marvell-ccic/mcam-core-soc.c
@@ -100,7 +100,7 @@  static int mcam_camera_add_device(struct soc_camera_device *icd)
 	mcam_ctlr_stop(mcam);
 	mcam_set_config_needed(mcam, 1);
 	mcam_reg_write(mcam, REG_CTRL1,
-				   C1_RESERVED | C1_DMAPOSTED);
+			mcam->burst |  C1_RESERVED | C1_DMAPOSTED);
 	mcam_reg_write(mcam, REG_CLKCTRL,
 		(mcam->mclk_src << 29) | mcam->mclk_div);
 	cam_dbg(mcam, "camera: set sensor mclk = %dMHz\n", mcam->mclk_min);
diff --git a/drivers/media/platform/marvell-ccic/mcam-core.h b/drivers/media/platform/marvell-ccic/mcam-core.h
index e149aa3..999b581 100755
--- a/drivers/media/platform/marvell-ccic/mcam-core.h
+++ b/drivers/media/platform/marvell-ccic/mcam-core.h
@@ -132,6 +132,7 @@  struct mcam_camera {
 	short int use_smbus;	/* SMBUS or straight I2c? */
 	enum mcam_buffer_mode buffer_mode;
 
+	int burst;
 	int mclk_min;
 	int mclk_src;
 	int mclk_div;
@@ -419,9 +420,9 @@  int mcam_soc_camera_host_register(struct mcam_camera *mcam);
 #define   C1_DESC_3WORD   0x00000200	/* Three-word descriptors used */
 #define	  C1_444ALPHA	  0x00f00000	/* Alpha field in RGB444 */
 #define	  C1_ALPHA_SHFT	  20
-#define	  C1_DMAB32	  0x00000000	/* 32-byte DMA burst */
-#define	  C1_DMAB16	  0x02000000	/* 16-byte DMA burst */
-#define	  C1_DMAB64	  0x04000000	/* 64-byte DMA burst */
+#define	  C1_DMAB64	  0x00000000	/* 64-byte DMA burst */
+#define	  C1_DMAB128	  0x02000000	/* 128-byte DMA burst */
+#define	  C1_DMAB256	  0x04000000	/* 256-byte DMA burst */
 #define	  C1_DMAB_MASK	  0x06000000
 #define	  C1_TWOBUFS	  0x08000000	/* Use only two DMA buffers */
 #define	  C1_PWRDWN	  0x10000000	/* Power down */
diff --git a/drivers/media/platform/marvell-ccic/mmp-driver.c b/drivers/media/platform/marvell-ccic/mmp-driver.c
index bea7224..e840941 100755
--- a/drivers/media/platform/marvell-ccic/mmp-driver.c
+++ b/drivers/media/platform/marvell-ccic/mmp-driver.c
@@ -365,6 +365,17 @@  static int mmpcam_probe(struct platform_device *pdev)
 	mcam->dphy = &(pdata->dphy);
 	mcam->mipi_enabled = 0;
 	mcam->lane = pdata->lane;
+	switch (pdata->dma_burst) {
+	case 128:
+		mcam->burst = C1_DMAB128;
+		break;
+	case 256:
+		mcam->burst = C1_DMAB256;
+		break;
+	default:
+		mcam->burst = C1_DMAB64;
+		break;
+	}
 	INIT_LIST_HEAD(&mcam->buffers);
 
 	/*
diff --git a/include/media/mmp-camera.h b/include/media/mmp-camera.h
index 731f81f..7a5e63c 100755
--- a/include/media/mmp-camera.h
+++ b/include/media/mmp-camera.h
@@ -11,6 +11,7 @@  struct mmp_camera_platform_data {
 	int mclk_src;
 	int mclk_div;
 	int chip_id;
+	int dma_burst;
 	/*
 	 * MIPI support
 	 */