diff mbox series

media: ov5640: Fix set 15fps regression

Message ID 20190124175801.28018-1-jagan@amarulasolutions.com (mailing list archive)
State New, archived
Headers show
Series media: ov5640: Fix set 15fps regression | expand

Commit Message

Jagan Teki Jan. 24, 2019, 5:58 p.m. UTC
The ov5640_try_frame_interval operation updates the FPS as per user
input based on default ov5640_frame_rate, OV5640_30_FPS which is failed
to update when user trigger 15fps.

So, initialize the default ov5640_frame_rate to OV5640_15_FPS so-that
it can satisfy to update all fps.

Fixes: 5a3ad937bc78 ("media: ov5640: Make the return rate type more explicit")
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
 drivers/media/i2c/ov5640.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Maxime Ripard Jan. 25, 2019, 3:39 p.m. UTC | #1
On Thu, Jan 24, 2019 at 11:28:01PM +0530, Jagan Teki wrote:
> The ov5640_try_frame_interval operation updates the FPS as per user
> input based on default ov5640_frame_rate, OV5640_30_FPS which is failed
> to update when user trigger 15fps.
> 
> So, initialize the default ov5640_frame_rate to OV5640_15_FPS so-that
> it can satisfy to update all fps.
> 
> Fixes: 5a3ad937bc78 ("media: ov5640: Make the return rate type more explicit")
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>

I'm pretty sure I tested this and it was working fine. You're
mentionning a regression, but what regression is there exactly (ie,
what was working before that commit that doesn't work anymore?). What
tools/commands are you using to see this behaviour?

It really isn't obvious from your patch and the patch you mention what
could go wrong or be improved.

Maxime
Jagan Teki Jan. 28, 2019, 7:50 a.m. UTC | #2
On Fri, Jan 25, 2019 at 9:10 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>
> On Thu, Jan 24, 2019 at 11:28:01PM +0530, Jagan Teki wrote:
> > The ov5640_try_frame_interval operation updates the FPS as per user
> > input based on default ov5640_frame_rate, OV5640_30_FPS which is failed
> > to update when user trigger 15fps.
> >
> > So, initialize the default ov5640_frame_rate to OV5640_15_FPS so-that
> > it can satisfy to update all fps.
> >
> > Fixes: 5a3ad937bc78 ("media: ov5640: Make the return rate type more explicit")
> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
>
> I'm pretty sure I tested this and it was working fine. You're
> mentionning a regression, but what regression is there exactly (ie,
> what was working before that commit that doesn't work anymore?). What
> tools/commands are you using to see this behaviour?

In fact I have mentioned this on your v9 [1], may be you missed it.

I have reproduced with media-ctl, below is the full log. let me know
if I still miss anything.

Before this change:
# media-ctl -p
Media controller API version 5.0.0

Media device information
------------------------
driver          sun6i-csi
model           Allwinner Video Capture Device
serial
bus info
hw revision     0x0
driver version  5.0.0

Device topology
- entity 1: sun6i-csi (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video0
        pad0: Sink
                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]

- entity 5: ov5640 1-003c (1 pad, 1 link)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev0
        pad0: Source
                [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:full-range]
                -> "sun6i-csi":0 [ENABLED,IMMUTABLE]

# media-ctl --set-v4l2 "'ov5640 1-003c':0[fmt:UYVY8_2X8/640x480@1/15 field:none]
"
# media-ctl -p
Media controller API version 5.0.0

Media device information
------------------------
driver          sun6i-csi
model           Allwinner Video Capture Device
serial
bus info
hw revision     0x0
driver version  5.0.0

Device topology
- entity 1: sun6i-csi (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video0
        pad0: Sink
                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]

- entity 5: ov5640 1-003c (1 pad, 1 link)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev0
        pad0: Source
                [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:full-range]
                -> "sun6i-csi":0 [ENABLED,IMMUTABLE]


After this change:
# media-ctl -p
Media controller API version 5.0.0

Media device information
------------------------
driver          sun6i-csi
model           Allwinner Video Capture Device
serial
bus info
hw revision     0x0
driver version  5.0.0

Device topology
- entity 1: sun6i-csi (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video0
        pad0: Sink
                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]

- entity 5: ov5640 1-003c (1 pad, 1 link)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev0
        pad0: Source
                [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:full-range]
                -> "sun6i-csi":0 [ENABLED,IMMUTABLE]

# media-ctl --set-v4l2 "'ov5640 1-003c':0[fmt:UYVY8_2X8/640x480@1/15 field:none]
"
# media-ctl -p
Media controller API version 5.0.0

Media device information
------------------------
driver          sun6i-csi
model           Allwinner Video Capture Device
serial
bus info
hw revision     0x0
driver version  5.0.0

Device topology
- entity 1: sun6i-csi (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video0
        pad0: Sink
                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]

- entity 5: ov5640 1-003c (1 pad, 1 link)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev0
        pad0: Source
                [fmt:UYVY8_2X8/640x480@1/15 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:full-range]
                -> "sun6i-csi":0 [ENABLED,IMMUTABLE]

[1] https://patchwork.kernel.org/patch/10708931/
Jacopo Mondi Jan. 28, 2019, 8:33 a.m. UTC | #3
Hi everyone,

On Mon, Jan 28, 2019 at 01:20:37PM +0530, Jagan Teki wrote:
> On Fri, Jan 25, 2019 at 9:10 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
> >
> > On Thu, Jan 24, 2019 at 11:28:01PM +0530, Jagan Teki wrote:
> > > The ov5640_try_frame_interval operation updates the FPS as per user
> > > input based on default ov5640_frame_rate, OV5640_30_FPS which is failed
> > > to update when user trigger 15fps.
> > >
> > > So, initialize the default ov5640_frame_rate to OV5640_15_FPS so-that
> > > it can satisfy to update all fps.
> > >
> > > Fixes: 5a3ad937bc78 ("media: ov5640: Make the return rate type more explicit")
> > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> >
> > I'm pretty sure I tested this and it was working fine. You're
> > mentionning a regression, but what regression is there exactly (ie,
> > what was working before that commit that doesn't work anymore?). What
> > tools/commands are you using to see this behaviour?
>

I think Jagan's right, here.

For the 15FPS use case, the below condition in the for loop of
ov5640_try_frame_interval() never gets satisfied (0 < 0 ?) and 'rate' retains
its initial value of 30FPS.

		if (abs(curr_fps - fps) < abs(best_fps - fps)) {
			best_fps = curr_fps;
			rate = i;
		}

To make more clear what's happening, I would initialize 'rate' just
before 'best_fps' before the for loop. Anyway, please add:
Acked-by: Jacopo Mondi <jacopo@jmondi.org>

Maxime, does this make sense to you?

Thanks
   j


> In fact I have mentioned this on your v9 [1], may be you missed it.
>
> I have reproduced with media-ctl, below is the full log. let me know
> if I still miss anything.
>
> Before this change:
> # media-ctl -p
> Media controller API version 5.0.0
>
> Media device information
> ------------------------
> driver          sun6i-csi
> model           Allwinner Video Capture Device
> serial
> bus info
> hw revision     0x0
> driver version  5.0.0
>
> Device topology
> - entity 1: sun6i-csi (1 pad, 1 link)
>             type Node subtype V4L flags 0
>             device node name /dev/video0
>         pad0: Sink
>                 <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
>
> - entity 5: ov5640 1-003c (1 pad, 1 link)
>             type V4L2 subdev subtype Sensor flags 0
>             device node name /dev/v4l-subdev0
>         pad0: Source
>                 [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:full-range]
>                 -> "sun6i-csi":0 [ENABLED,IMMUTABLE]
>
> # media-ctl --set-v4l2 "'ov5640 1-003c':0[fmt:UYVY8_2X8/640x480@1/15 field:none]
> "
> # media-ctl -p
> Media controller API version 5.0.0
>
> Media device information
> ------------------------
> driver          sun6i-csi
> model           Allwinner Video Capture Device
> serial
> bus info
> hw revision     0x0
> driver version  5.0.0
>
> Device topology
> - entity 1: sun6i-csi (1 pad, 1 link)
>             type Node subtype V4L flags 0
>             device node name /dev/video0
>         pad0: Sink
>                 <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
>
> - entity 5: ov5640 1-003c (1 pad, 1 link)
>             type V4L2 subdev subtype Sensor flags 0
>             device node name /dev/v4l-subdev0
>         pad0: Source
>                 [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:full-range]
>                 -> "sun6i-csi":0 [ENABLED,IMMUTABLE]
>
>
> After this change:
> # media-ctl -p
> Media controller API version 5.0.0
>
> Media device information
> ------------------------
> driver          sun6i-csi
> model           Allwinner Video Capture Device
> serial
> bus info
> hw revision     0x0
> driver version  5.0.0
>
> Device topology
> - entity 1: sun6i-csi (1 pad, 1 link)
>             type Node subtype V4L flags 0
>             device node name /dev/video0
>         pad0: Sink
>                 <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
>
> - entity 5: ov5640 1-003c (1 pad, 1 link)
>             type V4L2 subdev subtype Sensor flags 0
>             device node name /dev/v4l-subdev0
>         pad0: Source
>                 [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:full-range]
>                 -> "sun6i-csi":0 [ENABLED,IMMUTABLE]
>
> # media-ctl --set-v4l2 "'ov5640 1-003c':0[fmt:UYVY8_2X8/640x480@1/15 field:none]
> "
> # media-ctl -p
> Media controller API version 5.0.0
>
> Media device information
> ------------------------
> driver          sun6i-csi
> model           Allwinner Video Capture Device
> serial
> bus info
> hw revision     0x0
> driver version  5.0.0
>
> Device topology
> - entity 1: sun6i-csi (1 pad, 1 link)
>             type Node subtype V4L flags 0
>             device node name /dev/video0
>         pad0: Sink
>                 <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
>
> - entity 5: ov5640 1-003c (1 pad, 1 link)
>             type V4L2 subdev subtype Sensor flags 0
>             device node name /dev/v4l-subdev0
>         pad0: Source
>                 [fmt:UYVY8_2X8/640x480@1/15 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:full-range]
>                 -> "sun6i-csi":0 [ENABLED,IMMUTABLE]
>
> [1] https://patchwork.kernel.org/patch/10708931/
Maxime Ripard Jan. 29, 2019, 9 a.m. UTC | #4
On Mon, Jan 28, 2019 at 09:33:04AM +0100, Jacopo Mondi wrote:
> Hi everyone,
> 
> On Mon, Jan 28, 2019 at 01:20:37PM +0530, Jagan Teki wrote:
> > On Fri, Jan 25, 2019 at 9:10 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
> > >
> > > On Thu, Jan 24, 2019 at 11:28:01PM +0530, Jagan Teki wrote:
> > > > The ov5640_try_frame_interval operation updates the FPS as per user
> > > > input based on default ov5640_frame_rate, OV5640_30_FPS which is failed
> > > > to update when user trigger 15fps.
> > > >
> > > > So, initialize the default ov5640_frame_rate to OV5640_15_FPS so-that
> > > > it can satisfy to update all fps.
> > > >
> > > > Fixes: 5a3ad937bc78 ("media: ov5640: Make the return rate type more explicit")
> > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> > >
> > > I'm pretty sure I tested this and it was working fine. You're
> > > mentionning a regression, but what regression is there exactly (ie,
> > > what was working before that commit that doesn't work anymore?). What
> > > tools/commands are you using to see this behaviour?
> >
> 
> I think Jagan's right, here.
> 
> For the 15FPS use case, the below condition in the for loop of
> ov5640_try_frame_interval() never gets satisfied (0 < 0 ?) and 'rate' retains
> its initial value of 30FPS.
> 
> 		if (abs(curr_fps - fps) < abs(best_fps - fps)) {
> 			best_fps = curr_fps;
> 			rate = i;
> 		}
> 
> To make more clear what's happening, I would initialize 'rate' just
> before 'best_fps' before the for loop. Anyway, please add:
> Acked-by: Jacopo Mondi <jacopo@jmondi.org>
> 
> Maxime, does this make sense to you?

With that explanation in the commit log, yes.

Maxime
diff mbox series

Patch

diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
index 5a909abd0a2d..4081c29176c6 100644
--- a/drivers/media/i2c/ov5640.c
+++ b/drivers/media/i2c/ov5640.c
@@ -2072,7 +2072,7 @@  static int ov5640_try_frame_interval(struct ov5640_dev *sensor,
 				     u32 width, u32 height)
 {
 	const struct ov5640_mode_info *mode;
-	enum ov5640_frame_rate rate = OV5640_30_FPS;
+	enum ov5640_frame_rate rate = OV5640_15_FPS;
 	int minfps, maxfps, best_fps, fps;
 	int i;