From nobody Fri Apr 3 22:27:50 2026 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 83C473AB27B for ; Mon, 23 Mar 2026 13:10:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271443; cv=none; b=OiacTXHDFc034YVhaPZVb+YSsIFKZZfzs+Kr5+Teba0g3H4OFaJ23Cc3KfF7Y2cIrJA7gq+4XVyBI1oqeanr/8zw0Lwcq8DKCHUjmlRbgKUbEhnvbbVypwizuMEFCSlTDVADlrYHZPE6LlIfvf88fxlp6Ik3CN9N6fhPW6hcM1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271443; c=relaxed/simple; bh=+sjG9Y89xiTyAd2WtTGciLIS9T6N5GSrKMdc4XxAA04=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W5Uk+9+VbvA+AIu1cNXsMy08reuIUGZEXwWAmy/0kTYkruVaxj8yiDB3R/nX7zWlS9g5utsT8sPRtA17LQ9QAYVJCi8eMlXzLxWZULq0zoiwVG9qLXGVAghfX3nrSrUGwvRLsCVWW6O60PCrtLerEPl9FC4TKG5GAtx/AYdBWwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=bA2XrGdr; arc=none smtp.client-ip=209.85.167.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="bA2XrGdr" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5a281b091c2so124813e87.0 for ; Mon, 23 Mar 2026 06:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774271441; x=1774876241; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=OHX78l0IWaFY465sZIyem0S3+5Hdcjbh+Os+s15sjNo=; b=bA2XrGdrfDhmPW1AYucVq1zKukGlv+tLHJrTtpwiclAGIlPMd8r+blfM4Gb7drR5xB djgI+RQsCyANMam/LsDsAwVK3fSpPcmmD/ds9xJwa1NOGOp7QcwiYHZShpI4r/k/p7zA k6uAvqlz9WSSKGBKdeH/jDVr0OLqii36rkEJA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271441; x=1774876241; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=OHX78l0IWaFY465sZIyem0S3+5Hdcjbh+Os+s15sjNo=; b=PoV9kJ+RnaHZJgnyvPBjQvWeyzXNL1LgyBmp1TMI1xQrmoa/2jD5B6SBQhanJH2hmI P0sMTr4TKCXRHRVBU4HPhQbC6RBqc64Kxwx1es6euEk2TqoLkgtrXQ/8Ebkmq6m3hyar aHzxIIAuGD9KSHy2DZkq2bufwrmfj3oq2Yo1IrPG69tfU/SRhffYxRxwWvaUUg4KbtQo 8f8qAh1gez/CwHOgidOB4fyL4pcMSIMeHVE5csIaqF0FK3UqBvSoqGYeFto/hrs/LV8r SQVtxOFQOOR4LywlegrbM8NdLANFczdWmz3Nu7Q7OxbdxqhMjEs4rcsUOikSFqzkBGTd q3cg== X-Forwarded-Encrypted: i=1; AJvYcCWlNQj+eks/kCTIYSFa4HNxTDaqouLCqiZgs1Bv7rr2vOH7XGQ9ixSeAZUktrIAKOhjlOvkvhbZiEreWlY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxh0+wZqDB0Ng3h/qHiP4U1aVWm9pq9X6p80wY1vJ98ekYhq+Lf lv9ukS0CBIuLv/qCoUk+DB7Vg0Y3LHoc+x+g9wPoghQs1kDidGFv7ZAXWA+v6Hew2A== X-Gm-Gg: ATEYQzzhGiYDxDeUnjYMaCJQpLPGmy7mefDltHUHVEOL8PWJnstIW2b34iYsJaksLzX VANxySSes+JgvqvQaHYBo+tmxsESLqcky3DQzAv8tQt5v5BTEWTqH9iKBS6cwXx29NcsWxPtEVk Ju4Akvh9VgE+Jvt4styO3wDvQfGDBei85e5cCJqEDKOFQcz7DLapY32baHDBvBG/cJQB/BgmdwV WWov2/1w+UPEd8nVDYgdrmM/R3YzbSPe4qfrDegmcgIMUJ75P+n1GBAvTtcX10wnAqN3LQbI1yo oeyDHw1rvFjzdPTDXTl4BsjHV2CCfY2INoYgsDyhZlH16ByppL/lFFds/XTMq9xgdZhgHpsKAOw DJHY0H0fZ9x/LUHuXowQpzFh5w9taH79xc+bkeHO3lGdrmvaNsXBQom6UCkk0zkN+F6dPW5lsYf NsxiZAQVrLLZPJGWIQzyjOWPU/ug5LKm5DRyjKbLY8op+XrHueebSEkyEph+bFK9VlbNP5K0JQp iWUaYGEu0wVrfw+pA== X-Received: by 2002:a05:6512:1294:b0:5a2:777f:8323 with SMTP id 2adb3069b0e04-5a285b3150cmr3866798e87.18.1774271440713; Mon, 23 Mar 2026 06:10:40 -0700 (PDT) Received: from ribalda.c.googlers.com (252.116.88.34.bc.googleusercontent.com. [34.88.116.252]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a285305e07sm2515904e87.66.2026.03.23.06.10.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:10:39 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 23 Mar 2026 13:10:30 +0000 Subject: [PATCH 3/4] media: uvcvideo: Relax the constrains for interpolating the hw clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260323-uvc-hwtimestamp-v1-3-aa42e3865204@chromium.org> References: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> In-Reply-To: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@vger.kernel.org X-Mailer: b4 0.14.3 In the initial version we set the min value to 250msec. Looks like 100msec can also provide a good value. Now that we are at it, refactor a bit the code to make it cleaner. Fixes: 6243c83be6ee8 ("media: uvcvideo: Allow hw clock updates with buffers= not full") Cc: stable@vger.kernel.org Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index c7ebedb3450f..dcbc0941ffe6 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -494,6 +494,13 @@ static int uvc_commit_video(struct uvc_streaming *stre= am, * Clocks and timestamps */ =20 +/* + * The accuracy of the hardware timestamping depends on having enough data= to + * interpolate between the different clock domains. This value is sof cycl= es, + * this is, milliseconds. + */ +#define MIN_HW_TIMESTAMP_DIFF 100 + static inline ktime_t uvc_video_get_time(void) { if (uvc_clock_param =3D=3D CLOCK_MONOTONIC) @@ -834,15 +841,12 @@ void uvc_video_clock_update(struct uvc_streaming *str= eam, y2 +=3D 2048 << 16; =20 /* - * Have at least 1/4 of a second of timestamps before we - * try to do any calculation. Otherwise we do not have enough - * precision. This value was determined by running Android CTS - * on different devices. + * Check that we have enough data to do the interpolation. * - * dev_sof runs at 1KHz, and we have a fixed point precision of - * 16 bits. + * y1 and y2 are dev_sof with a fixed point precision of 16 bits. */ - if (clock->size !=3D clock->count && (y2 - y1) < ((1000 / 4) << 16)) + if (clock->size !=3D clock->count && + (y2 - y1) < (MIN_HW_TIMESTAMP_DIFF << 16)) goto done; =20 y =3D (u64)(y2 - y1) * (1ULL << 31) + (u64)y1 * (u64)x2 --=20 2.53.0.959.g497ff81fa9-goog