Arducam B0174 init camera status 4099 on Raspberry Pi 4 rev c03115

Hi everyone, hoping someone here can help. We’re rolling out a batch of imaging boxes that use the Arducam module (part B0174) with Raspberry Pi 4s, and I’ve hit what I’m fairly sure is a driver issue on one of the Pis. There’s an infernal number of iterations to the Pi’s system on a chip, and in the past we’ve needed an update from Arducam’s end to keep these working. It looks like that’s happened again.

The board revision on the affected unit is c03115. When I try to bring up the camera I just get:

init camera status 4099

There’s no more detail than that in the output, which is part of why I’m stuck. Has anyone else run into 4099 on a newer Pi 4 rev? I’ve also posted this over on the Arducam forum to try and get more info.

Hi, welcome. Status 4099 during init usually points at the sensor not being detected/initialized properly rather than the app code itself, so let’s narrow it down before assuming it’s the SoC revision.

A few things to start:

  1. Which OS/kernel are you running on the affected Pi? Output of uname -a would help.
  2. What does cat /proc/cpuinfo | grep Revision report on that specific board?
  3. Can you share the exact command you’re running when you hit the 4099, and the full output around it (the lines just before the failure often matter)?
  4. Is the failing unit using the same cabling and the same module as the units that work?

Also, since B0174 is a global-shutter camera (OV series sensor), the init path is a bit more sensitive to the DT overlay and driver version. Can you confirm whether this unit was imaged from the same SD card image as the working boxes, or set up separately?

Thanks. Here’s what I’ve got:

uname -a
Linux imager-07 5.10.63-v8+ #1486 SMP PREEMPT aarch64 GNU/Linux
cat /proc/cpuinfo | grep Revision
Revision : c03115

The command that fails is just our normal bring-up script that calls into the camera library. Output stops right at:

init camera status 4099

No lines before it — it fails at init and bails.

Same cabling as the working units, same module part number (B0174), and this box was imaged from the same SD card image as the others. That’s the weird part — identical setup, only this board rev gives me trouble.

Thanks, that’s useful. Two things stand out:

  1. 5.10.63-v8+ is an older kernel. The c03115 boards ship with a newer SoC stepping, and there was a run of driver changes tied to that. If your SD image was built against an older kernel/driver combo, the camera init can fail on the newer boards even though everything else looks identical.

  2. Revision c03115 = a Pi 4 with 4GB RAM on the newer board layout. That’s exactly the kind of rev where the “iterations to the SoC” you mentioned bite people.

Before we go further, can you run this on the failing unit and paste the output:

dmesg | grep -iE 'ov|arducam|i2c|camera|vchi'

And also confirm which driver/overlay you’re loading (from /boot/config.txt)? I want to see whether the sensor shows up on I2C at all, or whether it’s dying later in the init sequence.

Here’s the dmesg grep:

[    3.210114] i2c i2c-1: Added multiplexed i2c bus 11
[    3.455882] bcm2835-codec bcm2835-codec: Device registered as /dev/video10
[    8.771034] arducam: loading out-of-tree module taints kernel.
[    8.912550] arducam: init failed, status 4099

And from /boot/config.txt:

dtoverlay=arducam-b0174

So the sensor doesn’t even show up before the arducam module init fails. Same overlay on the working boxes.

That confirms it’s failing inside the arducam module before the sensor is fully probed, which lines up with the SoC-revision driver issue you suspected.

The overlay name is the same, but the module itself is what’s diverging between board revs. On the c03115 boards the timing/probe sequence changed enough that the older out-of-tree arducam module won’t initialize.

I’ve replied to your Arducam forum thread with the specifics on the updated module/driver for the newer rev, so check there for the exact package to use — the thread is the one titled about ArduSTILL failing with init camera status 4099 on board revision c03115. It’s the same B0174 + Pi 4 scenario.

In the meantime, can you also run vcgencmd get_config int | grep -i i2c and confirm i2c is actually enabled on this unit? Just want to rule out a config difference before we blame the driver outright.

Ran it:

vcgencmd get_config int | grep -i i2c
i2c_arm=on

So I2C is enabled, same as the others. That’s fine.

I’ll go look at the forum thread you replied in and try the updated package. Is the process just replacing the module, or do I need to rebuild the overlay too?

Good — I2C being enabled rules out the simple config stuff, so we’re down to the driver/SoC revision mismatch.

For the update, you’ll want to swap in the newer arducam driver package for the c03115 rev — the overlay name stays the same, so you shouldn’t need to rewrite config.txt. After installing, reboot and check dmesg | grep -i arducam again. You’re looking for the init line to complete instead of stopping at 4099.

I’ve also sent you the specific package details via private message so we don’t drop a big blob of links into the thread — check your messages and give it a go.

If it still fails after the swap, post the new dmesg output here and we’ll keep digging.

Update: after installing the newer driver and rebooting, the init got further but I still get:

[    9.103220] arducam: init failed, status 4099

Same status. I did confirm the new module loaded (dmesg shows the out-of-tree module taint line as before). Sensor still doesn’t appear before the fail. So the update alone didn’t clear it on this unit.

Okay, so the updated driver alone isn’t enough on that specific board — that’s an important data point, thanks for testing it.

When you swapped drivers, did you fully remove the old module first, or install over the top? If both are present, you can get the old one loading and producing the same 4099 even though the new files exist. Run:

lsmod | grep arducam
modinfo arducam | grep -i version

and also check dmesg timestamps to see which module instance is actually binding. If the version string is still the old one, we need to purge and reinstall cleanly.

This is exactly the kind of thing your forum thread is tracking, so keep the results there too — I’ve asked for your thread to get the follow-up so the SoC-rev case stays documented for others on c03115.

Checked:

modinfo arducam | grep -i version
version: 1.0.0

Hmm, that doesn’t look like the new version at all — looks like the old module is still what’s bound. So the install probably didn’t take cleanly. I’ll purge and reinstall properly and report back.

For anyone else landing here: B0174 + Pi 4 on board rev c03115, init camera status 4099, and the fix path appears to be the newer arducam driver package — but only if you remove the old module first. I’ll confirm once I’ve done the clean reinstall.

That matches what I’d expect — version 1.0.0 is the old module, so the new files were sitting there unused. Clean removal first is the key step here.

Summary of where this stands:

  • Symptom: init camera status 4099 at bring-up, sensor never fully probes.
  • Board: Pi 4, revision c03115 (newer SoC stepping).
  • Module: Arducam B0174.
  • Cause: out-of-tree arducam driver not matching the newer SoC rev; the old module stays bound even after copying new files over.
  • Failed attempt: installing the updated driver over the existing one — modinfo still reported v1.0.0, init still failed with 4099.
  • Next step: purge the old module completely, reinstall the updated driver, reboot, then re-check dmesg | grep -i arducam and modinfo arducam to confirm the new version is the one loading.

Keep the results in your Arducam forum thread so the c03115 case is documented end-to-end. Post the new modinfo version and dmesg here once you’ve done the clean reinstall and we’ll take it from there.