From nobody Wed Jul 8 05:42:04 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gw6Rc614Fz6kkQt for ; Wed, 08 Jul 2026 05:42:04 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gw6Rc5Dzkz3wyR for ; Wed, 08 Jul 2026 05:42:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783489324; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4LUXOZBe2+w4EiUKigbWBD1VqgZ7h+4GfgyvAHCYxBY=; b=fWSrR3WibNsqKv+xAq7tkyyFG/qnOoUksI+li9lGUFyZnlPeyO+RKoZJ5PXNLOJOgTW8O4 oMAru3YKgY18N4sjOPYupjRL27941h+Eqi9ZAV1Qvl98YkTkUGbJcp3drKok+wRNvRmmJ3 HUecNxuwB2wJzAkUUh+pWhXGhJSqF5dm9zfjiGHo2v2TPEdzGi+dzYEE2Lw5+qN7zMzD5F SXGNe/Tn9R7+WFIYuKPav6v+STLrKYlJ+4LHVbFbaDZM8P4Bk5DBJ4bO6COELAT1iJ8PXZ Q5g894e7vFhKMS5jtnrfkFX3j1QfXUfXY5NwYYSKFIUpSfj83jHOyI/63thfzw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783489324; a=rsa-sha256; cv=none; b=KNY2CPAObSyaylc9760zshCpLiCD+QZ3J2JQ5gD5dJ1xlzgIjRWKZxtlXb12pFMU1dbctY IEujFM8ctLfptvyviGQYwZhNLUT/8xm/hPPEEZ+sacbgZk0lNm7cvOpHvvjTt/tQ+nv3dc tPxqWjPDMLAgBe5KV9LJrALqSLWOuxZEgGYJao02EI3vjDpmRZb2ePCD38FaBEQ9DpESCH gVEdzJc7J+TtBTohGbB1v+xnFjKCow2EXzPCBoKqyv0b+dSd9ixxxYdEMXszCP11LnvUWT Ka3XsdyVWqvgkbd4AhNmPs+CHH05mjs4zFQ1Z88zd1P5dmT0q6zhNkK5gRUFyA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783489324; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4LUXOZBe2+w4EiUKigbWBD1VqgZ7h+4GfgyvAHCYxBY=; b=ProVT2gY8kIGqjPayWWV72q7m7ncwXZ2bX/rNQrphlU4CNCp1GqRyJuuVTHGNwzoNs0qDD 2LP0kRHTysLVkSpQp+XAEvunJ9bWr9/szRIkJbKONWUGOM6nkpHoGXGKc3rcotJVRXbVHZ eLyDs8mDzlxR2anro4HuR+n71qv22dFekLElQNtbQICD4l/xaCSJ4txS4RHyso48uAlk/0 yzRvFhSCZZK35ukry8YKH6T+R70Rb6oHyWhGdSFDyH7dtHXk59JBUvnEDQhAwklBJhP//j ExWTb4PJCyJg7KCg6xHkB/icFEuRpJfA04tOR3P5F/3gVkV+om6aMVJeR97+Xw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gw6Rc4Bqhz177B for ; Wed, 08 Jul 2026 05:42:04 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38d5c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 08 Jul 2026 05:42:04 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: f4825e91cf77 - main - fwcam: add dynamic resolution and frame rate support List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f4825e91cf77d6f0fa6c8d8407956e9e1c52f2df Auto-Submitted: auto-generated Date: Wed, 08 Jul 2026 05:42:04 +0000 Message-Id: <6a4de32c.38d5c.3773c47e@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=f4825e91cf77d6f0fa6c8d8407956e9e1c52f2df commit f4825e91cf77d6f0fa6c8d8407956e9e1c52f2df Author: Abdelkader Boudih AuthorDate: 2026-07-08 05:31:03 +0000 Commit: Adrian Chadd CommitDate: 2026-07-08 05:32:43 +0000 fwcam: add dynamic resolution and frame rate support Read V_MODE_INQ and V_RATE_INQ registers for all supported formats during probe, caching the camera's actual capabilities. Use these to validate SMODE ioctl requests before writing to the camera. Writing an unsupported combination caused the camera to stop responding, requiring a physical power cycle. Tested with: Apple iSight (external FireWire) Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58090 --- sys/dev/firewire/fwcam.c | 33 ++++++++++++++++++++++++++++++--- sys/dev/firewire/fwcam.h | 2 ++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/sys/dev/firewire/fwcam.c b/sys/dev/firewire/fwcam.c index 38a99c359c18..752558a1ecea 100644 --- a/sys/dev/firewire/fwcam.c +++ b/sys/dev/firewire/fwcam.c @@ -173,7 +173,7 @@ fwcam_format_name(int format) static int fwcam_read_capabilities(struct fwcam_softc *sc) { - int err; + int err, f, m; err = fwcam_read_quadlet(sc, IIDC_V_FORMAT_INQ, &sc->formats); if (err) { @@ -189,6 +189,30 @@ fwcam_read_capabilities(struct fwcam_softc *sc) return (err); } + /* Read mode and rate inquiry registers for each supported format */ + for (f = 0; f < 8; f++) { + if (!(sc->formats & (1 << (31 - f)))) { + sc->modes[f] = 0; + continue; + } + err = fwcam_read_quadlet(sc, IIDC_V_MODE_INQ(f), + &sc->modes[f]); + if (err) { + sc->modes[f] = 0; + continue; + } + for (m = 0; m < 8; m++) { + if (!(sc->modes[f] & (1 << (31 - m)))) { + sc->rates[f][m] = 0; + continue; + } + err = fwcam_read_quadlet(sc, IIDC_V_RATE_INQ(f, m), + &sc->rates[f][m]); + if (err) + sc->rates[f][m] = 0; + } + } + err = fwcam_read_quadlet(sc, IIDC_FEATURE_HI_INQ, &sc->features_hi); if (err) sc->features_hi = 0; @@ -815,10 +839,13 @@ fwcam_cdev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, if (mode->format > 7 || mode->mode > 7 || mode->framerate > 7) return (EINVAL); - if (mode->format != IIDC_FMT_VGA) - return (EINVAL); if (!(sc->formats & (1 << (31 - mode->format)))) return (EINVAL); + if (!(sc->modes[mode->format] & (1 << (31 - mode->mode)))) + return (EINVAL); + if (!(sc->rates[mode->format][mode->mode] & + (1 << (31 - mode->framerate)))) + return (EINVAL); FWCAM_LOCK(sc); if (sc->state == FWCAM_STATE_DETACHING) { diff --git a/sys/dev/firewire/fwcam.h b/sys/dev/firewire/fwcam.h index dcc871f2a249..ac72c8609f13 100644 --- a/sys/dev/firewire/fwcam.h +++ b/sys/dev/firewire/fwcam.h @@ -225,6 +225,8 @@ struct fwcam_softc { uint32_t basic_func; /* BASIC_FUNC_INQ */ uint32_t features_hi; /* FEATURE_HI_INQ */ uint32_t features_lo; /* FEATURE_LO_INQ */ + uint32_t modes[8]; /* V_MODE_INQ per format */ + uint32_t rates[8][8]; /* V_RATE_INQ per format/mode */ /* Current settings */ uint8_t cur_format;