Hi everyone, I’m having trouble getting the focus to work on my Arducam IMX519 motorized focus camera. The autofocus doesn’t work at all, and neither does manual focus.
I tried following the official setup instructions but ran into an error during installation. I’m attaching screenshots of what I’m seeing:
Basically the camera streams video but I can’t get the lens to focus at all. Has anyone run into this before? What am I doing wrong?
Looking at your screenshots, I can see the issue. The IMX519 low-speed driver installation is failing because that driver was designed specifically for the Bullseye OS release. Based on what I’m seeing, you’re not running Bullseye — that’s why the installation script is throwing errors.
The correct approach for your OS version is to use the device tree overlay dtoverlay=imx519 instead of the low-speed driver, along with Arducam’s custom libcamera packages.
Here’s what to do:
Add dtoverlay=imx519 to your /boot/config.txt (or /boot/firmware/config.txt depending on your Pi model) and reboot.
After reboot, run:
rpicam-still -t 0
and post the full log output here so we can verify the camera is being detected properly.
If you haven’t already installed Arducam’s custom libcamera packages, run these:
Found it! The problem is right there in your dtoverlay line:
dtoverlay=imx519,cam0,vcm=off
You’ve got vcm=off appended, which explicitly disables the Voice Coil Motor (VCM) — that’s the AK7375 focus motor on your IMX519 module. So the sensor itself works fine (as the log shows), but the focus motor is being told to stay completely off. Autofocus and manual focus will never work with that parameter set.
Change your config.txt line to just:
dtoverlay=imx519,cam0
(Remove ,vcm=off entirely.) Then reboot and try again. The log from rpicam-still should look different once the VCM is actually initialized.
So it’s trying to talk to the AK7375 focus motor at i2c address 0x0c but failing to open /dev/v4l-subdev3. The lens gets disabled entirely as a result.
I’ve attached a few more screenshots showing my current setup:
Any idea why the AK7375 V4L2 subdevice is failing to open? Could this be a kernel or overlay issue?
Alright, so the situation now is: with vcm=off removed, libcamera is at least trying to initialize the AK7375 lens driver, but it’s failing when attempting to open /dev/v4l-subdev3. The error is “Invalid argument,” which suggests the kernel is exposing the subdevice node but the V4L2 driver can’t communicate with it properly.
A few things to check and try:
Verify the AK7375 is actually present on the i2c bus. Run:
i2cdetect -y 10
(Your camera is on i2c bus 10 based on the log — imx519 10-001a). You should see the sensor at 0x1a and the AK7375 at 0x0c. If 0x0c doesn’t show up, the lens controller isn’t being detected at the hardware level.
Check what V4L2 subdevices are available:
ls -la /dev/v4l-subdev*
Then check what each one is:
for dev in /dev/v4l-subdev*; do echo "=== $dev ==="; v4l2-ctl -d $dev --info 2>&1; done
Check your kernel version — uname -a. There have been some changes to how the RP1 i2c and VCM subdevices are handled on Pi 5 across different kernel releases. The ak7375 driver on the imx519 overlay may need a kernel that includes the proper VCM device tree binding for the RP1.
At this stage the issue appears to be that the AK7375 V4L2 subdevice registration is broken at the kernel/driver level — libcamera sees the device node exists but can’t open it, so it disables the lens entirely and falls back to sensor-only operation. This is why focus still doesn’t work even after removing vcm=off.