AC2-202240 OV9281 global shutter CSI camera shows no v4l2 controls on Raspberry Pi 4

Hi everyone, I’m trying to switch my sensor setup from a monochrome global-shutter USB camera over to the CSI interface on an Arducam AC2-202240 (OV9281 global shutter) connected to a Raspberry Pi 4. I followed the guide here:
https://docs.arducam.com/Raspberry-Pi-Camera/Native-camera/Global-Shutter/1MP-OV9281-OV9282/#bookwormbullseye-os-pi-4

I’m using the original cable as delivered at the camera end (the contact hasn’t been opened). But I’ve never managed to get it working. When I run:

v4l2-ctl -d /dev/video0 --list-ctrls

…it returns nothing at all. I want to know: does this camera actually support the v4l2 driver 100%? Any pointers would be appreciated.

Welcome to the forum. Before I can analyze further, could you post a couple of photos of the hardware connection — one at the Raspberry Pi end and one at the camera end? Also, please generate and attach the diagnostic bug report so I can see what’s happening on the system.

Steps:

  1. Reboot the device.
  2. Download the bug report tool:
wget -O arducam-camera-bug-report https://github.com/Dion4cen/arducam-camera-bug-report/releases/download/Tool/arducam-camera-bug-report
  1. Make it executable:
chmod +x ./arducam-camera-bug-report
  1. Run it:
./arducam-camera-bug-report

This will create an arducam-bug-report.txt file in the current directory. Attach that file along with the photos.

Thanks for the reply. Here are the details and the requested files.

Environment:

  • Platform: Raspberry Pi 4
  • Product: AC2-202240 OV9281 global shutter
  • Original cable connected at the camera as delivered (contact not opened)
  • Currently using a monochrome global-shutter USB cam for the sensor application
  • Guide followed: 1MP OV9281 - Arducam Wiki

For comparison, here is what my working USB cam reports for v4l2 controls:

bsc@localhost:~ $ v4l2-ctl -d /dev/video1 --list-ctrls

User Controls

brightness 0x00980900 (int)    : min=-64 max=64 step=1 default=4 value=4
contrast 0x00980901 (int)    : min=0 max=95 step=1 default=20 value=20
saturation 0x00980902 (int)    : min=0 max=100 step=1 default=0 value=0
hue 0x00980903 (int)    : min=-2000 max=2000 step=1 default=0 value=3
white_balance_automatic 0x0098090c (bool)   : default=1 value=1
gamma 0x00980910 (int)    : min=100 max=300 step=1 default=100 value=100
gain 0x00980913 (int)    : min=16 max=255 step=1 default=32 value=32
power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=2
white_balance_temperature 0x0098091a (int)    : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int)    : min=0 max=7 step=1 default=0 value=0
backlight_compensation 0x0098091c (int)    : min=28 max=201 step=1 default=112 value=112

Camera Controls

auto_exposure 0x009a0901 (menu)   : min=0 max=3 default=3 value=1
exposure_time_absolute 0x009a0902 (int)    : min=1 max=8188 step=1 default=156 value=750
pan_absolute 0x009a0908 (int)    : min=-648000 max=648000 step=3600 default=0 value=0
tilt_absolute 0x009a0909 (int)    : min=-648000 max=648000 step=3600 default=0 value=0
zoom_absolute 0x009a090d (int)    : min=0 max=60 step=1 default=0 value=0

I’ve tried chatGPT and Google but haven’t found a solution.

Photos of the connection:
camera end
pi end

Bug report: arducam-bug-report.txt

Thanks, I’ve gone through the photos and the bug report. Good news: the camera itself is working fine under libcamera. The reason v4l2-ctl --list-ctrls shows nothing for the CSI camera is that libcamera is the supported control path for this module, not v4l2. Please use the libcamera parameters to control the module. The rpicam-still documentation covers the options:
https://www.raspberrypi.com/documentation/computers/camera_software.html#rpicam-still

That makes sense on the libcamera side — I’ve confirmed libcamera works with the camera. But the documentation for this CAM also says it supports v4l2 (Video4Linux2). My application depends on v4l2. If libcamera is confirmed working, why is the documented v4l2 support not working when I actually try to use it?

Right, the hardware is technically compatible with the v4l2 API, but Arducam’s development and support focus is on libcamera. The v4l2 implementation is not actively maintained, so v4l2 functionality isn’t guaranteed and we don’t provide dedicated troubleshooting for v4l2-specific issues. For projects with Arducam camera modules, I’d recommend sticking with libcamera — that’s the configuration we test extensively and officially support.