diff mbox

[v2] Visstrim SM10: Use mo_version to decide board video mode.

Message ID 1343995703-13578-1-git-send-email-javier.martin@vista-silicon.com
State New
Headers show

Commit Message

Javier Martin Aug. 3, 2012, 12:08 p.m. UTC
If the mother board version number is odd, emmaprp() for
format conversion + UVC camera will be used.

Otherwise mx2_camera and m2m-deinterlacer will be registered.

For both cases Coda video codec is registered.

Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
---
Changes since v1:
 - Add error message to emmaprp init function.

---
 arch/arm/mach-imx/mach-imx27_visstrim_m10.c |   54 ++++++++++++++++++++++++---
 1 file changed, 49 insertions(+), 5 deletions(-)

Comments

Sascha Hauer Aug. 3, 2012, 2:06 p.m. UTC | #1
On Fri, Aug 03, 2012 at 02:08:23PM +0200, Javier Martin wrote:
> If the mother board version number is odd, emmaprp() for
> format conversion + UVC camera will be used.
> 
> Otherwise mx2_camera and m2m-deinterlacer will be registered.
> 
> For both cases Coda video codec is registered.
> 
> Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>

This does not apply. Mainline does not have visstrim_deinterlace_init.

Sascha

> ---
> Changes since v1:
>  - Add error message to emmaprp init function.
> 
> ---
>  arch/arm/mach-imx/mach-imx27_visstrim_m10.c |   54 ++++++++++++++++++++++++---
>  1 file changed, 49 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
> index 176533e..dbb344a 100644
> --- a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
> +++ b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
> @@ -49,6 +49,10 @@
>  #define OTG_PHY_CS_GPIO (GPIO_PORTF + 17)
>  #define SDHC1_IRQ IRQ_GPIOB(25)
>  
> +#define VERSION_MASK		0x7
> +#define MOTHERBOARD_SHIFT	4
> +#define EXPBOARD_SHIFT		0
> +
>  #define MOTHERBOARD_BIT2	(GPIO_PORTD + 31)
>  #define MOTHERBOARD_BIT1	(GPIO_PORTD + 30)
>  #define MOTHERBOARD_BIT0	(GPIO_PORTD + 29)
> @@ -205,7 +209,7 @@ static struct mx2_camera_platform_data visstrim_camera = {
>  static phys_addr_t mx2_camera_base __initdata;
>  #define MX2_CAMERA_BUF_SIZE SZ_8M
>  
> -static void __init visstrim_camera_init(void)
> +static void __init visstrim_analog_camera_init(void)
>  {
>  	struct platform_device *pdev;
>  	int dma;
> @@ -442,6 +446,29 @@ static void __init visstrim_deinterlace_init(void)
>  		return;
>  }
>  
> +/* Emma-PrP for format conversion */
> +static void __init visstrim_emmaprp_init(void)
> +{
> +	struct platform_device *pdev;
> +	int dma;
> +
> +	pdev = imx27_add_mx2_emmaprp();
> +	if (IS_ERR(pdev))
> +		return;
> +
> +	/*
> +	 * Use the same memory area as the analog camera since both
> +	 * devices are, by nature, exclusive.
> +	 */
> +	dma = dma_declare_coherent_memory(&pdev->dev,
> +				mx2_camera_base, mx2_camera_base,
> +				MX2_CAMERA_BUF_SIZE,
> +				DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
> +	if (!(dma & DMA_MEMORY_MAP)) {
> +		pr_err("Failed to declare memory for emmaprp\n");
> +		return;
> +	}
> +}
>  
>  static void __init visstrim_m10_revision(void)
>  {
> @@ -467,13 +494,14 @@ static void __init visstrim_m10_revision(void)
>  	mo_version |= !gpio_get_value(MOTHERBOARD_BIT0);
>  
>  	system_rev = 0x27000;
> -	system_rev |= (mo_version << 4);
> -	system_rev |= exp_version;
> +	system_rev |= (mo_version << MOTHERBOARD_SHIFT);
> +	system_rev |= (exp_version << EXPBOARD_SHIFT);
>  }
>  
>  static void __init visstrim_m10_board_init(void)
>  {
>  	int ret;
> +	int mo_version;
>  
>  	imx27_soc_init();
>  	visstrim_m10_revision();
> @@ -505,8 +533,24 @@ static void __init visstrim_m10_board_init(void)
>  	platform_device_register_resndata(NULL, "soc-camera-pdrv", 0, NULL, 0,
>  				      &iclink_tvp5150, sizeof(iclink_tvp5150));
>  	gpio_led_register_device(0, &visstrim_m10_led_data);
> -	visstrim_deinterlace_init();
> -	visstrim_camera_init();
> +
> +	/* Use mother board version to decide what video devices we shall use */
> +	mo_version = (system_rev >> MOTHERBOARD_SHIFT) & VERSION_MASK;
> +	if (mo_version & 0x1) {
> +		visstrim_emmaprp_init();
> +
> +		/*
> +		 * Despite not being used, tvp5150 must be
> +		 * powered on to avoid I2C problems. To minimize
> +		 * power consupmtion keep reset enabled.
> +		 */
> +		gpio_set_value(TVP5150_PWDN, 1);
> +		ndelay(1);
> +		gpio_set_value(TVP5150_RSTN, 0);
> +	} else {
> +		visstrim_deinterlace_init();
> +		visstrim_analog_camera_init();
> +	}
>  	visstrim_coda_init();
>  }
>  
> -- 
> 1.7.9.5
> 
>
Baruch Siach Aug. 3, 2012, 3:37 p.m. UTC | #2
Hi Javier,

On Fri, Aug 03, 2012 at 02:08:23PM +0200, Javier Martin wrote:
> If the mother board version number is odd, emmaprp() for
> format conversion + UVC camera will be used.
> 
> Otherwise mx2_camera and m2m-deinterlacer will be registered.
> 
> For both cases Coda video codec is registered.
> 
> Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
> ---
> Changes since v1:
>  - Add error message to emmaprp init function.
> ---

...

> +/* Emma-PrP for format conversion */
> +static void __init visstrim_emmaprp_init(void)
> +{
> +	struct platform_device *pdev;
> +	int dma;
> +
> +	pdev = imx27_add_mx2_emmaprp();
> +	if (IS_ERR(pdev))
> +		return;
> +
> +	/*
> +	 * Use the same memory area as the analog camera since both
> +	 * devices are, by nature, exclusive.
> +	 */
> +	dma = dma_declare_coherent_memory(&pdev->dev,
> +				mx2_camera_base, mx2_camera_base,
> +				MX2_CAMERA_BUF_SIZE,
> +				DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
> +	if (!(dma & DMA_MEMORY_MAP)) {
> +		pr_err("Failed to declare memory for emmaprp\n");
> +		return;

Nitpick: the 'return' is redundant here.

> +	}
> +}

baruch
diff mbox

Patch

diff --git a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
index 176533e..dbb344a 100644
--- a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
+++ b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
@@ -49,6 +49,10 @@ 
 #define OTG_PHY_CS_GPIO (GPIO_PORTF + 17)
 #define SDHC1_IRQ IRQ_GPIOB(25)
 
+#define VERSION_MASK		0x7
+#define MOTHERBOARD_SHIFT	4
+#define EXPBOARD_SHIFT		0
+
 #define MOTHERBOARD_BIT2	(GPIO_PORTD + 31)
 #define MOTHERBOARD_BIT1	(GPIO_PORTD + 30)
 #define MOTHERBOARD_BIT0	(GPIO_PORTD + 29)
@@ -205,7 +209,7 @@  static struct mx2_camera_platform_data visstrim_camera = {
 static phys_addr_t mx2_camera_base __initdata;
 #define MX2_CAMERA_BUF_SIZE SZ_8M
 
-static void __init visstrim_camera_init(void)
+static void __init visstrim_analog_camera_init(void)
 {
 	struct platform_device *pdev;
 	int dma;
@@ -442,6 +446,29 @@  static void __init visstrim_deinterlace_init(void)
 		return;
 }
 
+/* Emma-PrP for format conversion */
+static void __init visstrim_emmaprp_init(void)
+{
+	struct platform_device *pdev;
+	int dma;
+
+	pdev = imx27_add_mx2_emmaprp();
+	if (IS_ERR(pdev))
+		return;
+
+	/*
+	 * Use the same memory area as the analog camera since both
+	 * devices are, by nature, exclusive.
+	 */
+	dma = dma_declare_coherent_memory(&pdev->dev,
+				mx2_camera_base, mx2_camera_base,
+				MX2_CAMERA_BUF_SIZE,
+				DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
+	if (!(dma & DMA_MEMORY_MAP)) {
+		pr_err("Failed to declare memory for emmaprp\n");
+		return;
+	}
+}
 
 static void __init visstrim_m10_revision(void)
 {
@@ -467,13 +494,14 @@  static void __init visstrim_m10_revision(void)
 	mo_version |= !gpio_get_value(MOTHERBOARD_BIT0);
 
 	system_rev = 0x27000;
-	system_rev |= (mo_version << 4);
-	system_rev |= exp_version;
+	system_rev |= (mo_version << MOTHERBOARD_SHIFT);
+	system_rev |= (exp_version << EXPBOARD_SHIFT);
 }
 
 static void __init visstrim_m10_board_init(void)
 {
 	int ret;
+	int mo_version;
 
 	imx27_soc_init();
 	visstrim_m10_revision();
@@ -505,8 +533,24 @@  static void __init visstrim_m10_board_init(void)
 	platform_device_register_resndata(NULL, "soc-camera-pdrv", 0, NULL, 0,
 				      &iclink_tvp5150, sizeof(iclink_tvp5150));
 	gpio_led_register_device(0, &visstrim_m10_led_data);
-	visstrim_deinterlace_init();
-	visstrim_camera_init();
+
+	/* Use mother board version to decide what video devices we shall use */
+	mo_version = (system_rev >> MOTHERBOARD_SHIFT) & VERSION_MASK;
+	if (mo_version & 0x1) {
+		visstrim_emmaprp_init();
+
+		/*
+		 * Despite not being used, tvp5150 must be
+		 * powered on to avoid I2C problems. To minimize
+		 * power consupmtion keep reset enabled.
+		 */
+		gpio_set_value(TVP5150_PWDN, 1);
+		ndelay(1);
+		gpio_set_value(TVP5150_RSTN, 0);
+	} else {
+		visstrim_deinterlace_init();
+		visstrim_analog_camera_init();
+	}
 	visstrim_coda_init();
 }