aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdelkader Boudih <freebsd@seuros.com>2026-07-09 02:52:29 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2026-07-09 02:52:30 +0000
commitd128ddf32e87a672dbbbc26cfece71e241e0ffa0 (patch)
tree434fbbec9f4271d6ce92863455fe70583cbf5651
parent56d4dee82de1b5c8c77d5be79f7bf4183b327b57 (diff)
fwcam: retry ISO enable after re-powering camera
Some IIDC cameras power down the sensor when inactive (e.g. lens cover closed) and reject ISO enable with EIO. Re-power the camera and retry once before failing. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58101
-rw-r--r--sys/dev/firewire/fwcam.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/dev/firewire/fwcam.c b/sys/dev/firewire/fwcam.c
index c5e5cf545fe9..234dd41eedf1 100644
--- a/sys/dev/firewire/fwcam.c
+++ b/sys/dev/firewire/fwcam.c
@@ -429,7 +429,22 @@ fwcam_iso_start(struct fwcam_softc *sc)
}
err = fwcam_write_quadlet(sc, IIDC_ISO_EN, IIDC_ISO_EN_ON);
- if (err) {
+ if (err == EIO) {
+ /*
+ * Cameras with a lens cover might power down the sensor
+ * when the cover is closed and reject streaming requests.
+ * Try to re-power and retry once before giving up.
+ */
+ err = fwcam_power_on(sc);
+ if (err == 0)
+ err = fwcam_write_quadlet(sc, IIDC_ISO_EN,
+ IIDC_ISO_EN_ON);
+ if (err) {
+ device_printf(sc->fd.dev,
+ "ISO enable refused (lens cover closed?)\n");
+ goto fail;
+ }
+ } else if (err) {
device_printf(sc->fd.dev,
"failed to enable ISO: %d\n", err);
goto fail;