V4L/DVB (10671): sh_mobile_ceu: SOCAM flags are not platform dependent
authorKuninori Morimoto <morimoto.kuninori@renesas.com>
Mon, 23 Feb 2009 15:12:58 +0000 (12:12 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:42:52 +0000 (12:42 -0300)
sh_mobile_ceu_camera.c support for signal polarity flags isn't platform
dependent, provide them locally. Only the bus width is implementation
specific.

Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com>
Acked-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/sh_mobile_ceu_camera.c
include/media/sh_mobile_ceu.h

index ddcb81d..8a1badb 100644 (file)
@@ -101,6 +101,30 @@ struct sh_mobile_ceu_dev {
        const struct soc_camera_data_format *camera_fmt;
 };
 
+static unsigned long make_bus_param(struct sh_mobile_ceu_dev *pcdev)
+{
+       unsigned long flags;
+
+       flags = SOCAM_MASTER |
+               SOCAM_PCLK_SAMPLE_RISING |
+               SOCAM_HSYNC_ACTIVE_HIGH |
+               SOCAM_HSYNC_ACTIVE_LOW |
+               SOCAM_VSYNC_ACTIVE_HIGH |
+               SOCAM_VSYNC_ACTIVE_LOW |
+               SOCAM_DATA_ACTIVE_HIGH;
+
+       if (pcdev->pdata->flags & SH_CEU_FLAG_USE_8BIT_BUS)
+               flags |= SOCAM_DATAWIDTH_8;
+
+       if (pcdev->pdata->flags & SH_CEU_FLAG_USE_16BIT_BUS)
+               flags |= SOCAM_DATAWIDTH_16;
+
+       if (flags & SOCAM_DATAWIDTH_MASK)
+               return flags;
+
+       return 0;
+}
+
 static void ceu_write(struct sh_mobile_ceu_dev *priv,
                      unsigned long reg_offs, u32 data)
 {
@@ -396,7 +420,7 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd,
 
        camera_flags = icd->ops->query_bus_param(icd);
        common_flags = soc_camera_bus_param_compatible(camera_flags,
-                                                      pcdev->pdata->flags);
+                                                      make_bus_param(pcdev));
        if (!common_flags)
                return -EINVAL;
 
@@ -517,7 +541,7 @@ static int sh_mobile_ceu_try_bus_param(struct soc_camera_device *icd)
 
        camera_flags = icd->ops->query_bus_param(icd);
        common_flags = soc_camera_bus_param_compatible(camera_flags,
-                                                      pcdev->pdata->flags);
+                                                      make_bus_param(pcdev));
        if (!common_flags)
                return -EINVAL;
 
index b5dbefe..0f3524c 100644 (file)
@@ -1,10 +1,11 @@
 #ifndef __ASM_SH_MOBILE_CEU_H__
 #define __ASM_SH_MOBILE_CEU_H__
 
-#include <media/soc_camera.h>
+#define SH_CEU_FLAG_USE_8BIT_BUS       (1 << 0) /* use  8bit bus width */
+#define SH_CEU_FLAG_USE_16BIT_BUS      (1 << 1) /* use 16bit bus width */
 
 struct sh_mobile_ceu_info {
-       unsigned long flags; /* SOCAM_... */
+       unsigned long flags;
 };
 
 #endif /* __ASM_SH_MOBILE_CEU_H__ */