[PATCH v2 0/3] media: i2c: Add driver for THine THP7312 ISP

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Oct 12 05:53:30 PDT 2023


On Thu, Oct 12, 2023 at 04:20:13AM +0300, Laurent Pinchart wrote:
> Hello,
> 
> This patch series adds a new driver for the THine THP7312 ISP. It has
> been tested on an OLogic Pumpkin i350, which has a Mediatek MT8365 SoC,
> with the THine THSCG101 camera module.
> 
> Technically the driver itself (and its bindings) have no dependencies,
> but to run/test this on the Pumpkin i350 with the mainline kernel, a
> large number of patches are needed to support the board and the MT8365
> SoC. Some of those patches are on their way to mainline, and some, like
> the Pumpkin i350 board device tree, will require more work. For
> convenience and reference, the needed patches are available in [1].
> Example overlays for DT integration of the THP7312 are available in that
> branch, in [2].
> 
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git/log/?h=mtk/v6.6/pumpkin/camera
> [2] https://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git/commit/?h=mtk/v6.6/pumpkin/camera&id=e5fd74796c3e0973991bab2692a3534ed1a23d86
> 
> Compared to v1, this is a near complete rewrite of the driver that has
> taken (to my knowledge) all review comments into account.
> 
> Below is the mandatory v4l2-compliance report. Careful readers may
> notice that my v4l2-utils version is three commits behind upstream, but
> that makes no practical difference as those commits are not related to
> v4l2-compliance.
> 
> The mainline kernel is currently fairly unstable on the Pumpkin i350
> board. For this reason, the driver has primarily been developed against
> the Mediatek v5.15-based BSP, and successfully tested there. I managed
> to test it on mainline as well, but that requires close to hundred boots
> to get a userspace that doesn't segfault. This is why the
> v4l2-compliance report below is from a run against the BSP. The thp7312
> driver is identical to this version, except for the usage of
> .probe_new() on v5.15 that has since been dropped from mainline, and the
> return type of the .remove() function that was `int` back then.
> 
> If anyone would like to help with getting mainline to run better on the
> Pumpkin i350 board, I would  be grateful :-) It would certainly help
> maintaining this driver going forward.

It turned out not to be too complex after all:

commit f39c64ed01f56dbac5a3a3570cb3214f18a3ffec
Author: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Date:   Thu Oct 12 04:21:49 2023 +0300

    arm64: dts: mediatek: mt8365-pumpkin: Add reserved memory region for BL31

    The Pumpkin i350 boot loader doesn't seem to populate reserved memory
    regions in the device tree, forcing them to be described statically. The
    mt8365-pumpkin device tree already includes a reserved memory region for
    BL32, which seems enough for proper operation with the Mediatek
    v5.15-based BSP kernel.

    With the mainline kernel, however, userspace processes currently crash
    very randomly. Adding a reserved memory region for BL31, copied from the
    mt8365-evk device tree, fixes the issue.

    Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

diff --git a/arch/arm64/boot/dts/mediatek/mt8365-pumpkin.dts b/arch/arm64/boot/dts/mediatek/mt8365-pumpkin.dts
index 8924bb8dae17..465c20e174da 100644
--- a/arch/arm64/boot/dts/mediatek/mt8365-pumpkin.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8365-pumpkin.dts
@@ -52,6 +52,12 @@ reserved-memory {
 		#size-cells = <2>;
 		ranges;

+		/* 192 KiB reserved for ARM Trusted Firmware (BL31) */
+		bl31_secmon_reserved: secmon at 43000000 {
+			no-map;
+			reg = <0 0x43000000 0 0x30000>;
+		};
+
 		/* 12 MiB reserved for OP-TEE (BL32)
 		 * +-----------------------+ 0x43e0_0000
 		 * |      SHMEM 2MiB       |


I've updated the mtk/v6.6/pumpkin/camera branch linked above, and can
now run v4l2-compliance reliably on v6.6-rc5. Apart from the driver
version now being 6.6.0, the output is the same.

> # v4l2-compliance -u /dev/v4l-subdev2
> v4l2-compliance 1.25.0-5097, 64 bits, 64-bit time_t
> v4l2-compliance SHA: b79e00a74fde 2023-09-13 07:19:23
> 
> Compliance test for device /dev/v4l-subdev2:
> 
> Driver Info:
>         Driver version   : 5.15.37
>         Capabilities     : 0x00000000
> 
> Required ioctls:
>         test VIDIOC_SUDBEV_QUERYCAP: OK
>         test invalid ioctls: OK
> 
> Allow for multiple opens:
>         test second /dev/v4l-subdev2 open: OK
>         test VIDIOC_SUBDEV_QUERYCAP: OK
>         test for unlimited opens: OK
> 
> Debug ioctls:
> [  353.331499] thp7312 2-0061: =================  START STATUS  =================
> [  353.332515] thp7312 2-0061: Focus, Automatic Continuous: true
> [  353.333460] thp7312 2-0061: Focus, Absolute: 0
> [  353.334074] thp7312 2-0061: Auto-Focus Method: 2
> [  353.334700] thp7312 2-0061: White Balance, Automatic: true
> [  353.335432] thp7312 2-0061: Red Balance: 64
> [  353.335998] thp7312 2-0061: Blue Balance: 50
> [  353.337065] thp7312 2-0061: Brightness: 0
> [  353.337627] thp7312 2-0061: Saturation: 10
> [  353.338182] thp7312 2-0061: Contrast: 10
> [  353.338712] thp7312 2-0061: Sharpness: 8
> [  353.339242] thp7312 2-0061: Rotate: 0
> [  353.339742] thp7312 2-0061: Auto Exposure, Bias: 0
> [  353.340453] thp7312 2-0061: Power Line Frequency: 50 Hz
> [  353.341160] thp7312 2-0061: Camera Orientation: Front
> [  353.341835] thp7312 2-0061: Camera Sensor Rotation: 0
> [  353.342504] thp7312 2-0061: Low Light Compensation: true
> [  353.343204] thp7312 2-0061: Noise Reduction Auto: true
> [  353.343882] thp7312 2-0061: Noise Reduction Level: 0
> [  353.344636] thp7312 2-0061: ==================  END STATUS  ==================
>         test VIDIOC_LOG_STATUS: OK
> 
> Input ioctls:
>         test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>         test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>         test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>         test VIDIOC_ENUMAUDIO: OK (Not Supported)
>         test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>         test VIDIOC_G/S_AUDIO: OK (Not Supported)
>         Inputs: 0 Audio Inputs: 0 Tuners: 0
> 
> Output ioctls:
>         test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>         test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>         test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>         test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>         test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>         Outputs: 0 Audio Outputs: 0 Modulators: 0
> 
> Input/Output configuration ioctls:
>         test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>         test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>         test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>         test VIDIOC_G/S_EDID: OK (Not Supported)
> 
> Control ioctls:
>         test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>         test VIDIOC_QUERYCTRL: OK
>         test VIDIOC_G/S_CTRL: OK
>         test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>         test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>         test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>         Standard Controls: 17 Private Controls: 4
> 
> Format ioctls:
>         test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
>         test VIDIOC_G/S_PARM: OK (Not Supported)
>         test VIDIOC_G_FBUF: OK (Not Supported)
>         test VIDIOC_G_FMT: OK (Not Supported)
>         test VIDIOC_TRY_FMT: OK (Not Supported)
>         test VIDIOC_S_FMT: OK (Not Supported)
>         test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>         test Cropping: OK (Not Supported)
>         test Composing: OK (Not Supported)
>         test Scaling: OK (Not Supported)
> 
> Codec ioctls:
>         test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>         test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>         test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> 
> Buffer ioctls:
>         test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>         test VIDIOC_EXPBUF: OK (Not Supported)
>         test Requests: OK (Not Supported)
> 
> Total for device /dev/v4l-subdev2: 43, Succeeded: 43, Failed: 0, Warnings: 0
> 
> Laurent Pinchart (1):
>   media: uapi: Add controls for the THP7312 ISP
> 
> Paul Elder (2):
>   dt-bindings: media: Add bindings for THine THP7312 ISP
>   media: i2c: Add driver for THine THP7312
> 
>  .../bindings/media/i2c/thine,thp7312.yaml     |  225 ++
>  .../userspace-api/media/drivers/index.rst     |    1 +
>  .../userspace-api/media/drivers/thp7312.rst   |   32 +
>  MAINTAINERS                                   |   10 +
>  drivers/media/i2c/Kconfig                     |   16 +
>  drivers/media/i2c/Makefile                    |    1 +
>  drivers/media/i2c/thp7312.c                   | 2386 +++++++++++++++++
>  include/uapi/linux/thp7312.h                  |   19 +
>  include/uapi/linux/v4l2-controls.h            |    6 +
>  9 files changed, 2696 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/media/i2c/thine,thp7312.yaml
>  create mode 100644 Documentation/userspace-api/media/drivers/thp7312.rst
>  create mode 100644 drivers/media/i2c/thp7312.c
>  create mode 100644 include/uapi/linux/thp7312.h
> 
> 
> base-commit: a1766a4fd83befa0b34d932d532e7ebb7fab1fa7

-- 
Regards,

Laurent Pinchart



More information about the Linux-mediatek mailing list