提交 c354b400 编写于 作者: K Kuninori Morimoto 提交者: Mauro Carvalho Chehab

V4L/DVB (10671): sh_mobile_ceu: SOCAM flags are not platform dependent

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: NKuninori Morimoto <morimoto.kuninori@renesas.com>
Acked-by: NMagnus Damm <damm@igel.co.jp>
Signed-off-by: NGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 1af1b7a2
...@@ -101,6 +101,30 @@ struct sh_mobile_ceu_dev { ...@@ -101,6 +101,30 @@ struct sh_mobile_ceu_dev {
const struct soc_camera_data_format *camera_fmt; 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, static void ceu_write(struct sh_mobile_ceu_dev *priv,
unsigned long reg_offs, u32 data) unsigned long reg_offs, u32 data)
{ {
...@@ -396,7 +420,7 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd, ...@@ -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); camera_flags = icd->ops->query_bus_param(icd);
common_flags = soc_camera_bus_param_compatible(camera_flags, common_flags = soc_camera_bus_param_compatible(camera_flags,
pcdev->pdata->flags); make_bus_param(pcdev));
if (!common_flags) if (!common_flags)
return -EINVAL; return -EINVAL;
...@@ -517,7 +541,7 @@ static int sh_mobile_ceu_try_bus_param(struct soc_camera_device *icd) ...@@ -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); camera_flags = icd->ops->query_bus_param(icd);
common_flags = soc_camera_bus_param_compatible(camera_flags, common_flags = soc_camera_bus_param_compatible(camera_flags,
pcdev->pdata->flags); make_bus_param(pcdev));
if (!common_flags) if (!common_flags)
return -EINVAL; return -EINVAL;
......
#ifndef __ASM_SH_MOBILE_CEU_H__ #ifndef __ASM_SH_MOBILE_CEU_H__
#define __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 { struct sh_mobile_ceu_info {
unsigned long flags; /* SOCAM_... */ unsigned long flags;
}; };
#endif /* __ASM_SH_MOBILE_CEU_H__ */ #endif /* __ASM_SH_MOBILE_CEU_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册