lkml.org 
[lkml]   [2022]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v4 26/45] media: sun6i-csi: Remove custom format helper and rework configure
    Date
    Dne petek, 15. april 2022 ob 17:27:52 CEST je Paul Kocialkowski napisal(a):
    > Remove the custom sun6i_csi_get_bpp helper in favor of common v4l2
    > infrastructure and rework the related window configuration code.
    >
    > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

    Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>

    Best regards,
    Jernej

    > ---
    > .../platform/sunxi/sun6i-csi/sun6i_csi.h | 49 -------------
    > .../sunxi/sun6i-csi/sun6i_csi_capture.c | 70 +++++++++----------
    > 2 files changed, 35 insertions(+), 84 deletions(-)
    >
    > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
    > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h index
    > f54ad2f438f8..dd90ffdae5d5 100644
    > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
    > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
    > @@ -60,53 +60,4 @@ struct sun6i_csi_variant {
    > bool sun6i_csi_is_format_supported(struct sun6i_csi_device *csi_dev,
    > u32 pixformat, u32 mbus_code);
    >
    > -/* get bpp form v4l2 pixformat */
    > -static inline int sun6i_csi_get_bpp(unsigned int pixformat)
    > -{
    > - switch (pixformat) {
    > - case V4L2_PIX_FMT_SBGGR8:
    > - case V4L2_PIX_FMT_SGBRG8:
    > - case V4L2_PIX_FMT_SGRBG8:
    > - case V4L2_PIX_FMT_SRGGB8:
    > - case V4L2_PIX_FMT_JPEG:
    > - return 8;
    > - case V4L2_PIX_FMT_SBGGR10:
    > - case V4L2_PIX_FMT_SGBRG10:
    > - case V4L2_PIX_FMT_SGRBG10:
    > - case V4L2_PIX_FMT_SRGGB10:
    > - return 10;
    > - case V4L2_PIX_FMT_SBGGR12:
    > - case V4L2_PIX_FMT_SGBRG12:
    > - case V4L2_PIX_FMT_SGRBG12:
    > - case V4L2_PIX_FMT_SRGGB12:
    > - case V4L2_PIX_FMT_NV12_16L16:
    > - case V4L2_PIX_FMT_NV12:
    > - case V4L2_PIX_FMT_NV21:
    > - case V4L2_PIX_FMT_YUV420:
    > - case V4L2_PIX_FMT_YVU420:
    > - return 12;
    > - case V4L2_PIX_FMT_YUYV:
    > - case V4L2_PIX_FMT_YVYU:
    > - case V4L2_PIX_FMT_UYVY:
    > - case V4L2_PIX_FMT_VYUY:
    > - case V4L2_PIX_FMT_NV16:
    > - case V4L2_PIX_FMT_NV61:
    > - case V4L2_PIX_FMT_YUV422P:
    > - case V4L2_PIX_FMT_RGB565:
    > - case V4L2_PIX_FMT_RGB565X:
    > - return 16;
    > - case V4L2_PIX_FMT_RGB24:
    > - case V4L2_PIX_FMT_BGR24:
    > - return 24;
    > - case V4L2_PIX_FMT_RGB32:
    > - case V4L2_PIX_FMT_BGR32:
    > - return 32;
    > - default:
    > - WARN(1, "Unsupported pixformat: 0x%x\n", pixformat);
    > - break;
    > - }
    > -
    > - return 0;
    > -}
    > -
    > #endif /* __SUN6I_CSI_H__ */
    > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
    > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c index
    > 2aa65a4ddb85..c4e803a38851 100644
    > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
    > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
    > @@ -483,68 +483,68 @@ static void sun6i_csi_capture_configure_format(struct
    > sun6i_csi_device *csi_dev)
    >
    > static void sun6i_csi_capture_configure_window(struct sun6i_csi_device
    > *csi_dev) {
    > + struct regmap *regmap = csi_dev->regmap;
    > + const struct v4l2_format_info *info;
    > + u32 hsize_len, vsize_len;
    > + u32 luma_line, chroma_line = 0;
    > u32 pixelformat, field;
    > u32 width, height;
    > - u32 bytesperline_y;
    > - u32 bytesperline_c;
    > - u32 hor_len;
    >
    > sun6i_csi_capture_dimensions(csi_dev, &width, &height);
    > sun6i_csi_capture_format(csi_dev, &pixelformat, &field);
    >
    > - hor_len = width;
    > + hsize_len = width;
    > + vsize_len = height;
    >
    > switch (pixelformat) {
    > case V4L2_PIX_FMT_YUYV:
    > case V4L2_PIX_FMT_YVYU:
    > case V4L2_PIX_FMT_UYVY:
    > case V4L2_PIX_FMT_VYUY:
    > - dev_dbg(csi_dev->dev,
    > - "Horizontal length should be 2 times of
    width for packed YUV
    > formats!\n"); - hor_len = width * 2;
    > + /*
    > + * Horizontal length should be 2 times of width for
    packed
    > + * YUV formats.
    > + */
    > + hsize_len *= 2;
    > break;
    > default:
    > break;
    > }
    >
    > - regmap_write(csi_dev->regmap, SUN6I_CSI_CH_HSIZE_REG,
    > - SUN6I_CSI_CH_HSIZE_LEN(hor_len) |
    > + regmap_write(regmap, SUN6I_CSI_CH_HSIZE_REG,
    > + SUN6I_CSI_CH_HSIZE_LEN(hsize_len) |
    > SUN6I_CSI_CH_HSIZE_START(0));
    > - regmap_write(csi_dev->regmap, SUN6I_CSI_CH_VSIZE_REG,
    > - SUN6I_CSI_CH_VSIZE_LEN(height) |
    > +
    > + regmap_write(regmap, SUN6I_CSI_CH_VSIZE_REG,
    > + SUN6I_CSI_CH_VSIZE_LEN(vsize_len) |
    > SUN6I_CSI_CH_VSIZE_START(0));
    >
    > switch (pixelformat) {
    > - case V4L2_PIX_FMT_NV12_16L16:
    > - case V4L2_PIX_FMT_NV12:
    > - case V4L2_PIX_FMT_NV21:
    > - case V4L2_PIX_FMT_NV16:
    > - case V4L2_PIX_FMT_NV61:
    > - bytesperline_y = width;
    > - bytesperline_c = width;
    > + case V4L2_PIX_FMT_RGB565X:
    > + luma_line = width * 2;
    > break;
    > - case V4L2_PIX_FMT_YUV420:
    > - case V4L2_PIX_FMT_YVU420:
    > - bytesperline_y = width;
    > - bytesperline_c = width / 2;
    > + case V4L2_PIX_FMT_NV12_16L16:
    > + luma_line = width;
    > + chroma_line = width;
    > break;
    > - case V4L2_PIX_FMT_YUV422P:
    > - bytesperline_y = width;
    > - bytesperline_c = width / 2;
    > + case V4L2_PIX_FMT_JPEG:
    > + luma_line = width;
    > break;
    > - default: /* raw */
    > - dev_dbg(csi_dev->dev,
    > - "Calculating pixelformat(0x%x)'s
    bytesperline as a packed format\n",
    > - pixelformat);
    > - bytesperline_y = (sun6i_csi_get_bpp(pixelformat) *
    > - width) / 8;
    > - bytesperline_c = 0;
    > + default:
    > + info = v4l2_format_info(pixelformat);
    > + if (WARN_ON(!info))
    > + return;
    > +
    > + luma_line = width * info->bpp[0];
    > +
    > + if (info->comp_planes > 1)
    > + chroma_line = width * info->bpp[1] / info-
    >hdiv;
    > break;
    > }
    >
    > - regmap_write(csi_dev->regmap, SUN6I_CSI_CH_BUF_LEN_REG,
    > - SUN6I_CSI_CH_BUF_LEN_CHROMA_LINE(bytesperline_c) |
    > - SUN6I_CSI_CH_BUF_LEN_LUMA_LINE(bytesperline_y));
    > + regmap_write(regmap, SUN6I_CSI_CH_BUF_LEN_REG,
    > + SUN6I_CSI_CH_BUF_LEN_CHROMA_LINE(chroma_line) |
    > + SUN6I_CSI_CH_BUF_LEN_LUMA_LINE(luma_line));
    > }
    >
    > static void sun6i_csi_capture_configure(struct sun6i_csi_device *csi_dev)




    \
     
     \ /
      Last update: 2022-04-27 21:32    [W:4.051 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site