lkml.org 
[lkml]   [2020]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 110/274] media: imx: utils: fix media bus format enumeration
    Date
    From: Philipp Zabel <p.zabel@pengutronix.de>

    [ Upstream commit 1df2148fdfc036c9350d41ae81b09b3f8897c9b6 ]

    Iterate over all media bus formats, not just over the first format in
    each imx_media_pixfmt entry.

    Before:

    $ v4l2-ctl -d $(media-ctl -e ipu1_csi0) --list-subdev-mbus-codes 0
    ioctl: VIDIOC_SUBDEV_ENUM_MBUS_CODE (pad=0)
    0x2006: MEDIA_BUS_FMT_UYVY8_2X8
    0x2008: MEDIA_BUS_FMT_YUYV8_2X8
    0x1008: MEDIA_BUS_FMT_RGB565_2X8_LE
    0x100a: MEDIA_BUS_FMT_RGB888_1X24
    0x100d: MEDIA_BUS_FMT_ARGB8888_1X32
    0x3001: MEDIA_BUS_FMT_SBGGR8_1X8
    0x3013: MEDIA_BUS_FMT_SGBRG8_1X8
    0x3002: MEDIA_BUS_FMT_SGRBG8_1X8
    0x3014: MEDIA_BUS_FMT_SRGGB8_1X8
    0x3007: MEDIA_BUS_FMT_SBGGR10_1X10
    0x300e: MEDIA_BUS_FMT_SGBRG10_1X10
    0x300a: MEDIA_BUS_FMT_SGRBG10_1X10
    0x300f: MEDIA_BUS_FMT_SRGGB10_1X10
    0x2001: MEDIA_BUS_FMT_Y8_1X8
    0x200a: MEDIA_BUS_FMT_Y10_1X10

    After:

    $ v4l2-ctl -d $(media-ctl -e ipu1_csi0) --list-subdev-mbus-codes 0
    ioctl: VIDIOC_SUBDEV_ENUM_MBUS_CODE (pad=0)
    0x2006: MEDIA_BUS_FMT_UYVY8_2X8
    0x200f: MEDIA_BUS_FMT_UYVY8_1X16
    0x2008: MEDIA_BUS_FMT_YUYV8_2X8
    0x2011: MEDIA_BUS_FMT_YUYV8_1X16
    0x1008: MEDIA_BUS_FMT_RGB565_2X8_LE
    0x100a: MEDIA_BUS_FMT_RGB888_1X24
    0x100c: MEDIA_BUS_FMT_RGB888_2X12_LE
    0x100d: MEDIA_BUS_FMT_ARGB8888_1X32
    0x3001: MEDIA_BUS_FMT_SBGGR8_1X8
    0x3013: MEDIA_BUS_FMT_SGBRG8_1X8
    0x3002: MEDIA_BUS_FMT_SGRBG8_1X8
    0x3014: MEDIA_BUS_FMT_SRGGB8_1X8
    0x3007: MEDIA_BUS_FMT_SBGGR10_1X10
    0x3008: MEDIA_BUS_FMT_SBGGR12_1X12
    0x3019: MEDIA_BUS_FMT_SBGGR14_1X14
    0x301d: MEDIA_BUS_FMT_SBGGR16_1X16
    0x300e: MEDIA_BUS_FMT_SGBRG10_1X10
    0x3010: MEDIA_BUS_FMT_SGBRG12_1X12
    0x301a: MEDIA_BUS_FMT_SGBRG14_1X14
    0x301e: MEDIA_BUS_FMT_SGBRG16_1X16
    0x300a: MEDIA_BUS_FMT_SGRBG10_1X10
    0x3011: MEDIA_BUS_FMT_SGRBG12_1X12
    0x301b: MEDIA_BUS_FMT_SGRBG14_1X14
    0x301f: MEDIA_BUS_FMT_SGRBG16_1X16
    0x300f: MEDIA_BUS_FMT_SRGGB10_1X10
    0x3012: MEDIA_BUS_FMT_SRGGB12_1X12
    0x301c: MEDIA_BUS_FMT_SRGGB14_1X14
    0x3020: MEDIA_BUS_FMT_SRGGB16_1X16
    0x2001: MEDIA_BUS_FMT_Y8_1X8
    0x200a: MEDIA_BUS_FMT_Y10_1X10
    0x2013: MEDIA_BUS_FMT_Y12_1X12

    [laurent.pinchart@ideasonboard.com: Decrement index to replace loop counter k]
    [laurent.pinchart@ideasonboard.com: Return directly from within the loops]

    Fixes: e130291212df5 ("[media] media: Add i.MX media core driver")
    Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/staging/media/imx/imx-media-utils.c | 22 +++++++++++++++------
    1 file changed, 16 insertions(+), 6 deletions(-)

    diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
    index 39469031e510..00a71f01786c 100644
    --- a/drivers/staging/media/imx/imx-media-utils.c
    +++ b/drivers/staging/media/imx/imx-media-utils.c
    @@ -269,6 +269,7 @@ static int enum_format(u32 *fourcc, u32 *code, u32 index,
    for (i = 0; i < ARRAY_SIZE(pixel_formats); i++) {
    const struct imx_media_pixfmt *fmt = &pixel_formats[i];
    enum codespace_sel fmt_cs_sel;
    + unsigned int j;

    fmt_cs_sel = (fmt->cs == IPUV3_COLORSPACE_YUV) ?
    CS_SEL_YUV : CS_SEL_RGB;
    @@ -278,15 +279,24 @@ static int enum_format(u32 *fourcc, u32 *code, u32 index,
    (!allow_bayer && fmt->bayer))
    continue;

    - if (index == 0) {
    - if (fourcc)
    - *fourcc = fmt->fourcc;
    - if (code)
    - *code = fmt->codes[0];
    + if (fourcc && index == 0) {
    + *fourcc = fmt->fourcc;
    return 0;
    }

    - index--;
    + if (!code) {
    + index--;
    + continue;
    + }
    +
    + for (j = 0; j < ARRAY_SIZE(fmt->codes) && fmt->codes[j]; j++) {
    + if (index == 0) {
    + *code = fmt->codes[j];
    + return 0;
    + }
    +
    + index--;
    + }
    }

    return -EINVAL;
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-09 01:09    [W:4.145 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site