[PATCH v1 0/4] This series adds support for the Qualcomm JPEG V4L2 mem2mem encoder.

From: Atanas Filipov

Date: Fri Jun 12 2026 - 15:46:00 EST


The goal is to upstream a standards-based JPEG encode path using the V4L2 M2M
framework, with DT-described hardware resources and SoC DTS integration.

Patch layout:
- 1/4: devicetree bindings for the standalone Qualcomm JPEG encoder block
- 2/4: SM8550 devicetree integration
- 3/4: SM8250 devicetree integration
- 4/4: qcom-jenc V4L2 mem2mem encoder driver

Supported compatibles:
- qcom,sm8250-jenc
- qcom,qcm6490-jenc
- qcom,sm8550-jenc

Driver scope and design choices:
- uses the standard V4L2 mem2mem + vb2 workflow
- maps runtime resources from DT (clocks/interconnects/iommu/etc.)
- keeps userspace interface within existing V4L2 JPEG controls/framework
- uses runtime PM for balanced power transitions across stream/probe/remove

Functional validation (hardware):
- platforms (codename / SoC / compatible / board):
- Kona / SM8250 (QRB5165 class) / qcom,sm8250-jenc / RB5
- Kailua / SM8550 / qcom,sm8550-jenc / RB5 Gen2
- Kodiak / QCM6490 (QCS6490 derivative line) / qcom,qcm6490-jenc / RB3 Gen2
- validated SoC coverage: SM8250, SM8550, QCM6490
- tested flows:
- single-frame encode: 8192x8192 NV12 (v4l2-ctl)
- single-frame encode: 1920x1080 NV12 (v4l2-ctl)
- single-frame encode: 1920x1080 GREY (v4l2-ctl)
- GStreamer NV12 pipeline to JPEG files (v4l2jpegenc)
- GStreamer GRAY8 pipeline to MJPEG output (v4l2jpegenc)

Known limitations:
- scaling is not supported
- width and height must be aligned to 16 pixels

Atanas Filipov (4):
dt-bindings: media: qcom: Add JPEG encoder binding
arm64: dts: qcom: sm8550: Add JPEG encoder node
arm64: dts: qcom: sm8250: Add JPEG encoder node
media: qcom: jpeg: Add Qualcomm JPEG V4L2 encoder

.../bindings/media/qcom,jpeg-encoder.yaml | 142 ++
arch/arm64/boot/dts/qcom/sm8250.dtsi | 35 +
arch/arm64/boot/dts/qcom/sm8550.dtsi | 42 +
drivers/media/platform/qcom/Kconfig | 1 +
drivers/media/platform/qcom/Makefile | 1 +
drivers/media/platform/qcom/jpeg/Kconfig | 18 +
drivers/media/platform/qcom/jpeg/Makefile | 9 +
.../media/platform/qcom/jpeg/qcom_jenc_defs.h | 244 +++
.../media/platform/qcom/jpeg/qcom_jenc_dev.c | 336 ++++
.../media/platform/qcom/jpeg/qcom_jenc_dev.h | 107 ++
.../media/platform/qcom/jpeg/qcom_jenc_hdr.c | 360 ++++
.../media/platform/qcom/jpeg/qcom_jenc_hdr.h | 119 ++
.../media/platform/qcom/jpeg/qcom_jenc_ops.c | 1658 +++++++++++++++++
.../media/platform/qcom/jpeg/qcom_jenc_ops.h | 52 +
.../media/platform/qcom/jpeg/qcom_jenc_res.c | 226 +++
.../media/platform/qcom/jpeg/qcom_jenc_res.h | 54 +
.../qcom/jpeg/qcom_jenc_v420_hw_info.h | 529 ++++++
.../media/platform/qcom/jpeg/qcom_jenc_v4l2.c | 1109 +++++++++++
.../media/platform/qcom/jpeg/qcom_jenc_v4l2.h | 25 +
19 files changed, 5067 insertions(+)
create mode 100644 Documentation/devicetree/bindings/media/qcom,jpeg-encoder.yaml
create mode 100644 drivers/media/platform/qcom/jpeg/Kconfig
create mode 100644 drivers/media/platform/qcom/jpeg/Makefile
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_defs.h
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_dev.c
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_dev.h
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_hdr.c
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_hdr.h
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_ops.c
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_ops.h
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_res.c
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_res.h
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_v420_hw_info.h
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_v4l2.c
create mode 100644 drivers/media/platform/qcom/jpeg/qcom_jenc_v4l2.h


base-commit: e7ae89a0c97ce2b68b0983cd01eda67cf373517d
--
2.34.1