gives me:
Error: Could not set address to 0x0c: Device or resource busy
And after I ran the “switch channel” commands, I can’t even take photos with libcamera-still anymore:
Failed to start streaming: Input/output error
ERROR: *** failed to start camera ***
v4l2-ctl -l doesn’t even list the focus_absolute control, and shows no error even in verbose mode. Weirdly, the camera CAN auto-focus on its own via libcamera-still --autofocus. Any idea what’s going on?
Thanks for all the detail. Let’s narrow this down. Can you send me:
Which program is running when the error shows up
A screenshot of the error message
The output of cat /boot/config.txt
Also, can you confirm the I2C bus you’re using is definitely bus 10? That’s the bus the driver installer sets up, so it should match.
One thing to keep in mind: there’s been a change in libcamera recently. It is no longer exposed through /dev/video*, so the control path via v4l2 may not apply the way it used to. Let’s confirm your config before we go further.
thrown right at this line:
fcntl.ioctl(fd, v4l2.VIDIOC_QUERYCTRL, queryctrl)
Also, PrintCamera has no value stored when the driver was installed. There’s no other program running — same error after a fresh reboot. The python script only runs the command that’s printed on the output.
Okay, that helps a lot. A couple of things stand out here.
First, the directories/scripts you’re running don’t look like they match the ones in the link I sent. Please double-check you’re using exactly those files.
Second, I suspect something is off with your config.txt. The specific step for enabling i2c may not have actually been performed — and that step needs a reboot afterward to take effect.
Please try that, and also test whether the cameras work fine when set at the lowest resolution, so we can rule out any issue with the cameras themselves.
I did the config.txt step and rebooted, but it’s the same. i2cset -y 10 0x0c 0x02 0x00 still gives ‘Device or resource busy’.
But now I’m confused. You told me there’s been a change in libcamera, it is no longer from /dev/video*, so the control of v4l2 is no longer used. Yet the updated script you gave me still relies on v4l2 control. Which approach is actually correct to control the device?
Auto-focus still works fine via libcamera-still --autofocus, so the camera itself seems okay.
Because of the libcamera change, the v4l2 control is deprecated now — you need to control the focus through libcamera instead. The libcamera-based control program is here:
For the i2c side, please make sure the config.txt step to enable i2c is applied, then reboot and try again.
If it’s still failing after that, we can do an online remote session. I’ve sent you the remote support details privately, please check your messages.
Set to double channel (single channel 0 and single channel 1)
i2cset -y 10 0x24 0x24 0x01
Set to double channel (single channel 2 and single channel 3)
i2cset -y 10 0x24 0x24 0x11
Set to four in one mode (Default)
i2cset -y 10 0x24 0x24 0x00
And yes, bus 10 is the correct bus — it’s the one the driver installer (install_privariety_pkgs.sh) sets up, matching your configuration.
Then do the config.txt step to enable i2c, reboot, and try again.
To help us further, please provide:
Which program is running
A screenshot of the error message
cat /boot/config.txt
Where we stand: auto-focus works via libcamera-still --autofocus, but manual focus fails both through v4l2 (focus_absolute not listed) and via the Arducam focuser script (Inappropriate ioctl for device at VIDIOC_QUERYCTRL). Arducam confirms the libcamera change — it’s no longer /dev/video*, so v4l2 control is deprecated and you should use the libcamera-based program (RaspberryPi/Motorized_Focus_Camera at master · ArduCAM/RaspberryPi · GitHub). We’ve also updated the focuser script and the matching reference page. If it still fails after applying the config.txt i2c step and rebooting, we’ll go ahead with the remote session.