IMX462 not running under Kernel 5.15.30

Dear support,

my Arducam Raspberry Pi Ultra Low Light Camera stopped working. Probably since I updated the kernel the camera regularly tears down my raspberry pi. My raspi runs stable but as soon as I start libcamera-vid -t 0 it takes less than an hour until my raspberry pi crashes. and does not respond anymore.

I tried to reinstall the drivers from https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/Arducam_pivariety_v4l2_v1.0/arducam_pivariety_v4l2_5.10.92_later.tar.gz

but I get:

Installing Arducam-Pivariety-V4L2-Driver…

install: cannot stat ‘./bin/5.15.30-v7l+/arducam.ko’: No such file or directory
install: cannot stat ‘./bin/5.15.30-v7l+/arducam.dtbo’: No such file or directory
reboot now?(y/n):

Can anybody help me?

Thanks a lot

Tonio

I tried to compile modules for the current kernel myself. I followed: How to install and build Raspberry Pi Kernel Driver for Arducam Pivariety Camera

but I do get error messages when compiling:

~/linux $ make -j4 zImage modules dtbs
CALL scripts/atomic/check-atomics.sh
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC [M] drivers/media/i2c/arducam.o
drivers/media/i2c/arducam.c: In function ‘arducam_open’:
drivers/media/i2c/arducam.c:477:36: error: ‘struct v4l2_subdev_fh’ has no member named ‘pad’
477 | v4l2_subdev_get_try_format(sd, fh->pad, 0);
| ^~
drivers/media/i2c/arducam.c: In function ‘__arducam_get_pad_crop’:
drivers/media/i2c/arducam.c:779:49: error: passing argument 2 of ‘v4l2_subdev_get_try_crop’ from incompatible pointer type [-Werror=incompatible-pointer-types]
779 | return v4l2_subdev_get_try_crop(&arducam->sd, cfg, pad);
| ^~~
| |
| struct v4l2_subdev_pad_config *
In file included from ./include/media/v4l2-device.h:13,
from drivers/media/i2c/arducam.c:30:
./include/media/v4l2-subdev.h:1013:31: note: expected ‘struct v4l2_subdev_state *’ but argument is of type ‘struct v4l2_subdev_pad_config *’
1013 | struct v4l2_subdev_state *state,
| ^
drivers/media/i2c/arducam.c: At top level:
drivers/media/i2c/arducam.c:956:20: error: initialization of ‘int (*)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_mbus_code_enum )’ from incompatible pointer type ‘int ()(struct v4l2_subdev , struct v4l2_subdev_pad_config *, struct v4l2_subdev_mbus_code_enum *)’ [-Werror=incompatible-pointer-types]
956 | .enum_mbus_code = arducam_csi2_enum_mbus_code,
| ^
~~~~
drivers/media/i2c/arducam.c:956:20: note: (near initialization for ‘arducam_pad_ops.enum_mbus_code’)
drivers/media/i2c/arducam.c:957:13: error: initialization of ‘int (
)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_format )’ from incompatible pointer type ‘int ()(struct v4l2_subdev , struct v4l2_subdev_pad_config *, struct v4l2_subdev_format *)’ [-Werror=incompatible-pointer-types]
957 | .get_fmt = arducam_csi2_get_fmt,
| ^~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/arducam.c:957:13: note: (near initialization for ‘arducam_pad_ops.get_fmt’)
drivers/media/i2c/arducam.c:958:13: error: initialization of ‘int (
)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_format )’ from incompatible pointer type ‘int ()(struct v4l2_subdev , struct v4l2_subdev_pad_config *, struct v4l2_subdev_format *)’ [-Werror=incompatible-pointer-types]
958 | .set_fmt = arducam_csi2_set_fmt,
| ^~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/arducam.c:958:13: note: (near initialization for ‘arducam_pad_ops.set_fmt’)
drivers/media/i2c/arducam.c:959:21: error: initialization of ‘int (
)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_frame_size_enum )’ from incompatible pointer type ‘int ()(struct v4l2_subdev , struct v4l2_subdev_pad_config *, struct v4l2_subdev_frame_size_enum *)’ [-Werror=incompatible-pointer-types]
959 | .enum_frame_size = arducam_csi2_enum_framesizes,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/arducam.c:959:21: note: (near initialization for ‘arducam_pad_ops.enum_frame_size’)
drivers/media/i2c/arducam.c:960:19: error: initialization of ‘int (
)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_selection )’ from incompatible pointer type ‘int ()(struct v4l2_subdev *, struct v4l2_subdev_pad_config *, struct v4l2_subdev_selection *)’ [-Werror=incompatible-pointer-types]
960 | .get_selection = arducam_get_selection,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/arducam.c:960:19: note: (near initialization for ‘arducam_pad_ops.get_selection’)
drivers/media/i2c/arducam.c: In function ‘arducam_probe’:
drivers/media/i2c/arducam.c:1527:8: error: implicit declaration of function ‘v4l2_async_register_subdev_sensor_common’; did you mean ‘v4l2_async_register_subdev_sensor’? [-Werror=implicit-function-declaration]
1527 | ret = v4l2_async_register_subdev_sensor_common(&arducam->sd);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| v4l2_async_register_subdev_sensor
At top level:
drivers/media/i2c/arducam.c:1130:12: warning: ‘arducam_add_extension_pixformat’ defined but not used [-Wunused-function]
1130 | static int arducam_add_extension_pixformat(struct arducam *priv)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:277: drivers/media/i2c/arducam.o] Error 1
make[2]: *** [scripts/Makefile.build:540: drivers/media/i2c] Error 2
make[1]: *** [scripts/Makefile.build:540: drivers/media] Error 2
make: *** [Makefile:1868: drivers] Error 2
make: *** Waiting for unfinished jobs…

Anybody any ideas? Thanks

Tonio

Try dumping all of the arducam stuff completely. I followed the instructions here:
https://forums.raspberrypi.com/viewtopic.php?t=331213&p=1992004#p1991478

Remove the Arducam adapter board and connect the imx462 camera board directly to the raspberry pi (the cable is quite short).
I started with a fresh Raspberry OS install and upgrade, added dtoverlay=imx290 to /boot/config.txt , rebooted and standard libcamera-vid works fine. No muss, no fuss, no tears.

I encourage Arducam to continue working with Raspberry Pi engineers to merge the drivers. The ease of use for end users will sell many more cameras and improve Arducam’s reputation.

Thank you very much for your information and advice,
I will send your suggestion to my colleagues to see what we can do about it.