lkml.org 
[lkml]   [2019]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.18 037/104] media: s5p-jpeg: Check for fmt_ver_flag when doing fmt enumeration
    Date
    [ Upstream commit 49710c32cd9d6626a77c9f5f978a5f58cb536b35 ]

    Previously when doing format enumeration, it was returning all
    formats supported by driver, even if they're not supported by hw.
    Add missing check for fmt_ver_flag, so it'll be fixed and only those
    supported by hw will be returned. Similar thing is already done
    in s5p_jpeg_find_format.

    It was found by using v4l2-compliance tool and checking result
    of VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS test
    and using v4l2-ctl to get list of all supported formats.

    Tested on s5pv210-galaxys (Samsung i9000 phone).

    Fixes: bb677f3ac434 ("[media] Exynos4 JPEG codec v4l2 driver")

    Signed-off-by: Pawe? Chmiel <pawel.mikolaj.chmiel@gmail.com>
    Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
    [hverkuil-cisco@xs4all.nl: fix a few alignment issues]
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/platform/s5p-jpeg/jpeg-core.c | 19 +++++++++++--------
    1 file changed, 11 insertions(+), 8 deletions(-)

    diff --git a/drivers/media/platform/s5p-jpeg/jpeg-core.c b/drivers/media/platform/s5p-jpeg/jpeg-core.c
    index 6fcc7f072ace..480266e01037 100644
    --- a/drivers/media/platform/s5p-jpeg/jpeg-core.c
    +++ b/drivers/media/platform/s5p-jpeg/jpeg-core.c
    @@ -1011,13 +1011,16 @@ static int s5p_jpeg_querycap(struct file *file, void *priv,
    return 0;
    }

    -static int enum_fmt(struct s5p_jpeg_fmt *sjpeg_formats, int n,
    +static int enum_fmt(struct s5p_jpeg_ctx *ctx,
    + struct s5p_jpeg_fmt *sjpeg_formats, int n,
    struct v4l2_fmtdesc *f, u32 type)
    {
    int i, num = 0;
    + unsigned int fmt_ver_flag = ctx->jpeg->variant->fmt_ver_flag;

    for (i = 0; i < n; ++i) {
    - if (sjpeg_formats[i].flags & type) {
    + if (sjpeg_formats[i].flags & type &&
    + sjpeg_formats[i].flags & fmt_ver_flag) {
    /* index-th format of type type found ? */
    if (num == f->index)
    break;
    @@ -1043,11 +1046,11 @@ static int s5p_jpeg_enum_fmt_vid_cap(struct file *file, void *priv,
    struct s5p_jpeg_ctx *ctx = fh_to_ctx(priv);

    if (ctx->mode == S5P_JPEG_ENCODE)
    - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f,
    + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f,
    SJPEG_FMT_FLAG_ENC_CAPTURE);

    - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f,
    - SJPEG_FMT_FLAG_DEC_CAPTURE);
    + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f,
    + SJPEG_FMT_FLAG_DEC_CAPTURE);
    }

    static int s5p_jpeg_enum_fmt_vid_out(struct file *file, void *priv,
    @@ -1056,11 +1059,11 @@ static int s5p_jpeg_enum_fmt_vid_out(struct file *file, void *priv,
    struct s5p_jpeg_ctx *ctx = fh_to_ctx(priv);

    if (ctx->mode == S5P_JPEG_ENCODE)
    - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f,
    + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f,
    SJPEG_FMT_FLAG_ENC_OUTPUT);

    - return enum_fmt(sjpeg_formats, SJPEG_NUM_FORMATS, f,
    - SJPEG_FMT_FLAG_DEC_OUTPUT);
    + return enum_fmt(ctx, sjpeg_formats, SJPEG_NUM_FORMATS, f,
    + SJPEG_FMT_FLAG_DEC_OUTPUT);
    }

    static struct s5p_jpeg_q_data *get_q_data(struct s5p_jpeg_ctx *ctx,
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-04-24 20:11    [W:4.038 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site