On Fri, 6 Jul 2012, Laurent Pinchart wrote:

> The format and window size are only initialized during the first g_fmt
> call. This leaves the device in an inconsistent state after
> initialization, which will cause problems when implementing pad
> operations. Move the format and window size initialization to probe
> time.
> 
> Signed-off-by: Laurent Pinchart <[email protected]>
> ---
>  drivers/media/video/ov772x.c |   63 ++++++++++++++++++++---------------------
>  1 files changed, 31 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/media/video/ov772x.c b/drivers/media/video/ov772x.c
> index 066bac6..576780a 100644
> --- a/drivers/media/video/ov772x.c
> +++ b/drivers/media/video/ov772x.c
> @@ -547,37 +547,36 @@ static const struct ov772x_color_format ov772x_cfmts[] 
> = {
>  #define MAX_WIDTH   VGA_WIDTH
>  #define MAX_HEIGHT  VGA_HEIGHT
>  
> -static const struct ov772x_win_size ov772x_win_vga = {
> -     .name     = "VGA",
> -     .width    = VGA_WIDTH,
> -     .height   = VGA_HEIGHT,
> -     .com7_bit = SLCT_VGA,
> -     .regs     = ov772x_vga_regs,
> -};
> -
> -static const struct ov772x_win_size ov772x_win_qvga = {
> -     .name     = "QVGA",
> -     .width    = QVGA_WIDTH,
> -     .height   = QVGA_HEIGHT,
> -     .com7_bit = SLCT_QVGA,
> -     .regs     = ov772x_qvga_regs,
> +static const struct ov772x_win_size ov772x_win_sizes[] = {
> +     {
> +             .name     = "VGA",
> +             .width    = VGA_WIDTH,
> +             .height   = VGA_HEIGHT,
> +             .com7_bit = SLCT_VGA,
> +             .regs     = ov772x_vga_regs,
> +     }, {
> +             .name     = "QVGA",
> +             .width    = QVGA_WIDTH,
> +             .height   = QVGA_HEIGHT,
> +             .com7_bit = SLCT_QVGA,
> +             .regs     = ov772x_qvga_regs,
> +     },
>  };
>  
>  static const struct ov772x_win_size *ov772x_select_win(u32 width, u32 height)
>  {
> -     __u32 diff;
> -     const struct ov772x_win_size *win;
> -
> -     /* default is QVGA */
> -     diff = abs(width - ov772x_win_qvga.width) +
> -             abs(height - ov772x_win_qvga.height);
> -     win = &ov772x_win_qvga;
> -
> -     /* VGA */
> -     if (diff >
> -         abs(width  - ov772x_win_vga.width) +
> -         abs(height - ov772x_win_vga.height))
> -             win = &ov772x_win_vga;
> +     const struct ov772x_win_size *win = &ov772x_win_sizes[0];
> +     unsigned int i;
> +     u32 best_diff = (u32)-1;

Not a reason enough for a new version, if you don't mind and ig I don't 
forget, I might

#include <linux/kernel.h>
+       u32 best_diff = UINT_MAX;

> +
> +     for (i = 0; i < ARRAY_SIZE(ov772x_win_sizes); ++i) {
> +             u32 diff = abs(width - ov772x_win_sizes[i].width)
> +                      + abs(height - ov772x_win_sizes[i].height);
> +             if (diff < best_diff) {
> +                     best_diff = diff;
> +                     win = &ov772x_win_sizes[i];
> +             }
> +     }
>  
>       return win;
>  }

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to