lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 10/23] media: atmel: atmel-isc-base: implement mbus_code support in enumfmt
    Date
    If enumfmt is called with an mbus_code, the enumfmt handler should only
    return the formats that are supported for this mbus_code.
    To make it more easy to understand the formats, changed the report order
    to report first the native formats, and after that the formats that the ISC
    can convert to.

    Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
    ---
    drivers/media/platform/atmel/atmel-isc-base.c | 51 ++++++++++++++++---
    1 file changed, 43 insertions(+), 8 deletions(-)

    diff --git a/drivers/media/platform/atmel/atmel-isc-base.c b/drivers/media/platform/atmel/atmel-isc-base.c
    index bf638d201b29..2cb8446ff90c 100644
    --- a/drivers/media/platform/atmel/atmel-isc-base.c
    +++ b/drivers/media/platform/atmel/atmel-isc-base.c
    @@ -498,21 +498,56 @@ static int isc_enum_fmt_vid_cap(struct file *file, void *priv,
    u32 index = f->index;
    u32 i, supported_index;

    - if (index < isc->controller_formats_size) {
    - f->pixelformat = isc->controller_formats[index].fourcc;
    - return 0;
    + supported_index = 0;
    +
    + for (i = 0; i < isc->formats_list_size; i++) {
    + if (!isc->formats_list[i].sd_support)
    + continue;
    + /*
    + * If specific mbus_code is requested, provide only
    + * supported formats with this mbus code
    + */
    + if (f->mbus_code && f->mbus_code !=
    + isc->formats_list[i].mbus_code)
    + continue;
    + if (supported_index == index) {
    + f->pixelformat = isc->formats_list[i].fourcc;
    + return 0;
    + }
    + supported_index++;
    }

    - index -= isc->controller_formats_size;
    + /*
    + * If the sensor does not support this mbus_code whatsoever,
    + * there is no reason to advertise any of our output formats
    + */
    + if (supported_index == 0)
    + return -EINVAL;
    +
    + /*
    + * If the sensor uses a format that is not raw, then we cannot
    + * convert it to any of the formats that we usually can with a
    + * RAW sensor. Thus, do not advertise them.
    + */
    + if (!isc->config.sd_format ||
    + !ISC_IS_FORMAT_RAW(isc->config.sd_format->mbus_code))
    + return -EINVAL;

    + /*
    + * Iterate again through the formats that we can convert to.
    + * However, to avoid duplicates, skip the formats that
    + * the sensor already supports directly
    + */
    + index -= supported_index;
    supported_index = 0;

    - for (i = 0; i < isc->formats_list_size; i++) {
    - if (!ISC_IS_FORMAT_RAW(isc->formats_list[i].mbus_code) ||
    - !isc->formats_list[i].sd_support)
    + for (i = 0; i < isc->controller_formats_size; i++) {
    + /* if this format is already supported by sensor, skip it */
    + if (find_format_by_fourcc(isc, isc->controller_formats[i].fourcc))
    continue;
    if (supported_index == index) {
    - f->pixelformat = isc->formats_list[i].fourcc;
    + f->pixelformat =
    + isc->controller_formats[i].fourcc;
    return 0;
    }
    supported_index++;
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-12-13 14:53    [W:3.033 / U:0.552 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site