On Tue, 3 Feb 2009, Kuninori Morimoto wrote: > sh_mobile_ceu can support "field signal" from external module. > To support this operation, SH_CEU_FLAG_USE_FLDID_{HIGH, LOW} > are added to header. I never dealt with interlaced video, so, I probably just don't understand something, please explain. I understand the Field ID signal is optional, and, if used, it can be either active high or low. But who gets to decide which polarity is applicable in a specific case? The platform? Is it not like with other control signals, where if both partners are freely configurable, then any polarity can be used; if one is configurable and another is hard-wired, only one polarity can be used. And as long as the signal is available (connected), the platform has no further influence on its use? Ok, there can be an inverter there, but that we can handle too. So, wouldn't something like + if (pcdev->pdata->flags & SH_CEU_FLAG_USE_FLDID) + flags |= SOCAM_FIELD_ID_ACTIVE_HIGH | SOCAM_FIELD_ID_ACTIVE_LOW; + ... + if (common_flags & (SOCAM_FIELD_ID_ACTIVE_HIGH | SOCAM_FIELD_ID_ACTIVE_LOW) == + SOCAM_FIELD_ID_ACTIVE_LOW) + /* The client only supports active low field ID */ + value |= 1 << 16; + /* Otherwise we are free to choose, leave default active high */ Or does Field ID work differently? And what do you do, if the platform doesn't specify SH_CEU_FLAG_USE_FLDID, i.e., it is not connected, but the client does? Or the other way round? In other words, is it a working configuration, when one of the partners provides this signal and the other one doesn't? I guess it is, because, you say, it is optional. So we shouldn't test it in soc_camera_bus_param_compatible()? Thanks Guennadi > > Signed-off-by: Kuninori Morimoto <morimoto.kuninori@xxxxxxxxxxx> > --- > v1 -> v2 > o field name fix > > drivers/media/video/sh_mobile_ceu_camera.c | 7 +++++++ > include/media/sh_mobile_ceu.h | 2 ++ > 2 files changed, 9 insertions(+), 0 deletions(-) > > diff --git a/drivers/media/video/sh_mobile_ceu_camera.c b/drivers/media/video/sh_mobile_ceu_camera.c > index aa20745..1f746e1 100644 > --- a/drivers/media/video/sh_mobile_ceu_camera.c > +++ b/drivers/media/video/sh_mobile_ceu_camera.c > @@ -118,6 +118,12 @@ static unsigned long make_bus_param(struct sh_mobile_ceu_dev *pcdev) > if (pcdev->pdata->flags & SH_CEU_FLAG_USE_16BIT_BUS) > flags |= SOCAM_DATAWIDTH_16; > > + if (pcdev->pdata->flags & SH_CEU_FLAG_USE_FLDID_HIGH) > + flags |= SOCAM_FIELD_ID_ACTIVE_HIGH; > + > + if (pcdev->pdata->flags & SH_CEU_FLAG_USE_FLDID_LOW) > + flags |= SOCAM_FIELD_ID_ACTIVE_LOW; > + > if (flags & SOCAM_DATAWIDTH_MASK) > return flags; > > @@ -474,6 +480,7 @@ static int sh_mobile_ceu_set_bus_param(struct soc_camera_device *icd, > icd->current_fmt->fourcc == V4L2_PIX_FMT_NV61) > value ^= 0x00000100; /* swap U, V to change from NV1x->NVx1 */ > > + value |= common_flags & SOCAM_FIELD_ID_ACTIVE_LOW ? 1 << 16 : 0; > value |= common_flags & SOCAM_VSYNC_ACTIVE_LOW ? 1 << 1 : 0; > value |= common_flags & SOCAM_HSYNC_ACTIVE_LOW ? 1 << 0 : 0; > value |= buswidth == 16 ? 1 << 12 : 0; > diff --git a/include/media/sh_mobile_ceu.h b/include/media/sh_mobile_ceu.h > index 0f3524c..8da9437 100644 > --- a/include/media/sh_mobile_ceu.h > +++ b/include/media/sh_mobile_ceu.h > @@ -3,6 +3,8 @@ > > #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 */ > +#define SH_CEU_FLAG_USE_FLDID_HIGH (1 << 2) /* top field if FLD is high */ > +#define SH_CEU_FLAG_USE_FLDID_LOW (1 << 3) /* top field if FLD is low */ > > struct sh_mobile_ceu_info { > unsigned long flags; > -- > 1.5.6.3 > --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html