From nobody Wed Jul 8 05:42:06 2026 X-Original-To: dev-commits-src-all@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 4gw6Rh0l9Vz6kkdr for ; Wed, 08 Jul 2026 05:42:08 +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 4gw6Rf6w5zz3wvv for ; Wed, 08 Jul 2026 05:42:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783489327; 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=H5oRxpDcRUgCas4mxIL8ztLbBdZXxJjI1DL2U1yRK5c=; b=ZDkGBDUYC6wm5ia8BYJ5eM/lp3/LB2NuiUMpC3ovRm5AonwPOABMSKjxU4GzyeSWssQ4I4 XNiadf0mv5GAiSYbQqS8OhsJ35cffVhCmAGM7909U7eTAPUYjcaW1xzgzReejd9Qz2HPmv 3BUAK25fCmJDV43dT4hBlmAjMFOiZdLNhIhuYEQbPG6vXIsvTJ4ocn8GmKuHiujRG5Df0Y 6g4iA9RagnQl/nT5ydFnVkxfwrqkWS0iUkymxx/Q0JsQBdMa8mEf5md/bRAaQgGMpalhWt 4TWR0VPuom2ttcm8/DAaiXXm1JL5QK6m6NaC+BhibsmkC6rs3CLAFb6xsfHaxQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783489327; a=rsa-sha256; cv=none; b=FEsGf9T5rglACaVbGp7IYAQPhURGL0ESLqorMASy0DwbVM3XjHM1T3qJPYmjXFB9NT80xQ ndmV1A5JgPTC7fH4SxYxrH8HF4UWepQf5/eDNYcv8CXfxrO1qh9TtM8fWEWtlpAkRbRIis OTI9ciOzdpi9hhU6vDppxX6NUgGzftJzMPTaO3fLGbF/CqlVzvGg/2j3V57kFCfVuOzQo7 Tbcr05QAzwZzNMh0qDidh6A0KCm9rOfVERpuySP4oP+jUv7Q6LwGt/ZOGZAJ2EhodD0EwC /VnNjmFJvHUJPPYIbbzXpzQVKMd/9V4LtkQ7I/YPxravV2ldclH3TIkI5bkdDg== 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=1783489327; 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=H5oRxpDcRUgCas4mxIL8ztLbBdZXxJjI1DL2U1yRK5c=; b=pQGLPiDgPsGnAucS3Jv+lxewWP6y8WXiisIITprA5XQgSHkIDVtH4UtOPOOXLxncX6LtiW Rl9Utxjg0YCif6MB173EaVaS5TYAUN1+N7ZrB+7/7NAgPDKNTs1KWOSFRNEaQiRDw6BSgv 0c41KbsAZI6F/7lLKWYZdJtuZoM8IEwPlBJgxtFbbK26ilcxn7/Q8tpd+/avI5iBFfvEVi ml4JSFIPZ4A8Yudea8bv0WpO1lIFgGNQVq1P4sCPj4NnkfOcNFOJC1kHqkMz6taahf18SE e5O48szXWQR1k2jqGx4z/3/jeFYZ5Qu8RgP3LAH4VPhs5m/3h99XlMzzucJ1UQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gw6Rf5kglz172S for ; Wed, 08 Jul 2026 05:42:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3a8b5 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 08 Jul 2026 05:42:06 +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: 84044a77a620 - main - fwcam: write video mode registers before enabling ISO streaming List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: 84044a77a620751d104f772345be66445ebe4fe0 Auto-Submitted: auto-generated Date: Wed, 08 Jul 2026 05:42:06 +0000 Message-Id: <6a4de32e.3a8b5.ae93d4b@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=84044a77a620751d104f772345be66445ebe4fe0 commit 84044a77a620751d104f772345be66445ebe4fe0 Author: Abdelkader Boudih AuthorDate: 2026-07-08 05:31:32 +0000 Commit: Adrian Chadd CommitDate: 2026-07-08 05:32:44 +0000 fwcam: write video mode registers before enabling ISO streaming The IIDC spec (s3.1) requires the video mode to be programmed before ISO enable. Without this, cameras that power up with invalid default mode/rate combinations reject the ISO_EN write. This can happen when the firmware of teh camera is outdated or vendor never updated it. Differential Revision: https://reviews.freebsd.org/D58092 --- sys/dev/firewire/fwcam.c | 40 +++++++++++++++++++++++++++++++++++++--- sys/dev/firewire/fwcam.h | 7 +++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/sys/dev/firewire/fwcam.c b/sys/dev/firewire/fwcam.c index 251451bc289e..226295154e6e 100644 --- a/sys/dev/firewire/fwcam.c +++ b/sys/dev/firewire/fwcam.c @@ -406,6 +406,40 @@ fwcam_iso_start(struct fwcam_softc *sc) sc->frame_ready = 0; sc->frame_dropped = 0; + /* IIDC spec s3.1: set video mode registers before ISO enable */ + err = fwcam_write_quadlet(sc, IIDC_CUR_V_FORMAT, + (uint32_t)sc->cur_format << IIDC_CUR_V_SHIFT); + if (err) { + device_printf(sc->fd.dev, + "failed to set CUR_V_FORMAT: %d\n", err); + goto fail; + } + err = fwcam_write_quadlet(sc, IIDC_CUR_V_MODE, + (uint32_t)sc->cur_mode << IIDC_CUR_V_SHIFT); + if (err) { + device_printf(sc->fd.dev, + "failed to set CUR_V_MODE: %d\n", err); + goto fail; + } + err = fwcam_write_quadlet(sc, IIDC_CUR_V_FRM_RATE, + (uint32_t)sc->cur_framerate << IIDC_CUR_V_SHIFT); + if (err) { + device_printf(sc->fd.dev, + "failed to set CUR_V_FRM_RATE: %d\n", err); + goto fail; + } + + /* Check Vmode_Error_Status - camera rejects ISO_EN on error */ + err = fwcam_read_quadlet(sc, IIDC_VMODE_ERR_STATUS, &val); + if (err == 0 && (val & IIDC_VMODE_ERROR)) { + device_printf(sc->fd.dev, + "Vmode_Error_Status set: format=%d mode=%d rate=%d " + "speed=%d\n", sc->cur_format, sc->cur_mode, + sc->cur_framerate, sc->iso_speed); + err = EINVAL; + goto fail; + } + val = ((uint32_t)sc->iso_channel << IIDC_ISO_CH_SHIFT) | ((uint32_t)sc->iso_speed << IIDC_ISO_SPEED_SHIFT); err = fwcam_write_quadlet(sc, IIDC_ISO_CHANNEL, val); @@ -863,13 +897,13 @@ fwcam_cdev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, FWCAM_UNLOCK(sc); err = fwcam_write_quadlet(sc, IIDC_CUR_V_FORMAT, - (uint32_t)mode->format << 29); + (uint32_t)mode->format << IIDC_CUR_V_SHIFT); if (err == 0) err = fwcam_write_quadlet(sc, IIDC_CUR_V_MODE, - (uint32_t)mode->mode << 29); + (uint32_t)mode->mode << IIDC_CUR_V_SHIFT); if (err == 0) err = fwcam_write_quadlet(sc, IIDC_CUR_V_FRM_RATE, - (uint32_t)mode->framerate << 29); + (uint32_t)mode->framerate << IIDC_CUR_V_SHIFT); if (err == 0) { sc->cur_format = mode->format; diff --git a/sys/dev/firewire/fwcam.h b/sys/dev/firewire/fwcam.h index ac72c8609f13..841683bbc37d 100644 --- a/sys/dev/firewire/fwcam.h +++ b/sys/dev/firewire/fwcam.h @@ -53,6 +53,13 @@ #define IIDC_ONE_SHOT 0x61C #define IIDC_MEM_SAVE_CH 0x620 #define IIDC_CUR_MEM_CH 0x624 +#define IIDC_VMODE_ERR_STATUS 0x628 + +/* Cur_V_Format / Cur_V_Mode / Cur_V_Frm_Rate register fields */ +#define IIDC_CUR_V_SHIFT 29 /* bits [0..2] */ + +/* Vmode_Error_Status register */ +#define IIDC_VMODE_ERROR (1 << 31) /* bit [0]: mode error */ /* Section 1.7 - Status and control register for features */ #define IIDC_BRIGHTNESS 0x800