From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vk1-f171.google.com (mail-vk1-f171.google.com [209.85.221.171]) (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 3EFCB2BEC2B for ; Thu, 2 Jul 2026 16:10:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783008646; cv=none; b=dgSu/HoTcgxTkDmy5Lr5kZ54pS+O13elcvbsNLGovt6WufImdadt2uKBq0zaYWsjaNm4cJpMp5ywrUHNE04uPpLCjrurvRYHek2z3xdIqKp/g4JSWh2w1I7T2J8gKihAiX5BKO1UBOoipMyQZxosBT6GisHi89jy1qypGcPjVRc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783008646; c=relaxed/simple; bh=Pyw+L85LB94mAYcQwx5lHZB1Ha7l2wuWIhOhjVvXvSA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=ddJLimJ3FaJymEq6dzf0FHVnX99nVlDEMYWbn5tWR2QOdhVOy2cpI/Jiu+QTyyWF75u8UXaXd4RJUGhJnvBZOHQlx2ZGWgXYIuu3PVi4y221SzfZ61Q6NsGiK5h7Yl9ppaaUfyot2+7cx3ugcfK3JuYZ4x6VuqX5YSl+O84gZpU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iSmb6Z3q; arc=none smtp.client-ip=209.85.221.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iSmb6Z3q" Received: by mail-vk1-f171.google.com with SMTP id 71dfb90a1353d-5bc22d9977cso1396705e0c.0 for ; Thu, 02 Jul 2026 09:10:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783008643; x=1783613443; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=Wi28vtUxrZUhB2X9R/n1ITp9s3/b3dEqcWJTezP5uVU=; b=iSmb6Z3q/kYvDjmOmmXA2gy0u7Bh2YIFe5SRjI2NslGJLavbP22FBY2+JQN3wnWUzn iJ5NdHxHw471jG6/P4qtZqQuV7QI3x0xtKmodJPdn25i0kCtECwpLjWw3Gx1tLrYCyMU YS3vTKknRg+IzMwmuHdhMml9xF/SyqtTPDJb3I6X9K+aeRqCoC+6maZMuVZTGa2oJdfT zmpy7QnuAu6XQbO+xCnoEtpko18I8cz9k12bPCre7vPzA7sT7I8IsINviEUpNhS/gjkU Gfbe3X5CImt9Gl8YOzRQFkGhDd70mDHkP902BpgFm2zBDkzALoLs+LvX2tQjPusw8QUh KVfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783008643; x=1783613443; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Wi28vtUxrZUhB2X9R/n1ITp9s3/b3dEqcWJTezP5uVU=; b=QzmZ//+NSwKvRCoDdbva7wUhytW4XIpZm/Mkpfr8Zf5WR404304d+HCoU4oxQnnw5s WBU5+fnFSTtnxAMeBkvNHD41WyoS0Rknzm0WOpWGW0jZ6PoLH9q6cCdym5ul+HdtUt8G IcRI2g2U7uRuxqd8nn0CCkNmaeGszlZSN6WUXEu4720vRQg07FEFF32svQtCxkkR0De0 JGAd1cYNedzm4KUivAhLTx/Z6UB+WLbg70Cz0DMAqF634sMghCTBBWBGO6y4Ww2Ev6PD /WNH5NC0aO0C0I2fATY7wjfDyc5kbpC7Z08B7nCceUznJdzslT3Xfb/2/PFFjwFLSPVL zR0Q== X-Forwarded-Encrypted: i=1; AHgh+RrvFFw86fr3EGQkosY+vGgQullHNE8zTEzQ/UUiTHe++qbGzq+/L+KjQLWS2vYGr2yGSbJll7mq8CAyYMs=@vger.kernel.org X-Gm-Message-State: AOJu0Yzuvfi24+VhlNYOmd8egD9koKFS0aUuIgbsnoHijE8Tf2iUL86b B3igeKVZgarjaB8QAgOzrh0H/R6wX729NugOykw2mis+aiJ+0+l/LOqj X-Gm-Gg: AfdE7ckPjXOXkkwDTomARWbKDGYHc0o1XdtMhSAYzQfY0+6hPzuS+vvkCgtS5HT+QvH sWx6zydccNVpO4yP8lCxJPsFfglgOcPQlfQ+0aNMVUasUqXJZCnAzcE7YJk3Lh/iBUcAekSmZjb WGqSNHrNXKWQLjeUH8f+mASteEnurU5M4gg9cyjigyrneXEi4R0xBR160uFfwD29lyo9yZmVdxe tUxzuxiA/kuZ1qEkQWLKXafpuW+RwSzVOrt9Fz77Lnuw+KezU3ivOHf0d/LXNE88flHXl0Fhnat ufnmevbB0RSr06S6tu60Fq/AfUtwqrqTdOV7hR/5ZBMWhWnw6TWVz0KkEJ8cmqb0NSIVUejcUWj 82Lz8B7/482eVQ8Y1GAe5NCMIpbpR7wcP8tdY4VAooYH8sJwjsm+7maANnKLmcAo3tzv+sUvK/0 Ie3HuO3BdGaLABQJPT X-Received: by 2002:a05:6122:4589:b0:5bd:9c71:11e with SMTP id 71dfb90a1353d-5bde3a959f2mr2688554e0c.4.1783008643038; Thu, 02 Jul 2026 09:10:43 -0700 (PDT) Received: from worklaptop.. ([47.204.189.236]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-5bdec49cdb0sm1152242e0c.3.2026.07.02.09.10.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 09:10:41 -0700 (PDT) From: Ryan Thomas Cragun To: Sakari Ailus , Hans de Goede Cc: Bryan O'Donoghue , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ryan Thomas Cragun Subject: [PATCH] media: i2c: ov02c10: tolerate a sensor clock other than 19.2 MHz Date: Thu, 2 Jul 2026 12:10:22 -0400 Message-ID: <20260702161022.5658-1-ryantcragun@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The driver requires the sensor's external clock to be exactly 19.2 MHz (OV02C10_MCLK) and aborts probe with -EINVAL otherwise. This leaves the camera completely unusable on platforms that clock the sensor differently. For example, the Microsoft Surface Laptop 7 (Intel) drives the OV02C10 from a fixed 12 MHz clock (provided by an INT3472 "discrete" clock that cannot be reprogrammed). The sensor's register/PLL tables assume 19.2 MHz, so at 12 MHz all timings scale by 12/19.2 (the nominal 30 fps mode runs at ~18.75 fps), but the sensor is otherwise fully functional and produces a correct image. Rather than failing probe: - Attempt clk_set_rate(OV02C10_MCLK). On platforms whose sensor clock is programmable (e.g. a TPS68470 PMIC) this yields the expected 19.2 MHz and the native frame rate. - If the rate still differs (fixed clock), warn and continue instead of aborting, so the camera works. Platforms that already provide 19.2 MHz are unaffected (no warning, no rate change). The reduced frame rate on a lower clock can be restored by shrinking the sensor's vertical blanking (VTS); that can be addressed separately. Signed-off-by: Ryan Thomas Cragun --- drivers/media/i2c/ov02c10.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/ov02c10.c b/drivers/media/i2c/ov02c10.c index cf93d3603..01cbaedfc 100644 --- a/drivers/media/i2c/ov02c10.c +++ b/drivers/media/i2c/ov02c10.c @@ -892,10 +892,19 @@ static int ov02c10_probe(struct i2c_client *client) "failed to get imaging clock\n"); freq = clk_get_rate(ov02c10->img_clk); + if (freq != OV02C10_MCLK) { + /* + * Some platforms provide the sensor clock via a programmable + * PMIC. Ask for OV02C10_MCLK; if that is not possible (e.g. a + * fixed 12 MHz clock on the Surface Laptop 7) proceed anyway. + */ + if (clk_set_rate(ov02c10->img_clk, OV02C10_MCLK) == 0) + freq = clk_get_rate(ov02c10->img_clk); + } if (freq != OV02C10_MCLK) - return dev_err_probe(ov02c10->dev, -EINVAL, - "external clock %lu is not supported", - freq); + dev_warn(ov02c10->dev, + "external clock %lu differs from expected %u; proceeding anyway\n", + freq, OV02C10_MCLK); v4l2_i2c_subdev_init(&ov02c10->sd, client, &ov02c10_subdev_ops); -- 2.43.0