Hawkeye 64MP autofocus stopped working after 2 weeks of continuous use on Raspberry Pi

Hey everyone, hoping someone here can help me out. I’ve got an Arducam Hawkeye 64MP camera connected to a Raspberry Pi (aarch64), and the autofocus has completely stopped working after about two weeks of continuous use. I’ve been capturing one frame every 5 minutes and it was working fine until suddenly all the images are just blurry now — no matter what focus settings I try.

I haven’t moved the camera or changed anything software-wise before this started happening. Already tried reinstalling the drivers, downgrading the kernel to 6.6.28-v8+, and messing around with different focus settings via rpicam-hello — everything produces the exact same blurry output. The camera still streams video, it’s just stuck out of focus. Anyone seen this before?

Thanks for the detailed report. Let’s run through a few diagnostic steps to narrow down whether this is a software/driver issue or a hardware fault. Let’s start by getting you onto a clean software baseline.

First, run these commands to reinstall the libcamera packages from our repo:

wget -O install_pivariety_pkgs.sh https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/install_script/install_pivariety_pkgs.sh
chmod +x install_pivariety_pkgs.sh
./install_pivariety_pkgs.sh -p libcamera_dev
./install_pivariety_pkgs.sh -p libcamera_apps

Then do a full reboot of the Pi. Let me know what versions you end up with (dpkg -l | grep libcamera would be useful to confirm) and whether you notice anything unusual during the install.

Alright, ran through those steps. Script was already on my system so I just executed the two install commands. One thing I noticed — during installation I got this warning:

Download is performed unsandboxed as root as file '/home/tekin/camera/support/libcamera-dev_0.6.0+rpt20251203-2_arm64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Both packages installed fine otherwise. Rebooted. Here’s what I’ve got now:

libcamera-dev 0.6.0+rpt20251203-2 arm64
libcamera-ipa:arm64 0.6.0+rpt20251203-2 arm64
libcamera-tools 0.6.0+rpt20251202-1 arm64
libcamera-v4l2:arm64 0.6.0+rpt20251202-1 arm64
libcamera0.6:arm64 0.6.0+rpt20251203-2 arm64
libspa-0.2-libcamera:arm64 1.4.2-1+rpt2 arm64
pipewire-libcamera 1.4.2-1+rpt2 all
python3-libcamera 0.6.0+rpt20251202-1 arm64
rpicam-apps 1.11.0-1 all
rpicam-apps-core 1.11.0-1 arm64

Still blurry though. What’s next?

That apt permission warning is harmless — it’s just because the script downloads to a user directory that the _apt sandbox user can’t access. The packages installed correctly, so we’re good on the software baseline.

Now let’s test autofocus behavior. Run:

rpicam-still -t 0 --qt-preview

Watch the camera lens closely while the preview is running. Do you hear or see the lens trying to move at all when it initializes? Also, can you share the full terminal output from that command? I want to see how the pipeline is configuring everything.

Here’s the full output from rpicam-still -t 0 --qt-preview:

[0:01:04.033942498] [3048] INFO Camera camera_manager.cpp:340 libcamera v0.6.0+rpt20251202+26-177de571-dirty (2025-12-03T09:12:19GMT)
[0:01:04.086517887] [3053] INFO IPAProxy ipa_proxy.cpp:180 Using tuning file /usr/share/libcamera/ipa/rpi/vc4/arducam_64mp.json
[0:01:04.090561646] [3053] INFO Camera camera_manager.cpp:223 Adding camera '/base/soc/i2c0mux/i2c@1/arducam_64mp@1a' for pipeline handler rpi/vc4
[0:01:04.090672739] [3053] INFO RPI vc4.cpp:453 Registered camera /base/soc/i2c0mux/i2c@1/arducam_64mp@1a to Unicam device /dev/media2 and ISP device /dev/media4
[0:01:04.090753387] [3053] INFO RPI pipeline_base.cpp:1150 Using configuration file '/usr/share/libcamera/pipeline/rpi/vc4/arducam_64mp.yaml'
Made QT preview window
Mode selection for 4624:3472:12:P
    SRGGB10_CSI2P,1280x720/0 - Score: 13359.2
    SRGGB10_CSI2P,1920x1080/0 - Score: 11359.2
    SRGGB10_CSI2P,2312x1736/0 - Score: 9096
    SRGGB10_CSI2P,3840x2160/0 - Score: 5359.24
    SRGGB10_CSI2P,4624x3472/0 - Score: 1000
    SRGGB10_CSI2P,8000x6000/0 - Score: 2476.58
    SRGGB10_CSI2P,9152x6944/0 - Score: 3041.47
Stream configuration adjusted
[0:01:04.947486979] [3048] INFO Camera camera.cpp:1215 configuring streams: (0) 4624x3472-YUV420/sYCC (1) 4624x3472-SRGGB10_CSI2P/RAW
[0:01:04.947967053] [3053] INFO RPI vc4.cpp:628 Sensor: /base/soc/i2c0mux/i2c@1/arducam_64mp@1a - Selected sensor format: 4624x3472-SRGGB10_1X10/RAW - Selected unicam format: 4624x3472-pRAA/RAW

The preview window opens and I get a live feed, but it’s completely out of focus. I watched the lens closely — no movement at all, no sound, nothing. The camera initializes fine, streams are configured, but the focus motor doesn’t seem to engage at any point.

Good data, thanks. The log shows the camera is initializing properly — right tuning file, right pipeline config, mode selection is working. But the fact that the lens doesn’t budge at all is concerning.

Let’s do the most important test — we’re going to bypass autofocus entirely and try to command the focus motor directly. This will tell us whether the VCM is even capable of responding. Run:

rpicam-still -t 0 --autofocus-mode manual -k --qt-preview

Once the preview is up, use your keyboard arrow keys to manually step the lens position. The reference for manual focus controls is here: libcamera and rpicam-apps - Arducam Wiki

Key question: when you press the up/down arrow keys, does the image focus change at all? And please share the full terminal output — I want to see whether the lens position commands are even being sent through the pipeline.

Okay, this is pretty telling. Here’s the full output from the manual focus test:

[0:03:13.127221131] [5551] INFO Camera camera_manager.cpp:340 libcamera v0.6.0+rpt20251202+26-177de571-dirty (2025-12-03T09:12:19GMT)
[0:03:13.173936629] [5554] INFO IPAProxy ipa_proxy.cpp:180 Using tuning file /usr/share/libcamera/ipa/rpi/vc4/arducam_64mp.json
[0:03:13.178216940] [5554] INFO Camera camera_manager.cpp:223 Adding camera '/base/soc/i2c0mux/i2c@1/arducam_64mp@1a' for pipeline handler rpi/vc4
[0:03:13.178346755] [5554] INFO RPI vc4.cpp:453 Registered camera /base/soc/i2c0mux/i2c@1/arducam_64mp@1a to Unicam device /dev/media3 and ISP device /dev/media4
[0:03:13.178418995] [5554] INFO RPI pipeline_base.cpp:1150 Using configuration file '/usr/share/libcamera/pipeline/rpi/vc4/arducam_64mp.yaml'
Mode selection for 4624:3472:12:P
    SRGGB10_CSI2P,1280x720/0 - Score: 13359.2
    SRGGB10_CSI2P,1920x1080/0 - Score: 11359.2
    SRGGB10_CSI2P,2312x1736/0 - Score: 9096
    SRGGB10_CSI2P,3840x2160/0 - Score: 5359.24
    SRGGB10_CSI2P,4624x3472/0 - Score: 1000
    SRGGB10_CSI2P,8000x6000/0 - Score: 2476.58
    SRGGB10_CSI2P,9152x6944/0 - Score: 3041.47
Stream configuration adjusted
[0:03:13.456460032] [5551] INFO Camera camera.cpp:1215 configuring streams: (0) 4624x3472-YUV420/sYCC (1) 4624x3472-SRGGB10_CSI2P/RAW
[0:03:13.457281935] [5554] INFO RPI vc4.cpp:628 Sensor: /base/soc/i2c0mux/i2c@1/arducam_64mp@1a - Selected sensor format: 4624x3472-SRGGB10_1X10/RAW - Selected unicam format: 4624x3472-pRAA/RAW

And here’s what I saw in the console as I pressed arrow keys and other controls:

f
AfTrigger
a
Using crop (0, 0)/9248x6944 throughout
target_lens_position: 1, scale: 0, offset_x: 0
target_lens_position: 2, scale: 0, offset_x: 0
target_lens_position: 3, scale: 0, offset_x: 0
target_lens_position: 4, scale: 0, offset_x: 0
target_lens_position: 5, scale: 0, offset_x: 0
target_lens_position: 6, scale: 0, offset_x: 0
target_lens_position: 7, scale: 0, offset_x: 0

The lens position values are clearly incrementing with each keypress, so the software thinks it’s moving the focus. But physically — absolutely nothing. The lens doesn’t move at all, no sound, no change in the preview image. It’s like the commands are going into a black hole.

Thanks for running through all of that — this is exactly the kind of data we needed to pin this down. Let me summarize what the diagnostics are telling us:

What’s working correctly:

  • libcamera stack (v0.6.0+rpt20251202) is properly installed and initializing
  • Pipeline handler (rpi/vc4) is correctly detecting and registering the camera on the I2C bus
  • The tuning file (arducam_64mp.json) and pipeline config (arducam_64mp.yaml) are being loaded
  • Mode selection and stream configuration are completing without errors
  • Manual focus commands are being accepted by libcamera and the target_lens_position values (1 through 7) are being transmitted through the pipeline

What’s not working:

  • Despite valid software commands reaching the driver, the focus motor produces zero physical response — no lens movement, no sound, no change in the preview image at any lens position value

Conclusion: This points to a hardware failure of the VCM (Voice Coil Motor) / focus actuator in the Hawkeye 64MP module. The software-to-driver path is intact and functioning — the commands are being sent. But the motor on the other end simply isn’t responding. This isn’t a driver issue, a kernel version problem, or a software misconfiguration. The focus mechanism has failed mechanically.

Unfortunately there’s no software fix for a dead focus motor. The camera module itself will need to be replaced.