From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 716253921DD for ; Wed, 24 Jun 2026 10:12:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782295967; cv=none; b=rRodIKxtQEHoZ+HJqmOSSKyzhsLBAQpdmoh0BjJX2yd2VW7sGVTLWl4Y1LxVFP7/o9fPpwB/xyNcvrOs9UNGzJFQjliOhm/BcWN/xCKxN5Sjlll1fvujD66m0zaRr6b8Qowcfa0mYLKK3gnntD4eSBIvr3J8JAMG2KGyXUdHX+8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782295967; c=relaxed/simple; bh=rTMju9y+vBe+kbCwR8U9jD+aYsjLpIeU0FKl3yEXFYE=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=otcRhNPaeI7u6CEQoEOcS9AFcddtkiCYsvLuu/3NxiVJ999G0FCvzG7FOVoiH5ATkpHNyrrsg695j3nSuO7UboRaqRz+vvSJKyer5JMF5AAqqF540JzihIOeeQLXNFO/Aphsw7duEcY9+AAB3TEdDDh7wMJozL5dIzrZb90plCk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=anUHdbki; arc=none smtp.client-ip=209.85.167.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="anUHdbki" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5ad4d25743cso104919e87.2 for ; Wed, 24 Jun 2026 03:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1782295963; x=1782900763; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=6fA7npl0ddYHCFXjReOHy/T2fA2Kbawx3VrcpEoijXM=; b=anUHdbkiDiysPwaaibeG9yv+nw06bneKQ3LaDIKXPKYYOpMgU5yEk9zLR8NObaNOOv cDsI871VzCVsCRxFCjlEKAkNolZwJVb95AbN7Gw0dPni+f+rBrQSlGln9kGOuNtWqI0m VvOcIeax3942H5RUVDQjhsV6CQOfF4zrgVxt1i88fbjWvTz3hEuG66dSkQ39f5nhVjKE d0B6S1I15CSMmVr7+We3Yp4MDyLdbG1Ek17Mfl3TcKumdpQQ+nxkZCzoTt0uzTQv0b4+ 1k8+yrg8nqIsz1MK0IODHkcZpn8Ks5LZsr+xQY18d95qalWGJyvrhCgoAc6xXvArA/uJ xbVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782295963; x=1782900763; h=content-transfer-encoding:in-reply-to:from:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=6fA7npl0ddYHCFXjReOHy/T2fA2Kbawx3VrcpEoijXM=; b=nIDsZwDLRFEmZfP0ezeZoWDZYRt6YlauH6/0DxQUSLIkBWb7wWkx5QYvJL1LcPLQtw 17A7dmTuRmKXZjUJMONLJxqRFgkBM8TMoRGcrZKbFkw7inW1K7YDByu6SNHJnk1SfQBY mhQ6vuNn0fQlxDeIIgLaJ3+prnMRrNGs4wC4H0cn6C7ranmcKT+SybZsfCvToX5TdGVo 3VQQ3BtnDDECjpeTQS0aHMtUavZtYv8mNhgH0q8TrpVEHA3zono32x5l0K/X6Cmoezik 2FzRcNBSpM6QvyCh7RDAGlqAz417DPK9ufy8eNj8yVDYboeDUxtKlEs/NDgoW3q9SPGE XD0w== X-Forwarded-Encrypted: i=1; AHgh+Rokyp5XQMMJ1buWGKsm+oR22p8qDybdfLBkADDcw+CYM+6ZKYXtIwyFPo85to2ThC+0y/y7D9teA3EEKXU=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0YIFvLREXj/MatdxPFzTUvo1MvB8r8GN+jL8I1dErxbWrG/w6 3DxUITBPf9C1m7q0NOT5es1fr/Cj+ySkFXsQxkRvRJv3iEvCNLaehJCxHPEW56pImso= X-Gm-Gg: AfdE7clGvyuuppOw9sxZBR8NimUDi2XJ57bxCJPYbIix2g6lcMCF54dSGrlOkoEoTyO nvybGUA9Cl5G8HixJkXv4BCgMYpipCZsx7BWpS5hJOI1MZXOIVQgIWYlG2/1xzOCOZGRaVxJ0Iq epgJY4wGWS22C74SgabwLWOweVnoWZv2W3/Ce7Z3drZXvYy5zPWMwdsNXdoLewhzhbjusJcuSTP jlhp402rHIbaCAj2W/YJIifGSm+Cw5m84RKmnIu3A+I2KYQnyezMXR1BLHMlaAwYLj+tDlznYir tcGwdfTIV08UAoowyK70nQ7xG/FxlpV+DaK9RVLRqsG6w8uI2nnCHJcvXJyqD4hKEOEoW9EsF69 iJes83CHf+DipVpI7efreErcAY024UjIk6WiotCIb+Tkt9mvop/xN8Npt9gMLjh0w14N0NJPgiY 9q7j+hDMXFWblVY/Zmi4krlKU2UBaofLNPMyA3VsNNfJZ1OJBY9W+iXayhVXuWNugkBJmQiTeeu +mUpA== X-Received: by 2002:a05:6512:1294:b0:5a8:6f01:e1a0 with SMTP id 2adb3069b0e04-5ad68a363b9mr1198795e87.3.1782295962527; Wed, 24 Jun 2026 03:12:42 -0700 (PDT) Received: from [192.168.1.100] (91-159-24-186.elisa-laajakaista.fi. [91.159.24.186]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5ad69550ff7sm1637116e87.20.2026.06.24.03.12.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 24 Jun 2026 03:12:41 -0700 (PDT) Message-ID: Date: Wed, 24 Jun 2026 13:12:28 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 3/3] media: i2c: imx471: Add Sony IMX471 image sensor driver To: Kate Hsuan , Mauro Carvalho Chehab , Hans de Goede , Hans Verkuil , Sakari Ailus , Serin Yeh , Tarang Raval , Damjan Georgievski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260624033508.27391-1-hpa@redhat.com> <20260624033508.27391-4-hpa@redhat.com> From: Vladimir Zapolskiy In-Reply-To: <20260624033508.27391-4-hpa@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 6/24/26 06:35, Kate Hsuan wrote: > Add a new driver for Sony imx471 camera sensor. It is based on > Jimmy Su implementation and the driver can be found > in the following URL. > https://github.com/intel/ipu6-drivers/commits/master/drivers/media/i2c/imx471.c > > This sensor can be found on Lenovo X1 Carbon G14, X9-14 and X9-15 laptops > and it is a part of IPU7 solution. The driver was tested on Lenovo X1 > Carbon G14, X9-14 and X9-15 laptops. > > Signed-off-by: Kate Hsuan Please find a few minor nitpicks below. > --- > MAINTAINERS | 6 + > drivers/media/i2c/Kconfig | 10 + > drivers/media/i2c/Makefile | 1 + > drivers/media/i2c/imx471.c | 971 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 988 insertions(+) > create mode 100644 drivers/media/i2c/imx471.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 6b4560681b51..586958b1816d 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -25219,6 +25219,12 @@ T: git git://linuxtv.org/media.git > F: Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml > F: drivers/media/i2c/imx415.c > > +SONY IMX471 SENSOR DRIVER > +M: Kate Hsuan > +L: linux-media@vger.kernel.org > +S: Maintained > +F: drivers/media/i2c/imx471.c > + > SONY MEMORYSTICK SUBSYSTEM > M: Maxim Levitsky > M: Alex Dubov > diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig > index 5d173e0ecf42..b7199f9f5a0c 100644 > --- a/drivers/media/i2c/Kconfig > +++ b/drivers/media/i2c/Kconfig > @@ -287,6 +287,16 @@ config VIDEO_IMX415 > To compile this driver as a module, choose M here: the > module will be called imx415. > > +config VIDEO_IMX471 > + tristate "Sony IMX471 sensor support" > + select V4L2_CCI_I2C > + help > + This is a Video4Linux2 sensor driver for the Sony > + IMX471 camera. > + > + To compile this driver as a module, choose M here: the > + module will be called imx471. > + > config VIDEO_MAX9271_LIB > tristate > > diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile > index e45359efe0e4..acbd321fc12e 100644 > --- a/drivers/media/i2c/Makefile > +++ b/drivers/media/i2c/Makefile > @@ -61,6 +61,7 @@ obj-$(CONFIG_VIDEO_IMX335) += imx335.o > obj-$(CONFIG_VIDEO_IMX355) += imx355.o > obj-$(CONFIG_VIDEO_IMX412) += imx412.o > obj-$(CONFIG_VIDEO_IMX415) += imx415.o > +obj-$(CONFIG_VIDEO_IMX471) += imx471.o > obj-$(CONFIG_VIDEO_IR_I2C) += ir-kbd-i2c.o > obj-$(CONFIG_VIDEO_ISL7998X) += isl7998x.o > obj-$(CONFIG_VIDEO_KS0127) += ks0127.o > diff --git a/drivers/media/i2c/imx471.c b/drivers/media/i2c/imx471.c > new file mode 100644 > index 000000000000..1e1bff69ea3d > --- /dev/null > +++ b/drivers/media/i2c/imx471.c > @@ -0,0 +1,971 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * imx471.c - imx471 sensor driver > + * > + * Copyright (C) 2025 Intel Corporation > + * Copyright (C) 2026 Kate Hsuan > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include No declarations coming from linux/unaligned.h header are used in the driver. > +#include > +#include > +#include No declarations coming from media/v4l-event.h header are used in the driver, likely it's intended to include media/v4l2-subdev.h instead. > +#include No declarations coming from media/v4l-event.h header are used in the driver. > +#include > + > +#define IMX471_REG_MODE_SELECT CCI_REG8(0x0100) > +#define IMX471_MODE_STANDBY 0x00 > +#define IMX471_MODE_STREAMING 0x01 > + > +/* Chip ID */ > +#define IMX471_REG_CHIP_ID CCI_REG16(0x0016) > +#define IMX471_CHIP_ID 0x0471 > + > +/* V_TIMING internal */ > +#define IMX471_REG_FLL CCI_REG16(0x0340) > +#define IMX471_FLL_MAX 0xffff > + > +/* Exposure control */ > +#define IMX471_REG_EXPOSURE CCI_REG16(0x0202) > +#define IMX471_EXPOSURE_MIN 1 > +#define IMX471_EXPOSURE_STEP 1 > +#define IMX471_EXPOSURE_DEFAULT 1270 > + > +/* Default exposure margin */ > +#define IMX471_EXPOSURE_MARGIN 18 > + > +/* Analog gain control */ > +#define IMX471_REG_ANALOG_GAIN CCI_REG16(0x0204) > +#define IMX471_ANA_GAIN_MIN 0 > +#define IMX471_ANA_GAIN_MAX 800 > +#define IMX471_ANA_GAIN_STEP 1 > +#define IMX471_ANA_GAIN_DEFAULT 0 > + > +/* Digital gain control */ > +#define IMX471_REG_DPGA_USE_GLOBAL_GAIN CCI_REG16(0x3ff9) > +#define IMX471_REG_DIG_GAIN_GLOBAL CCI_REG16(0x020e) > +#define IMX471_DGTL_GAIN_MIN 256 > +#define IMX471_DGTL_GAIN_MAX 4095 > +#define IMX471_DGTL_GAIN_STEP 1 > +#define IMX471_DGTL_GAIN_DEFAULT 256 > + > +/* HFLIP and VFLIP control */ > +#define IMX471_REG_ORIENTATION CCI_REG8(0x0101) > +#define IMX471_HFLIP_BIT BIT(0) > +#define IMX471_VFLIP_BIT BIT(1) IMX471_HFLIP_BIT and IMX471_VFLIP_BIT macro do not have any users in the driver. > + > +/* Test Pattern Control */ > +#define IMX471_REG_TEST_PATTERN CCI_REG8(0x0600) > +#define IMX471_TEST_PATTERN_DISABLED 0 > +#define IMX471_TEST_PATTERN_SOLID_COLOR 1 > +#define IMX471_TEST_PATTERN_COLOR_BARS 2 > +#define IMX471_TEST_PATTERN_GRAY_COLOR_BARS 3 > +#define IMX471_TEST_PATTERN_PN9 4 IMX471_TEST_PATTERN_* macro do not have any users in the driver. > + > +/* default link frequency and external clock */ > +#define IMX471_LINK_FREQ_DEFAULT 200000000LL > +#define IMX471_EXT_CLK 19200000 > +#define IMX471_LINK_FREQ_INDEX 0 Please drop IMX471_LINK_FREQ_INDEX macro along with .link_freq_index from struct imx471_mode. -- Best wishes, Vladimir