On 08/19/15 23:02, Sergei Shtylyov wrote: > rcar_vin_set_fmt() defaults to PAL when the subdevice's querystd() method call > fails (e.g. due to I2C error). This doesn't work very well when a camera being > used outputs NTSC which has different order of fields and resolution. Let us > stop pretending and return the actual error (which would prevent video capture > on at least Renesas Henninger/Porter board where I2C seems particularly buggy). > > Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> > > --- > The patch is against the 'media_tree.git' repo's 'fixes' branch. > > drivers/media/platform/soc_camera/rcar_vin.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: media_tree/drivers/media/platform/soc_camera/rcar_vin.c > =================================================================== > --- media_tree.orig/drivers/media/platform/soc_camera/rcar_vin.c > +++ media_tree/drivers/media/platform/soc_camera/rcar_vin.c > @@ -1592,7 +1592,7 @@ static int rcar_vin_set_fmt(struct soc_c > /* Query for standard if not explicitly mentioned _TB/_BT */ > ret = v4l2_subdev_call(sd, video, querystd, &std); Ouch, this should never be done like this. Instead the decision should be made using the last set std, never by querying. So querystd should be replaced by g_std in the v4l2_subdev_call above. The only place querystd can be called is in the QUERYSTD ioctl, all other ioctls should use the last set standard. Regards, Hans > if (ret < 0) > - std = V4L2_STD_625_50; > + return ret; > > field = std & V4L2_STD_625_50 ? V4L2_FIELD_INTERLACED_TB : > V4L2_FIELD_INTERLACED_BT; > > -- > 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 > -- 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