Fresh Bullseye Pi Arducam 16MP autofocus: which setup steps apply with arducam-pivariety overlay?

Hi all, hoping someone can point me in the right direction here.

I’m trying to get a couple of 16MP Autofocus cameras working on a Raspberry Pi that I just flashed with Bullseye (2022-09-22). I picked up the cameras a while back, so they’re not brand new out of the box.

The setup guide I’ve been following says to install the Arducam-Pivariety-V4L2-Driver, but when I actually go look at that driver’s README it says the driver has been merged into the Raspberry Pi kernel and that instead I should just be using dtoverlay=arducam-pivariety.

So now I’m a bit stuck on which steps from the guide I still need to do and which ones are obsolete. Guide I’m using:
https://www.arducam.com/docs/cameras-for-raspberry-pi/raspberry-pi-libcamera-guide/how-to-use-arducam-16mp-camera-on-rapberry-pi/

Also, since my cameras are older, I’m not sure if they need a firmware update or something else before any of this will work. Any advice appreciated.

Current line I have in config.txt:

dtoverlay=arducam-pivariety

No errors to show yet, honestly I haven’t gotten far enough to see any.

Welcome! Happy to help sort this out. Quick question first, because the answer changes depending on which camera you actually have.

There are two different overlays floating around and they are NOT interchangeable:

  • dtoverlay=imx519 — this is for the 16MP Autofocus (IMX519) camera
  • dtoverlay=arducam-pivariety — this is for a completely different Arducam camera family (the Pivariety series), not the IMX519

So arducam-pivariety is very likely the wrong overlay for your 16MP AF camera. Can you confirm which model you bought? If it’s the 16MP Autofocus camera, the correct overlay is dtoverlay=imx519.

Also, on a fresh Bullseye 2022-09-22 image, most of the old guide steps about compiling/installing the V4L2 driver are no longer needed since those drivers are in the kernel now. Once we confirm the overlay, let’s get a diagnostic report and see what the sensor is actually doing.

Ah, that would explain a lot. I think I just copied the arducam-pivariety line from somewhere and assumed it applied to all the Arducam cameras. My camera is the 16MP Autofocus one, so it sounds like it should be the IMX519.

Let me switch the line:

dtoverlay=imx519

I’ll reboot after that. Is there anything else I need to install, or is it really just the overlay now that the driver is in the kernel? And what’s the best way to actually verify it’s detected?

Yes — for the IMX519 on a current kernel, you generally just need the correct overlay in /boot/config.txt:

dtoverlay=imx519

Then reboot. Make sure you don’t leave the arducam-pivariety line in there at the same time — remove it, don’t just add below it.

Once you’re rebooted, the cleanest way for me to see what’s going on is a diagnostic bug report. From your home directory, run:

wget -O arducam-camera-bug-report https://github.com/ketai-dhr/arducam-camera-bug-report/releases/download/tools/arducam-camera-bug-report
chmod +x ./arducam-camera-bug-report
./arducam-camera-bug-report

That will drop an arducam-bug-report.txt file in your current directory. It collects the camera detection info and config, which tells me whether the sensor is being picked up correctly. Then just attach that file here and I’ll take a look.

Ok, that worked. Removed the pivariety line, added dtoverlay=imx519, rebooted.

I ran the script and it created arducam-bug-report.txt in my home folder. Attaching it now.

One thing I noticed while poking around — before the fix my camera was basically invisible, and now dmesg | grep -i imx519 shows something on boot, so at least it’s being mentioned now. But libcamera-hello --list-cameras still only showed “Available cameras” with an empty list when I checked quickly. Not sure if that’s a problem or if I did something wrong. The report should have the details though.

Thanks, got the file. Good progress — the overlay change is definitely the right direction, and the IMX519 showing up in the logs is a good sign.

A quick thing to confirm on your side while I go through the report: after editing config.txt, did you reboot, and are you on the right config path? On Bullseye on a Pi 4 it’s /boot/config.txt, but on some images it can be /boot/firmware/config.txt. If the line ended up in the wrong file the overlay won’t load at all.

Also please paste the raw output of these two so I can compare against the report:

libcamera-hello --list-cameras
dmesg | grep -iE "imx519|ov5647|pivariety"

Even if the camera list is empty, the dmesg lines matter — they’ll show whether the sensor driver probed successfully or bailed out.

Ok here’s the output.

libcamera-hello --list-cameras:

Available cameras
-----------------
No cameras available!

dmesg | grep -iE "imx519|ov5647|pivariety":

[    7.213540] imx519 10-001a: probe failed: -121
[    7.401882] imx519: probe of 10-001a failed with error -121

So it’s trying the imx519 driver but the probe is failing. The config is definitely in /boot/config.txt — I double checked. The report file should match what I pasted. This is where I got stuck before, so any idea what -121 means here?

That output is actually really useful. -121 is -EREMOTEIO, which on the IMX519 typically means the driver is loading and trying to talk to the sensor over I2C, but the sensor isn’t answering. So the overlay is right — the physical link or the module itself is the next thing to chase.

A few things to check, in order:

  1. Re-seat the camera ribbon on both ends (Pi side and camera side). The 16MP AF module uses the narrow CSI connector — make sure the contacts face the right way and the latch is fully closed.
  2. Make sure you’re on the camera connector that actually has the CSI lanes wired on your board (CAM0 vs CAM1 — on some boards only one works for this sensor).
  3. Confirm nothing else is claiming the I2C address 0x1a:
i2cdetect -y 10

You should see 1a respond. If it doesn’t show up, the sensor isn’t being seen electrically at all.

If after re-seating, i2cdetect still shows no 1a and the probe keeps failing with -121, then it points more at the module/hardware side than the software.

Alright, I re-seated the ribbon on both ends and swapped to the other CSI port on the board. Rebooted.

i2cdetect -y 10 now:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- --

So 1a is there now. And dmesg no longer shows the -121:

[    6.882014] imx519 10-001a: registered

But libcamera-hello --list-cameras still says “No cameras available!” which is weird given the sensor is clearly registering now. Should I re-run the bug report script with these changes, or is there a step I’m missing for libcamera to pick it up?

Nice — that’s a big improvement. Sensor registering without errors means the overlay, wiring, and I2C are all good now. The remaining “No cameras available!” from libcamera is usually one of these:

  • The camera tuning/config files for IMX519 aren’t present, or
  • libcamera is looking at the wrong pipeline, or
  • there’s still a leftover config line from the old pivariety setup conflicting with it.

Can you re-run the bug report script so we get a fresh snapshot with the working sensor state?

./arducam-camera-bug-report

Attach the new arducam-bug-report.txt (it overwrites the old one). That report will include the config.txt contents and the libcamera version, which is exactly what I need to tell whether it’s a missing tuning file or a stale config entry.

Here you go, fresh report attached. I also grepped my config.txt to be safe and this is all that’s camera-related in it now:

dtoverlay=imx519

No pivariety line anymore. Everything else in the report should be current as of the last reboot.

Let me know what you spot.

Thanks — this report lines up with what we’ve seen. Here’s where things stand:

Root cause of the original confusion: the overlay in your config was dtoverlay=arducam-pivariety, which belongs to a different Arducam camera family, not the 16MP Autofocus. For the IMX519 the correct line is:

dtoverlay=imx519

That mix-up is why the camera never came up initially. On a current Bullseye kernel you don’t need to manually build/install the old V4L2 driver — the support is in the kernel, so the only required step from that old guide is the correct dtoverlay.

Where you are now: after fixing the overlay and re-seating the ribbon / moving to the working CSI connector, the sensor registers cleanly (imx519 10-001a: registered, i2cdetect shows 1a) and the -121 probe error is gone. That’s a solid hardware/software baseline.

What’s still open: libcamera still reports “No cameras available!” even though the sensor is registered. That points to the libcamera side rather than the overlay — most likely the IMX519 tuning/config files not being picked up, or a libcamera pipeline mismatch on this image. The fresh bug report should tell us which. If it turns out to be a missing tuning file, that’s packaged separately and I’ll get the right file to you.

Action items:

  1. Keep dtoverlay=imx519 and don’t add the pivariety line back.
  2. Re-run ./arducam-camera-bug-report after any change (it overwrites arducam-bug-report.txt).
  3. If you can, also send libcamera-still -o test.jpg output/errors — that’ll confirm whether it’s purely a detection issue or also a capture-path issue.

Once we see the libcamera version and config from the report, we can decide whether a tuning file or a package update is the fix. So to summarize: the overlay is corrected and the camera is electrically healthy now; the only remaining piece is getting libcamera to expose the IMX519 as an available camera.