RPi kernel 64-bit compilation for RPi4 failed with Arducam-Pivariety-V4L2-Driver patch.
Kernel source : tag 1.20220331 (5.15.32-v8)
Arducam-Pivariety-V4L2-Driver : ed6bb5e59500611b7748b8de5cccd7a238ad9fe6
Compilation commands:
cd linux
patch -p1 -i ../Arducam-Pivariety-V4L2-Driver/patchs/arducam_driver.patch
KERNEL=kernel8
make bcm2711_defconfig
make -j4 Image modules dtbs
The errors :
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[2]: *** Waiting for unfinished jobs…
make[1]: *** [scripts/Makefile.build:540: drivers/media] Error 2
make: *** [Makefile:1868: drivers] Error 2
make: *** Waiting for unfinished jobs…