From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.48 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690471; b=uJRVj65kie12jxftwLU/Bhga6KcHWpyNLyDSBjDRXkTJhZftzchioCrKOQ1x8Gv9Sx9K dxDRedWa8YsE/8I7DVIeGcKLIZk4NSVtZCs05+c6yPJiRaDS4QQJGtg/zwwu5LnIZmat4 jxIlBq74KN6aoCAZcgJ6OtMKijUXdY6e9VezSmxNQjGWDg7ZQbncXHFUgo9QVxLDN/wwi fQQWoNDhEsS9dkMy5mxuj17nGkC34RINGGTDb45bqWLcXw0kld45AftxVFLUzY/6lIxqq MrKD3HcfAQXYewkozV1CzB+MBX7XIW+xQj0Zb123RLwwtEOUnz4qYUtMyvUduVXQcNA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690471; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=Z4rWp2YVMFMR3tEeV3nD51QcdyFz5BBqY5XI+x5Rw+A=; b=dnP3Oiv8vXKo8W9f58+OqeqlUKQNfnLwcSrVY+U+U/9Vr1zQM0rNC//VQcMNXfGP7cGb SKSalx+srOsyNafsalyIPm/q16Ihpwc3c2FXYDHgLvnEMC8tyLj71nUN10cFZvOp/pnEZ 1/EkjQ4O1pX7FJdjQEqBPRkSqurZ6v1dqYOKNaOQKkLtYF10Zgu2ABI6hcHX20zmeEqqd iT/cJAp6VM5OfUCyS3Bmi3OcfblZqsdGd7/V7dESgPiOAGdpuCmLeWP4WvyppXoaCPpMy UJ5YNzdyuLvg23lwMSFXlKrIlqZP7tDRw3R498iIf2vc4gCZUJvNREgwnV74mU0DkfA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=VvyV7Sv4; arc=none smtp.remote-ip=209.85.221.48 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65D27606A321 for ; Thu, 22 Oct 2026 17:34:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 65D27606A321 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=VvyV7Sv4 Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-487049569b6so42640f8f.1 for ; Thu, 22 Oct 2026 10:34:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690468; x=1793295268; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Z4rWp2YVMFMR3tEeV3nD51QcdyFz5BBqY5XI+x5Rw+A=; b=VvyV7Sv4x7ctU85zvM08Yq/pqT/uhkfK260dUSAbP9WnPxyFtlMalXlN0YhoNzYk2v D9tM2DWK+QVTAK7pOj00IXZBQwuVc37MlJotCYN98IsPX8op9Cd9ldgF+SixFldGcXi3 gNdl1FDLNqzS+lT9hs//ML8mE0o/qDJ9QkXDVCKMdlL5hvl29CszyYEDGvwq9TlcToCl Uf6sIeG+Wrn7oNLX+XjZbSW04HvRgbjf6EP6SAgrHbR+tagm3o6LDO2kGKZhg2iLimr1 VVbHKk/u48xGmHgiQN9hraGxbGYu0XtvkDBsS4rieHy3lIm7dZxfPxNsoD/8c/hY9KXf co4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690468; x=1793295268; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Z4rWp2YVMFMR3tEeV3nD51QcdyFz5BBqY5XI+x5Rw+A=; b=mhBTtQrn58ZBQH8aXN4Zf7eetXC3Q0hoRB1nXZZAXvbUp9UMEWbXOqMFop8cQGfv8w CXRSQi8ppOAJ3pTrzylv7KqE4GqJ0KokItRaH15iwTueD20jEIaPSg950YV7TZLL4iXQ /cy0MA6zrcdZPTl8AFBFkN0QvMll8H+ggb8pDh9086cKu+sXw3W/2sJIBFhMaFHfMVJP qII06frmZ/wy+rxspjKnyE90PEK7+uVsMKGDGgPqHzLyqTfien98dqPrrUDKKf4JbCJt 6KZeFYqctZlyQwzj4vm+0vOnOeUS8qGUrgtxbjNGM3iR7/781NHI6WRqemevXtwmdq8P e+/w== X-Forwarded-Encrypted: i=1; AKwUvBy/chVjfVa59lQPnwJ60wqrJbFQNGaGE2sDUYEhDI3wn/X84XGtfxFtrBpKLgtbr1Kys7ceFqJ9iePpcHk=@vger.kernel.org X-Gm-Message-State: AFq9FYK7SjHcvERcksgGWRng6W0aB8DnQJcX+8b0SJuycxDqV0fwDCEA Y8r1aPZyT4AE7HVnzcCGhgchbO9Ix2P6wBmAN9cRokQ8R+7Nd5+dte6YyCJunTr5y+Q= X-Gm-Gg: AYBFou3fNVyzED/jSNf6j2b2TZA4TM6mvLkEbRGjM54I479Ifxd8pf1i0OtflMnQQwe 4uiajUtAB0rjTnxsKp62Dy1wwMKVsre2gDIQOBrZOq/PA25iWknboyPOD/xZrTAnYxyNaAJXzHg xdeH6W4GFJ9qV5Ccb+7knNO5t1nAEzk+TqD5R7nboAEk+MlzDORCQCBTS6gyecKY0k3hLg9NwGi GkRTCI0LtIVXbn51naogfuVIi73eD0hIg+1LbxNgFRY6OkbhkEfDtIjqV7j3MObuV0zPZfeQxUP 9kg7zNKqpe/zWC2jPoyEHK/DW28dt63e0IA7mYCVeD1DdhggeANaKfHpC1+HqIp1QKxdsIC3V3T kBbPC3JJI/bfIsn3Xmz0Ye2lwL6HhaehjywfBN0gAZAE+pKMaT/YLKp14RUSSmOI28I5L/b3ODM FB3266BXxvFfyJgXu1W5AcoCJeAFJ+rBFbQ5N2V3xtL6jmUH0+mFYBmm4GG1Um7STK4BC6Zoj3i qb3OatNBhP6d/KTGi0L2Vd5jwyA2lXETTc6g3HE1w+TMJEqUH+dA8BcZRDYyzzWMFqVZzIA2h7G WVj5VAtvUw+sYIJJdol3AGvugTuiew2zjgxqzV5qcxxzU4NyYwVW X-Received: by 2002:a05:6000:26d2:b0:487:106f:ee31 with SMTP id ffacd0b85a97d-48e264bd989mr11747313f8f.27.1792690467519; Thu, 22 Oct 2026 10:34:27 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:26 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:33:54 +0100 Subject: [PATCH v6 01/18] media: imx678: Rework into generic Starvis 2 sensor driver. X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-1-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 The register layout and programming model for multiple of the Sony Starvis2 sensors is identical, so prepare for supporting those by renaming all common parts of the driver to a starvis2_ prefix, and renaming the driver. Signed-off-by: Dave Stevenson --- MAINTAINERS | 15 +- drivers/media/i2c/Kconfig | 19 +- drivers/media/i2c/Makefile | 2 +- drivers/media/i2c/{imx678.c =3D> sony-starvis2.c} | 780 ++++++++++++------= ------ 4 files changed, 428 insertions(+), 388 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 760791e3635f..b736d175cbd7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -25640,13 +25640,6 @@ S: Maintained F: Documentation/devicetree/bindings/media/i2c/sony,imx576.yaml F: drivers/media/i2c/imx576.c =20 -SONY IMX678 SENSOR DRIVER -M: Jai Luthra -L: linux-media@vger.kernel.org -S: Maintained -F: Documentation/devicetree/bindings/media/i2c/sony,imx678.yaml -F: drivers/media/i2c/imx678.c - SONY MEMORYSTICK SUBSYSTEM M: Maxim Levitsky M: Alex Dubov @@ -25657,6 +25650,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/g= it/ulfh/mmc.git F: drivers/memstick/ F: include/linux/memstick.h =20 +SONY STARVIS 2 SENSOR DRIVER +M: Jai Luthra +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/i2c/sony,imx678.yaml +F: drivers/media/i2c/sony-starvis2.c + SONY VAIO CONTROL DEVICE DRIVER M: Mattia Dongili L: platform-driver-x86@vger.kernel.org @@ -28683,6 +28683,7 @@ F: drivers/media/i2c/mt* F: drivers/media/i2c/og* F: drivers/media/i2c/ov* F: drivers/media/i2c/s5* +F: drivers/media/i2c/sony-starvis* F: drivers/media/i2c/vd55g1.c F: drivers/media/i2c/vd56g3.c F: drivers/media/i2c/vgxy61.c diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 7de2d095c969..8c43ae77b47e 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -324,13 +324,11 @@ config VIDEO_IMX576 config VIDEO_IMX678 tristate "Sony IMX678 sensor support" depends on GPIOLIB - select V4L2_CCI_I2C + select VIDEO_SONY_STARVIS2 help This is a Video4Linux2 sensor driver for the Sony - IMX678 camera. - - To compile this driver as a module, choose M here: the - module will be called imx678. + IMX678 camera. This sensor is now supported by the common + Sony Starvis 2 sensor driver. =20 config VIDEO_MAX9271_LIB tristate @@ -879,6 +877,17 @@ config VIDEO_S5KJN5 To compile this driver as a module, choose M here: the module will be called s5kjn5. =20 +config VIDEO_SONY_STARVIS2 + tristate "Sony Starvis 2 sensor support" + depends on GPIOLIB + select V4L2_CCI_I2C + help + This is a Video4Linux2 sensor driver for the Sony Starvis + 2 image sensors. + + To compile this driver as a module, choose M here: the + module will be called sony-starvis2. + config VIDEO_T4KA3 tristate "Toshiba T4KA3 sensor support" depends on ACPI || COMPILE_TEST diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index 59e31af457cd..609208dabd07 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -64,7 +64,6 @@ obj-$(CONFIG_VIDEO_IMX412) +=3D imx412.o obj-$(CONFIG_VIDEO_IMX415) +=3D imx415.o obj-$(CONFIG_VIDEO_IMX471) +=3D imx471.o obj-$(CONFIG_VIDEO_IMX576) +=3D imx576.o -obj-$(CONFIG_VIDEO_IMX678) +=3D imx678.o obj-$(CONFIG_VIDEO_IR_I2C) +=3D ir-kbd-i2c.o obj-$(CONFIG_VIDEO_ISL7998X) +=3D isl7998x.o obj-$(CONFIG_VIDEO_IT6625) +=3D it6625.o @@ -146,6 +145,7 @@ obj-$(CONFIG_VIDEO_SAA7127) +=3D saa7127.o obj-$(CONFIG_VIDEO_SAA717X) +=3D saa717x.o obj-$(CONFIG_VIDEO_SAA7185) +=3D saa7185.o obj-$(CONFIG_VIDEO_SONY_BTF_MPX) +=3D sony-btf-mpx.o +obj-$(CONFIG_VIDEO_SONY_STARVIS2) +=3D sony-starvis2.o obj-$(CONFIG_VIDEO_ST_MIPID02) +=3D st-mipid02.o obj-$(CONFIG_VIDEO_T4KA3) +=3D t4ka3.o obj-$(CONFIG_VIDEO_TC358743) +=3D tc358743.o diff --git a/drivers/media/i2c/imx678.c b/drivers/media/i2c/sony-starvis2.c similarity index 57% rename from drivers/media/i2c/imx678.c rename to drivers/media/i2c/sony-starvis2.c index 8413fd44d657..e62cde583324 100644 --- a/drivers/media/i2c/imx678.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -1,10 +1,16 @@ // SPDX-License-Identifier: GPL-2.0 /* - * V4L2 driver for Sony IMX678 + * V4L2 driver for Sony Starvis 2 sensors * - * Diagonal 8.86 mm (Type 1/1.8) CMOS image sensor with 8.40 M effective p= ixels. + * Many of the Sony Starvis 2 sensors share a common register layout, so + * many can be supported by a common driver. + * + * Currently supported are: + * IMX678: Diagonal 8.86 mm (Type 1/1.8) CMOS image sensor with 8.40 M eff= ective + * pixels. * * Copyright (C) 2026 Ideas On Board Oy. + * Copyright (C) 2026 Raspberry Pi * * Based on Sony IMX678 driver prepared by Will Whang & Soho Enterprise Lt= d. */ @@ -26,25 +32,25 @@ #include =20 /* Standby or streaming mode */ -#define IMX678_REG_MODE_SELECT CCI_REG8(0x3000) -#define IMX678_MODE_STANDBY 0x01 -#define IMX678_MODE_STREAMING 0x00 -#define IMX678_STREAM_DELAY_US 25000 -#define IMX678_STREAM_DELAY_RANGE_US 1000 +#define STARVIS2_REG_MODE_SELECT CCI_REG8(0x3000) +#define STARVIS2_MODE_STANDBY 0x01 +#define STARVIS2_MODE_STREAMING 0x00 +#define STARVIS2_STREAM_DELAY_US 25000 +#define STARVIS2_STREAM_DELAY_RANGE_US 1000 =20 /* XVS/XHS sync control */ -#define IMX678_REG_XMSTA CCI_REG8(0x3002) -#define IMX678_REG_XXS_DRV CCI_REG8(0x30a6) -#define IMX678_REG_XXS_OUTSEL CCI_REG8(0x30a4) +#define STARVIS2_REG_XMSTA CCI_REG8(0x3002) +#define STARVIS2_REG_XXS_DRV CCI_REG8(0x30a6) +#define STARVIS2_REG_XXS_OUTSEL CCI_REG8(0x30a4) =20 /* Clk selection */ -#define IMX678_REG_INCK_SEL CCI_REG8(0x3014) +#define STARVIS2_REG_INCK_SEL CCI_REG8(0x3014) =20 /* Link Speed */ -#define IMX678_REG_DATARATE_SEL CCI_REG8(0x3015) +#define STARVIS2_REG_DATARATE_SEL CCI_REG8(0x3015) =20 /* Lane Count */ -#define IMX678_REG_LANEMODE CCI_REG8(0x3040) +#define STARVIS2_REG_LANEMODE CCI_REG8(0x3040) =20 /* * The internal readout clock runs at 74.25 MHz. In one cycle the AD reads= 8 @@ -54,22 +60,22 @@ #define IMX678_PIX_PER_CLK 8 =20 /* VMAX - Frame Length in Lines */ -#define IMX678_REG_VMAX CCI_REG24_LE(0x3028) -#define IMX678_VMAX_MAX 0xfffff -#define IMX678_VMAX_DEFAULT 2250 +#define STARVIS2_REG_VMAX CCI_REG24_LE(0x3028) +#define STARVIS2_VMAX_MAX 0xfffff +#define IMX678_VMAX_DEFAULT 2250 =20 -/* HMAX - Line Length in Cycles (8 Pixels) */ -#define IMX678_REG_HMAX CCI_REG16_LE(0x302c) -#define IMX678_HMAX_MAX 0xffff +/* HMAX - Line Length in Cycles */ +#define STARVIS2_REG_HMAX CCI_REG16_LE(0x302c) +#define STARVIS2_HMAX_MAX 0xffff =20 /* SHR internal */ -#define IMX678_REG_SHR CCI_REG24_LE(0x3050) -#define IMX678_SHR_MIN 8 +#define STARVIS2_REG_SHR CCI_REG24_LE(0x3050) +#define STARVIS2_SHR_MIN 8 =20 /* Exposure control */ -#define IMX678_EXPOSURE_MIN 2 -#define IMX678_EXPOSURE_STEP 1 -#define IMX678_EXPOSURE_DEFAULT 1000 +#define STARVIS2_EXPOSURE_MIN 2 +#define STARVIS2_EXPOSURE_STEP 1 +#define STARVIS2_EXPOSURE_DEFAULT 1000 =20 /* * Analogue gain control @@ -77,63 +83,63 @@ * Values from 101 to 240 are valid but correspond to additional digital g= ain * (0.3dB - 42dB) so don't expose it to userspace */ -#define IMX678_REG_GAIN CCI_REG16_LE(0x3070) -#define IMX678_ANA_GAIN_MIN_NORMAL 0 -#define IMX678_ANA_GAIN_MAX_NORMAL 100 -#define IMX678_ANA_GAIN_STEP 1 -#define IMX678_ANA_GAIN_DEFAULT 0 +#define STARVIS2_REG_GAIN CCI_REG16_LE(0x3070) +#define STARVIS2_ANA_GAIN_MIN_NORMAL 0 +#define STARVIS2_ANA_GAIN_MAX_NORMAL 100 +#define STARVIS2_ANA_GAIN_STEP 1 +#define STARVIS2_ANA_GAIN_DEFAULT 0 =20 /* Crop */ -#define IMX678_REG_WINMODE CCI_REG8(0x3018) -#define IMX678_REG_PIX_HST CCI_REG16_LE(0x303c) -#define IMX678_REG_PIX_HWIDTH CCI_REG16_LE(0x303e) -#define IMX678_REG_PIX_VST CCI_REG16_LE(0x3044) -#define IMX678_REG_PIX_VWIDTH CCI_REG16_LE(0x3046) +#define STARVIS2_REG_WINMODE CCI_REG8(0x3018) +#define STARVIS2_REG_PIX_HST CCI_REG16_LE(0x303c) +#define STARVIS2_REG_PIX_HWIDTH CCI_REG16_LE(0x303e) +#define STARVIS2_REG_PIX_VST CCI_REG16_LE(0x3044) +#define STARVIS2_REG_PIX_VWIDTH CCI_REG16_LE(0x3046) =20 /* Flip */ -#define IMX678_REG_WINMODEH CCI_REG8(0x3020) -#define IMX678_REG_WINMODEV CCI_REG8(0x3021) +#define STARVIS2_REG_WINMODEH CCI_REG8(0x3020) +#define STARVIS2_REG_WINMODEV CCI_REG8(0x3021) =20 /* Sensor Identification */ -#define IMX678_REG_MONOCHROME CCI_REG8(0x4d18) -#define IMX678_TYPE BIT(0) +#define STARVIS2_REG_MONOCHROME CCI_REG8(0x4d18) +#define STARVIS2_TYPE BIT(0) #define IMX678_REG_MODULE_ID CCI_REG16_LE(0x4d1c) #define IMX678_ID 0x02a6 -#define IMX678_MODULE_ID_DELAY 80000 +#define STARVIS2_MODULE_ID_DELAY 80000 =20 /* Common configuration registers */ -#define IMX678_REG_WDMODE CCI_REG8(0x301a) -#define IMX678_REG_ADDMODE CCI_REG8(0x301b) -#define IMX678_REG_THIN_V_EN CCI_REG8(0x301c) -#define IMX678_REG_VCMODE CCI_REG8(0x301e) -#define IMX678_REG_ADBIT CCI_REG8(0x3022) -#define IMX678_REG_MDBIT CCI_REG8(0x3023) -#define IMX678_REG_GAIN_PGC_FIDMD CCI_REG8(0x3400) +#define STARVIS2_REG_WDMODE CCI_REG8(0x301a) +#define STARVIS2_REG_ADDMODE CCI_REG8(0x301b) +#define STARVIS2_REG_THIN_V_EN CCI_REG8(0x301c) +#define STARVIS2_REG_VCMODE CCI_REG8(0x301e) +#define STARVIS2_REG_ADBIT CCI_REG8(0x3022) +#define STARVIS2_REG_MDBIT CCI_REG8(0x3023) +#define STARVIS2_REG_GAIN_PGC_FIDMD CCI_REG8(0x3400) =20 /* Test pattern generator */ -#define IMX678_REG_TPG_EN_DUOUT CCI_REG8(0x30e0) -#define IMX678_REG_TPG_PATSEL_DUOUT CCI_REG8(0x30e2) -#define IMX678_TPG_ALL_000 0 -#define IMX678_TPG_ALL_FFF 1 -#define IMX678_TPG_ALL_555 2 -#define IMX678_TPG_ALL_AAA 3 -#define IMX678_TPG_TOG_555_AAA 4 -#define IMX678_TPG_TOG_AAA_555 5 -#define IMX678_TPG_TOG_000_555 6 -#define IMX678_TPG_TOG_555_000 7 -#define IMX678_TPG_TOG_000_FFF 8 -#define IMX678_TPG_TOG_FFF_000 9 -#define IMX678_TPG_H_COLOR_BARS 10 -#define IMX678_TPG_V_COLOR_BARS 11 -#define IMX678_REG_TPG_COLORWIDTH CCI_REG8(0x30e4) -#define IMX678_TPG_COLORWIDTH_80PIX 0 -#define IMX678_TPG_COLORWIDTH_160PIX 1 -#define IMX678_TPG_COLORWIDTH_320PIX 2 -#define IMX678_TPG_COLORWIDTH_640PIX 3 - -#define IMX678_REG_INTERFACE_SEL CCI_REG8(0x4e3c) -#define IMX678_INTERFACE_2L_4L 0x07 -#define IMX678_INTERFACE_8L_2x4L 0x7f +#define STARVIS2_REG_TPG_EN_DUOUT CCI_REG8(0x30e0) +#define STARVIS2_REG_TPG_PATSEL_DUOUT CCI_REG8(0x30e2) +#define STARVIS2_TPG_ALL_000 0 +#define STARVIS2_TPG_ALL_FFF 1 +#define STARVIS2_TPG_ALL_555 2 +#define STARVIS2_TPG_ALL_AAA 3 +#define STARVIS2_TPG_TOG_555_AAA 4 +#define STARVIS2_TPG_TOG_AAA_555 5 +#define STARVIS2_TPG_TOG_000_555 6 +#define STARVIS2_TPG_TOG_555_000 7 +#define STARVIS2_TPG_TOG_000_FFF 8 +#define STARVIS2_TPG_TOG_FFF_000 9 +#define STARVIS2_TPG_H_COLOR_BARS 10 +#define STARVIS2_TPG_V_COLOR_BARS 11 +#define STARVIS2_REG_TPG_COLORWIDTH CCI_REG8(0x30e4) +#define STARVIS2_TPG_COLORWIDTH_80PIX 0 +#define STARVIS2_TPG_COLORWIDTH_160PIX 1 +#define STARVIS2_TPG_COLORWIDTH_320PIX 2 +#define STARVIS2_TPG_COLORWIDTH_640PIX 3 + +#define STARVIS2_REG_INTERFACE_SEL CCI_REG8(0x4e3c) +#define STARVIS2_INTERFACE_2L_4L 0x07 +#define STARVIS2_INTERFACE_8L_2x4L 0x7f =20 /* Minimum output resolution */ #define IMX678_PIXEL_ARRAY_MIN_WIDTH 1040 @@ -146,7 +152,7 @@ #define IMX678_CROP_VST_ALIGN 4 =20 /* Subdev pads */ -#define IMX678_SOURCE_PAD 0 +#define STARVIS2_SOURCE_PAD 0 =20 /* IMX678 native and active pixel array size. */ static const struct v4l2_rect imx678_native_area =3D { @@ -163,73 +169,73 @@ static const struct v4l2_rect imx678_active_area =3D { .height =3D 2180, }; =20 -enum imx678_type { - IMX678_COLOR =3D 0, - IMX678_MONOCHROME =3D 1, +enum starvis2_type { + STARVIS2_COLOR =3D 0, + STARVIS2_MONOCHROME =3D 1, }; =20 -struct imx678_model_info { - enum imx678_type type; +struct starvis2_model_info { + enum starvis2_type type; const u32 *codes; unsigned int num_codes; }; =20 -enum imx678_lanemode { - IMX678_LANEMODE_2L =3D 1, - IMX678_LANEMODE_4L =3D 3, +enum starvis2_lanemode { + STARVIS2_LANEMODE_2L =3D 1, + STARVIS2_LANEMODE_4L =3D 3, }; =20 /* Link frequency setup (DDR: lane rate =3D 2 x link freq) */ enum { - IMX678_LINK_FREQ_297MHZ, - IMX678_LINK_FREQ_360MHZ, - IMX678_LINK_FREQ_445MHZ, - IMX678_LINK_FREQ_594MHZ, - IMX678_LINK_FREQ_720MHZ, - IMX678_LINK_FREQ_891MHZ, - IMX678_LINK_FREQ_1039MHZ, - IMX678_LINK_FREQ_1188MHZ, + STARVIS2_LINK_FREQ_297MHZ, + STARVIS2_LINK_FREQ_360MHZ, + STARVIS2_LINK_FREQ_445MHZ, + STARVIS2_LINK_FREQ_594MHZ, + STARVIS2_LINK_FREQ_720MHZ, + STARVIS2_LINK_FREQ_891MHZ, + STARVIS2_LINK_FREQ_1039MHZ, + STARVIS2_LINK_FREQ_1188MHZ, }; =20 static const u8 link_freqs_reg_value[] =3D { - [IMX678_LINK_FREQ_297MHZ] =3D 0x07, - [IMX678_LINK_FREQ_360MHZ] =3D 0x06, - [IMX678_LINK_FREQ_445MHZ] =3D 0x05, - [IMX678_LINK_FREQ_594MHZ] =3D 0x04, - [IMX678_LINK_FREQ_720MHZ] =3D 0x03, - [IMX678_LINK_FREQ_891MHZ] =3D 0x02, - [IMX678_LINK_FREQ_1039MHZ] =3D 0x01, - [IMX678_LINK_FREQ_1188MHZ] =3D 0x00, + [STARVIS2_LINK_FREQ_297MHZ] =3D 0x07, + [STARVIS2_LINK_FREQ_360MHZ] =3D 0x06, + [STARVIS2_LINK_FREQ_445MHZ] =3D 0x05, + [STARVIS2_LINK_FREQ_594MHZ] =3D 0x04, + [STARVIS2_LINK_FREQ_720MHZ] =3D 0x03, + [STARVIS2_LINK_FREQ_891MHZ] =3D 0x02, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 0x01, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 0x00, }; =20 static const u64 link_freqs[] =3D { - [IMX678_LINK_FREQ_297MHZ] =3D 297000000, - [IMX678_LINK_FREQ_360MHZ] =3D 360000000, - [IMX678_LINK_FREQ_445MHZ] =3D 445500000, - [IMX678_LINK_FREQ_594MHZ] =3D 594000000, - [IMX678_LINK_FREQ_720MHZ] =3D 720000000, - [IMX678_LINK_FREQ_891MHZ] =3D 891000000, - [IMX678_LINK_FREQ_1039MHZ] =3D 1039500000, - [IMX678_LINK_FREQ_1188MHZ] =3D 1188000000, + [STARVIS2_LINK_FREQ_297MHZ] =3D 297000000, + [STARVIS2_LINK_FREQ_360MHZ] =3D 360000000, + [STARVIS2_LINK_FREQ_445MHZ] =3D 445500000, + [STARVIS2_LINK_FREQ_594MHZ] =3D 594000000, + [STARVIS2_LINK_FREQ_720MHZ] =3D 720000000, + [STARVIS2_LINK_FREQ_891MHZ] =3D 891000000, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 1039500000, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 1188000000, }; =20 static const u16 min_hmax_4lane[] =3D { - [IMX678_LINK_FREQ_297MHZ] =3D 1584, - [IMX678_LINK_FREQ_360MHZ] =3D 1320, - [IMX678_LINK_FREQ_445MHZ] =3D 1100, - [IMX678_LINK_FREQ_594MHZ] =3D 792, - [IMX678_LINK_FREQ_720MHZ] =3D 660, - [IMX678_LINK_FREQ_891MHZ] =3D 550, - [IMX678_LINK_FREQ_1039MHZ] =3D 550, - [IMX678_LINK_FREQ_1188MHZ] =3D 550, + [STARVIS2_LINK_FREQ_297MHZ] =3D 1584, + [STARVIS2_LINK_FREQ_360MHZ] =3D 1320, + [STARVIS2_LINK_FREQ_445MHZ] =3D 1100, + [STARVIS2_LINK_FREQ_594MHZ] =3D 792, + [STARVIS2_LINK_FREQ_720MHZ] =3D 660, + [STARVIS2_LINK_FREQ_891MHZ] =3D 550, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 550, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 550, }; =20 -struct imx678_inck_cfg { +struct starvis2_inck_cfg { u32 xclk_hz; /* platform clock rate */ u8 inck_sel; /* value for reg */ }; =20 -static const struct imx678_inck_cfg imx678_inck_table[] =3D { +static const struct starvis2_inck_cfg starvis2_inck_table[] =3D { { 74250000, 0x00 }, { 37125000, 0x01 }, { 72000000, 0x02 }, @@ -240,7 +246,7 @@ static const struct imx678_inck_cfg imx678_inck_table[]= =3D { { 13500000, 0x07 }, }; =20 -static const char * const imx678_tpg_menu[] =3D { +static const char * const starvis2_tpg_menu[] =3D { "Disabled", "All 000h", "All FFFh", @@ -256,28 +262,28 @@ static const char * const imx678_tpg_menu[] =3D { "Vertical color bars", }; =20 -static const int imx678_tpg_val[] =3D { - IMX678_TPG_ALL_000, - IMX678_TPG_ALL_000, - IMX678_TPG_ALL_FFF, - IMX678_TPG_ALL_555, - IMX678_TPG_ALL_AAA, - IMX678_TPG_TOG_555_AAA, - IMX678_TPG_TOG_AAA_555, - IMX678_TPG_TOG_000_555, - IMX678_TPG_TOG_555_000, - IMX678_TPG_TOG_000_FFF, - IMX678_TPG_TOG_FFF_000, - IMX678_TPG_H_COLOR_BARS, - IMX678_TPG_V_COLOR_BARS, +static const int starvis2_tpg_val[] =3D { + STARVIS2_TPG_ALL_000, + STARVIS2_TPG_ALL_000, + STARVIS2_TPG_ALL_FFF, + STARVIS2_TPG_ALL_555, + STARVIS2_TPG_ALL_AAA, + STARVIS2_TPG_TOG_555_AAA, + STARVIS2_TPG_TOG_AAA_555, + STARVIS2_TPG_TOG_000_555, + STARVIS2_TPG_TOG_555_000, + STARVIS2_TPG_TOG_000_FFF, + STARVIS2_TPG_TOG_FFF_000, + STARVIS2_TPG_H_COLOR_BARS, + STARVIS2_TPG_V_COLOR_BARS, }; =20 /* Common configuration */ static const struct cci_reg_sequence common_regs[] =3D { - { IMX678_REG_THIN_V_EN, 0x00 }, - { IMX678_REG_VCMODE, 0x01 }, + { STARVIS2_REG_THIN_V_EN, 0x00 }, + { STARVIS2_REG_VCMODE, 0x01 }, { CCI_REG8(0x306b), 0x00 }, - { IMX678_REG_GAIN_PGC_FIDMD, 0x01 }, + { STARVIS2_REG_GAIN_PGC_FIDMD, 0x01 }, { CCI_REG8(0x3460), 0x22 }, { CCI_REG8(0x355a), 0x64 }, { CCI_REG8(0x3a02), 0x7a }, @@ -643,9 +649,9 @@ static const struct cci_reg_sequence common_regs[] =3D { { CCI_REG8(0x47c1), 0x01 }, { CCI_REG8(0x47c2), 0x3e }, { CCI_REG8(0x47c3), 0x01 }, - { IMX678_REG_WDMODE, 0x00 }, - { IMX678_REG_MDBIT, 0x01 }, - { IMX678_REG_XXS_DRV, 0x00 }, + { STARVIS2_REG_WDMODE, 0x00 }, + { STARVIS2_REG_MDBIT, 0x01 }, + { STARVIS2_REG_XXS_DRV, 0x00 }, }; =20 static const u32 codes_bayer[] =3D { @@ -656,30 +662,30 @@ static const u32 codes_monochrome[] =3D { MEDIA_BUS_FMT_Y12_1X12, }; =20 -static const struct imx678_model_info imx678_aaqr_info =3D { - .type =3D IMX678_COLOR, +static const struct starvis2_model_info imx678_aaqr_info =3D { + .type =3D STARVIS2_COLOR, .codes =3D codes_bayer, .num_codes =3D ARRAY_SIZE(codes_bayer), }; =20 -static const struct imx678_model_info imx678_aamr_info =3D { - .type =3D IMX678_MONOCHROME, +static const struct starvis2_model_info imx678_aamr_info =3D { + .type =3D STARVIS2_MONOCHROME, .codes =3D codes_monochrome, .num_codes =3D ARRAY_SIZE(codes_monochrome), }; =20 -static const char * const imx678_supply_name[] =3D { +static const char * const starvis2_supply_name[] =3D { "avdd", /* Analog (3.3V) supply */ "dvdd", /* Digital Core (1.1V) supply */ "ovdd", /* IF (1.8V) supply */ }; =20 -struct imx678 { +struct starvis2 { struct v4l2_subdev sd; struct media_pad pad; struct regmap *cci; =20 - const struct imx678_model_info *info; + const struct starvis2_model_info *info; =20 struct clk *xclk; u32 xclk_freq; @@ -688,11 +694,12 @@ struct imx678 { u8 inck_sel_val; =20 /* Link configurations */ - enum imx678_lanemode lane_mode; + enum starvis2_lanemode lane_mode; unsigned long link_freq_bitmap; =20 struct gpio_desc *reset_gpio; - struct regulator_bulk_data supplies[ARRAY_SIZE(imx678_supply_name)]; + struct regulator_bulk_data supplies[ARRAY_SIZE(starvis2_supply_name)]; + bool common_regs_written; =20 struct v4l2_ctrl_handler ctrl_handler; =20 @@ -705,49 +712,49 @@ struct imx678 { u32 vmax; }; =20 -static inline struct imx678 *to_imx678(struct v4l2_subdev *_sd) +static inline struct starvis2 *to_starvis2(struct v4l2_subdev *_sd) { - return container_of_const(_sd, struct imx678, sd); + return container_of_const(_sd, struct starvis2, sd); } =20 -static u32 imx678_default_mbus_code(struct imx678 *imx678) +static u32 starvis2_default_mbus_code(struct starvis2 *starvis2) { - return imx678->info->codes[0]; + return starvis2->info->codes[0]; } =20 -static bool imx678_mbus_code_supported(struct imx678 *imx678, u32 code) +static bool starvis2_mbus_code_supported(struct starvis2 *starvis2, u32 co= de) { - for (unsigned int i =3D 0; i < imx678->info->num_codes; i++) { - if (imx678->info->codes[i] =3D=3D code) + for (unsigned int i =3D 0; i < starvis2->info->num_codes; i++) { + if (starvis2->info->codes[i] =3D=3D code) return true; } =20 return false; } =20 -static int imx678_set_ctrl(struct v4l2_ctrl *ctrl) +static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) { - struct imx678 *imx678 =3D container_of_const(ctrl->handler, struct - imx678, ctrl_handler); - struct i2c_client *client =3D v4l2_get_subdevdata(&imx678->sd); + struct starvis2 *starvis2 =3D container_of_const(ctrl->handler, struct + starvis2, ctrl_handler); + struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); const struct v4l2_mbus_framefmt *format; struct v4l2_subdev_state *state; int ret =3D 0; =20 - state =3D v4l2_subdev_get_locked_active_state(&imx678->sd); - format =3D v4l2_subdev_state_get_format(state, IMX678_SOURCE_PAD); + state =3D v4l2_subdev_get_locked_active_state(&starvis2->sd); + format =3D v4l2_subdev_state_get_format(state, STARVIS2_SOURCE_PAD); =20 if (ctrl->id =3D=3D V4L2_CID_VBLANK) { - u32 current_exposure =3D imx678->exposure->cur.val; + u32 current_exposure =3D starvis2->exposure->cur.val; =20 - imx678->vmax =3D format->height + ctrl->val; + starvis2->vmax =3D format->height + ctrl->val; =20 current_exposure =3D clamp_t(u32, current_exposure, - IMX678_EXPOSURE_MIN, - imx678->vmax - IMX678_SHR_MIN); - ret =3D __v4l2_ctrl_modify_range(imx678->exposure, - IMX678_EXPOSURE_MIN, - imx678->vmax - IMX678_SHR_MIN, + STARVIS2_EXPOSURE_MIN, + starvis2->vmax - STARVIS2_SHR_MIN); + ret =3D __v4l2_ctrl_modify_range(starvis2->exposure, + STARVIS2_EXPOSURE_MIN, + starvis2->vmax - STARVIS2_SHR_MIN, 1, current_exposure); if (ret) return ret; @@ -762,38 +769,41 @@ static int imx678_set_ctrl(struct v4l2_ctrl *ctrl) =20 switch (ctrl->id) { case V4L2_CID_VBLANK: - cci_write(imx678->cci, IMX678_REG_VMAX, imx678->vmax, &ret); + cci_write(starvis2->cci, STARVIS2_REG_VMAX, starvis2->vmax, + &ret); fallthrough; /* SHR =3D VMAX - exposure, so update it */ case V4L2_CID_EXPOSURE: { - u32 shr =3D imx678->vmax - imx678->exposure->val; + u32 shr =3D starvis2->vmax - starvis2->exposure->val; =20 - cci_write(imx678->cci, IMX678_REG_SHR, shr, &ret); + cci_write(starvis2->cci, STARVIS2_REG_SHR, shr, &ret); break; } case V4L2_CID_ANALOGUE_GAIN: - cci_write(imx678->cci, IMX678_REG_GAIN, ctrl->val, &ret); + cci_write(starvis2->cci, STARVIS2_REG_GAIN, ctrl->val, &ret); break; case V4L2_CID_HBLANK: { u32 hmax =3D (format->width + ctrl->val) / IMX678_PIX_PER_CLK; =20 - cci_write(imx678->cci, IMX678_REG_HMAX, hmax, &ret); + cci_write(starvis2->cci, STARVIS2_REG_HMAX, hmax, &ret); break; } case V4L2_CID_TEST_PATTERN: { - cci_write(imx678->cci, IMX678_REG_TPG_COLORWIDTH, - IMX678_TPG_COLORWIDTH_160PIX, &ret); - cci_write(imx678->cci, IMX678_REG_TPG_PATSEL_DUOUT, - imx678_tpg_val[ctrl->val], &ret); - cci_write(imx678->cci, IMX678_REG_TPG_EN_DUOUT, + cci_write(starvis2->cci, STARVIS2_REG_TPG_COLORWIDTH, + STARVIS2_TPG_COLORWIDTH_160PIX, &ret); + cci_write(starvis2->cci, STARVIS2_REG_TPG_PATSEL_DUOUT, + starvis2_tpg_val[ctrl->val], &ret); + cci_write(starvis2->cci, STARVIS2_REG_TPG_EN_DUOUT, (ctrl->val) ? 1 : 0, &ret); break; } case V4L2_CID_HFLIP: - cci_write(imx678->cci, IMX678_REG_WINMODEH, ctrl->val, &ret); + cci_write(starvis2->cci, STARVIS2_REG_WINMODEH, ctrl->val, + &ret); break; case V4L2_CID_VFLIP: - cci_write(imx678->cci, IMX678_REG_WINMODEV, ctrl->val, &ret); + cci_write(starvis2->cci, STARVIS2_REG_WINMODEV, ctrl->val, + &ret); break; default: dev_warn(&client->dev, @@ -807,35 +817,35 @@ static int imx678_set_ctrl(struct v4l2_ctrl *ctrl) return ret; } =20 -static const struct v4l2_ctrl_ops imx678_ctrl_ops =3D { - .s_ctrl =3D imx678_set_ctrl, +static const struct v4l2_ctrl_ops starvis2_ctrl_ops =3D { + .s_ctrl =3D starvis2_set_ctrl, }; =20 -static int imx678_enum_mbus_code(struct v4l2_subdev *sd, - struct v4l2_subdev_state *sd_state, - struct v4l2_subdev_mbus_code_enum *code) +static int starvis2_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) { - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); =20 - if (code->index >=3D imx678->info->num_codes) + if (code->index >=3D starvis2->info->num_codes) return -EINVAL; =20 - code->code =3D imx678->info->codes[code->index]; + code->code =3D starvis2->info->codes[code->index]; =20 return 0; } =20 -static int imx678_enum_frame_size(struct v4l2_subdev *sd, - struct v4l2_subdev_state *sd_state, - struct v4l2_subdev_frame_size_enum *fse) +static int starvis2_enum_frame_size(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) { - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); const struct v4l2_rect *crop; =20 if (fse->index) return -EINVAL; =20 - if (!imx678_mbus_code_supported(imx678, fse->code)) + if (!starvis2_mbus_code_supported(starvis2, fse->code)) return -EINVAL; =20 crop =3D v4l2_subdev_state_get_crop(sd_state, fse->pad); @@ -848,10 +858,10 @@ static int imx678_enum_frame_size(struct v4l2_subdev = *sd, return 0; } =20 -static int imx678_get_selection(struct v4l2_subdev *sd, - const struct v4l2_subdev_client_info *ci, - struct v4l2_subdev_state *sd_state, - struct v4l2_subdev_selection *sel) +static int starvis2_get_selection(struct v4l2_subdev *sd, + const struct v4l2_subdev_client_info *ci, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) { switch (sel->target) { case V4L2_SEL_TGT_CROP: @@ -871,18 +881,18 @@ static int imx678_get_selection(struct v4l2_subdev *s= d, return -EINVAL; } =20 -static int imx678_init_state(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state) +static int starvis2_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) { - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); struct v4l2_mbus_framefmt *format; struct v4l2_rect *crop; =20 - crop =3D v4l2_subdev_state_get_crop(state, IMX678_SOURCE_PAD); + crop =3D v4l2_subdev_state_get_crop(state, STARVIS2_SOURCE_PAD); *crop =3D imx678_active_area; =20 - format =3D v4l2_subdev_state_get_format(state, IMX678_SOURCE_PAD); - format->code =3D imx678_default_mbus_code(imx678); + format =3D v4l2_subdev_state_get_format(state, STARVIS2_SOURCE_PAD); + format->code =3D starvis2_default_mbus_code(starvis2); format->width =3D imx678_active_area.width; format->height =3D imx678_active_area.height; format->field =3D V4L2_FIELD_NONE; @@ -894,50 +904,56 @@ static int imx678_init_state(struct v4l2_subdev *sd, return 0; } =20 -static int imx678_write_common(struct imx678 *imx678) +static int starvis2_write_common(struct starvis2 *starvis2) { int ret =3D 0; =20 - cci_multi_reg_write(imx678->cci, common_regs, ARRAY_SIZE(common_regs), + cci_multi_reg_write(starvis2->cci, common_regs, ARRAY_SIZE(common_regs), &ret); =20 - cci_write(imx678->cci, IMX678_REG_INCK_SEL, imx678->inck_sel_val, &ret); - cci_write(imx678->cci, IMX678_REG_DATARATE_SEL, - link_freqs_reg_value[__ffs(imx678->link_freq_bitmap)], &ret); - cci_write(imx678->cci, IMX678_REG_LANEMODE, imx678->lane_mode, &ret); - - cci_write(imx678->cci, IMX678_REG_INTERFACE_SEL, IMX678_INTERFACE_2L_4L, + cci_write(starvis2->cci, STARVIS2_REG_INCK_SEL, starvis2->inck_sel_val, + &ret); + cci_write(starvis2->cci, STARVIS2_REG_DATARATE_SEL, + link_freqs_reg_value[__ffs(starvis2->link_freq_bitmap)], + &ret); + cci_write(starvis2->cci, STARVIS2_REG_LANEMODE, starvis2->lane_mode, &ret); =20 + cci_write(starvis2->cci, STARVIS2_REG_INTERFACE_SEL, + STARVIS2_INTERFACE_2L_4L, &ret); + + if (!ret) + starvis2->common_regs_written =3D true; + return ret; } =20 -static int imx678_program_window(struct imx678 *imx678, - const struct v4l2_rect *crop) +static int starvis2_program_window(struct starvis2 *starvis2, + const struct v4l2_rect *crop) { int ret =3D 0; =20 - cci_write(imx678->cci, IMX678_REG_ADDMODE, 0x00, &ret); - cci_write(imx678->cci, IMX678_REG_WINMODE, + cci_write(starvis2->cci, STARVIS2_REG_ADDMODE, 0x00, &ret); + cci_write(starvis2->cci, STARVIS2_REG_WINMODE, v4l2_rect_equal(crop, &imx678_active_area) ? 0x00 : 0x04, &ret); - cci_write(imx678->cci, IMX678_REG_PIX_HST, + cci_write(starvis2->cci, STARVIS2_REG_PIX_HST, crop->left - imx678_active_area.left, &ret); - cci_write(imx678->cci, IMX678_REG_PIX_HWIDTH, crop->width, &ret); - cci_write(imx678->cci, IMX678_REG_PIX_VST, + cci_write(starvis2->cci, STARVIS2_REG_PIX_HWIDTH, crop->width, &ret); + cci_write(starvis2->cci, STARVIS2_REG_PIX_VST, crop->top - imx678_active_area.top, &ret); - cci_write(imx678->cci, IMX678_REG_PIX_VWIDTH, crop->height, &ret); - cci_write(imx678->cci, IMX678_REG_ADBIT, 0x01, &ret); + cci_write(starvis2->cci, STARVIS2_REG_PIX_VWIDTH, crop->height, &ret); + cci_write(starvis2->cci, STARVIS2_REG_ADBIT, 0x01, &ret); =20 return ret; } =20 -static int imx678_enable_streams(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, u32 pad, - u64 mask) +static int starvis2_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 mask) { struct i2c_client *client =3D v4l2_get_subdevdata(sd); - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); const struct v4l2_rect *crop; int ret; =20 @@ -945,25 +961,34 @@ static int imx678_enable_streams(struct v4l2_subdev *= sd, if (ret < 0) return ret; =20 + if (!starvis2->common_regs_written) { + ret =3D starvis2_write_common(starvis2); + if (ret) { + dev_err(&client->dev, "%s failed to write common registers\n", + __func__); + goto err_rpm_put; + } + } + crop =3D v4l2_subdev_state_get_crop(state, pad); - ret =3D imx678_program_window(imx678, crop); + ret =3D starvis2_program_window(starvis2, crop); if (ret) { dev_err(&client->dev, "%s failed to set mode\n", __func__); goto err_rpm_put; } =20 - ret =3D __v4l2_ctrl_handler_setup(imx678->sd.ctrl_handler); + ret =3D __v4l2_ctrl_handler_setup(starvis2->sd.ctrl_handler); if (ret) { dev_err(&client->dev, "%s failed to apply user values\n", __func__); goto err_rpm_put; } =20 - cci_write(imx678->cci, IMX678_REG_MODE_SELECT, IMX678_MODE_STREAMING, - &ret); - usleep_range(IMX678_STREAM_DELAY_US, IMX678_STREAM_DELAY_US + - IMX678_STREAM_DELAY_RANGE_US); - cci_write(imx678->cci, IMX678_REG_XMSTA, 0x00, &ret); + cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, + STARVIS2_MODE_STREAMING, &ret); + usleep_range(STARVIS2_STREAM_DELAY_US, STARVIS2_STREAM_DELAY_US + + STARVIS2_STREAM_DELAY_RANGE_US); + cci_write(starvis2->cci, STARVIS2_REG_XMSTA, 0x00, &ret); =20 if (ret) { dev_err(&client->dev, "%s failed to start streaming\n", @@ -979,19 +1004,19 @@ static int imx678_enable_streams(struct v4l2_subdev = *sd, return ret; } =20 -static int imx678_disable_streams(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, - u32 pad, u64 mask) +static int starvis2_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 pad, u64 mask) { struct i2c_client *client =3D v4l2_get_subdevdata(sd); - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); int ret =3D 0; =20 /* Master mode disable */ - cci_write(imx678->cci, IMX678_REG_XMSTA, 0x01, &ret); + cci_write(starvis2->cci, STARVIS2_REG_XMSTA, 0x01, &ret); /* Standby */ - cci_write(imx678->cci, IMX678_REG_MODE_SELECT, IMX678_MODE_STANDBY, - &ret); + cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, + STARVIS2_MODE_STANDBY, &ret); if (ret) dev_err(&client->dev, "%s failed to stop stream\n", __func__); =20 @@ -1000,15 +1025,15 @@ static int imx678_disable_streams(struct v4l2_subde= v *sd, return ret; } =20 -static int imx678_power_on(struct device *dev) +static int starvis2_power_on(struct device *dev) { struct i2c_client *client =3D to_i2c_client(dev); struct v4l2_subdev *sd =3D i2c_get_clientdata(client); - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); int ret; =20 - ret =3D regulator_bulk_enable(ARRAY_SIZE(imx678_supply_name), - imx678->supplies); + ret =3D regulator_bulk_enable(ARRAY_SIZE(starvis2_supply_name), + starvis2->supplies); if (ret) { dev_err(&client->dev, "%s: failed to enable regulators\n", __func__); @@ -1017,11 +1042,11 @@ static int imx678_power_on(struct device *dev) =20 fsleep(1); /* Tlow > 500ns */ =20 - gpiod_set_value_cansleep(imx678->reset_gpio, 0); + gpiod_set_value_cansleep(starvis2->reset_gpio, 0); =20 fsleep(1); /* T3 > 1us */ =20 - ret =3D clk_prepare_enable(imx678->xclk); + ret =3D clk_prepare_enable(starvis2->xclk); if (ret) { dev_err(&client->dev, "%s: failed to enable clock\n", __func__); @@ -1030,7 +1055,7 @@ static int imx678_power_on(struct device *dev) =20 fsleep(20); /* T4 > 20us */ =20 - ret =3D imx678_write_common(imx678); + ret =3D starvis2_write_common(starvis2); if (ret) { dev_err(&client->dev, "%s failed to write registers\n", __func__); @@ -1040,35 +1065,37 @@ static int imx678_power_on(struct device *dev) return 0; =20 clk_off: - clk_disable_unprepare(imx678->xclk); + clk_disable_unprepare(starvis2->xclk); =20 reg_off: - gpiod_set_value_cansleep(imx678->reset_gpio, 1); - regulator_bulk_disable(ARRAY_SIZE(imx678_supply_name), - imx678->supplies); + gpiod_set_value_cansleep(starvis2->reset_gpio, 1); + regulator_bulk_disable(ARRAY_SIZE(starvis2_supply_name), + starvis2->supplies); =20 return ret; } =20 -static int imx678_power_off(struct device *dev) +static int starvis2_power_off(struct device *dev) { struct i2c_client *client =3D to_i2c_client(dev); struct v4l2_subdev *sd =3D i2c_get_clientdata(client); - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); + + clk_disable_unprepare(starvis2->xclk); + gpiod_set_value_cansleep(starvis2->reset_gpio, 1); + regulator_bulk_disable(ARRAY_SIZE(starvis2_supply_name), + starvis2->supplies); =20 - clk_disable_unprepare(imx678->xclk); - gpiod_set_value_cansleep(imx678->reset_gpio, 1); - regulator_bulk_disable(ARRAY_SIZE(imx678_supply_name), - imx678->supplies); + starvis2->common_regs_written =3D false; =20 return 0; } =20 -static int imx678_identify_model(struct imx678 *imx678) +static int starvis2_identify_model(struct starvis2 *starvis2) { - struct i2c_client *client =3D v4l2_get_subdevdata(&imx678->sd); - const struct imx678_model_info *info; - enum imx678_type detected; + struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); + const struct starvis2_model_info *info; + enum starvis2_type detected; int ret =3D 0; u64 val =3D 0; =20 @@ -1078,10 +1105,10 @@ static int imx678_identify_model(struct imx678 *imx= 678) * This sensor's ID registers become accessible 80ms after coming out * of STANDBY mode. */ - cci_write(imx678->cci, IMX678_REG_MODE_SELECT, 0, &ret); - fsleep(IMX678_MODULE_ID_DELAY); + cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, 0, &ret); + fsleep(STARVIS2_MODULE_ID_DELAY); =20 - cci_read(imx678->cci, IMX678_REG_MODULE_ID, &val, &ret); + cci_read(starvis2->cci, IMX678_REG_MODULE_ID, &val, &ret); =20 if (ret) { dev_err(&client->dev, @@ -1095,7 +1122,7 @@ static int imx678_identify_model(struct imx678 *imx67= 8) return -ENXIO; } =20 - cci_read(imx678->cci, IMX678_REG_MONOCHROME, &val, &ret); + cci_read(starvis2->cci, STARVIS2_REG_MONOCHROME, &val, &ret); =20 if (ret) { dev_err(&client->dev, @@ -1103,55 +1130,57 @@ static int imx678_identify_model(struct imx678 *imx= 678) return ret; } =20 - detected =3D val & IMX678_TYPE; + detected =3D val & STARVIS2_TYPE; =20 /* Prefer to use sensor type specified in device tree */ if (info) { - imx678->info =3D info; + starvis2->info =3D info; if (detected !=3D info->type) dev_err(&client->dev, "detected %s sensor, DT specifies %s; using DT value\n", - detected =3D=3D IMX678_COLOR ? "color" : "mono", - info->type =3D=3D IMX678_COLOR ? "color" : "mono"); + detected =3D=3D STARVIS2_COLOR ? "color" : "mono", + info->type =3D=3D STARVIS2_COLOR ? "color" : "mono"); } else { - imx678->info =3D detected =3D=3D IMX678_MONOCHROME ? + starvis2->info =3D detected =3D=3D STARVIS2_MONOCHROME ? &imx678_aamr_info : &imx678_aaqr_info; dev_info(&client->dev, "sensor type missing in DT; detected %s sensor\n", - detected =3D=3D IMX678_MONOCHROME ? "mono" : "color"); + detected =3D=3D STARVIS2_MONOCHROME ? "mono" : "color"); } =20 return 0; } =20 -static const struct v4l2_subdev_video_ops imx678_video_ops =3D { +static const struct v4l2_subdev_video_ops starvis2_video_ops =3D { .s_stream =3D v4l2_subdev_s_stream_helper, }; =20 -static const struct v4l2_subdev_pad_ops imx678_pad_ops =3D { - .enum_mbus_code =3D imx678_enum_mbus_code, +static const struct v4l2_subdev_pad_ops starvis2_pad_ops =3D { + .enum_mbus_code =3D starvis2_enum_mbus_code, .get_fmt =3D v4l2_subdev_get_fmt, - .get_selection =3D imx678_get_selection, - .enum_frame_size =3D imx678_enum_frame_size, - .enable_streams =3D imx678_enable_streams, - .disable_streams =3D imx678_disable_streams, + .get_selection =3D starvis2_get_selection, + .enum_frame_size =3D starvis2_enum_frame_size, + .enable_streams =3D starvis2_enable_streams, + .disable_streams =3D starvis2_disable_streams, }; =20 -static const struct v4l2_subdev_ops imx678_subdev_ops =3D { - .video =3D &imx678_video_ops, - .pad =3D &imx678_pad_ops, +static const struct v4l2_subdev_ops starvis2_subdev_ops =3D { + .video =3D &starvis2_video_ops, + .pad =3D &starvis2_pad_ops, }; =20 -static const struct v4l2_subdev_internal_ops imx678_internal_ops =3D { - .init_state =3D imx678_init_state, +static const struct v4l2_subdev_internal_ops starvis2_internal_ops =3D { + .init_state =3D starvis2_init_state, }; =20 -static int imx678_init_controls(struct imx678 *imx678) +static int starvis2_init_controls(struct starvis2 *starvis2) { struct v4l2_ctrl_handler *ctrl_hdlr; - const u32 hmax_4lane =3D min_hmax_4lane[__ffs(imx678->link_freq_bitmap)]; - const u32 lane_scale =3D imx678->lane_mode =3D=3D IMX678_LANEMODE_2L ? 2 = : 1; - struct i2c_client *client =3D v4l2_get_subdevdata(&imx678->sd); + const u32 hmax_4lane =3D + min_hmax_4lane[__ffs(starvis2->link_freq_bitmap)]; + const u32 lane_scale =3D + starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_2L ? 2 : 1; + struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); struct v4l2_fwnode_device_properties props; struct v4l2_ctrl *link_freq; s32 hblank, max_hblank, vblank, max_vblank; @@ -1162,66 +1191,66 @@ static int imx678_init_controls(struct imx678 *imx6= 78) if (ret < 0) return ret; =20 - ctrl_hdlr =3D &imx678->ctrl_handler; + ctrl_hdlr =3D &starvis2->ctrl_handler; ret =3D v4l2_ctrl_handler_init(ctrl_hdlr, 11); if (ret) return ret; =20 - imx678->vmax =3D IMX678_VMAX_DEFAULT; + starvis2->vmax =3D IMX678_VMAX_DEFAULT; hmax =3D hmax_4lane * lane_scale; =20 /* PIXEL_RATE is fixed and read-only */ - v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, V4L2_CID_PIXEL_RATE, + v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_PIXEL_RATE, IMX678_PIXEL_RATE, IMX678_PIXEL_RATE, 1, IMX678_PIXEL_RATE); =20 /* LINK_FREQ is also read only */ - link_freq =3D v4l2_ctrl_new_int_menu(ctrl_hdlr, &imx678_ctrl_ops, + link_freq =3D v4l2_ctrl_new_int_menu(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_LINK_FREQ, ARRAY_SIZE(link_freqs) - 1, - __ffs(imx678->link_freq_bitmap), + __ffs(starvis2->link_freq_bitmap), link_freqs); =20 if (link_freq) link_freq->flags |=3D V4L2_CTRL_FLAG_READ_ONLY; =20 - vblank =3D imx678->vmax - imx678_active_area.height; - max_vblank =3D IMX678_VMAX_MAX - imx678_active_area.height; - imx678->vblank =3D v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, - V4L2_CID_VBLANK, vblank, max_vblank, - 2, vblank); + vblank =3D starvis2->vmax - imx678_active_area.height; + max_vblank =3D STARVIS2_VMAX_MAX - imx678_active_area.height; + starvis2->vblank =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, + V4L2_CID_VBLANK, vblank, max_vblank, + 2, vblank); =20 hblank =3D hmax * IMX678_PIX_PER_CLK - imx678_active_area.width; - max_hblank =3D IMX678_HMAX_MAX * IMX678_PIX_PER_CLK - + max_hblank =3D STARVIS2_HMAX_MAX * IMX678_PIX_PER_CLK - imx678_active_area.width; - imx678->hblank =3D v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, - V4L2_CID_HBLANK, hblank, max_hblank, - IMX678_PIX_PER_CLK, hblank); - - imx678->exposure =3D v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, - V4L2_CID_EXPOSURE, - IMX678_EXPOSURE_MIN, - IMX678_VMAX_DEFAULT - - IMX678_SHR_MIN, - IMX678_EXPOSURE_STEP, - IMX678_EXPOSURE_DEFAULT); - - v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, V4L2_CID_ANALOGUE_GAIN, - IMX678_ANA_GAIN_MIN_NORMAL, - IMX678_ANA_GAIN_MAX_NORMAL, IMX678_ANA_GAIN_STEP, - IMX678_ANA_GAIN_DEFAULT); - - v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, V4L2_CID_HFLIP, + starvis2->hblank =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, + V4L2_CID_HBLANK, hblank, max_hblank, + IMX678_PIX_PER_CLK, hblank); + + starvis2->exposure =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, + V4L2_CID_EXPOSURE, + STARVIS2_EXPOSURE_MIN, + IMX678_VMAX_DEFAULT - + STARVIS2_SHR_MIN, + STARVIS2_EXPOSURE_STEP, + STARVIS2_EXPOSURE_DEFAULT); + + v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_ANALOGUE_GAIN, + STARVIS2_ANA_GAIN_MIN_NORMAL, + STARVIS2_ANA_GAIN_MAX_NORMAL, STARVIS2_ANA_GAIN_STEP, + STARVIS2_ANA_GAIN_DEFAULT); + + v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_HFLIP, 0, 1, 1, 0); - v4l2_ctrl_new_std(ctrl_hdlr, &imx678_ctrl_ops, V4L2_CID_VFLIP, + v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_VFLIP, 0, 1, 1, 0); =20 - v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &imx678_ctrl_ops, + v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_TEST_PATTERN, - ARRAY_SIZE(imx678_tpg_menu) - 1, 0, 0, - imx678_tpg_menu); + ARRAY_SIZE(starvis2_tpg_menu) - 1, 0, 0, + starvis2_tpg_menu); =20 - v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &imx678_ctrl_ops, &props); + v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &starvis2_ctrl_ops, &props); =20 if (ctrl_hdlr->error) { ret =3D ctrl_hdlr->error; @@ -1231,12 +1260,12 @@ static int imx678_init_controls(struct imx678 *imx6= 78) return ret; } =20 - imx678->sd.ctrl_handler =3D ctrl_hdlr; + starvis2->sd.ctrl_handler =3D ctrl_hdlr; =20 return 0; } =20 -static int imx678_check_hwcfg(struct device *dev, struct imx678 *imx678) +static int starvis2_check_hwcfg(struct device *dev, struct starvis2 *starv= is2) { struct fwnode_handle *endpoint; struct v4l2_fwnode_endpoint ep_cfg =3D { @@ -1257,10 +1286,10 @@ static int imx678_check_hwcfg(struct device *dev, s= truct imx678 *imx678) =20 switch (ep_cfg.bus.mipi_csi2.num_data_lanes) { case 2: - imx678->lane_mode =3D IMX678_LANEMODE_2L; + starvis2->lane_mode =3D STARVIS2_LANEMODE_2L; break; case 4: - imx678->lane_mode =3D IMX678_LANEMODE_4L; + starvis2->lane_mode =3D STARVIS2_LANEMODE_4L; break; default: dev_err(dev, @@ -1271,7 +1300,7 @@ static int imx678_check_hwcfg(struct device *dev, str= uct imx678 *imx678) ret =3D v4l2_link_freq_to_bitmap(dev, ep_cfg.link_frequencies, ep_cfg.nr_of_link_frequencies, link_freqs, ARRAY_SIZE(link_freqs), - &imx678->link_freq_bitmap); + &starvis2->link_freq_bitmap); =20 error_out: v4l2_fwnode_endpoint_free(&ep_cfg); @@ -1280,95 +1309,95 @@ static int imx678_check_hwcfg(struct device *dev, s= truct imx678 *imx678) return ret; } =20 -static int imx678_probe(struct i2c_client *client) +static int starvis2_probe(struct i2c_client *client) { struct device *dev =3D &client->dev; - struct imx678 *imx678; + struct starvis2 *starvis2; int ret, i; =20 - imx678 =3D devm_kzalloc(&client->dev, sizeof(*imx678), GFP_KERNEL); - if (!imx678) + starvis2 =3D devm_kzalloc(&client->dev, sizeof(*starvis2), GFP_KERNEL); + if (!starvis2) return -ENOMEM; =20 - v4l2_i2c_subdev_init(&imx678->sd, client, &imx678_subdev_ops); + v4l2_i2c_subdev_init(&starvis2->sd, client, &starvis2_subdev_ops); =20 - imx678->cci =3D devm_cci_regmap_init_i2c(client, 16); - if (IS_ERR(imx678->cci)) - return dev_err_probe(dev, PTR_ERR(imx678->cci), + starvis2->cci =3D devm_cci_regmap_init_i2c(client, 16); + if (IS_ERR(starvis2->cci)) + return dev_err_probe(dev, PTR_ERR(starvis2->cci), "failed to init CCI\n"); =20 - if (imx678_check_hwcfg(dev, imx678)) + if (starvis2_check_hwcfg(dev, starvis2)) return -EINVAL; =20 - imx678->xclk =3D devm_v4l2_sensor_clk_get(dev, NULL); - if (IS_ERR(imx678->xclk)) - return dev_err_probe(dev, PTR_ERR(imx678->xclk), + starvis2->xclk =3D devm_v4l2_sensor_clk_get(dev, NULL); + if (IS_ERR(starvis2->xclk)) + return dev_err_probe(dev, PTR_ERR(starvis2->xclk), "failed to get xclk\n"); =20 - imx678->xclk_freq =3D clk_get_rate(imx678->xclk); + starvis2->xclk_freq =3D clk_get_rate(starvis2->xclk); =20 - for (i =3D 0; i < ARRAY_SIZE(imx678_inck_table); ++i) { - if (imx678_inck_table[i].xclk_hz =3D=3D imx678->xclk_freq) { - imx678->inck_sel_val =3D imx678_inck_table[i].inck_sel; + for (i =3D 0; i < ARRAY_SIZE(starvis2_inck_table); ++i) { + if (starvis2_inck_table[i].xclk_hz =3D=3D starvis2->xclk_freq) { + starvis2->inck_sel_val =3D starvis2_inck_table[i].inck_sel; break; } } =20 - if (i =3D=3D ARRAY_SIZE(imx678_inck_table)) + if (i =3D=3D ARRAY_SIZE(starvis2_inck_table)) return dev_err_probe(dev, -EINVAL, "unsupported XCLK rate %u Hz\n", - imx678->xclk_freq); + starvis2->xclk_freq); =20 - for (i =3D 0; i < ARRAY_SIZE(imx678_supply_name); i++) - imx678->supplies[i].supply =3D imx678_supply_name[i]; + for (i =3D 0; i < ARRAY_SIZE(starvis2_supply_name); i++) + starvis2->supplies[i].supply =3D starvis2_supply_name[i]; =20 ret =3D devm_regulator_bulk_get(&client->dev, - ARRAY_SIZE(imx678_supply_name), - imx678->supplies); + ARRAY_SIZE(starvis2_supply_name), + starvis2->supplies); if (ret) return dev_err_probe(dev, ret, "failed to get regulators\n"); =20 - imx678->reset_gpio =3D devm_gpiod_get_optional(dev, "reset", - GPIOD_OUT_HIGH); - if (IS_ERR(imx678->reset_gpio)) - return dev_err_probe(dev, PTR_ERR(imx678->reset_gpio), + starvis2->reset_gpio =3D devm_gpiod_get_optional(dev, "reset", + GPIOD_OUT_HIGH); + if (IS_ERR(starvis2->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(starvis2->reset_gpio), "failed to get reset GPIO\n"); =20 - ret =3D imx678_power_on(dev); + ret =3D starvis2_power_on(dev); if (ret) return ret; =20 - ret =3D imx678_identify_model(imx678); + ret =3D starvis2_identify_model(starvis2); if (ret) goto error_power_off; =20 pm_runtime_set_active(dev); pm_runtime_enable(dev); =20 - ret =3D imx678_init_controls(imx678); + ret =3D starvis2_init_controls(starvis2); if (ret) goto error_pm_runtime; =20 - imx678->sd.internal_ops =3D &imx678_internal_ops; - imx678->sd.flags |=3D V4L2_SUBDEV_FL_HAS_DEVNODE; - imx678->sd.entity.function =3D MEDIA_ENT_F_CAM_SENSOR; + starvis2->sd.internal_ops =3D &starvis2_internal_ops; + starvis2->sd.flags |=3D V4L2_SUBDEV_FL_HAS_DEVNODE; + starvis2->sd.entity.function =3D MEDIA_ENT_F_CAM_SENSOR; =20 - imx678->pad.flags =3D MEDIA_PAD_FL_SOURCE; + starvis2->pad.flags =3D MEDIA_PAD_FL_SOURCE; =20 - ret =3D media_entity_pads_init(&imx678->sd.entity, 1, &imx678->pad); + ret =3D media_entity_pads_init(&starvis2->sd.entity, 1, &starvis2->pad); if (ret) { dev_err_probe(dev, ret, "failed to init entity pads\n"); goto error_handler_free; } =20 - imx678->sd.state_lock =3D imx678->ctrl_handler.lock; - ret =3D v4l2_subdev_init_finalize(&imx678->sd); + starvis2->sd.state_lock =3D starvis2->ctrl_handler.lock; + ret =3D v4l2_subdev_init_finalize(&starvis2->sd); if (ret < 0) { dev_err_probe(dev, ret, "subdev init error\n"); goto error_media_entity; } =20 - ret =3D v4l2_async_register_subdev_sensor(&imx678->sd); + ret =3D v4l2_async_register_subdev_sensor(&starvis2->sd); if (ret < 0) { dev_err_probe(dev, ret, "failed to register sensor sub-device\n"); @@ -1380,45 +1409,45 @@ static int imx678_probe(struct i2c_client *client) return 0; =20 error_subdev_cleanup: - v4l2_subdev_cleanup(&imx678->sd); + v4l2_subdev_cleanup(&starvis2->sd); =20 error_media_entity: - media_entity_cleanup(&imx678->sd.entity); + media_entity_cleanup(&starvis2->sd.entity); =20 error_handler_free: - v4l2_ctrl_handler_free(imx678->sd.ctrl_handler); + v4l2_ctrl_handler_free(starvis2->sd.ctrl_handler); =20 error_pm_runtime: pm_runtime_disable(&client->dev); pm_runtime_set_suspended(&client->dev); =20 error_power_off: - imx678_power_off(&client->dev); + starvis2_power_off(&client->dev); =20 return ret; } =20 -static void imx678_remove(struct i2c_client *client) +static void starvis2_remove(struct i2c_client *client) { struct v4l2_subdev *sd =3D i2c_get_clientdata(client); - struct imx678 *imx678 =3D to_imx678(sd); + struct starvis2 *starvis2 =3D to_starvis2(sd); =20 v4l2_async_unregister_subdev(sd); v4l2_subdev_cleanup(sd); media_entity_cleanup(&sd->entity); - v4l2_ctrl_handler_free(imx678->sd.ctrl_handler); + v4l2_ctrl_handler_free(starvis2->sd.ctrl_handler); =20 pm_runtime_disable(&client->dev); if (!pm_runtime_status_suspended(&client->dev)) - imx678_power_off(&client->dev); + starvis2_power_off(&client->dev); pm_runtime_set_suspended(&client->dev); } =20 -static const struct dev_pm_ops imx678_pm_ops =3D { - SET_RUNTIME_PM_OPS(imx678_power_off, imx678_power_on, NULL) +static const struct dev_pm_ops starvis2_pm_ops =3D { + SET_RUNTIME_PM_OPS(starvis2_power_off, starvis2_power_on, NULL) }; =20 -static const struct of_device_id imx678_of_match[] =3D { +static const struct of_device_id starvis2_of_match[] =3D { { .compatible =3D "sony,imx678-aamr", .data =3D &imx678_aamr_info }, { .compatible =3D "sony,imx678-aaqr", .data =3D &imx678_aaqr_info }, /* for non-conforming DTs that rely on runtime check */ @@ -1426,22 +1455,23 @@ static const struct of_device_id imx678_of_match[] = =3D { { /* sentinel */ } }; =20 -MODULE_DEVICE_TABLE(of, imx678_of_match); +MODULE_DEVICE_TABLE(of, starvis2_of_match); =20 -static struct i2c_driver imx678_i2c_driver =3D { +static struct i2c_driver starvis2_i2c_driver =3D { .driver =3D { - .name =3D "imx678", - .of_match_table =3D imx678_of_match, - .pm =3D pm_ptr(&imx678_pm_ops), + .name =3D "starvis2", + .of_match_table =3D starvis2_of_match, + .pm =3D pm_ptr(&starvis2_pm_ops), }, - .probe =3D imx678_probe, - .remove =3D imx678_remove, + .probe =3D starvis2_probe, + .remove =3D starvis2_remove, }; =20 -module_i2c_driver(imx678_i2c_driver); +module_i2c_driver(starvis2_i2c_driver); =20 MODULE_AUTHOR("Will Whang "); MODULE_AUTHOR("Tetsuya NOMURA "); MODULE_AUTHOR("Jai Luthra "); -MODULE_DESCRIPTION("Sony imx678 sensor driver"); +MODULE_AUTHOR("Dave Stevenson "); +MODULE_DESCRIPTION("Sony Starvis 2 sensor driver"); MODULE_LICENSE("GPL"); --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.49 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690471; b=vfVuj+dZI4VXFx+y53ZKFcdME7QuWt84JJIYoMaHmCJf193+p/HaW01tCnOeQVwGoeSW GX4Ui+7+mv4els/6GgExNJB1/D7ULwRC3TFRZinyteD74+/u3ebkAFo1bAo7QQ9hbCOQb BI+kN486cMsOA8yIbM8E7/1+1OuMeuWLzoAQsy2OvzRX23TqyCEojwXefmS8k2KW9r5PW IslyWYggq/PZaxBU+ZYVGkMq4OaDmbWMllbiavHaPKPFr5jFROu3cU0J73s5zojbYcOK7 uRd8G5nmZYSkzywyivbUdCcmnfk3jGmULv+grjrCFUOcylsWkAcK4WPqlb/WO+Uvorg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690471; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=g2Q9s7RMNeWpcW6ZkkIYUa+Y/Qr4kaBiQvLPfc53Zu8=; b=zFqdE8CyBRufhBAt7Pl3SKiOiAvXw7qEoYUZM6rLFB5cpvhuN4GbkdYPWtshBARz49+q +9honnQ6G+EQmQO8OGve0wt5/Nn3DlZi7MDHWLVoH8MBUg1nEs6JhPWgTnhIkKzBG6QK8 DyOqTWMcygyqD0x7CYmiDVmkAx83/y8NWNXeidJJQ0uWAMzJs39PEKC2K4auoxRhivxWg LQIpTSdxyXeWIE+DCmsFQ2LRMKrAX6Z0vlI0wJwXdyeVfq6En1Wmo10iQ1wQadp3H6O/T 3hmmtMQSKRATuVjGpWZp4brNv8BaiEA1XLzx6lS122CqizFECTr+dWGAIIGhpFqRGgQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=bgas6k85; arc=none smtp.remote-ip=209.85.221.49 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3063E606A326 for ; Thu, 22 Oct 2026 17:34:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 3063E606A326 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=bgas6k85 Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-48afbd2c386so28811f8f.3 for ; Thu, 22 Oct 2026 10:34:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690469; x=1793295269; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=g2Q9s7RMNeWpcW6ZkkIYUa+Y/Qr4kaBiQvLPfc53Zu8=; b=bgas6k85plq4qK7o8D+nY+Q1OOUJLT2FZsMDezlnz8GaTMY9Eg3NesEQ8SYQ0/1HmA BJPsgtKjU3nFeqc1sZlOiinJI/gMiF+9/JbxChw2ENC17eLFXb4VbBdCSst9+Bens5S2 S8XpoTXqLee+MDHs6RNM6h1hWSpE68Rwk/5+R6sg2gOfab7t0PWr0+cIgVcYfC+IY4pA KeCqH9nuQUbxGWDVeBp+xXiz7lgbkQVQoFX+tIOkci4OSp9u9fU2Mq2flMACj/72nyMa Yb63uggzRSgJ0fvla8CP4OMy+P3S/upPLJsCwTXspu8eDfLJ4GBDotIzhRitJLdRSS5h 7qTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690469; x=1793295269; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=g2Q9s7RMNeWpcW6ZkkIYUa+Y/Qr4kaBiQvLPfc53Zu8=; b=xKTEn2s6DMfa3Cl4Q9U1vOJCOEOtQ8uSMTVlT+0qEMzkB7sWQvW9QShTr6bzfCWdVM bd1r7Hs0ZoXtqsHnscma0pbi+YlYj6euLxqAIqs4Jf+VOdM3vuc4vjYWzjg5SKit6T94 +WIAQg87nlLp3fS+2i48lnGi9xMX0dsf3j8PYjGdNAHJkoTR7enWcWQ9Aw99qDtEE46V setG/+8YuIm+80LUrcWUqxMvC5lyJ+EuyFFMBNZI+Seqzej4gwM+gbhUZaKfIxvqcVau KW70/1FLgVlR2/t0xwHRcBYa7lF2NpGWU6JtqI6CwXZSTM1Uvh9G3E44igNoc9/ywlPg 4wpQ== X-Forwarded-Encrypted: i=1; AKwUvBy9YbpiWO8g5yBH6YVFhgNmpZ6ws1XdtFR+bWOodO8GsA8e6zxjF22N9Q11ggCXOx0+1c9WMorLL7LZVLc=@vger.kernel.org X-Gm-Message-State: AFq9FYIMOELhuAVV5r1hLVtbgl2CUGCIpyKmCdL49m1v2I6JOjeUmL7q 8LoaKOt7AQGLMpn2Pdxvuij8q/HIyfTtP090RoJbeN/DFQqjpoCpxWi3W5V2ORgPZdM= X-Gm-Gg: AYBFou0kP57nljQFa2tviVktwIg6feBqsux3v5N9utGRYyX3lEL+akLG/YsBfAmrjEy PfGVbdDgUJXgHApkbHpb2yKDoVZSfGLQHOSoqZIhKb1KgrjfGQsNOiiSBp6LaYcd6oTxnC+WMc7 ulocOq83FyqNTEnTjUme2tiiSh1CbHjfAEd0nI7M6BSHIYhE4J2jxyvP9/hijY8sr1cVvJbcTHV kD8NFFrKKlUQtfwcmL0SsnyAHpbn+lJZ0djL/0AndM61QYj5JBMwJnc+igv7GU9Exa84zhagJ5z eSXuBPUvK6oMJzLYdHeH9tQwTxYt+RJ0Novp2ILnAdAhPVIVAGuO3So3QSYepi44Coa73jzzjgd wLLZ0bK2ljkoL4p9I1t5Q2+dT4JnS9IvwLEovzVa43y+AMlRV7Ld10WhRvKAgX/yAK+9+MhO3Nk 1BUyIZX4sQHBuHiXjGSGkfgIo+Aqg6YJYC8PQ1lHk/gAztoQm17s6zxW4l3G0fFAfsUVdgxkSGC 7lcbIV+POWMBUs2AfqHbzZ3VkyVWbDlL4+xbp7NEkyMQHu1v/gJj6wmlHIkpb/ac2aOnOCCO/GB 690AQ+TjyB5yA4PlRJdWRUpgBeuDpbk= X-Received: by 2002:a5d:40cb:0:b0:48c:7037:aee9 with SMTP id ffacd0b85a97d-48e264e01dbmr9492451f8f.50.1792690469507; Thu, 22 Oct 2026 10:34:29 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:28 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:33:55 +0100 Subject: [PATCH v6 02/18] media: sony-starvis2: Reorder link frequencies to remove lookup X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-2-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 link_freqs_reg_value is table that just reverses the order of the link frequency enum. Reverse the order of the link frequencies so that the table is redundant, and remove it. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index e62cde583324..134fececac5c 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -187,25 +187,14 @@ enum starvis2_lanemode { =20 /* Link frequency setup (DDR: lane rate =3D 2 x link freq) */ enum { - STARVIS2_LINK_FREQ_297MHZ, - STARVIS2_LINK_FREQ_360MHZ, - STARVIS2_LINK_FREQ_445MHZ, - STARVIS2_LINK_FREQ_594MHZ, - STARVIS2_LINK_FREQ_720MHZ, - STARVIS2_LINK_FREQ_891MHZ, - STARVIS2_LINK_FREQ_1039MHZ, - STARVIS2_LINK_FREQ_1188MHZ, -}; - -static const u8 link_freqs_reg_value[] =3D { - [STARVIS2_LINK_FREQ_297MHZ] =3D 0x07, - [STARVIS2_LINK_FREQ_360MHZ] =3D 0x06, - [STARVIS2_LINK_FREQ_445MHZ] =3D 0x05, - [STARVIS2_LINK_FREQ_594MHZ] =3D 0x04, - [STARVIS2_LINK_FREQ_720MHZ] =3D 0x03, - [STARVIS2_LINK_FREQ_891MHZ] =3D 0x02, - [STARVIS2_LINK_FREQ_1039MHZ] =3D 0x01, - [STARVIS2_LINK_FREQ_1188MHZ] =3D 0x00, + STARVIS2_LINK_FREQ_1188MHZ =3D 0x00, + STARVIS2_LINK_FREQ_1039MHZ =3D 0x01, + STARVIS2_LINK_FREQ_891MHZ =3D 0x02, + STARVIS2_LINK_FREQ_720MHZ =3D 0x03, + STARVIS2_LINK_FREQ_594MHZ =3D 0x04, + STARVIS2_LINK_FREQ_445MHZ =3D 0x05, + STARVIS2_LINK_FREQ_360MHZ =3D 0x06, + STARVIS2_LINK_FREQ_297MHZ =3D 0x07, }; =20 static const u64 link_freqs[] =3D { @@ -914,7 +903,7 @@ static int starvis2_write_common(struct starvis2 *starv= is2) cci_write(starvis2->cci, STARVIS2_REG_INCK_SEL, starvis2->inck_sel_val, &ret); cci_write(starvis2->cci, STARVIS2_REG_DATARATE_SEL, - link_freqs_reg_value[__ffs(starvis2->link_freq_bitmap)], + __fls(starvis2->link_freq_bitmap), &ret); cci_write(starvis2->cci, STARVIS2_REG_LANEMODE, starvis2->lane_mode, &ret); @@ -1177,7 +1166,7 @@ static int starvis2_init_controls(struct starvis2 *st= arvis2) { struct v4l2_ctrl_handler *ctrl_hdlr; const u32 hmax_4lane =3D - min_hmax_4lane[__ffs(starvis2->link_freq_bitmap)]; + min_hmax_4lane[__fls(starvis2->link_freq_bitmap)]; const u32 lane_scale =3D starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_2L ? 2 : 1; struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.50 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690478; b=T/lobMBxBa3OAahe1MGrLq0LKdpHR3K5rMYHEShWXE4MS3jbZ5uRNz4MbDvlMHlKc0h8 Yo+aWgYMH1zFy0zMve9D631c7X7yNcm0x95YqltF16jSx2qc7pB7CcbzhiUSEmn/1ZfuC kX0wL/V+G/hEcv15CNwJMTIaHPhgFTL7pSnrhPX61Ym1bZAl0qMhX5r1AKKMJTnmn8pV9 br7trClB36TkIHo72TPePiF2ppTNwCuU7zZOdiY+2+Rnw6ZJlVgADXAhawp93MrYnIB1p bwgGWGU8BLCSsBphgwt1IIcua+dtR63QYQrqPfF/1F2X52M/jhZPWl443XhnUCw/RwQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690478; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=9oRqdB++2GBtO6OCTBhjNHrcmPfpGdib9AfbOdOg6oY=; b=yw5Jw3PoEjSkGvULDFOAs3M9jzIEY2MAi0+qPzvdw5h/2ysyy88i/Y50StY+IU7JZ7VO b+ayKKG4c3tQRNaz5EqVBHm2ixr9PKRvZE5tyZx00JkZAIV6PnZaBw7m/yI+bqY7C9/qE ZCjvwq2GgLz/G0mWaL1J7fVTqDoGTmYVeSBGeZKydniqRXq/QJV8NeA1A1AT352xvZhlw JZjKW4PpSHiXPkSMjwlyhkfsGGuba+eGSHhdc1Zzm0Ei2gb0zZTBKCyOD9TfpB+V7OWXX 5yvcQW6ZV/rk69yEpy7gR3jiPgV6WhxHdwKFNt1jcv1vQOahtSs9EwX2uK3dxbAFxrg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=redEqoEx; arc=none smtp.remote-ip=209.85.128.50 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8D41606A329 for ; Thu, 22 Oct 2026 17:34:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org B8D41606A329 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=redEqoEx Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4a208d93758so673265e9.3 for ; Thu, 22 Oct 2026 10:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690471; x=1793295271; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9oRqdB++2GBtO6OCTBhjNHrcmPfpGdib9AfbOdOg6oY=; b=redEqoExeBfRPB4HydW2hut2CDqjFdcbosZhclRkDYRZsj0r3PNwR6k4MeKJoP6J2T NvEjW+piKiCzWFYDMcWAD4b0BnBVr1nr33fMTixOcyVm1nMlxPjhZceSCpxsR0a7/ILu xmgwlev7nIsAQdVM7n/9M/yLmU8HQeCdUKW6ksHJhnSsdu0BkocGKStaYxaa/U4WbblS 2xrnWk94n2NwSKa39n7s8DP0axdnQIzTkbhR5X18V/0eAaYOTEEgmqwtynxEb8vVzzgJ gsblAOloKSoprmBR+c2APf/9RU7mH6QEDaXNsG2qRYCxEEt74UKRGhnU7nETP4ni9BEl rxiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690471; x=1793295271; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9oRqdB++2GBtO6OCTBhjNHrcmPfpGdib9AfbOdOg6oY=; b=fnkn4YVJU6lYOptYLSRzOmjgwjp5rSbcioXzEte07lrFwb2clPZHFlluumQ5NcEMH6 V+0hipmtgvL3UssgKdYcC1BfGhH8USlqYC0XCBhEznErsk/Dw7EPNHxroU2HxNOZ5u3m 6bqu90cmghgXsbAYbhrp5OLzyqYQr3Y+6kdZNm+F3JOXI9vTYTHi5bzchRaC/ZDdq0gP EvfykjpoABBrnef0IDmP1H0UNsbPT0CbDAKywi6GieuL3qyUEjIkrzQq48i6tHFJE00K ya1Ciqqd1XMhYHRYMX7qLX3YJQR9hi7nPyECFuLQqTFFvu6qvWOO3n5ABHkSOp80SxAq +Yvg== X-Forwarded-Encrypted: i=1; AKwUvBywCGW91qeuor2uBoHj4HbcQ6sfETZTHm3I64WiHOf9qMh7SxBUWIHpp8ekSoLm3rEz4d4PgAryG3M209A=@vger.kernel.org X-Gm-Message-State: AFq9FYKF8lSdPwwuVOdfXsq4n0JbwsNPyDglvtP3Yy3h4G8Xm+Fg7tO9 3L9ffnsEet8MDUeHC3c1xim3zH/KxgchAdjwSO2+yVRBvpTc02+ReULUCO5ymkPuqNk= X-Gm-Gg: AYBFou000JCJw3F2ufHrunQtVc8Lu7X2rpO0dfDhwFyYbqYUDVtBem/77fq1wz07eu4 b/KIbun7oJP9gkK7j871XkpGYaQSWKVe4Nb5bPQpr+7oRXS4T+aqxtwTMEab3dI4l7RpyPeXmM5 ow9IRfkcR4E7jR6kwh94VymYcyCv2t00Hy9Szm/Ob6yFVyBXPfeZ7jnE9g1NMpsS7RXQC63rwGV h4uewIVW711I6ZtMqiRRymMaA7pdCiWOcwVIhjIitbadRefmjDnIQcj1IRQ4KooQv/GL1ViuLrR m3IiwAv9PVecwvVAb2k0jteiqOkA56aFEuYYX9+kZwZ4b/IoQJQxD4sMVHewb37sNd05zXftzfq 3NXn7TMBKq729qRfPgZrL9MBR2b/XnR2ZH6bQ17h7T8VKBvarnZySMm1RqxIexoJu9Xp5NMgH/j xNNrmftKcU12Kfa8YYFA+41f/xevm7T3IyIWxH4lESzkeb2lm/8s0UIibBr3EGg2Z7/bFU2zLQd WcLchFBPLkO8VwMgJlXhe6AmjiSIfAKzJ1TbLFR0Saf2zLYKRNfouN/WI3PxMpf/GzSbUwEktec gvk5AutNWxHwi0d4MqQO69F0vn4kOko= X-Received: by 2002:a05:6000:26c9:b0:48e:1299:663f with SMTP id ffacd0b85a97d-48e264f1802mr13082880f8f.56.1792690470487; Thu, 22 Oct 2026 10:34:30 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:29 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:33:56 +0100 Subject: [PATCH v6 03/18] media: sony-starvis2: Always program the sensor in window mode X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-3-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 If the requested region matched the defined active area then the driver switched to all-pixel mode. This left the possibility that the active area was incorrect and not reading out the area expected. Switch to always requesting window mode to avoid this potential mismatch. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 134fececac5c..31aa1ec6ba40 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -923,9 +923,7 @@ static int starvis2_program_window(struct starvis2 *sta= rvis2, int ret =3D 0; =20 cci_write(starvis2->cci, STARVIS2_REG_ADDMODE, 0x00, &ret); - cci_write(starvis2->cci, STARVIS2_REG_WINMODE, - v4l2_rect_equal(crop, &imx678_active_area) ? 0x00 : 0x04, - &ret); + cci_write(starvis2->cci, STARVIS2_REG_WINMODE, 0x04, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_HST, crop->left - imx678_active_area.left, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_HWIDTH, crop->width, &ret); --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.42 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690474; b=3mdfAvo1Fqigz+4sj+pmnUr6lhaN16y2NAw6OyHvTSeuT+9jVYizW+45ix8Cof8b0nAA o++Rfu4Zhookj0N2hpNEu15dlzv5sCRsfa0U9RDUwrA6fs+tdbrUrJ4xlOIoltZe4B8jB 0QOrfizmnw9c43cJrCSLO8ot6bayOQidoVSp9yWLN389AY35SQKGFYKjXsvU98rRfRuF3 YKyarBhdlAiuHuTTgMTyvxVxEPPrugzTP/YE1GzK1rA5QlGJj2+hp0sPQoaoCf7rec5DF JHP8pwm0QCxx9JxcvPNNb2womfxQ8E3+DI9wVHLMDaKs1yfV48Y4ZzQpQwcPGuEOEMQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690474; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=4igyGi55MaudIHEAxVdidERXeJK3vgMCughZT/NZkT8=; b=yPQsKxf1kZ6CzgUSP9EHi41VZRNMvPx0+Sp+sCCgae2XtWKTVtr9l45DQUITfEWiQozu ChJxBIXhzuxGuCdwNqlemEmf+dPmWWYWkp2t2gLh1ThChEuXK94jfSPbE0tp9GAvyjanG wD0KLAmZja76H5pNuzafFLFXAR7ApSTPy08qpjhAIrS0AnkIKWpL77xNyV8wm5vAekGKa UOuL+JjhP1cYfVt3aVvvWqZ9jhEgVGJrlhxTbT+oLDZJlteLViJL3wEDnSppHIzGpSKIG IdS9Y1JFUG/yI5SA5S4TFm88V50QVRZjIt0LSWb349+USYP7dP4pSVJ9Rv/Vu5k563w== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=aBaBP4NE; arc=none smtp.remote-ip=209.85.221.42 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C9F0606A33D for ; Thu, 22 Oct 2026 17:34:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 1C9F0606A33D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=aBaBP4NE Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-48dfaa3fa12so896743f8f.0 for ; Thu, 22 Oct 2026 10:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690471; x=1793295271; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4igyGi55MaudIHEAxVdidERXeJK3vgMCughZT/NZkT8=; b=aBaBP4NE0dJouqOpsT7QAgstJUyLmHKNwoVwoVBTWiUQ5xdXn/pI1KXhO/MNBiqfM9 fL2ro7/ttNKAv/Rbz4sAk3e9rF+5u46Ee8Vq1JRXKjXWTjRdCHb02YKJnHFKP5PuSJQ1 0azIQHEhRMTlncXwtO/5PUt/V3iSt2XcoVT30KXcrrnwooL6rBFgPXLEtXGroi/XSdSo je4RRZQCuNrl9SWPJE+1XkS3HvCuaBaAYb1cgG6yuFpGtBERzPlroBy6b0ZmSkoK7LVQ xDbE92u0PLYX0pzQ+Vt0+T1u4mEuKQMqKHlSFVhUkA7O5ULd9Y+JAMuBBstivj0s4Q4/ nrZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690471; x=1793295271; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4igyGi55MaudIHEAxVdidERXeJK3vgMCughZT/NZkT8=; b=pxOjxmmaBBB3yRz3e7L0oKrbP9intWklwwfX6AsrppJdswNhRXpRZjkeWRaYb9lZu2 xtgZWSihZUl+L4JWNU0Ut9ZxvI3FF6dEWwLf3VKPPBfaRf0AEI80oeWMdwgZvJkm+a4I T+L7QrnRhqaOdVErkC8S7dvUdIiA+niUiSothoc+kZXV2YokgvzOsutsjIqt6ST2W4sy G2PZvnz8KoZnIPGNNEWJbfdiY8sV4e6ED82xi5+qniyFNi0lpYRMNSrOZ8m1LqaDQ43r Vz0fNcWXiVl5t+lEDkrv4kshd4GARj5ChtUSgzonW8NgbQtjPKPQeb8sDOjlIdKCC5jT q/kA== X-Forwarded-Encrypted: i=1; AKwUvBwu56XSb6N75hMmNROsAPb6S9o+GeeFOYQQ3FalB68JO7bAvmOH0fX1jCjcrCuATf8boyt8wjvjier4+b8=@vger.kernel.org X-Gm-Message-State: AFq9FYIbDGrVzWfZ5DSIJDAGVfR+KEj7UEh4Hx7ocAZBzc53Ia0+y+z7 ceOxf5clTGfEuAuL0XNHlHS5OdUelKOS/Y64iNbbSaoKq3HZ5IA+tiOQYQZbsUr7py0= X-Gm-Gg: AYBFou0/WYM1STFmLY8XcgCtA9W6A49bAJ29YOH1rO+E352NsJc2bFc7vJdjcP/zx72 xkpOMqEfncia8bzeZq9bZBNZuctnJ0eHP+IhIxYEDLwlmpX8V0jTmK1MtrkDGISKmao4vKYLjSf RnUEYbRt/SDlz1ay4Ppa9rEw6+TPcPvcoBBakGrMTpjIUisQK8WzSADQcYOuA3MgQa9d/9yLPLM sP+Q6KqmkQxMIc8Q4DBaz4ldc5gFhO/KBpX/Kc+FEB0sVpSMYF2m8Hi6xk6awg10SziMpgq4Eia x6vDLuH61vWD0nbFBjdY6X/julugpUibgaGqLqdjx15YvDZipj6dlKWX6uHoDgZM7dhHZDhPIMQ l/l2Ubm3gs4BerkWfVTIqhxouJuGecZXdc96+zNKHYWp77d7+8oCnT5pRjmQ0sJs93CV6JlsjJz U/hNvH+uVQ7gOPMICFD7oj+9CqI40JYwt6iNwqvWVNgEmBt+fOebafevddnaUNc1GCGfbpDuUsF hh/zLi1HJt8BjdU5UU+AzShb1MZKsP4sk6vM/a7MA+rAqEykRV9iGPi1PLRaRJgk2AdeO//oCaQ +IP70GUHlPxOmwXWwvVCEVF5ETEf8ts= X-Received: by 2002:a05:6000:4313:b0:48e:850:c0b7 with SMTP id ffacd0b85a97d-48e2d0f6eb5mr7706643f8f.1.1792690471493; Thu, 22 Oct 2026 10:34:31 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:30 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:33:57 +0100 Subject: [PATCH v6 04/18] media: sony-starvis2: Parameterise the configuration to allow for other models X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-4-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 Several of the Sony Starvis 2 sensors are identical in the majority of their programming, but differ largely only in the size of pixel array and some timing parameters. Parameterise those parameters in preparation for supporting other variants. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 178 ++++++++++++++++++++++++----------= ---- 1 file changed, 114 insertions(+), 64 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 31aa1ec6ba40..b54e1c68afa0 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -52,17 +52,9 @@ /* Lane Count */ #define STARVIS2_REG_LANEMODE CCI_REG8(0x3040) =20 -/* - * The internal readout clock runs at 74.25 MHz. In one cycle the AD reads= 8 - * pixels, thus giving us a rate of 74.25 * 8 =3D 594 MPix/s - */ -#define IMX678_PIXEL_RATE 594000000 -#define IMX678_PIX_PER_CLK 8 - /* VMAX - Frame Length in Lines */ #define STARVIS2_REG_VMAX CCI_REG24_LE(0x3028) #define STARVIS2_VMAX_MAX 0xfffff -#define IMX678_VMAX_DEFAULT 2250 =20 /* HMAX - Line Length in Cycles */ #define STARVIS2_REG_HMAX CCI_REG16_LE(0x302c) @@ -103,8 +95,6 @@ /* Sensor Identification */ #define STARVIS2_REG_MONOCHROME CCI_REG8(0x4d18) #define STARVIS2_TYPE BIT(0) -#define IMX678_REG_MODULE_ID CCI_REG16_LE(0x4d1c) -#define IMX678_ID 0x02a6 #define STARVIS2_MODULE_ID_DELAY 80000 =20 /* Common configuration registers */ @@ -137,7 +127,6 @@ #define STARVIS2_TPG_COLORWIDTH_320PIX 2 #define STARVIS2_TPG_COLORWIDTH_640PIX 3 =20 -#define STARVIS2_REG_INTERFACE_SEL CCI_REG8(0x4e3c) #define STARVIS2_INTERFACE_2L_4L 0x07 #define STARVIS2_INTERFACE_8L_2x4L 0x7f =20 @@ -154,32 +143,11 @@ /* Subdev pads */ #define STARVIS2_SOURCE_PAD 0 =20 -/* IMX678 native and active pixel array size. */ -static const struct v4l2_rect imx678_native_area =3D { - .top =3D 0, - .left =3D 0, - .width =3D 3857, - .height =3D 2201, -}; - -static const struct v4l2_rect imx678_active_area =3D { - .top =3D 20, - .left =3D 0, - .width =3D 3856, - .height =3D 2180, -}; - enum starvis2_type { STARVIS2_COLOR =3D 0, STARVIS2_MONOCHROME =3D 1, }; =20 -struct starvis2_model_info { - enum starvis2_type type; - const u32 *codes; - unsigned int num_codes; -}; - enum starvis2_lanemode { STARVIS2_LANEMODE_2L =3D 1, STARVIS2_LANEMODE_4L =3D 3, @@ -208,7 +176,7 @@ static const u64 link_freqs[] =3D { [STARVIS2_LINK_FREQ_1188MHZ] =3D 1188000000, }; =20 -static const u16 min_hmax_4lane[] =3D { +static const u16 imx678_min_hmax_4lane[] =3D { [STARVIS2_LINK_FREQ_297MHZ] =3D 1584, [STARVIS2_LINK_FREQ_360MHZ] =3D 1320, [STARVIS2_LINK_FREQ_445MHZ] =3D 1100, @@ -268,7 +236,7 @@ static const int starvis2_tpg_val[] =3D { }; =20 /* Common configuration */ -static const struct cci_reg_sequence common_regs[] =3D { +static const struct cci_reg_sequence imx678_common_regs[] =3D { { STARVIS2_REG_THIN_V_EN, 0x00 }, { STARVIS2_REG_VCMODE, 0x01 }, { CCI_REG8(0x306b), 0x00 }, @@ -651,16 +619,76 @@ static const u32 codes_monochrome[] =3D { MEDIA_BUS_FMT_Y12_1X12, }; =20 +struct starvis2_variant { + const char *name; + u32 id_reg; + u32 id_mask; + u32 id_value; + u32 interface_sel_reg; + struct v4l2_rect native_area; + struct v4l2_rect active_area; + u64 pixel_rate; + unsigned int pix_per_clk; + const struct cci_reg_sequence *common_regs; + unsigned int num_common_regs; + unsigned int vmax_default; + const u16 *hmax_min; +}; + +static const struct starvis2_variant imx678_variant_def =3D { + .name =3D "imx678", + .id_reg =3D CCI_REG16_LE(0x4d1c), + .id_mask =3D 0x3ff, + .id_value =3D 0x2a6, + .interface_sel_reg =3D CCI_REG8(0x4e3c), + .native_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 3857, + .height =3D 2201, + }, + .active_area =3D { + .top =3D 20, + .left =3D 0, + .width =3D 3856, + .height =3D 2180, + }, + .pixel_rate =3D 594000000, + .pix_per_clk =3D 8, + .common_regs =3D imx678_common_regs, + .num_common_regs =3D ARRAY_SIZE(imx678_common_regs), + .vmax_default =3D 2250, + .hmax_min =3D imx678_min_hmax_4lane, +}; + +struct starvis2_model_info { + enum starvis2_type type; + const u32 *codes; + unsigned int num_codes; + const struct starvis2_variant *variant; + + const struct starvis2_model_info *auto_detect_colour; + const struct starvis2_model_info *auto_detect_mono; +}; + static const struct starvis2_model_info imx678_aaqr_info =3D { .type =3D STARVIS2_COLOR, .codes =3D codes_bayer, .num_codes =3D ARRAY_SIZE(codes_bayer), + .variant =3D &imx678_variant_def, }; =20 static const struct starvis2_model_info imx678_aamr_info =3D { .type =3D STARVIS2_MONOCHROME, .codes =3D codes_monochrome, .num_codes =3D ARRAY_SIZE(codes_monochrome), + .variant =3D &imx678_variant_def, +}; + +static const struct starvis2_model_info imx678_autodetect_info =3D { + .variant =3D &imx678_variant_def, + .auto_detect_colour =3D &imx678_aaqr_info, + .auto_detect_mono =3D &imx678_aamr_info, }; =20 static const char * const starvis2_supply_name[] =3D { @@ -675,6 +703,7 @@ struct starvis2 { struct regmap *cci; =20 const struct starvis2_model_info *info; + const struct starvis2_variant *variant; =20 struct clk *xclk; u32 xclk_freq; @@ -771,7 +800,8 @@ static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) cci_write(starvis2->cci, STARVIS2_REG_GAIN, ctrl->val, &ret); break; case V4L2_CID_HBLANK: { - u32 hmax =3D (format->width + ctrl->val) / IMX678_PIX_PER_CLK; + u32 hmax =3D (format->width + ctrl->val) / + starvis2->variant->pix_per_clk; =20 cci_write(starvis2->cci, STARVIS2_REG_HMAX, hmax, &ret); break; @@ -852,18 +882,20 @@ static int starvis2_get_selection(struct v4l2_subdev = *sd, struct v4l2_subdev_state *sd_state, struct v4l2_subdev_selection *sel) { + struct starvis2 *starvis2 =3D to_starvis2(sd); + switch (sel->target) { case V4L2_SEL_TGT_CROP: sel->r =3D *v4l2_subdev_state_get_crop(sd_state, sel->pad); return 0; =20 case V4L2_SEL_TGT_NATIVE_SIZE: - sel->r =3D imx678_native_area; + sel->r =3D starvis2->variant->native_area; return 0; =20 case V4L2_SEL_TGT_CROP_DEFAULT: case V4L2_SEL_TGT_CROP_BOUNDS: - sel->r =3D imx678_active_area; + sel->r =3D starvis2->variant->active_area; return 0; } =20 @@ -878,12 +910,12 @@ static int starvis2_init_state(struct v4l2_subdev *sd, struct v4l2_rect *crop; =20 crop =3D v4l2_subdev_state_get_crop(state, STARVIS2_SOURCE_PAD); - *crop =3D imx678_active_area; + *crop =3D starvis2->variant->active_area; =20 format =3D v4l2_subdev_state_get_format(state, STARVIS2_SOURCE_PAD); format->code =3D starvis2_default_mbus_code(starvis2); - format->width =3D imx678_active_area.width; - format->height =3D imx678_active_area.height; + format->width =3D starvis2->variant->active_area.width; + format->height =3D starvis2->variant->active_area.height; format->field =3D V4L2_FIELD_NONE; format->colorspace =3D V4L2_COLORSPACE_RAW; format->ycbcr_enc =3D V4L2_YCBCR_ENC_DEFAULT; @@ -897,8 +929,12 @@ static int starvis2_write_common(struct starvis2 *star= vis2) { int ret =3D 0; =20 - cci_multi_reg_write(starvis2->cci, common_regs, ARRAY_SIZE(common_regs), - &ret); + if (!starvis2->variant) + /* Powered on during probe to do detection. Variant unknown. */ + return 0; + + cci_multi_reg_write(starvis2->cci, starvis2->variant->common_regs, + starvis2->variant->num_common_regs, &ret); =20 cci_write(starvis2->cci, STARVIS2_REG_INCK_SEL, starvis2->inck_sel_val, &ret); @@ -908,8 +944,9 @@ static int starvis2_write_common(struct starvis2 *starv= is2) cci_write(starvis2->cci, STARVIS2_REG_LANEMODE, starvis2->lane_mode, &ret); =20 - cci_write(starvis2->cci, STARVIS2_REG_INTERFACE_SEL, - STARVIS2_INTERFACE_2L_4L, &ret); + if (starvis2->variant->interface_sel_reg) + cci_write(starvis2->cci, starvis2->variant->interface_sel_reg, + STARVIS2_INTERFACE_2L_4L, &ret); =20 if (!ret) starvis2->common_regs_written =3D true; @@ -925,10 +962,10 @@ static int starvis2_program_window(struct starvis2 *s= tarvis2, cci_write(starvis2->cci, STARVIS2_REG_ADDMODE, 0x00, &ret); cci_write(starvis2->cci, STARVIS2_REG_WINMODE, 0x04, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_HST, - crop->left - imx678_active_area.left, &ret); + crop->left - starvis2->variant->active_area.left, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_HWIDTH, crop->width, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_VST, - crop->top - imx678_active_area.top, &ret); + crop->top - starvis2->variant->active_area.top, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_VWIDTH, crop->height, &ret); cci_write(starvis2->cci, STARVIS2_REG_ADBIT, 0x01, &ret); =20 @@ -1082,11 +1119,16 @@ static int starvis2_identify_model(struct starvis2 = *starvis2) { struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); const struct starvis2_model_info *info; + const struct starvis2_variant *variant; enum starvis2_type detected; int ret =3D 0; u64 val =3D 0; =20 info =3D device_get_match_data(&client->dev); + if (!info) + return -EINVAL; + + variant =3D info->variant; =20 /* * This sensor's ID registers become accessible 80ms after coming out @@ -1095,7 +1137,7 @@ static int starvis2_identify_model(struct starvis2 *s= tarvis2) cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, 0, &ret); fsleep(STARVIS2_MODULE_ID_DELAY); =20 - cci_read(starvis2->cci, IMX678_REG_MODULE_ID, &val, &ret); + cci_read(starvis2->cci, variant->id_reg, &val, &ret); =20 if (ret) { dev_err(&client->dev, @@ -1103,9 +1145,10 @@ static int starvis2_identify_model(struct starvis2 *= starvis2) return ret; } =20 - if (val !=3D IMX678_ID) { - dev_err(&client->dev, - "Chip ID mismatch: %x!=3D%llx\n", IMX678_ID, val); + val &=3D variant->id_mask; + if (val !=3D variant->id_value) { + dev_err(&client->dev, "Chip ID mismatch: %x!=3D%llx\n", + variant->id_value, val); return -ENXIO; } =20 @@ -1120,7 +1163,7 @@ static int starvis2_identify_model(struct starvis2 *s= tarvis2) detected =3D val & STARVIS2_TYPE; =20 /* Prefer to use sensor type specified in device tree */ - if (info) { + if (info->codes) { starvis2->info =3D info; if (detected !=3D info->type) dev_err(&client->dev, @@ -1129,11 +1172,12 @@ static int starvis2_identify_model(struct starvis2 = *starvis2) info->type =3D=3D STARVIS2_COLOR ? "color" : "mono"); } else { starvis2->info =3D detected =3D=3D STARVIS2_MONOCHROME ? - &imx678_aamr_info : &imx678_aaqr_info; + info->auto_detect_mono : info->auto_detect_colour; dev_info(&client->dev, "sensor type missing in DT; detected %s sensor\n", detected =3D=3D STARVIS2_MONOCHROME ? "mono" : "color"); } + starvis2->variant =3D starvis2->info->variant; =20 return 0; } @@ -1164,7 +1208,7 @@ static int starvis2_init_controls(struct starvis2 *st= arvis2) { struct v4l2_ctrl_handler *ctrl_hdlr; const u32 hmax_4lane =3D - min_hmax_4lane[__fls(starvis2->link_freq_bitmap)]; + starvis2->variant->hmax_min[__fls(starvis2->link_freq_bitmap)]; const u32 lane_scale =3D starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_2L ? 2 : 1; struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); @@ -1183,13 +1227,14 @@ static int starvis2_init_controls(struct starvis2 *= starvis2) if (ret) return ret; =20 - starvis2->vmax =3D IMX678_VMAX_DEFAULT; + starvis2->vmax =3D starvis2->variant->vmax_default; hmax =3D hmax_4lane * lane_scale; =20 /* PIXEL_RATE is fixed and read-only */ v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_PIXEL_RATE, - IMX678_PIXEL_RATE, IMX678_PIXEL_RATE, 1, - IMX678_PIXEL_RATE); + starvis2->variant->pixel_rate, + starvis2->variant->pixel_rate, 1, + starvis2->variant->pixel_rate); =20 /* LINK_FREQ is also read only */ link_freq =3D v4l2_ctrl_new_int_menu(ctrl_hdlr, &starvis2_ctrl_ops, @@ -1201,23 +1246,25 @@ static int starvis2_init_controls(struct starvis2 *= starvis2) if (link_freq) link_freq->flags |=3D V4L2_CTRL_FLAG_READ_ONLY; =20 - vblank =3D starvis2->vmax - imx678_active_area.height; - max_vblank =3D STARVIS2_VMAX_MAX - imx678_active_area.height; + vblank =3D starvis2->vmax - starvis2->variant->active_area.height; + max_vblank =3D STARVIS2_VMAX_MAX - starvis2->variant->active_area.height; starvis2->vblank =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_VBLANK, vblank, max_vblank, 2, vblank); =20 - hblank =3D hmax * IMX678_PIX_PER_CLK - imx678_active_area.width; - max_hblank =3D STARVIS2_HMAX_MAX * IMX678_PIX_PER_CLK - - imx678_active_area.width; + hblank =3D hmax * starvis2->variant->pix_per_clk - + starvis2->variant->active_area.width; + max_hblank =3D STARVIS2_HMAX_MAX * starvis2->variant->pix_per_clk - + starvis2->variant->active_area.width; starvis2->hblank =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_HBLANK, hblank, max_hblank, - IMX678_PIX_PER_CLK, hblank); + starvis2->variant->pix_per_clk, + hblank); =20 starvis2->exposure =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_EXPOSURE, STARVIS2_EXPOSURE_MIN, - IMX678_VMAX_DEFAULT - + starvis2->variant->vmax_default - STARVIS2_SHR_MIN, STARVIS2_EXPOSURE_STEP, STARVIS2_EXPOSURE_DEFAULT); @@ -1358,6 +1405,9 @@ static int starvis2_probe(struct i2c_client *client) if (ret) goto error_power_off; =20 + v4l2_i2c_subdev_set_name(&starvis2->sd, client, starvis2->variant->name, + NULL); + pm_runtime_set_active(dev); pm_runtime_enable(dev); =20 @@ -1438,7 +1488,7 @@ static const struct of_device_id starvis2_of_match[] = =3D { { .compatible =3D "sony,imx678-aamr", .data =3D &imx678_aamr_info }, { .compatible =3D "sony,imx678-aaqr", .data =3D &imx678_aaqr_info }, /* for non-conforming DTs that rely on runtime check */ - { .compatible =3D "sony,imx678" }, + { .compatible =3D "sony,imx678", .data =3D &imx678_autodetect_info }, { /* sentinel */ } }; =20 --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.41 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690474; b=wC+a1h7JWCeTgvpCCJeXTy0G8YSLs5VabI5UyLGRlRF26L1B5n1aYmrlX0mTEFJIg0qr CrXbmhUS2o8hotySN/U+Rr+GR4FbGAu8UQ5055PxFXsJGB9jYyGMETxVF8tYHvZuU4hTT FTyKLeivcgdSd3zsxVJ+NmUXjWKEQlvO0n++arYVS1jY8nlH2BRlePRfWgMRmZixCitN1 13+BgMxO0Th6P0Od2t8x9HzFHldAg6NW6gaVqUSNOPyT5vjwjDlN5Mv/kRqvlvqLH2eSJ Idw+E3o4RjcWiBJZk/4Ll5MmVuqFHWWz5NOR8JsWGNBRpNn7vpGKf39hVqt0txJvPiw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690474; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=feAclFqGqANXGk5ANej1oUGx0E55rEkA+ZUZcmvKBcM=; b=e1ePI1NXvBQ2+zvA6nBn3wE3Lbw3JeOuQ7wfu17cB9zpxCdu8VZulHKG3Uxtb0q6Eyy/ jt759riLR4htt3viKFN+6ekuoHNLIjAxUps7S9R9/2fSYJONcY0tINR3ptgnAmvmuB/6R mKId5Ul1s/U0LXMzSB+B+zNqwslSlqPyVbun1wyduwNUGibrNhyTgYjgNQ/r99jw1/Gfv GBKT6IhiGq75yvAcHBq4i9CCJwlRSru6I7xw05573xfWPwidai+RJ6z42TdTImmApi7EH Kz4Gbe+7pNbJVLgqDrzFF0Y/0eBeX6tOOmjkkn83UWQDWKeJReP5/cRv2Pa7a/SGyug== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=YKkR28ja; arc=none smtp.remote-ip=209.85.221.41 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 198A8606A332 for ; Thu, 22 Oct 2026 17:34:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 198A8606A332 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=YKkR28ja Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-48e0d1c095dso49660f8f.1 for ; Thu, 22 Oct 2026 10:34:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690473; x=1793295273; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=feAclFqGqANXGk5ANej1oUGx0E55rEkA+ZUZcmvKBcM=; b=YKkR28jaiLkadTQQSBEuU1h3lBa64XtFdB1ZbrGHfOEYJLG2wVb0hTKwFcM5seUfyz M0u4+5avHFZ8iAJWMD5bmnUoj/vhZWqDH7xJAAFRVN5rXhjg41Uceh6sBUhCEVoRVUBi cdiwgiRyWWCgxIFR+YqhVvfckfMQ/ovJo0WT1gfJTvZclf8OsSaJsTTotx27EPvN9/C9 LdTM9afpk5EJjJjfhgb2EhHfOy/cqCIOPm1f6yo/oukX9zNUVZqWDL1ABHZyq1U/0NiT ItlzVpN6SOtLcT1zaj8MCgRMpOXZqCAVxlwmrFHl266Bqe51X6XvAq3NgnLQ1GorSvPa KnWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690473; x=1793295273; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=feAclFqGqANXGk5ANej1oUGx0E55rEkA+ZUZcmvKBcM=; b=UunfqluBaypzgT/BgMFbuNLG32PGm7lj2SI2THsP5EBz+Zr9N2DjdXoNGJCuUt5tBu m8X3VZZ3l3HjIh7jHHE13X8yyAlbH6OcgszgVYEjjinOqfkaieMuTDLQqX6lata1WDQ+ GKdpHpENzAXdHrtTOxtKpO7+ASVtMCq9GGzDeRS+0G66FnjQK1yyo/yc6KvcbvpHrQeE Ag28aJbG+JywazBi/7AvVl7luBtnr8RhlB3gaF2O8NWJqy/suUHZ47CgQ0vgsWPyHQ4i 4nifhvAWcuS2AOYD/8fy2W5AXMJ22d2z1HXXJnB99HN5sbS7/FXgi9MWw35H+KVZB8xI pGeQ== X-Forwarded-Encrypted: i=1; AKwUvBwn++TGctK9cSXjPaedt/lPdFYF5xy2GPGVTSfcywQxldUom9z0KDL+/rz8sGSd9g2IHrgybtT6oaqQf8E=@vger.kernel.org X-Gm-Message-State: AFq9FYJDjva1YPdNZxvreyeAWYU+WlLw3I18XB7PXfbjwZK9gK421xoX hOczl2r8TBABD0BpkJT5UwgvvYBJzwkDrILPbOrL8zvKA915AffTTkfbyP0PaOiznQ4= X-Gm-Gg: AYBFou2JAb8W77m2kJq9GtecbwUOUvrHfgfE4sY7qhTfmOfJA74nGYJHoKaj1ea4gZV D7Y0aucoeSvcLgI6jo679D2JpG6yba+om6X0DSMM7AeC8YctVesYUUgVGMG3VR6ip/r7/GGyob5 nP5YQhK1cuW/InWz8WiB6uQGMMfNxg/ei5B06gMpRn3j7KTrAoU9D8EkMbdgeEAo9RENgftt7a0 9oVy2dXUOwr+1HpIzARDIysUe2ud2kLLU5GQufwGDm8b4dBRoQ9poV+T7ROzEOTUjHO+wzy9KDl mSJiezc0c5idmjqDCOiN8vUW9Oq2SidgLnCC62dR2rN0ScXHgrOgmohlbbm2uVuhqpBe4Zfsihx EVZhN8KvQI9f0ye8qAHLH55qVuBiFIZtWVi49IcuRafwdL3S6A9fb98XFrwiMvUxXPOUz0rKuT5 s2Yf0S3uomXUo3OMLPO33HQjVK5rEP+hmNnYsxAy/PfUtJmDZeZvICrt07XB8BwTbuCkD+njTqI J476ORL+cttBn5sJA5ym5wosTxzyryMRRts2RZCP7TlDEyZ0HnY55MbEqE6ALvZPEf3poS4ThJW Rv6i/gKZ2Ftf1U80zF+CmL7zNGF+YDbOwK50LNRfbKjBhD/mza3L X-Received: by 2002:a05:6000:4213:b0:488:8931:b1b2 with SMTP id ffacd0b85a97d-48e264bd584mr14628357f8f.28.1792690472691; Thu, 22 Oct 2026 10:34:32 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:31 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:33:58 +0100 Subject: [PATCH v6 05/18] media: sony-starvis2: Rework 2 lane support for higher link freqs X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-5-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 With some Starvis 2 sensors, the link frequency on 2 lanes is sufficient to achieve a lower line time than the 4 lane value divided by 2, as the 4 lane value hits the minimum that the pixel array can handle. That can't easily be handled with the way the values are currently stored. Storing the 2 lane hmax alongside the pixel array's minimum allows the 4 lane support to divide the value by 2, and then clip to the pixel array value as a minimum. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index b54e1c68afa0..5dcd760c1a27 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -176,15 +176,15 @@ static const u64 link_freqs[] =3D { [STARVIS2_LINK_FREQ_1188MHZ] =3D 1188000000, }; =20 -static const u16 imx678_min_hmax_4lane[] =3D { - [STARVIS2_LINK_FREQ_297MHZ] =3D 1584, - [STARVIS2_LINK_FREQ_360MHZ] =3D 1320, - [STARVIS2_LINK_FREQ_445MHZ] =3D 1100, - [STARVIS2_LINK_FREQ_594MHZ] =3D 792, - [STARVIS2_LINK_FREQ_720MHZ] =3D 660, - [STARVIS2_LINK_FREQ_891MHZ] =3D 550, - [STARVIS2_LINK_FREQ_1039MHZ] =3D 550, - [STARVIS2_LINK_FREQ_1188MHZ] =3D 550, +static const u16 imx678_min_hmax_2lane[] =3D { + [STARVIS2_LINK_FREQ_297MHZ] =3D 3168, + [STARVIS2_LINK_FREQ_360MHZ] =3D 2640, + [STARVIS2_LINK_FREQ_445MHZ] =3D 2200, + [STARVIS2_LINK_FREQ_594MHZ] =3D 1584, + [STARVIS2_LINK_FREQ_720MHZ] =3D 1320, + [STARVIS2_LINK_FREQ_891MHZ] =3D 1100, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 1100, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 1100, }; =20 struct starvis2_inck_cfg { @@ -632,7 +632,8 @@ struct starvis2_variant { const struct cci_reg_sequence *common_regs; unsigned int num_common_regs; unsigned int vmax_default; - const u16 *hmax_min; + const u16 *hmax_min_link_freq; + u16 hmax_min_pixel_array; }; =20 static const struct starvis2_variant imx678_variant_def =3D { @@ -658,7 +659,8 @@ static const struct starvis2_variant imx678_variant_def= =3D { .common_regs =3D imx678_common_regs, .num_common_regs =3D ARRAY_SIZE(imx678_common_regs), .vmax_default =3D 2250, - .hmax_min =3D imx678_min_hmax_4lane, + .hmax_min_link_freq =3D imx678_min_hmax_2lane, + .hmax_min_pixel_array =3D 550, }; =20 struct starvis2_model_info { @@ -1207,11 +1209,8 @@ static const struct v4l2_subdev_internal_ops starvis= 2_internal_ops =3D { static int starvis2_init_controls(struct starvis2 *starvis2) { struct v4l2_ctrl_handler *ctrl_hdlr; - const u32 hmax_4lane =3D - starvis2->variant->hmax_min[__fls(starvis2->link_freq_bitmap)]; - const u32 lane_scale =3D - starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_2L ? 2 : 1; struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); + const struct starvis2_variant *variant =3D starvis2->variant; struct v4l2_fwnode_device_properties props; struct v4l2_ctrl *link_freq; s32 hblank, max_hblank, vblank, max_vblank; @@ -1228,7 +1227,10 @@ static int starvis2_init_controls(struct starvis2 *s= tarvis2) return ret; =20 starvis2->vmax =3D starvis2->variant->vmax_default; - hmax =3D hmax_4lane * lane_scale; + + hmax =3D variant->hmax_min_link_freq[__fls(starvis2->link_freq_bitmap)]; + if (starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_4L) + hmax =3D max(hmax >> 1, variant->hmax_min_pixel_array); =20 /* PIXEL_RATE is fixed and read-only */ v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_PIXEL_RATE, --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.50 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690480; b=dY0ABKrhl4oz9N9XNIp3dzimMFPbZyBEKVmxTyTBgIZsHtVOUXAPTCghiPzqo6lwxKOg QULku1dPPEZqk0bs7EMBDGbLA/mlFO5PpWnQHLlzlNteycgvxTLaMyf+sNZe3MVW4OadA +2NLhCfn8btuLvAIAnU3RAZLFGaxhecrFs21Hn/qtrgHR9wf0PHtfBf47ZFJilYYwfT5P Ea/GZHeaj/m7CLyB1cm8HIe6zpAZ6ZrVaL9bdS5dzr9xNFIgJM+H66HMLT6yhh7tSY0hj g4ER37TFuJQz69fg3g8roAuJ7BX3hIlPP8l/m73O1LyJW5IbosRZ/+LZB5loT1tpqgA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690480; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=U3sKocMPsvLQ6Ecji48V4u4iC5LYvlvzcXipELmlS+U=; b=3zp/kcyojutH8ElTNxEtNZoiPNvRvckotqsY86VqwW0Z5YuvQjezQ6KXR+A0BZOHSfyR I/SPwmgBjvqlv90vxHZTl1PwNfr11R2GGSLozxnuKP4KrY39DmaEaB3FBMj4bpHL9nAcy l0PpRuYZcEzrua3cySBdO+5+iglt5oq3EluA1AP3C8BqXNNVdR3CVx9Qldh+Kf2o4PxeL qMTYnh77HJtcLhiOfhbJrNzi42FNCnb8U+czwnzumOF6JSJiWUmO+U+2XOETGmNKqkJrp qdG8kzgJkMAjY1OMhgDLOBX0Vb7QmvG2FvFeoliBeSiVWvlMznp6yeZJLEMc2UMFfXQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Vr5k5IwA; arc=none smtp.remote-ip=209.85.128.50 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62CA360A2614 for ; Thu, 22 Oct 2026 17:34:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 62CA360A2614 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Vr5k5IwA Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4a20bdaf39cso889165e9.1 for ; Thu, 22 Oct 2026 10:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690474; x=1793295274; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=U3sKocMPsvLQ6Ecji48V4u4iC5LYvlvzcXipELmlS+U=; b=Vr5k5IwAYDaSIqQdjaXoJa0XV31Gt3SJoInseQHbs12IjIBI2/FdnOdrn2Zmyr1xo4 weO5qILKh2UOExAhx4ESiteYqMKx4nuMaaQp03WcB8no3z+/EgZBX25PJII94j/LA00+ qzkOdYAuHWrXMMS4bNQKzZ0PLSr/puW8/jTKP18bO4mLy2YTMNLCtVQ1R0/83bFkO79T u2SWJNepN793yc1lB0rffWyDKcjRntU+ib6Ag/BCof7+yowFGJpPNLB7ZwZR4NESgRJI fbMxtfCTTUMXHSh/RhpBK2nkvC0paa0uC1KZxRYsxqvfhlzSKRFaY7z8VSXK3MQF9foE 27Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690474; x=1793295274; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=U3sKocMPsvLQ6Ecji48V4u4iC5LYvlvzcXipELmlS+U=; b=Dmcc756y4le/ZApO/qogLOQZWD/mjYuT/2WL6ep9epI1NzIIrWL/vyRanagzBleiEy 1dryM8X++ar06mz4kTqvD/gQVPDs/3n5NDe+FmTRDTVLgaZ30iSmSpQ3hNovYK00rlhe yX7neduSHPbuIJti+cae8wgFGeMQF043h9vmWmuoqkqjkmqXbzhgAtsUyeRaLnT4ENUP 3izy1gXM3SGlZ0xZyxH4Z8DpRwipvgGWATPAgb/CK4xN9BeLr+Ulo51YXRHAJydPOWrF 5DYR/jOc7Ck3hyT00cAlXPGVFgStOHTBBYWoq0GtDfF6DixneQCSAdX7I9HsTib8debl UBkA== X-Forwarded-Encrypted: i=1; AKwUvBxQQ32rU2M4XhaCiloU8dgD8kYWDltpXDhLVLh0hkSAQj9iTtpDgh4iq0bn4xAozgzhaa/kL8dr++RmgHM=@vger.kernel.org X-Gm-Message-State: AFq9FYK18uAZbiIkFBEAwDIbkPEi5VMlEnLoMdw0IdE+lGpJfjQmvgdd DHlQf/ZmSmVgn9BSEHd6Fxl4xi8ORdwEMlOiWwbI2SiEK1/n5D8P1WAQBS3S5Cc9dBs= X-Gm-Gg: AYBFou0EpCzJNnFABhUidA3bDPL5w7TvAItoaoIiMtudhcd9NvwmobBNKCYwLU3dx5g CxaMN03P1TaFO2ExgqaDmiB114Z3Ryo8q35m2TZhKd7A+9gqDrHjGoTDISfmK8a6o+NS9N41OTB +xAiby2pWJN2PaAqziT3b+hT0/EE5D1dUIBrt8oUVQwbhfTXGzVEGahzOhlF+wxqUdJ/R87WxGM RcZZBtY8Ch63Ou1+aS5fCzQ4xf8J+4AVNI0+o7WE5USaXWu3LYbHon0VmyqLeq1eX7AGzQFtQNr ZaG0PEBnsSCnkONMbytJ4L+ZagrHjSDtcfCi1Yzg0KA2rMubM8tCNYZGSw2cbnk1yz7RK8hnhzV O/tZ/LAW+lxMH/42seOTsklFKYD4sLiw3q3sruPO1sc/Ndq6Z1jBrq2+6p8RyLlnWEJk8xtVQuk wRQImqp9x6wpY0K8Dk6dFLByU3NPBetzfQI3htKPpjJCDWeypJ3Z+prZQIvQNFyJfDldjVz3150 aC/zWAJnH6rtNLdmRWz8qTu3pD4trfQYagiwBPWKjM77EMYEgRvCQTkM2kXOCQPSp9VKiaa8HsJ fozxRm4YiPVgOMwu/yEtJzCHErCZcec= X-Received: by 2002:a05:6000:1612:b0:48e:b32:9d1c with SMTP id ffacd0b85a97d-48e264a726bmr9146042f8f.19.1792690473785; Thu, 22 Oct 2026 10:34:33 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:33 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:33:59 +0100 Subject: [PATCH v6 06/18] media: sony-starvis2: Allow runtime control of link frequency X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-6-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 DT allows configuration of multiple link frequencies. V4L2_CID_LINK_FREQ allows read write control. Join these up so that link frequency can be configured at run time, as long as the sensor isn't streaming. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 79 +++++++++++++++++++++++++++--------= ---- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 5dcd760c1a27..340f2ff0ef87 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -727,6 +727,7 @@ struct starvis2 { struct v4l2_ctrl *exposure; struct v4l2_ctrl *vblank; struct v4l2_ctrl *hblank; + struct v4l2_ctrl *link_freq; =20 /* Track VMAX for exposure updates */ u32 vmax; @@ -757,6 +758,7 @@ static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) struct starvis2 *starvis2 =3D container_of_const(ctrl->handler, struct starvis2, ctrl_handler); struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); + const struct starvis2_variant *variant =3D starvis2->variant; const struct v4l2_mbus_framefmt *format; struct v4l2_subdev_state *state; int ret =3D 0; @@ -780,6 +782,23 @@ static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) return ret; } =20 + if (ctrl->id =3D=3D V4L2_CID_LINK_FREQ) { + u32 hmax =3D variant->hmax_min_link_freq[ctrl->val]; + s32 hblank; + + if (starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_4L) + hmax =3D max(hmax >> 1, variant->hmax_min_pixel_array); + + hblank =3D hmax * variant->pix_per_clk - + variant->active_area.width; + + ret =3D __v4l2_ctrl_modify_range(starvis2->hblank, hblank, + starvis2->hblank->maximum, + starvis2->hblank->step, hblank); + if (ret) + return ret; + } + /* * Only apply control values when device is powered on (RPM ACTIVE) * and streaming (usage count !=3D 0) @@ -826,6 +845,12 @@ static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) cci_write(starvis2->cci, STARVIS2_REG_WINMODEV, ctrl->val, &ret); break; + case V4L2_CID_LINK_FREQ: + /* The STARVIS2_LINK_FREQ_ enums match up with the register */ + cci_write(starvis2->cci, STARVIS2_REG_DATARATE_SEL, ctrl->val, + &ret); + break; + default: dev_warn(&client->dev, "ctrl(id:0x%x,val:0x%x) is not handled\n", @@ -940,9 +965,6 @@ static int starvis2_write_common(struct starvis2 *starv= is2) =20 cci_write(starvis2->cci, STARVIS2_REG_INCK_SEL, starvis2->inck_sel_val, &ret); - cci_write(starvis2->cci, STARVIS2_REG_DATARATE_SEL, - __fls(starvis2->link_freq_bitmap), - &ret); cci_write(starvis2->cci, STARVIS2_REG_LANEMODE, starvis2->lane_mode, &ret); =20 @@ -1022,6 +1044,8 @@ static int starvis2_enable_streams(struct v4l2_subdev= *sd, goto err_rpm_put; } =20 + __v4l2_ctrl_grab(starvis2->link_freq, true); + return 0; =20 err_rpm_put: @@ -1046,6 +1070,8 @@ static int starvis2_disable_streams(struct v4l2_subde= v *sd, if (ret) dev_err(&client->dev, "%s failed to stop stream\n", __func__); =20 + __v4l2_ctrl_grab(starvis2->link_freq, false); + pm_runtime_put(&client->dev); =20 return ret; @@ -1212,7 +1238,6 @@ static int starvis2_init_controls(struct starvis2 *st= arvis2) struct i2c_client *client =3D v4l2_get_subdevdata(&starvis2->sd); const struct starvis2_variant *variant =3D starvis2->variant; struct v4l2_fwnode_device_properties props; - struct v4l2_ctrl *link_freq; s32 hblank, max_hblank, vblank, max_vblank; u32 hmax; int ret; @@ -1228,25 +1253,26 @@ static int starvis2_init_controls(struct starvis2 *= starvis2) =20 starvis2->vmax =3D starvis2->variant->vmax_default; =20 - hmax =3D variant->hmax_min_link_freq[__fls(starvis2->link_freq_bitmap)]; - if (starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_4L) - hmax =3D max(hmax >> 1, variant->hmax_min_pixel_array); - /* PIXEL_RATE is fixed and read-only */ v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_PIXEL_RATE, starvis2->variant->pixel_rate, starvis2->variant->pixel_rate, 1, starvis2->variant->pixel_rate); =20 - /* LINK_FREQ is also read only */ - link_freq =3D v4l2_ctrl_new_int_menu(ctrl_hdlr, &starvis2_ctrl_ops, - V4L2_CID_LINK_FREQ, - ARRAY_SIZE(link_freqs) - 1, - __ffs(starvis2->link_freq_bitmap), - link_freqs); - - if (link_freq) - link_freq->flags |=3D V4L2_CTRL_FLAG_READ_ONLY; + starvis2->link_freq =3D + v4l2_ctrl_new_int_menu(ctrl_hdlr, &starvis2_ctrl_ops, + V4L2_CID_LINK_FREQ, + __fls(starvis2->link_freq_bitmap), + __ffs(starvis2->link_freq_bitmap), + link_freqs); + if (!starvis2->link_freq) + goto err_free_handler; + + v4l2_ctrl_modify_range(starvis2->link_freq, + __ffs(starvis2->link_freq_bitmap), + __fls(starvis2->link_freq_bitmap), + ~starvis2->link_freq_bitmap, + __ffs(starvis2->link_freq_bitmap)); =20 vblank =3D starvis2->vmax - starvis2->variant->active_area.height; max_vblank =3D STARVIS2_VMAX_MAX - starvis2->variant->active_area.height; @@ -1254,6 +1280,10 @@ static int starvis2_init_controls(struct starvis2 *s= tarvis2) V4L2_CID_VBLANK, vblank, max_vblank, 2, vblank); =20 + hmax =3D variant->hmax_min_link_freq[starvis2->link_freq->val]; + if (starvis2->lane_mode =3D=3D STARVIS2_LANEMODE_4L) + hmax =3D max(hmax >> 1, variant->hmax_min_pixel_array); + hblank =3D hmax * starvis2->variant->pix_per_clk - starvis2->variant->active_area.width; max_hblank =3D STARVIS2_HMAX_MAX * starvis2->variant->pix_per_clk - @@ -1288,17 +1318,18 @@ static int starvis2_init_controls(struct starvis2 *= starvis2) =20 v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &starvis2_ctrl_ops, &props); =20 - if (ctrl_hdlr->error) { - ret =3D ctrl_hdlr->error; - dev_err(&client->dev, "%s control init failed (%d)\n", - __func__, ret); - v4l2_ctrl_handler_free(ctrl_hdlr); - return ret; - } + if (ctrl_hdlr->error) + goto err_free_handler; =20 starvis2->sd.ctrl_handler =3D ctrl_hdlr; =20 return 0; + +err_free_handler: + dev_err(&client->dev, "%s control init failed (%d)\n", + __func__, ctrl_hdlr->error); + + return v4l2_ctrl_handler_free(ctrl_hdlr); } =20 static int starvis2_check_hwcfg(struct device *dev, struct starvis2 *starv= is2) --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.47 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690477; b=rWC3NbYYIsJ2xLnoleBJlhqrHzjn6osqGs8bYjcDsZF+GhCMRfWlfgKuoR+k/A06nV25 FSUxyDd1ONNtFXslbRa+CP/qzyDN295ANFQHAH1dMWWfygdtmhYaxfKyfCYBxO0u/NY9C Pf+46NsXTtcwdpRrsE2o5vl0a0VMY049TgeiD23oeWR4W3QUP41DP4azGDO2B2+DqGUKT FQ/Kh046EpQsqwe/gWt7xwaWRmyM4tkILtcNYP4NEpQ/tpbplPv+rgq78PilbbWa4BI+/ Zz583XsGXW5Ddw9vmgCddbffItv9+egg0b2LA+NzCiyZGAs75XeptV315H+JK1YNYTg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690477; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=tHlWMfT2Vn1jhxwuk47U/QSe3Sx/Rh/6scTTXAvnAJ4=; b=YTeeO7aoKSpraY+pmlzm0nM3CgDLhyDbSS5JxVA/EuX7va/2qIKL5K7p5QKUiBvbKO2i ERdMMgj0wpyrsfeN+V/2l5sma3Qquqx3jS/dvMWLhaa3996CUjmi+GAZfcwr/BWa+JjCj 03DbiLdb/Wm2Uc3Ba9jrctjrlOLgBt6vuZ4SlPUQbivu2yK+4tELYQU1Ewzy6ubxE7KoI jjtQYXT7R9JQR6+4OBBbImh1Wrz5lT8D3jaA1pVdX4Pd6IPm1r6ETyWuu7TFeRDReknVl kLUuNL4eht6X5cyNeEWS6Bvija17Wwmrrpunsm6MNkBS3SnK6jOJundPGOirZJAAeGQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Hz8jK3d+; arc=none smtp.remote-ip=209.85.128.47 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AFF5260A2627 for ; Thu, 22 Oct 2026 17:34:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org AFF5260A2627 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Hz8jK3d+ Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4a207b02a2cso528385e9.1 for ; Thu, 22 Oct 2026 10:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690475; x=1793295275; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tHlWMfT2Vn1jhxwuk47U/QSe3Sx/Rh/6scTTXAvnAJ4=; b=Hz8jK3d+/7oEwRtXqRZMtdhfq7MFY8o/ekyuqOcEE7muK94sJhmnUcxBQ9dqOPU+kw lPKv5D53LnTlvPmLXFiFsew4Hl0ljGdeGGbMx/TNOpkDTVmG6646/pNjjfcR5grueRKR fZRfj71/1PdrbVJyKenanHLh2JbKLWIOIOQQs0ADAdXsgkUGG1hQ+KW5J++cFTAWziVr 5DXgKELTQY7RKM5EX7Wrw/bj6Y47fkcFTd1TWYBM15JIkYoEoCQS6PaPwvFIgq4FnysS y2GErTSI37mqIeqF2j2TS2Vq4k6aA+SxBdZtKLrxde/ujHMkkMoIsaoNwZedrraMGDHq 9rgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690475; x=1793295275; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tHlWMfT2Vn1jhxwuk47U/QSe3Sx/Rh/6scTTXAvnAJ4=; b=D8f+6Xlsd9zN4wc8+SSyrL5AJTaIbHixJM/adblAkuslDlB7dMdXNm1ecnX3pHMAJ4 mKiTcBCRoFCmklWv8Ia/BDE1xQZY/iHManZ8NW9LoIyflUxyg/Q0Eiw9KITHSM9r1nje Bcuwg5oz4/+au7gr4a4V4+ZzdhIvSzXAmW3YOCTU8kAnrOJ+FI02KDDQb6QRGS4sokog U0yOREUlxVMn7pJxV/bZVe73VFI3C470C3oUhV1nbiqM/sb2B+oamQh9ANp8h0FFJkwS N6Zs5X3+TaLdkYIWUj0D71s1r8rhfieENT+Aq6d+bfU7nmkIaympB5JKcNmh2k+YM1K1 7MAA== X-Forwarded-Encrypted: i=1; AKwUvBzthE9chEZWWWnKkhJDhu8KmX8XVfFmMXmKw/3/vGHbtV8+dJVf3z/35X9ZJ3Ur6jJzpiAmrsxGi/1EE+A=@vger.kernel.org X-Gm-Message-State: AFq9FYIQvF76jtAjAz3LDyQBSZ5imXz8t5Y2IrSLOzVFetTN+bzgBf6X KxW2fn2OFYCADBQa2dkcM9JQ8EVBQGyu3SdSsBBhwtCpDGnxiyJQJonIjAJaPIVWofA= X-Gm-Gg: AYBFou3bESWM6iHnTPyLGtvT3ewR+jDrKUr47GQI2Rq8RsMiUV1haFemTvlvxPYn1+N oG/bRI0Lsk9Xd5TC0bOlTh2JdaoS9BHfvFJ6pK46MZgEOhzAQAB1kM5qofqd0ls/GW3NFA2P+QD lMMwlaBoQXX/M/5B92u8MF3jkFmeVQ64Iy8VtZx3QA0tN4Pxy7fFW0m/TgJj+dr7ACww60wnn8M rqYebAQ0zjHwgz+P41S3TnvPRUEHKn2QS4eZ1vZB/pmt/J+hb/HsxQHHyeNB/X+BowwJoz4qvjM VN+/XHuQfeLtHM69LFYSXOJ22ae7eQQTns7H2PbhhUD0xu+K7OldH55l2C892Bb3Uk10Ds9M1jl GlhfS63w9VJoM+33JDkQ9V1Ui8c2kWqegdBBk877J1+OpmwSgXbLI2PQPXP+hYrlHVJdlO7WZoz sT5RdBgDFUMR4YxouZb8JkvObXVQe20IxZ3W1P1XDsO/uLX3KBPaBo3KjzwEbtwUB5fsu+lV52/ 9dikt4mkoXmMqftIHQvhx8P4vvd8ND2FQ7b4OwIvFMUpddzkRDQKYDOi0XngXCLC02eLhChzavJ nCjmaucMSjj4IWDYR3ceeEd+LqT1bHQ= X-Received: by 2002:a05:600c:c094:b0:4a1:faa1:3813 with SMTP id 5b1f17b1804b1-4a1fdd26e79mr104625315e9.27.1792690475189; Thu, 22 Oct 2026 10:34:35 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:34 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:00 +0100 Subject: [PATCH v6 07/18] media: sony-starvis2: Correct the exposure range X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-7-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 The software reference for imx678 lists register SHR0 setting the shutter sweep time with a valid range of 4 to (Number of lines per frame - 1), and then gives the example of all-pixel scan mode with VMAX=3D2250 and SHR0=3D2249 giving an integration time of "1H + Toffset" (further defining Toffset as 0). The driver defining STARVIS2_EXPOSURE_MIN as 2 would therefore be contradictory, and doubles the minimum exposure achievable. The maximum exposure is derived from STARVIS2_SHR_MIN which is defined as 8, when the actual minimum for that register is 4. Correct STARVIS2_EXPOSURE_MIN and STARVIS2_SHR_MIN. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 340f2ff0ef87..84f3978e1eda 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -62,10 +62,10 @@ =20 /* SHR internal */ #define STARVIS2_REG_SHR CCI_REG24_LE(0x3050) -#define STARVIS2_SHR_MIN 8 +#define STARVIS2_SHR_MIN 4 =20 /* Exposure control */ -#define STARVIS2_EXPOSURE_MIN 2 +#define STARVIS2_EXPOSURE_MIN 1 #define STARVIS2_EXPOSURE_STEP 1 #define STARVIS2_EXPOSURE_DEFAULT 1000 =20 --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.42 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690478; b=5XO+0M5ofZ2ySu/xpy8GxUp4tHINVYv+I3akPq3+zWPREnNg4k26bo/1Sk/VmFcTIwKc JTeA00xhlC3xCyAGrQ4Fm/9/bbTrOl+WOzjBBA/WXaGh2AoNE70BCEbBETkAIE0OEhAzp W9EFVd4EZQiK6nsg8Bln59PivgxFZi96YvldUg7My1E2RFauFAsXGX/n+pGv5W0NKyv9d 4vzd45l+6i2Ow0h7MYY44lpTgYw3lUBp/rHhZzbicv6B8J3tbnRv9RsFFeKYqkg3u9q+r S1Vqy+DwXHA8ecGKD+LEZSutYFlxstLnscPykkpfG6kb6+jZmJ1pd0BOLcNVWRaQcpw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690478; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=8ukfyerQ0BNQwVLXMA6bWcXy9Z460lzQtyxZ+Xp8q7Y=; b=KXwyulSLjjIqn7fxSzr7WVph2WIN7/1nluSE4dZt2nrXyYdnwgWDANOiFCzfl8ZfJjpq GIiKWLyB1CO0rpCheRgI3MrFK/pyZX+63oSMywvpUEcvDBwGsR0vFmu7+/2KMuUm5Xj+4 aaJA41vkoXzN4iaeBSatlxiXw38T4cR5UyxaD17qG3j6sivDP+796CeqHnA+pbV6jVRBT KWfmbJU6rt3A7oXGOu/UsCid9yS3VLNDabAr0IF3L31Gab2sbMsJfVXfztFH0thGA3dgJ MojDBv9l1EHH+ymPu49pK9wX/QOcKQ5XyCqcJBHEGeXcK2T4UsEARvm45SRi+T0HL7w== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=GuSzEIZy; arc=none smtp.remote-ip=209.85.128.42 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D459360A2617 for ; Thu, 22 Oct 2026 17:34:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org D459360A2617 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=GuSzEIZy Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4a20803a757so487525e9.0 for ; Thu, 22 Oct 2026 10:34:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690476; x=1793295276; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8ukfyerQ0BNQwVLXMA6bWcXy9Z460lzQtyxZ+Xp8q7Y=; b=GuSzEIZyN7jOQxTJ65Rk9qi0lbnn8bP/ve+H7SjgcOlVqiBy1i6cOhzLImlATHmmZS B1YWxP1QHNsIzv0uYQtYUZ62IeIUtdlKvmCQBVtqH4qKRujPFt860Jemstx0U39zWEWW aMPQ10bQpsgLub8+5dtEwNCMljs5IaMW+yB0HXR90DbwqXy+K2z/7ggG+A5wZIPxW9gt kFbMqmd1ru8FFYo+lDq1W1+CQZBDSMfC23uGDRCe0t2iNZATbjI+QNj74EsdexkMEeaZ kriBCRQxXskyoIGUXnY+/vY0nJ5QrydHSDx4NGDWx/BB7FtoQbDP349bg7ZyHeRtfyt4 ttUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690476; x=1793295276; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=8ukfyerQ0BNQwVLXMA6bWcXy9Z460lzQtyxZ+Xp8q7Y=; b=aR3Fr9dPKGEkKki76gvkZeyu+pLXEKJlyLO3si9C+7llFuFZDuRPCY6iTss9HGrKoX 9DS/Cu1aMQu4WtDo11DDq4U3hZeV75H0nR4zYvZVIcpJ7gPkC7Zr9yc3wNAQkNd8i0vy FG4OuRnTQG80HfGs1vuGGM4BxigQ7frOyzvzt71uJi7MD19iUIF8dXy7ekiuVX1GMtlk BCOARrr5KQhT0DlZVs8f5PYgCm+HkZVxE0AELoNHLLxeZRwJLgJ4wXOzJwc0LxOiXY1p heJ6thpZiGnOVBmpZQrXsBSP+DVA96PuoMlBiuHwjBsMVx1VyUxBmMIQkU3r5cKRnhtm JDyA== X-Forwarded-Encrypted: i=1; AKwUvBxfuRO3wFnMTL5dCmLNn6H5WhZcwxBlYNBbECtmKv0YT39/yKUdxY8TM7vRKZ+OSuHLJyJohNsRSte+hSc=@vger.kernel.org X-Gm-Message-State: AFq9FYKeh8HN8oeG0gXjCue+4ViTzBkm9FdfywsgdqRgmFww4GQRBxzi Ju1tnmBfVY1ab0CF0dbbZlK56FKrUzlu9tNOjKz4t3bNyZ8Ugq/eAzf8DbBsTVfgl2c= X-Gm-Gg: AYBFou2m4yuZSpRfTWAJXW0/dyqy5qANvSP7QHKmMSFA/dUM8pVHOjb3A98Z7aHeVH4 bPKXf/ke21OYrLSKZENZKKkkNnW23rLiKHP1VZMoWjwpJI4kfq8W+zDnGZJrkd/pcxfcSHv6Tpa 91BIpt7W8iMe+DGxhM9YmJUs2coKCD5LWANzoALpl1oNUB4hAFAMqXdJI+xxdbKX+ZSLqOfKNyV RnYhnMoFP1fIfHqQCKZPWyS4s5HfNCOxGL59IitT7LHeHyC6q99CEbc5dtMdViNGpmeYwG+7CMk zUKFdc/NgBwkODnHydueG0PtF7v+Xfc207+UCxQPi1geWHJLtOEU1poQk5ujjuWIDV2V/PYpzKf EbudinSnSr+YurImttf4c0uiQDtdIF7E7f24MR/iXWQKEQbgY7ieXC6TvO84PsEk+BUGwIbHQGZ yoxmywdyeSKfOnNd6AyAR0nuQLNyeuwstokFZH4E9DFYq5kHudDsYrYD3oVobGFgkW2CuYoIXmw XclNHlMypVDaUyIrICC4xr1A3O5Y03P0x6EVUTUOdxZq0pCBUzOESq1/ZhqvIIGRu2cPJCcEAUF MR4bfSHvSSU6eVq42vTMHKGwIS3KuCs= X-Received: by 2002:a05:600c:13d6:b0:4a1:d2e5:aa35 with SMTP id 5b1f17b1804b1-4a1fdd2344emr84423855e9.19.1792690476284; Thu, 22 Oct 2026 10:34:36 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:35 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:01 +0100 Subject: [PATCH v6 08/18] media: sony-starvis2: Put module into standby after identify X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-8-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 The module has to be brought out of standby in order to read some of the identification registers. Whilst it would be powered down via pm_runtime, should that be disabled it would be left in streaming mode. Restore standby mode after identify. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 84f3978e1eda..95da8a9e671e 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -1162,7 +1162,8 @@ static int starvis2_identify_model(struct starvis2 *s= tarvis2) * This sensor's ID registers become accessible 80ms after coming out * of STANDBY mode. */ - cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, 0, &ret); + cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, + STARVIS2_MODE_STREAMING, &ret); fsleep(STARVIS2_MODULE_ID_DELAY); =20 cci_read(starvis2->cci, variant->id_reg, &val, &ret); @@ -1170,14 +1171,15 @@ static int starvis2_identify_model(struct starvis2 = *starvis2) if (ret) { dev_err(&client->dev, "I2C transaction failed ret =3D %d\n", ret); - return ret; + goto err_standby; } =20 val &=3D variant->id_mask; if (val !=3D variant->id_value) { dev_err(&client->dev, "Chip ID mismatch: %x!=3D%llx\n", variant->id_value, val); - return -ENXIO; + ret =3D -ENXIO; + goto err_standby; } =20 cci_read(starvis2->cci, STARVIS2_REG_MONOCHROME, &val, &ret); @@ -1185,7 +1187,7 @@ static int starvis2_identify_model(struct starvis2 *s= tarvis2) if (ret) { dev_err(&client->dev, "I2C transaction failed ret =3D %d\n", ret); - return ret; + goto err_standby; } =20 detected =3D val & STARVIS2_TYPE; @@ -1207,7 +1209,10 @@ static int starvis2_identify_model(struct starvis2 *= starvis2) } starvis2->variant =3D starvis2->info->variant; =20 - return 0; +err_standby: + cci_write(starvis2->cci, STARVIS2_REG_MODE_SELECT, + STARVIS2_MODE_STANDBY, NULL); + return ret; } =20 static const struct v4l2_subdev_video_ops starvis2_video_ops =3D { --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.46 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690495; b=S1yP8vOCosnsiFYzZ8ECpaLbB+gLLNcGMj8xHnFGBhf8603LWEmFlxP5cDCmLjsPYJ19 9BsxIex6cFuSIagsUdyykLMW9QwsRLa7QlKgwgKTTCloCZ8rdYXZ+SL2mRqQv5voOV27x gZqE8wUSul8a58zHeIdA2mQtLizsKLStGyhbmcwCYeDNzNYtRRy71zxmESX2cXJ+ySPCI Fs4iDLHj+3y18vGZwvBWi+Y5AbRNyjSgFBB/SKYPY78ApHcrvYFjr5XEfA8QJX9ddvrCH mFyufWvBkoSSOO8gSi1pSP8DKE/dTBva92VQYxHrv58fZ1V5kjfN/c4ZaLt0NQAohZw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690495; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=9mhEjzlz7Jj16x4izypj1+gLbuZfUyq1nl602Q0+1VM=; b=OfEpNIKo4oq7XMQLfTziqL8lYIhHGNdTyuL48iCNK3z/8VvAaNFQf9zic7WExtZmtBEa ZyhzC9KrIb1WIe0p9m1I2/vkBfw/RWTXpGXSju5tH7zKdFKXol2UnNCEBJ49UdwAimh+n 3zzeED0s94P5/kFI5wW7G4QSjSb4yw6B5yUuZP1h26Q5HhTemSQO7VIuOLvf6cBbhe+vB 8hgTJRwgY8z1g+oo1/WJRBXt+0ThSvd4mO93KGm+Y5OsoKlqCCuojS2gihJiAXUOEZYZe 78dGPRxdwHWkC66SEy8bS/Xcgofu6NTDX9eYOgxuZUdJHgjXMg4WLaq4CLsaJ1CC1Ig== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=mGUd1+4c; arc=none smtp.remote-ip=209.85.128.46 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 082BC60A380E for ; Thu, 22 Oct 2026 17:34:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 082BC60A380E Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=mGUd1+4c Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4a1698ea378so546155e9.2 for ; Thu, 22 Oct 2026 10:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690477; x=1793295277; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9mhEjzlz7Jj16x4izypj1+gLbuZfUyq1nl602Q0+1VM=; b=mGUd1+4cfXktWsyBYNjeYK+/XNNw5ptG4mkEeyVNHplldJVcnfS7V1k7FwPVTelFtS NfdmKEquC3VhjCJ2XsyWQOYIxgam7Z6MeSbLuWn5T4yJptEdxmE/RM7owSIg1ynA1FcY DPxaX81GlTdZ8GF9IWL/MQ18HQoolQoOv+OeHiNvV8aWaO9Kj4W+IfIH5kgAQHH5uaVf vagzqS7tHTLRTIc0Xkeh1qOiWEmLkG9FM8UQdlIEEf/X0jEzWlpxIqVRITZEKhAtO8SW nsSLmYtbaCOeEMVUIrhlsq8d+Hr37oFaXfXGmwrt1Aq3KdMBanGQgJuv746K94x5jX3/ fmpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690477; x=1793295277; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9mhEjzlz7Jj16x4izypj1+gLbuZfUyq1nl602Q0+1VM=; b=g3eleu89G69aeLpbxQ5+ZWIC8HR6sAbsfZBA0qoQIpYKyI24KZo9+LAoO5StIbYA4+ UJCa5IVlgbsov9hUGOL657HwhfZg2WZ92Q54CnFhZMlo7F0MArXoq87eMXZU7VjQwTzi xMvEMVvmpJScN8IhhNFZwhoymar27AB9AXrjFVKLo/adHDkyBlOUz4gTNvVcTPX2VTfO 1LfUfKaM/orPtzA1KDi2FAgcBwjfFipHs/RrMKJN6fj9ztIUqhg2TA0i5NGfiFAgp2SX 2NeGUhBSWYcrkhv9LcWSQexbzC9zPNHOI2SDPNri3XetXeljQviH5H3xQfJC0FATc7jC HrDA== X-Forwarded-Encrypted: i=1; AKwUvBzrTMD4x2Wt2jg9d2Pc2yC/YgIaL/yrCFV9EoJk5DtSwsGxW2owC0itXLoRYNjIp4c+zXh+VZTVu0Iq4Jo=@vger.kernel.org X-Gm-Message-State: AFq9FYJ2UtxGqzkakKlixjK7AtRAcOUstRzXJCxbTtQNV/hp/3MszANu 9wRZg9Sdv4eV+mlXqLKfTgXEmHqOSKzLEaau4cw0IgORjOE8H5ObNSQciqOpU0n9JUg= X-Gm-Gg: AYBFou3z17DHyNdL1F6rzo0Ik/60dHdY3sfqXoyitlqK0pvUnnhH0KwsGkoRmu1GRuJ /E7PhbYlthDYX4Y7tNKQihBJtnmCVu2ZYsGnneoz9QQLEyNIjNJ7W9ZiXSLZ4yue0ZzS8v1itmY H1gYavdcDCrX/pVBpuxQI0Beyxm9pS8/fH+K9OLzdb+Epu3z2MJQKSVZHb1ggMLBsg5zjI1sBMv azLk7JuJzxN/kQruahvQs1fmM1Px6QLb+3MU/qt2oQjaKeAKXFH3cMKOr8aXVKB/OUuDKP1dErc gWzJU2CxP2vA9OPymFoK5N/NhvbMhwYBzWcbQgBgmFfw0IGZuUDpKYznNTU/CRys2ieXTgHaKCb LYJ0ZGl13XFVnZXOQcS/DjYvE09TD6E35sbmTofPlziyrcndhBaDI8U3ZvOa57AlythFQGWM4cL Yg7pWmRc7izIZYk7lHVNamJDJlqWm+Hp6hQsq0odbuQUG8cRuK+ZAnpX7Y8nPHGbS2J7ic1VS36 uD7/vwEjnQlDK6k4n6rya0TrVqf1IUj2N9NvxFfFIiLegzbpCgK9FKu2gtpshQZTQVJC3hvsqVH 9yAplgd77BuiudvIAlvxYQfShhXpXb8= X-Received: by 2002:a05:600c:4fc8:b0:4a1:bd69:526f with SMTP id 5b1f17b1804b1-4a1fd8a7d9dmr129819385e9.4.1792690477435; Thu, 22 Oct 2026 10:34:37 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:36 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:02 +0100 Subject: [PATCH v6 09/18] media: sony-starvis2: Use pm_runtime_autosuspend X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-9-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 In order to reduce the time in stopping and restarting streaming, use pm_runtime_autosuspend so the sensor isn't powered down. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 95da8a9e671e..27357cc293be 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -858,7 +858,7 @@ static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) break; } =20 - pm_runtime_put(&client->dev); + pm_runtime_put_autosuspend(&client->dev); =20 return ret; } @@ -1049,7 +1049,7 @@ static int starvis2_enable_streams(struct v4l2_subdev= *sd, return 0; =20 err_rpm_put: - pm_runtime_put(&client->dev); + pm_runtime_put_autosuspend(&client->dev); =20 return ret; } @@ -1072,7 +1072,7 @@ static int starvis2_disable_streams(struct v4l2_subde= v *sd, =20 __v4l2_ctrl_grab(starvis2->link_freq, false); =20 - pm_runtime_put(&client->dev); + pm_runtime_put_autosuspend(&client->dev); =20 return ret; } @@ -1447,7 +1447,10 @@ static int starvis2_probe(struct i2c_client *client) NULL); =20 pm_runtime_set_active(dev); + pm_runtime_get_noresume(dev); pm_runtime_enable(dev); + pm_runtime_set_autosuspend_delay(dev, 1000); + pm_runtime_use_autosuspend(dev); =20 ret =3D starvis2_init_controls(starvis2); if (ret) @@ -1479,7 +1482,7 @@ static int starvis2_probe(struct i2c_client *client) goto error_subdev_cleanup; } =20 - pm_runtime_idle(dev); + pm_runtime_put_autosuspend(dev); =20 return 0; =20 @@ -1494,7 +1497,8 @@ static int starvis2_probe(struct i2c_client *client) =20 error_pm_runtime: pm_runtime_disable(&client->dev); - pm_runtime_set_suspended(&client->dev); + pm_runtime_put_noidle(dev); + pm_runtime_dont_use_autosuspend(&client->dev); =20 error_power_off: starvis2_power_off(&client->dev); @@ -1516,6 +1520,7 @@ static void starvis2_remove(struct i2c_client *client) if (!pm_runtime_status_suspended(&client->dev)) starvis2_power_off(&client->dev); pm_runtime_set_suspended(&client->dev); + pm_runtime_dont_use_autosuspend(&client->dev); } =20 static const struct dev_pm_ops starvis2_pm_ops =3D { --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.53 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690491; b=s1MVd0558ZEhrvdJVPIVrTIct8UQPyz4GG8gduztWcxN5Ul06saPwipKAlJIY0ZqNZuX sXBDdMxFUDqqeSnUatara+LyDsRtdqXCcLMmABUYfhlsCK5wbqrMIGp/UKl5nzrj6ggA9 HJBNRZxJeIkUFgN6ST/sTeW4pSBm2kbrkFD+/5kPtx3PS7RLcPtHhE4MPQ94b0k5y2UDh T9aj/+gYxilISy5mpuvZpvBk5c/POPjddIS42WNyAYc7PNo22Cudq7757flt9/kbe36Gd zmqVSszQ+SBqsRbpBTAhhZiWEbOzS6ipyLwSjS/vT8/HbXSW4eFXGi5lRGuXWmLH3GA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690491; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=sUF6T1CjdM7KPykBK1rJtL5GvAJtQ2hOBe2P+sd0pXk=; b=V33wyh9ti9cTDMlmRSu05zpmWygxBp6QF5X5WzZEi3iqCyzvBLYn5xmKJQIcKQgugcgV FLess+5/QFvLpGhQ7VIi5Mz7MmwUg1InYLbIkkbNc2uEV1a+vmAZyUfqhbEIPO/qCRize 7XEhwyBPa5cZLh7WrLEfP1Xg/h7NiIiAs0ifop9zGfeds/JeN4a5hS5t8FZBu4uBn/rba R3LpzNkiLb9WE3sdkmsoZtWxA4c5nnDfaK+IItOpO3dTb79TcjCH9B4DeT4yOE1xk7EMO X2+xMpp23srS3PkrTyb6CJ/lSjhHcIG6RaUv+/Jh+VxJnzXILmujiuHaOszDJdbJ5xg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=sI4LJ6Qy; arc=none smtp.remote-ip=209.85.221.53 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F18E460A2608 for ; Thu, 22 Oct 2026 17:34:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org F18E460A2608 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=sI4LJ6Qy Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-48441a2ba1bso25049f8f.1 for ; Thu, 22 Oct 2026 10:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690478; x=1793295278; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sUF6T1CjdM7KPykBK1rJtL5GvAJtQ2hOBe2P+sd0pXk=; b=sI4LJ6Qy6KS4Az06HsbqBPQPTZ9D3YzEPneAJpoUA0iIU5b/KZFk2B4UmBnfVKtDbT 1mM9wrXIIbFzjQwUFRTINUd9I+DNl4tERFkhjJAAC8FT/IQALLB020FaiOlnmYdDtW/P 9mL/0s/jsfzcWne8j0egSHgXLv+klEc2kK7hqYuvF/khOZtrc83J3wO6JsYYl4SuYGsY ZNBluYNppvHG2gl4Bq7h7m/oJGbSnWVBDXsM/NhHrbxSZ2rhpWNL+wv83wVYG2z1lFue RKfRkYzgkOJQn10QbuYCWdLQDliSLaxXndaPcwWg/81+XK3mJ/OcWLKlJXQKb+HrkvmE ayUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690478; x=1793295278; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sUF6T1CjdM7KPykBK1rJtL5GvAJtQ2hOBe2P+sd0pXk=; b=eTLUKQWtqAJphi987kUjk+Nhq+AaHvQh0yQ7vwZ9h6DiubKEGrfbtwt0+p+CcSES5e pqjw5MEM5GOTGbmarzKc9yh8R+RPI7t4wbIl3wpUm6fNqTz7jrT35iCm/ubErjBRFlFr HAspE9YHRK6GM5po9qPGL8I3VZEP0yfvi2hzFwUcbRf6zHvkgbm43+2VrSj8q61JS4O9 DJWxWh1ZYa4aBB9L62hA4GW4BXsnXGTsitRi/dqwNeTHLNbBfEphet3Mzs/WP2yb5gcm cV8kGqGl4fsSY/7z2bWeZN+uQnYEZe1iTU4rX2XSS14FEAIfxUdv4EkocfsvTiG69jYS knhg== X-Forwarded-Encrypted: i=1; AKwUvBy0k/z+rElYi/GIEHkOzJD/OacYZazgAX+afxAVQq5n5RLdR9rGHckszjE2vzMZuxghlIu427FwIHr40jM=@vger.kernel.org X-Gm-Message-State: AFq9FYIgundsILROwXFsRHB+t6T2d+RdjVqLMV5ca4oIL3Z9PUTcED/9 xfHJKidE2uSBJoK0p+R8kw86E6J+279eipCoOkhLPPjuZuivruAFlFD0YlJ5p551sZo= X-Gm-Gg: AYBFou2rSjncQYraUjq7U0+BNjw0KWorSPl+YSJj+cm6v6LtLrlWoxPDZtil2i9oURd 6VZpLovGJXtH47WgPS9The/OyiFkzqXSxr8pW2XCKO5Lnt1Q6f0eNpDu29J2b8m+WPFN76GYdUL 6pwtyOCXINZ/9tkh1lxMVyC98vlSbwAR9fsxbsdY493/m2/+AMtM6Mb8PlHslwFH1H7F/mBZVzi uv3LYSmtmnJI5TqEncmMP9Qe8FASLCDb9PES4B5GrBIrN/YNwuN2sk7A5lhV7T5ibPiHAPXm47T rSuvaYJbCBzweHR8AUGuvuhHS2hZN+x0+rln4gigsz+/ivSTgnTYEvN+eFIbpk0NF1GgdEFDNY6 t3bheND5Q8lSS+fUFASZHxcSSpZ4KDQkWuPp169LHrKEGPC6maFy6BSNfNSiwOc+vRrjdjPDjyb CZSnwxZ9hLujIKhHbbnbdY7b3Me3Avqs/46702TxNvOFv7Orhi44nzkOZJw/13yQ+S4iqD/xeyc gOYpEzjGEF8VKoNJT3UMOomS5WN1FLYi6zMq+d9zf1DxVSAGD0KlQnITpCuqHCEzxRIozM5zGt9 LruKIy3tvDfLj67Qt3PAVbBPWX+mMGA= X-Received: by 2002:a5d:6e8b:0:b0:48a:f404:695e with SMTP id ffacd0b85a97d-48e2650e290mr8989325f8f.50.1792690478409; Thu, 22 Oct 2026 10:34:38 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:37 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:03 +0100 Subject: [PATCH v6 10/18] media: dt-bindings: sony,imx678: Add other Starvis 2 family members X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-10-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson , Krzysztof Kozlowski X-Mailer: b4 0.14.1 There are multiple members of the Sony Starvis 2 image sensor family that have the same hardware requirements as imx678. Add them as options to the imx678 binding, rather than duplicating it. Signed-off-by: Dave Stevenson Reviewed-by: Krzysztof Kozlowski --- .../devicetree/bindings/media/i2c/sony,imx678.yaml | 44 ++++++++++++++++++= ---- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx678.yaml b= /Documentation/devicetree/bindings/media/i2c/sony,imx678.yaml index 098f72544216..0115f7b00d5f 100644 --- a/Documentation/devicetree/bindings/media/i2c/sony,imx678.yaml +++ b/Documentation/devicetree/bindings/media/i2c/sony,imx678.yaml @@ -5,29 +5,59 @@ $id: http://devicetree.org/schemas/media/i2c/sony,imx678.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# =20 -title: Sony IMX678 Sensor +title: Sony IMX678 and Starvis 2 Sensors =20 maintainers: - Jai Luthra =20 description: Sony IMX678 diagonal 8.86 mm (Type 1/1.8) CMOS active pixel type solid-s= tate - image sensor with a square pixel array and 8.40M (3856x2180) effective p= ixels. + image sensor with a square pixel array and 8.40M (3856x2180) effective p= ixels, + and part of the Starvis 2 family of sensors. Other members of the Starvi= s 2 + have the same hardware requirements, and therefore share this binding. =20 allOf: - $ref: /schemas/media/video-interface-devices.yaml# =20 properties: compatible: - items: - - enum: - - sony,imx678-aamr - - sony,imx678-aaqr - - const: sony,imx678 + oneOf: + - items: + - enum: + - sony,imx585-aamj + - sony,imx585-aaqj + - const: sony,imx585 + - items: + - enum: + - sony,imx662-aamr + - sony,imx662-aaqr + - const: sony,imx662 + - items: + - enum: + - sony,imx675-aamr + - sony,imx675-aaqr + - const: sony,imx675 + - items: + - enum: + - sony,imx676-aamr + - sony,imx676-aacr + - const: sony,imx676 + - items: + - enum: + - sony,imx678-aamr + - sony,imx678-aaqr + - const: sony,imx678 + - items: + - enum: + - sony,imx832-amr + - sony,imx832-aqr + - const: sony,imx832 + description: The IMX678 sensor exists in a colour variant (IMX678-AAQR) and a mono variant (IMX678-AAMR). The variant-specific compatible describes the exact sensor variant, with the generic IMX678 compatible as a fallba= ck. + The same applies for the other sensors in the family. =20 reg: maxItems: 1 --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.43 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690481; b=S0WddjNXrNLO2phL8ceQf3bWSxB0xv93Beyg3SSeBq9OONaBIhxinrUO1tSnFPjfFpss zT9+WIyzzzIpZmSGR2iM02TO4gsP2OIdQXDO/gcQgia6laag4NhT7yVVrUV4SzH5HQpqP xghUTW7KlBLf37KDxl4irxAo2El02qh0lYV/bXOEkGhruz+yoG9kRkJft8ULp0VG1rU02 8f32Uby5uQA5oYk5ks59DMmUausztmOD7WbWb//tZPnP1VQojRVanfuj6g92RhkGxieYN EGMDyRtQ/rdjoAEIGEM+P3Sb/desvklHZHwczUJF2LR4x2CSGUT41lKN1pHizXlB0Tw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690481; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=8d1JUzHkhOEykd2vHLCoQfgBLqiimWUaKlrx1XuPKw8=; b=jdnPqtjueq/rk1Imdk9H1c40hyOEvcIZ0SSBC8EEWatUpTYmJOtpjN+eSJFBC1U0OklC 5wbkHEBwLusVc5w0QOmYdZ/v6ZXspR56UcZe4/PMqQkVv3lefbW/nbFdDLrncOd7zSslk lpbPQGYTcRV1+F0p2Ktk11MwXnHKaOn9aE1ZVUSUIYAysI9CTnx9OkpHkCVrfZo98FNZO rbIKxvOhako3qCNku6cIRqqU78KVaNXNRBPCg9CRyyzQ3pia0zdDfX3j87o5wU7EFcyUA AE0JJjXWk1NXVT9HziySQzWptuHfBWtnAZCr45AH1kJ990ziM32WqNrDQQNPoMO3x8A== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=WHc5SoVU; arc=none smtp.remote-ip=209.85.221.43 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18A19606A335 for ; Thu, 22 Oct 2026 17:34:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 18A19606A335 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=WHc5SoVU Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-48c4649b35bso44508f8f.3 for ; Thu, 22 Oct 2026 10:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690479; x=1793295279; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8d1JUzHkhOEykd2vHLCoQfgBLqiimWUaKlrx1XuPKw8=; b=WHc5SoVUd2hTSKLuJfzBcpNXLIJ+7F/nO+MsWUO5CIY8erk7qD6uhWZR4Q0U2Ob4zw pHb4mfo1dTMwA1pIyzV5X7uaGsgs60Yo3yM00LN29Sf8lvl9YFlBCqJUz8pcbIw0rUT4 blySItgeFOlf0YNdHnE3AkKRXNikKkBFx4LrcaiGeexp4mf+eEMYkI3Cwm1VJf/JFYXq rywbcvfbhimYZ1nle1vGTpVITK9LwcVwAbTZ77DwY2bQTXUfOtK3V+zhRjBTY0AtFjgq wzQYuNps0UBTEhpUOW6E55Or44eOk1csCYDo8l0cSrccm85y20Fxx38rDMprrpmPWXX2 9jFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690479; x=1793295279; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=8d1JUzHkhOEykd2vHLCoQfgBLqiimWUaKlrx1XuPKw8=; b=CzB1MeXgMBKnKtSRYu8fjua030vxpnRNFYHt0AP26YITSnlN7gJcD+ZCgqYaNomu+B lbiqdst4eIk3zUP8Lm1gtIWFXZNNrYmhFBtvGIvCqTCn4lJ5F2x07V6TGdDh1qh9vjnR GVhMQaIzxkPA07lLA4gU6rl+ZB+gFxkhVE9d6WYA1vDFZOh2RJvCatuJqTXpemS2ZbAb teJy3N1JzljMIhWgbEGSIxqRTbA66xIpFoZ0sHP6STyZj5Nbb1YMLA1PVNULAFRRKhXP 8+jyGuqZHOam6LY2VlfAxtfzWSwLl8iY+59BJENqDfHqxqf9QTXeVS5we6GHgNUKkSBy I5Ag== X-Forwarded-Encrypted: i=1; AKwUvBzbEcYV8XDQLUOJHYt+/6YdTIhnb1h0pQY1hJBEoEe32qalEb+7k2OYirNr4dhP0ge+6V4mPA3+MyCgbFo=@vger.kernel.org X-Gm-Message-State: AFq9FYLpBmfp8NRZNSD2FLnOxXk8g6guILS/28HatxoxK5br7fVcI9tv 2+bE/JvgCDETXoNyTOvxV7nyGDhWXsf2i1h80wb086T5ct5eJ2pJk8whkoq1dwU/B94= X-Gm-Gg: AYBFou2xAB/B6B/b0r4Gh3I6i0PrCc3NNx+w9TCXfsnstIHg7HiuL+k3AkD/HAY3tIu zVdpkYitkcpdze41EYtXjHmpGRmX9zFPGWm8hAL8CobdHGr+yndHTRcD+Sn3zeqm5lgmyqjeTDa l+3kH7uSJucwCS7/NZUQyf9ZiQXj9qug3lTDWckULBvaVNwyC1+A9W38Gi2sxSIXpqyRjDZ8giV lk/BXyI/BlRN493zRs091PwcGoSa2wqY3NGhpMxtLV3LhhDPJPLOFT7dK+xvtxtQRqutnV5/xAU jUy0TdDMPBxOSm2JQI8N9p/Y9NYGmDFfOtiFJCA8tKHiPNb7JjaBD9pxKQ5CxM7nP7pl+US2DjR sDO4CEGyO0+gudwylULUd/8IzWlpYec29GEmu54Kf6S1HpuWfNbw+jMOd6gCA3h6sgAF4LBzT18 cfbkVGmhI7Bxl7yl43PWQgzL73Y+SHtIWZHUyIvOjU/ktq6yh6wVfm2Qag2EiEsg4cjNqt9fgPE mK0rr2qZ380ianp1QpdCuOzjUhmiWIDT+VuRYbIO1kJqlNZ7PW6oV72gNB96zZYA+DWiEUSil61 jqINRNTdFzKtPcMeqPG4+jxWRUPxk8Y= X-Received: by 2002:a05:6000:288e:b0:485:8cc8:1f5f with SMTP id ffacd0b85a97d-48e264a1f81mr12526348f8f.42.1792690479554; Thu, 22 Oct 2026 10:34:39 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:38 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:04 +0100 Subject: [PATCH v6 11/18] media: sony-starvis2: Add support for IMX662 X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-11-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 IMX662 is a 1080p Starvis 2 sensor that follows the same programming pattern as IMX678, so add it to the newly parameterised common driver. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 155 ++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 155 insertions(+) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 27357cc293be..2db9ac28308a 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -8,6 +8,8 @@ * Currently supported are: * IMX678: Diagonal 8.86 mm (Type 1/1.8) CMOS image sensor with 8.40 M eff= ective * pixels. + * IMX662: Diagonal 6.45mm (Type 1/2.8) CMOS image sensor with 2.12 M effe= ctive + * pixels. * * Copyright (C) 2026 Ideas On Board Oy. * Copyright (C) 2026 Raspberry Pi @@ -663,6 +665,136 @@ static const struct starvis2_variant imx678_variant_d= ef =3D { .hmax_min_pixel_array =3D 550, }; =20 +static const struct cci_reg_sequence imx662_common_regs[] =3D { + { CCI_REG8(0x3444), 0xac }, + { CCI_REG8(0x3492), 0x08 }, + { CCI_REG8(0x3b00), 0x39 }, + { CCI_REG8(0x3b23), 0x2d }, + { CCI_REG8(0x3b45), 0x04 }, + { CCI_REG8(0x3c0a), 0x1f }, + { CCI_REG8(0x3c0b), 0x1e }, + { CCI_REG8(0x3c38), 0x21 }, + { CCI_REG8(0x3c44), 0x00 }, + { CCI_REG8(0x3cb6), 0xd8 }, + { CCI_REG8(0x3cc4), 0xda }, + { CCI_REG8(0x3e24), 0x79 }, + { CCI_REG8(0x3e2c), 0x15 }, + { CCI_REG8(0x3edc), 0x2d }, + { CCI_REG8(0x4498), 0x05 }, + { CCI_REG8(0x449c), 0x19 }, + { CCI_REG8(0x449d), 0x00 }, + { CCI_REG8(0x449e), 0x32 }, + { CCI_REG8(0x449f), 0x01 }, + { CCI_REG8(0x44a0), 0x92 }, + { CCI_REG8(0x44a2), 0x91 }, + { CCI_REG8(0x44a4), 0x8c }, + { CCI_REG8(0x44a6), 0x87 }, + { CCI_REG8(0x44a8), 0x82 }, + { CCI_REG8(0x44aa), 0x78 }, + { CCI_REG8(0x44ac), 0x6e }, + { CCI_REG8(0x44ae), 0x69 }, + { CCI_REG8(0x44b0), 0x92 }, + { CCI_REG8(0x44b2), 0x91 }, + { CCI_REG8(0x44b4), 0x8c }, + { CCI_REG8(0x44b6), 0x87 }, + { CCI_REG8(0x44b8), 0x82 }, + { CCI_REG8(0x44ba), 0x78 }, + { CCI_REG8(0x44bc), 0x6e }, + { CCI_REG8(0x44be), 0x69 }, + { CCI_REG8(0x44c0), 0x7f }, + { CCI_REG8(0x44c1), 0x01 }, + { CCI_REG8(0x44c2), 0x7f }, + { CCI_REG8(0x44c3), 0x01 }, + { CCI_REG8(0x44c4), 0x7a }, + { CCI_REG8(0x44c5), 0x01 }, + { CCI_REG8(0x44c6), 0x7a }, + { CCI_REG8(0x44c7), 0x01 }, + { CCI_REG8(0x44c8), 0x70 }, + { CCI_REG8(0x44c9), 0x01 }, + { CCI_REG8(0x44ca), 0x6b }, + { CCI_REG8(0x44cb), 0x01 }, + { CCI_REG8(0x44cc), 0x6b }, + { CCI_REG8(0x44cd), 0x01 }, + { CCI_REG8(0x44ce), 0x5c }, + { CCI_REG8(0x44cf), 0x01 }, + { CCI_REG8(0x44d0), 0x7f }, + { CCI_REG8(0x44d1), 0x01 }, + { CCI_REG8(0x44d2), 0x7f }, + { CCI_REG8(0x44d3), 0x01 }, + { CCI_REG8(0x44d4), 0x7a }, + { CCI_REG8(0x44d5), 0x01 }, + { CCI_REG8(0x44d6), 0x7a }, + { CCI_REG8(0x44d7), 0x01 }, + { CCI_REG8(0x44d8), 0x70 }, + { CCI_REG8(0x44d9), 0x01 }, + { CCI_REG8(0x44da), 0x6b }, + { CCI_REG8(0x44db), 0x01 }, + { CCI_REG8(0x44dc), 0x6b }, + { CCI_REG8(0x44dd), 0x01 }, + { CCI_REG8(0x44de), 0x5c }, + { CCI_REG8(0x44df), 0x01 }, + { CCI_REG8(0x4534), 0x1c }, + { CCI_REG8(0x4535), 0x03 }, + { CCI_REG8(0x4538), 0x1c }, + { CCI_REG8(0x4539), 0x1c }, + { CCI_REG8(0x453a), 0x1c }, + { CCI_REG8(0x453b), 0x1c }, + { CCI_REG8(0x453c), 0x1c }, + { CCI_REG8(0x453d), 0x1c }, + { CCI_REG8(0x453e), 0x1c }, + { CCI_REG8(0x453f), 0x1c }, + { CCI_REG8(0x4540), 0x1c }, + { CCI_REG8(0x4541), 0x03 }, + { CCI_REG8(0x4542), 0x03 }, + { CCI_REG8(0x4543), 0x03 }, + { CCI_REG8(0x4544), 0x03 }, + { CCI_REG8(0x4545), 0x03 }, + { CCI_REG8(0x4546), 0x03 }, + { CCI_REG8(0x4547), 0x03 }, + { CCI_REG8(0x4548), 0x03 }, + { CCI_REG8(0x4549), 0x03 }, + { STARVIS2_REG_WDMODE, 0x00 }, + { STARVIS2_REG_MDBIT, 0x01 }, + { STARVIS2_REG_XXS_DRV, 0x00 }, +}; + +static const u16 imx662_min_hmax_2lane[] =3D { + [STARVIS2_LINK_FREQ_297MHZ] =3D 1980, + [STARVIS2_LINK_FREQ_360MHZ] =3D 1980, + [STARVIS2_LINK_FREQ_445MHZ] =3D 1188, + [STARVIS2_LINK_FREQ_594MHZ] =3D 990, + [STARVIS2_LINK_FREQ_720MHZ] =3D 990, + [STARVIS2_LINK_FREQ_891MHZ] =3D 990, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 990, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 990, +}; + +static const struct starvis2_variant imx662_variant_def =3D { + .name =3D "imx662", + .id_reg =3D CCI_REG16_LE(0x4d1c), + .id_mask =3D 0x3ff, + .id_value =3D 0x296, + .native_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 1937, + .height =3D 1101, + }, + .active_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 1936, + .height =3D 1096, + }, + .pixel_rate =3D 222750000, + .pix_per_clk =3D 3, + .common_regs =3D imx662_common_regs, + .num_common_regs =3D ARRAY_SIZE(imx662_common_regs), + .vmax_default =3D 1136, + .hmax_min_link_freq =3D imx662_min_hmax_2lane, + .hmax_min_pixel_array =3D 990, +}; + struct starvis2_model_info { enum starvis2_type type; const u32 *codes; @@ -693,6 +825,26 @@ static const struct starvis2_model_info imx678_autodet= ect_info =3D { .auto_detect_mono =3D &imx678_aamr_info, }; =20 +static const struct starvis2_model_info imx662_aaqr_info =3D { + .type =3D STARVIS2_COLOR, + .codes =3D codes_bayer, + .num_codes =3D ARRAY_SIZE(codes_bayer), + .variant =3D &imx662_variant_def, +}; + +static const struct starvis2_model_info imx662_aamr_info =3D { + .type =3D STARVIS2_MONOCHROME, + .codes =3D codes_monochrome, + .num_codes =3D ARRAY_SIZE(codes_monochrome), + .variant =3D &imx662_variant_def, +}; + +static const struct starvis2_model_info imx662_autodetect_info =3D { + .variant =3D &imx662_variant_def, + .auto_detect_colour =3D &imx662_aaqr_info, + .auto_detect_mono =3D &imx662_aamr_info, +}; + static const char * const starvis2_supply_name[] =3D { "avdd", /* Analog (3.3V) supply */ "dvdd", /* Digital Core (1.1V) supply */ @@ -1528,9 +1680,12 @@ static const struct dev_pm_ops starvis2_pm_ops =3D { }; =20 static const struct of_device_id starvis2_of_match[] =3D { + { .compatible =3D "sony,imx662-aamr", .data =3D &imx662_aamr_info }, + { .compatible =3D "sony,imx662-aaqr", .data =3D &imx662_aaqr_info }, { .compatible =3D "sony,imx678-aamr", .data =3D &imx678_aamr_info }, { .compatible =3D "sony,imx678-aaqr", .data =3D &imx678_aaqr_info }, /* for non-conforming DTs that rely on runtime check */ + { .compatible =3D "sony,imx662", .data =3D &imx662_autodetect_info }, { .compatible =3D "sony,imx678", .data =3D &imx678_autodetect_info }, { /* sentinel */ } }; --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.45 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690483; b=ZFH7Ouui9HVwmqiBF6HuV+uQBaoxgvN9/owE2alofTNQklb+GuIQ21tr077IYRnkyIvR mGL6G/UZQF1l5+2yetY8k/BTb1yd38+ERjwmiKj0d0Ntq06j/xCfJ0AH6vVRl5+Pf/fW4 tLVFXEyEhh/R+QjvVDT0twQB78wl+zjvdQNWHaaFFxTB8OiBxlNXNRn/23xHXydNpk2el +OAYvmI5OCLSH7Ua0Z3YXrqk/2/vCLfE02euRXimE6cotQOXpj6a9iOWZdHI7wpPqs0d6 DFiBgMfy8C/FOV91er4QZvd4pNrB1qFKPRs5RUvEc1Zg5A0FqZEELgt3/oB1ybn7xSQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690483; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=ajMUqmJq5v1qiltV0uRwoZmJBJ8faJK2wIDhzU7JGaY=; b=IbI7qWo+MVPghm3j3tpxdf8GfMM3bmRdWW0o1LJWN2Puk3pg+xArcUgf11y9nivt/q1f jN1LYGDuQsWkgE5hzUI4UaMEWZJH3yZli4F4NKP+eCpD2MruBDVCF/ps6La7iXUuJSueM wjuFOU91G45L7Dm54KqjcBkI5UxFoG+JQCe9VfLL6xDiNz73wIhXlUqrvb9xFwRNMdBpw H7zeCICJwBltbsRC+44ZFVNhn+QynrLBsOarp0lwhYYoYJrxv5n9ZtcezTnTw2Kw7VGGx Mmof+1jpNWf6C2hoW+eJoTs1YV9J+tcg71pUbWjOda9IuqxPxvnMobx0uAdk9+CavjQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Ag101UhO; arc=none smtp.remote-ip=209.85.221.45 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3038960A3829 for ; Thu, 22 Oct 2026 17:34:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 3038960A3829 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Ag101UhO Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-48c5358fc28so59887f8f.0 for ; Thu, 22 Oct 2026 10:34:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690481; x=1793295281; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ajMUqmJq5v1qiltV0uRwoZmJBJ8faJK2wIDhzU7JGaY=; b=Ag101UhOrWR83C3JPNWDAFiHpZR7rGI0618ydvvhCOPZMLntIBFNsadWBQEf/pzPCo hK7+5ZUTdiaeRjApOmBnyTxFj/Xj1meVZEJ7zFNLBUw+F3zVe0OzT+cO2eZFHlb+66CY DF3Gc1riLWLQ4p7JgcYzZ8CMy7bWCLORnUItLKYEyY6MTb67WIo9QSpBqz5IiAGSEiex RiSYvDc7/g+h2oHrvmrNvOIEj+HZ92AewLBGcmxK3LcrZGzHUAZ2LJep7pd4UsaQJSIO 9UoJ5xj6b9wbXli7Bn2WCKkfbNbT4+n3vSxTcXZFeoOA2othN8+B1ZCZHOk1koWhn1xy Awfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690481; x=1793295281; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ajMUqmJq5v1qiltV0uRwoZmJBJ8faJK2wIDhzU7JGaY=; b=J9HkSWxGe69LBTzT1xkmAnrXbNwlduqCp2cMQMTXmMzAwDE6dGUa+Sueb4HG4H11Bn KFCcszRJQpF/7iejJRm5DByBbYECRWiRua/xQfT9CBzU91XYfUWmmnwENHieMcaicbK2 jOQ5kL61KWProWUBl+p22uLR0FTUj+aQVYuSMF5GvbCVfAH+/tTJozFvwrUHcy4mT80b 5RhEk82bn+uxPLJFkAlMv9kMQllREc+7hDS+DV7r4heoIFX0TeQwqGo0ZlIF7I/nG3se hsG41aWPq3OV5DbZ2r7BWPkEe0V19XA/nnNzRtfJyTM4nhPHmUdMxHqyI/6U7WgDKKGd jVHA== X-Forwarded-Encrypted: i=1; AKwUvBwLvgIazfus4GV50FpCDaTwL/y2vVZxI5BewI+XSj6aREKM/JtvL3TXKlUn47TsYtUvNh9hYgRTnGzjO4I=@vger.kernel.org X-Gm-Message-State: AFq9FYIepCD154Qjaq4xVQkQJls9Hp2p/SlHGj77SOPm+R20qCgz3Lq+ Hc6uVB1IIaakuU7qitU+SfH+EeDFVHmipC9N51HKKBH6AMcEL6Ly4WlYYvW+z+vVIeU= X-Gm-Gg: AYBFou3LzGElRZ8qvDke8KcE5XdNitszmBFz5ZTwwSq5qqKVWIEE1p2wh4jvHbacnEV vIfJ3oRm0ZS3IKVNJo5wi1lbAvoMykZ/N2FXGydshCiLosMfGhU+JN3PiXs6fXG4eaEY26hi77k 6BOimxTyoxH/j3/KYHKBYP23DLCcsXgITrRg+9WotU7k+w3e8z8vXm0bEQoM0J7YdItp6b1iqaD 7haZ4yvhGyhgNYZ7+LTHH/gvq+kB8rKIB0CXDeXC2+7bwWNZLlnTkRfQU0qNjpafssH4L1QQ5cE MBl029LNjhAlX3G/goS2zpgNw5R9KNudZLWn+JT1NEzYXJNUOeZbJepUKyYMdp/u2zGfSb4nLjy jWP6G92u18QosisQwxohvYedc6eqosIg7vC5sqd4KR9wUVDEwrniMi9kcueK/4kqeEkOzEPAUsG yeJUfNYeDrR0xY6gsgv4ZaOnjMX5wy/CsmayPg1ZdF74TGokM+N/lUm1nkpkPqZsJZKFeBr3AT6 26mzAD4O0iv9M4wj4CYwQcURInPAR9NWs1xS4T45waTW9TUEa1xFShCas5a8sfjngASbpHeJqaO Ux0jl/ITtieVpzBpxHLM4MptQmmheF5p X-Received: by 2002:a5d:64e4:0:b0:48b:118e:7454 with SMTP id ffacd0b85a97d-48e264bd971mr12892930f8f.31.1792690480559; Thu, 22 Oct 2026 10:34:40 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:39 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:05 +0100 Subject: [PATCH v6 12/18] media: sony-starvis2: Add support for IMX675 X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-12-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 The IMX675 is a 5MPix Starvis2 sensor that follows the same programming pattern as IMX678 and IMX662, so add it into the driver. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 212 ++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 212 insertions(+) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 2db9ac28308a..a4815a142c9d 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -10,6 +10,8 @@ * pixels. * IMX662: Diagonal 6.45mm (Type 1/2.8) CMOS image sensor with 2.12 M effe= ctive * pixels. + * IMX675: Diagonal 6.53mm (Type 1/2.8) CMOS image sensor with 5.12 M effe= ctive + * pixels. * * Copyright (C) 2026 Ideas On Board Oy. * Copyright (C) 2026 Raspberry Pi @@ -795,6 +797,193 @@ static const struct starvis2_variant imx662_variant_d= ef =3D { .hmax_min_pixel_array =3D 990, }; =20 +static const struct cci_reg_sequence imx675_common_regs[] =3D { + { STARVIS2_REG_THIN_V_EN, 0x00 }, + { STARVIS2_REG_VCMODE, 0x01 }, + + { CCI_REG8(0x3081), 0x00 }, + { STARVIS2_REG_XXS_OUTSEL, 0xaa }, + { STARVIS2_REG_XXS_DRV, 0x0f }, + { CCI_REG8(0x30cc), 0x00 }, + { CCI_REG8(0x30cd), 0x00 }, + { CCI_REG8(0x30ce), 0x02 }, + { CCI_REG8(0x3400), 0x01 }, + + { CCI_REG8(0x3460), 0x22 }, + { CCI_REG8(0x347b), 0x02 }, + { CCI_REG8(0x3492), 0x08 }, + { CCI_REG8(0x3b1d), 0x17 }, + { CCI_REG8(0x3b44), 0x3f }, + { CCI_REG8(0x3b60), 0x03 }, + { CCI_REG8(0x3c03), 0x04 }, + { CCI_REG8(0x3c04), 0x04 }, + { CCI_REG8(0x3c0a), 0x1f }, + { CCI_REG8(0x3c0b), 0x1f }, + { CCI_REG8(0x3c0c), 0x1f }, + { CCI_REG8(0x3c0d), 0x1f }, + { CCI_REG8(0x3c0e), 0x1f }, + { CCI_REG8(0x3c0f), 0x1f }, + { CCI_REG8(0x3c30), 0x73 }, + { CCI_REG8(0x3c3c), 0x20 }, + { CCI_REG8(0x3c44), 0x06 }, + { CCI_REG8(0x3c7c), 0xb9 }, + { CCI_REG8(0x3c7d), 0x01 }, + { CCI_REG8(0x3c7e), 0xb7 }, + { CCI_REG8(0x3c7f), 0x01 }, + { CCI_REG8(0x3cb0), 0x00 }, + { CCI_REG8(0x3cb2), 0xff }, + { CCI_REG8(0x3cb3), 0x03 }, + { CCI_REG8(0x3cb4), 0xff }, + { CCI_REG8(0x3cb5), 0x03 }, + { CCI_REG8(0x3cba), 0xff }, + { CCI_REG8(0x3cbb), 0x03 }, + { CCI_REG8(0x3cc0), 0xff }, + { CCI_REG8(0x3cc1), 0x03 }, + { CCI_REG8(0x3cc2), 0x00 }, + { CCI_REG8(0x3cc6), 0xff }, + { CCI_REG8(0x3cc7), 0x03 }, + { CCI_REG8(0x3cc8), 0xff }, + { CCI_REG8(0x3cc9), 0x03 }, + { CCI_REG8(0x3e00), 0x1e }, + { CCI_REG8(0x3e02), 0x04 }, + { CCI_REG8(0x3e03), 0x00 }, + { CCI_REG8(0x3e20), 0x04 }, + { CCI_REG8(0x3e21), 0x00 }, + { CCI_REG8(0x3e22), 0x1e }, + { CCI_REG8(0x3e24), 0xba }, + { CCI_REG8(0x3e72), 0x85 }, + { CCI_REG8(0x3e76), 0x0c }, + { CCI_REG8(0x3e77), 0x01 }, + { CCI_REG8(0x3e7a), 0x85 }, + { CCI_REG8(0x3e7e), 0x1f }, + { CCI_REG8(0x3e82), 0xa6 }, + { CCI_REG8(0x3e86), 0x2d }, + { CCI_REG8(0x3ee2), 0x33 }, + { CCI_REG8(0x3ee3), 0x03 }, + { CCI_REG8(0x4490), 0x07 }, + { CCI_REG8(0x4494), 0x19 }, + { CCI_REG8(0x4495), 0x00 }, + { CCI_REG8(0x4496), 0xbb }, + { CCI_REG8(0x4497), 0x00 }, + { CCI_REG8(0x4498), 0x55 }, + { CCI_REG8(0x449a), 0x50 }, + { CCI_REG8(0x449c), 0x50 }, + { CCI_REG8(0x449e), 0x50 }, + { CCI_REG8(0x44a0), 0x3c }, + { CCI_REG8(0x44a2), 0x19 }, + { CCI_REG8(0x44a4), 0x19 }, + { CCI_REG8(0x44a6), 0x19 }, + { CCI_REG8(0x44a8), 0x4b }, + { CCI_REG8(0x44aa), 0x4b }, + { CCI_REG8(0x44ac), 0x4b }, + { CCI_REG8(0x44ae), 0x4b }, + { CCI_REG8(0x44b0), 0x3c }, + { CCI_REG8(0x44b2), 0x19 }, + { CCI_REG8(0x44b4), 0x19 }, + { CCI_REG8(0x44b6), 0x19 }, + { CCI_REG8(0x44b8), 0x4b }, + { CCI_REG8(0x44ba), 0x4b }, + { CCI_REG8(0x44bc), 0x4b }, + { CCI_REG8(0x44be), 0x4b }, + { CCI_REG8(0x44c0), 0x3c }, + { CCI_REG8(0x44c2), 0x19 }, + { CCI_REG8(0x44c4), 0x19 }, + { CCI_REG8(0x44c6), 0x19 }, + { CCI_REG8(0x44c8), 0xf0 }, + { CCI_REG8(0x44ca), 0xeb }, + { CCI_REG8(0x44cc), 0xeb }, + { CCI_REG8(0x44ce), 0xe6 }, + { CCI_REG8(0x44d0), 0xe6 }, + { CCI_REG8(0x44d2), 0xbb }, + { CCI_REG8(0x44d4), 0xbb }, + { CCI_REG8(0x44d6), 0xbb }, + { CCI_REG8(0x44d8), 0xe6 }, + { CCI_REG8(0x44da), 0xe6 }, + { CCI_REG8(0x44dc), 0xe6 }, + { CCI_REG8(0x44de), 0xe6 }, + { CCI_REG8(0x44e0), 0xe6 }, + { CCI_REG8(0x44e2), 0xbb }, + { CCI_REG8(0x44e4), 0xbb }, + { CCI_REG8(0x44e6), 0xbb }, + { CCI_REG8(0x44e8), 0xe6 }, + { CCI_REG8(0x44ea), 0xe6 }, + { CCI_REG8(0x44ec), 0xe6 }, + { CCI_REG8(0x44ee), 0xe6 }, + { CCI_REG8(0x44f0), 0xe6 }, + { CCI_REG8(0x44f2), 0xbb }, + { CCI_REG8(0x44f4), 0xbb }, + { CCI_REG8(0x44f6), 0xbb }, + { CCI_REG8(0x4538), 0x15 }, + { CCI_REG8(0x4539), 0x15 }, + { CCI_REG8(0x453a), 0x15 }, + { CCI_REG8(0x4544), 0x15 }, + { CCI_REG8(0x4545), 0x15 }, + { CCI_REG8(0x4546), 0x15 }, + { CCI_REG8(0x4550), 0x10 }, + { CCI_REG8(0x4551), 0x10 }, + { CCI_REG8(0x4552), 0x10 }, + { CCI_REG8(0x4553), 0x10 }, + { CCI_REG8(0x4554), 0x10 }, + { CCI_REG8(0x4555), 0x10 }, + { CCI_REG8(0x4556), 0x10 }, + { CCI_REG8(0x4557), 0x10 }, + { CCI_REG8(0x4558), 0x10 }, + { CCI_REG8(0x455c), 0x10 }, + { CCI_REG8(0x455d), 0x10 }, + { CCI_REG8(0x455e), 0x10 }, + { CCI_REG8(0x455f), 0x10 }, + { CCI_REG8(0x4560), 0x10 }, + { CCI_REG8(0x4561), 0x10 }, + { CCI_REG8(0x4562), 0x10 }, + { CCI_REG8(0x4563), 0x10 }, + { CCI_REG8(0x4564), 0x10 }, + { CCI_REG8(0x4569), 0x01 }, + { CCI_REG8(0x456a), 0x01 }, + { CCI_REG8(0x456b), 0x06 }, + { CCI_REG8(0x456c), 0x06 }, + { CCI_REG8(0x456d), 0x06 }, + { CCI_REG8(0x456e), 0x06 }, + { CCI_REG8(0x456f), 0x06 }, + { CCI_REG8(0x4570), 0x06 }, +}; + +static const u16 imx675_min_hmax_2lane[] =3D { + [STARVIS2_LINK_FREQ_297MHZ] =3D 2044, + [STARVIS2_LINK_FREQ_360MHZ] =3D 1692, + [STARVIS2_LINK_FREQ_445MHZ] =3D 1376, + [STARVIS2_LINK_FREQ_594MHZ] =3D 1064, + [STARVIS2_LINK_FREQ_720MHZ] =3D 840, + [STARVIS2_LINK_FREQ_891MHZ] =3D 684, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 592, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 528, +}; + +static const struct starvis2_variant imx675_variant_def =3D { + .name =3D "imx675", + .id_reg =3D CCI_REG16_LE(0x4d12), + .id_mask =3D 0xfff, + .id_value =3D 0x576, + .native_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 2609, + .height =3D 1984, + }, + .active_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 2608, + .height =3D 1984, + }, + .pixel_rate =3D 594000000, + .pix_per_clk =3D 8, + .common_regs =3D imx675_common_regs, + .num_common_regs =3D ARRAY_SIZE(imx675_common_regs), + .vmax_default =3D 2024, + .hmax_min_link_freq =3D imx675_min_hmax_2lane, + .hmax_min_pixel_array =3D 528, +}; + struct starvis2_model_info { enum starvis2_type type; const u32 *codes; @@ -845,6 +1034,26 @@ static const struct starvis2_model_info imx662_autode= tect_info =3D { .auto_detect_mono =3D &imx662_aamr_info, }; =20 +static const struct starvis2_model_info imx675_aaqr_info =3D { + .type =3D STARVIS2_COLOR, + .codes =3D codes_bayer, + .num_codes =3D ARRAY_SIZE(codes_bayer), + .variant =3D &imx675_variant_def, +}; + +static const struct starvis2_model_info imx675_aamr_info =3D { + .type =3D STARVIS2_MONOCHROME, + .codes =3D codes_monochrome, + .num_codes =3D ARRAY_SIZE(codes_monochrome), + .variant =3D &imx675_variant_def, +}; + +static const struct starvis2_model_info imx675_autodetect_info =3D { + .variant =3D &imx675_variant_def, + .auto_detect_colour =3D &imx675_aaqr_info, + .auto_detect_mono =3D &imx675_aamr_info, +}; + static const char * const starvis2_supply_name[] =3D { "avdd", /* Analog (3.3V) supply */ "dvdd", /* Digital Core (1.1V) supply */ @@ -1682,10 +1891,13 @@ static const struct dev_pm_ops starvis2_pm_ops =3D { static const struct of_device_id starvis2_of_match[] =3D { { .compatible =3D "sony,imx662-aamr", .data =3D &imx662_aamr_info }, { .compatible =3D "sony,imx662-aaqr", .data =3D &imx662_aaqr_info }, + { .compatible =3D "sony,imx675-aamr", .data =3D &imx675_aamr_info }, + { .compatible =3D "sony,imx675-aaqr", .data =3D &imx675_aaqr_info }, { .compatible =3D "sony,imx678-aamr", .data =3D &imx678_aamr_info }, { .compatible =3D "sony,imx678-aaqr", .data =3D &imx678_aaqr_info }, /* for non-conforming DTs that rely on runtime check */ { .compatible =3D "sony,imx662", .data =3D &imx662_autodetect_info }, + { .compatible =3D "sony,imx675", .data =3D &imx675_autodetect_info }, { .compatible =3D "sony,imx678", .data =3D &imx678_autodetect_info }, { /* sentinel */ } }; --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.44 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690483; b=FIZthjzKF05A5R5+w2qVnoAiIwCg+gP1buMupyRptNwCUBva3hMQKhSmWRJjTCxA7Vn7 SaKjJBtVl4gpK9IF+QEiRhQ2RBWBe35DEcHRZjqe0hV1cb1kcJHA0MNrjIJZJ2hYfhZA1 xD0RJQpbzqBhE8jt6AtRV9rt0JI9YMOTgbCfW78datKwauIO1G+/AgVtvA6nJyUswQlH4 epN3QlM7fr2To/1LosiwTTgYPItq8iTG1Y10xqtMNuwcfiDtLSjFp8wb8Hoki6KLI86Ei W7z4XT85ddXihzgYjP+X2w3t3VKlHs66vy8wbbPoSKcY+Hmgncb+y05JXwIaTVBhIGA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690483; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=VSv5iuwo2+u6yZ/vu9IKOx8gXurrCzY9e0DhNAIbsQ0=; b=xiZq87H/+iEJOJYYC7CCup0FVghlH7iVdNl96sFBBvtUuzuY29t8pNEgMzpzPKHhCOsE WiHxJiTTchVqzBWMTr0ZVN7S8tGi1xNk58F26FxSQMmWTM96iE1kPqDmDTY8UQEaKhdsS sW/XwPIzza+Zuw1PQdRLvzTNJsNHGVG0YQBUc17DBDUMqrmO+cU7y5x8fUvtn3ebP+g0v zDQVTKF8c36qdCmybQTIeDpdbJRLiXCYGDpVfGwRpCPlyfc5KxTc8UFvw7i73ZJLJChtL +FD3WtJswYzxfNKjfsj7ZW9bQxVKfdClGGyXJVQBI3p1U92rZhJ0/h2aM6JHhmvWBIg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=SXT6bHxo; arc=none smtp.remote-ip=209.85.221.44 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E2F060A383F for ; Thu, 22 Oct 2026 17:34:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 4E2F060A383F Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=SXT6bHxo Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-48e09aa5264so18850f8f.2 for ; Thu, 22 Oct 2026 10:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690482; x=1793295282; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VSv5iuwo2+u6yZ/vu9IKOx8gXurrCzY9e0DhNAIbsQ0=; b=SXT6bHxogpOGZuiuWTqC6NQPjc06joj+n99rqzbJqp/SAh9mHvNdib63POOcm7/Qlp OHvGZXonF7hfeaoW9JGos1XoWTJYLlqgwGoWbEr8ilIgPVJrh13dR13mGtCVXLJ3z3qu 9HLhr4ZE+aQn2bchTKXDNI7C7Zk9V4MLuJ+p/iXgpUbK11yqPZ4GUTDNvDabtVDatk4R E881cXVjbRPy8mSgsA8OfkyO1cJCn/WDBs3t4l6maaCY36dtY7WtlNhZrfXHjMTbZ3+E 6Xjl624ElMihvvidAHNhydCJZkWcnq38t9jWHvJp8il+o77qPrFnWRBQqEuh7YYwGEqA 0JJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690482; x=1793295282; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=VSv5iuwo2+u6yZ/vu9IKOx8gXurrCzY9e0DhNAIbsQ0=; b=JPazDPSRMRSR6yHu8gF1pmw1jX4DOtcXppHQpa57Mqu+vfvdmfF2XnXHzu03YZzfEf a02bRA/QqBNF1PZgTJHMHdnPFc+r4eAl9S3ynK77nXomj1TA8IZYCzPSKgwTWRDrgzkK vPfGMAAp/qkV86OBwGuKGIoa9yGqrCUnT3uAE9kGHp+5YaKxTY4MzablrNb7VJ0WfJ1e q8XiikMY5Pc0o9xI6eDnTjUSbVYnxo0FE5CIKoIPkJpKYPLf8+qpHqXLbXcfjlsr60nj 0Mn1fv39fA6imu3Lj28ih0/dbCC4s+2RgcHkCgBzGLHyoFbhIEaO3t6Irx7YlPRN7a77 n3Xg== X-Forwarded-Encrypted: i=1; AKwUvBzyPwdk4wlKI8v2IhIxzL/akp5dVXSHg7xE90Y6i0FB+eNEu1U5StBxksDnkuH4xkk3GaBN5Quae6Ehhw8=@vger.kernel.org X-Gm-Message-State: AFq9FYKRDRXDuaReDHHKnEc24HAMdLb9hK8yft8iFqi3iKCcHvoEytSo 48rmA2qEVBm4ahix4u7lUnoS1PEA1p1Z3lN6tbXdgPIT8epLF0fmGadZloBKSU8hNMo= X-Gm-Gg: AYBFou1sBoM1EG8GbfoMcaY2d6WmOKb0iX29O98Mjj/Sl9TXMx7jk6iDWZiLag/B2fZ qekyggxivQlJpXF3w4MtPqgJX9skVNek5ci6U3MYWo2jNFYo1/hd12gCU3YKEcBIodxSpTqsjnW ze/u+kT/Udn8vQLvb0EUZu6pO2bttYPEM0c5+15ykHlwQUmF2j0PQKR7wx0dQogixvkFD58Mdo1 dNaAljgUj+z5TQJiFcijaba6HeukYki4hg0lHkWzZ4nMoGg1X/DxLGC6x5wq3mw/9nWy3g86kDj Z0Ooje3Mj1Th5yrYVSePy9mtbLtvlVS0tGRHtcefXrjK8E2TGjCeu1kigPmMr0ghMuvqo3LHort GzTE3ow62yKon2/yzzdd3siCbpFmYB+zzzYmnWBzO2IZ6d0bYnN7siglwKAw7+9LUbXf2ItoHxj +7krj2lHD+AFHPPljONpQxjple9PT2zwERvTEaPlNwUECf+51UTu4Yu7hDYMBDw++ZO/DzU+x/S nPdfBTbigXAh99bPAKGRDpRxTBJwf0krIyw7d4LzN4VDrogesrWJLRmnN6RlKYQY3FIuUrWfVW9 azRVla10NFDs4d/inJrd0vxqKx1CUCU= X-Received: by 2002:adf:edcd:0:b0:488:5852:6ee3 with SMTP id ffacd0b85a97d-48e264f18f8mr10242795f8f.34.1792690481792; Thu, 22 Oct 2026 10:34:41 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:41 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:06 +0100 Subject: [PATCH v6 13/18] media: sony-starvis2: Add support for IMX832 X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-13-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 IMX832 is replacing IMX662, and it follows the same pattern as all the Starvis2 sensors. Add the sensor specific configuration for it. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 118 ++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 118 insertions(+) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index a4815a142c9d..645417cc08fb 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -12,6 +12,8 @@ * pixels. * IMX675: Diagonal 6.53mm (Type 1/2.8) CMOS image sensor with 5.12 M effe= ctive * pixels. + * IMX832: Diagonal 6.45mm (Type 1/2.8) CMOS image sensor with 2.12 M effe= ctive + * pixels. * * Copyright (C) 2026 Ideas On Board Oy. * Copyright (C) 2026 Raspberry Pi @@ -984,6 +986,99 @@ static const struct starvis2_variant imx675_variant_de= f =3D { .hmax_min_pixel_array =3D 528, }; =20 +static const struct cci_reg_sequence imx832_common_regs[] =3D { + { CCI_REG8(0x3460), 0x21 }, + { CCI_REG8(0x3a94), 0x75 }, + { CCI_REG8(0x3a96), 0x69 }, + { CCI_REG8(0x3a98), 0x1e }, + { CCI_REG8(0x3a9a), 0x1e }, + { CCI_REG8(0x3b58), 0xeb }, + { CCI_REG8(0x3b5c), 0xeb }, + { CCI_REG8(0x3b88), 0xeb }, + { CCI_REG8(0x3b8c), 0xeb }, + { CCI_REG8(0x3c40), 0x06 }, + { CCI_REG8(0x3cae), 0x79 }, + { CCI_REG8(0x3cbc), 0x7b }, + { CCI_REG8(0x4508), 0x00 }, + { CCI_REG8(0x4509), 0x02 }, + { CCI_REG8(0x450a), 0x41 }, + { CCI_REG8(0x450b), 0x03 }, + { CCI_REG8(0x4660), 0x12 }, + { CCI_REG8(0x4661), 0x00 }, + { CCI_REG8(0x4662), 0x29 }, + { CCI_REG8(0x4664), 0x12 }, + { CCI_REG8(0x4665), 0x00 }, + { CCI_REG8(0x4666), 0x25 }, + { CCI_REG8(0x4667), 0x03 }, + { CCI_REG8(0x46c0), 0x13 }, + { CCI_REG8(0x46c1), 0x00 }, + { CCI_REG8(0x46c2), 0x28 }, + { CCI_REG8(0x46c4), 0x13 }, + { CCI_REG8(0x46c5), 0x00 }, + { CCI_REG8(0x46c6), 0x24 }, + { CCI_REG8(0x46c7), 0x03 }, + { CCI_REG8(0x4720), 0x07 }, + { CCI_REG8(0x4721), 0x00 }, + { CCI_REG8(0x4722), 0x23 }, + { CCI_REG8(0x4723), 0x03 }, + { CCI_REG8(0x4724), 0x14 }, + { CCI_REG8(0x4725), 0x00 }, + { CCI_REG8(0x4726), 0x2a }, + { CCI_REG8(0x4750), 0x1e }, + { CCI_REG8(0x4752), 0x22 }, + { CCI_REG8(0x4753), 0x03 }, + { CCI_REG8(0x4754), 0x25 }, + { CCI_REG8(0x4755), 0x00 }, + { CCI_REG8(0x4756), 0x29 }, + { CCI_REG8(0x4780), 0x08 }, + { CCI_REG8(0x4781), 0x00 }, + { CCI_REG8(0x4782), 0x1d }, + { CCI_REG8(0x4783), 0x03 }, + { CCI_REG8(0x4784), 0x15 }, + { CCI_REG8(0x4785), 0x00 }, + { CCI_REG8(0x4786), 0x24 }, + { STARVIS2_REG_WDMODE, 0x00 }, + { STARVIS2_REG_MDBIT, 0x01 }, + { STARVIS2_REG_XXS_DRV, 0x00 }, +}; + +static const u16 imx832_min_hmax_2lane[] =3D { + [STARVIS2_LINK_FREQ_297MHZ] =3D 1980, + [STARVIS2_LINK_FREQ_360MHZ] =3D 1980, + [STARVIS2_LINK_FREQ_445MHZ] =3D 1188, + [STARVIS2_LINK_FREQ_594MHZ] =3D 990, + [STARVIS2_LINK_FREQ_720MHZ] =3D 990, + [STARVIS2_LINK_FREQ_891MHZ] =3D 990, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 990, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 990, +}; + +static const struct starvis2_variant imx832_variant_def =3D { + .name =3D "imx832", + .id_reg =3D CCI_REG16_LE(0x4d1c), + .id_mask =3D 0x3ff, + .id_value =3D 0x340, + .native_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 1937, + .height =3D 1101, + }, + .active_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 1936, + .height =3D 1096, + }, + .pixel_rate =3D 222750000, + .pix_per_clk =3D 3, + .common_regs =3D imx832_common_regs, + .num_common_regs =3D ARRAY_SIZE(imx832_common_regs), + .vmax_default =3D 1136, + .hmax_min_link_freq =3D imx832_min_hmax_2lane, + .hmax_min_pixel_array =3D 990, +}; + struct starvis2_model_info { enum starvis2_type type; const u32 *codes; @@ -1054,6 +1149,26 @@ static const struct starvis2_model_info imx675_autod= etect_info =3D { .auto_detect_mono =3D &imx675_aamr_info, }; =20 +static const struct starvis2_model_info imx832_aqr_info =3D { + .type =3D STARVIS2_COLOR, + .codes =3D codes_bayer, + .num_codes =3D ARRAY_SIZE(codes_bayer), + .variant =3D &imx832_variant_def, +}; + +static const struct starvis2_model_info imx832_amr_info =3D { + .type =3D STARVIS2_MONOCHROME, + .codes =3D codes_monochrome, + .num_codes =3D ARRAY_SIZE(codes_monochrome), + .variant =3D &imx832_variant_def, +}; + +static const struct starvis2_model_info imx832_autodetect_info =3D { + .variant =3D &imx832_variant_def, + .auto_detect_colour =3D &imx832_aqr_info, + .auto_detect_mono =3D &imx832_amr_info, +}; + static const char * const starvis2_supply_name[] =3D { "avdd", /* Analog (3.3V) supply */ "dvdd", /* Digital Core (1.1V) supply */ @@ -1895,10 +2010,13 @@ static const struct of_device_id starvis2_of_match[= ] =3D { { .compatible =3D "sony,imx675-aaqr", .data =3D &imx675_aaqr_info }, { .compatible =3D "sony,imx678-aamr", .data =3D &imx678_aamr_info }, { .compatible =3D "sony,imx678-aaqr", .data =3D &imx678_aaqr_info }, + { .compatible =3D "sony,imx832-amr", .data =3D &imx832_amr_info }, + { .compatible =3D "sony,imx832-aqr", .data =3D &imx832_aqr_info }, /* for non-conforming DTs that rely on runtime check */ { .compatible =3D "sony,imx662", .data =3D &imx662_autodetect_info }, { .compatible =3D "sony,imx675", .data =3D &imx675_autodetect_info }, { .compatible =3D "sony,imx678", .data =3D &imx678_autodetect_info }, + { .compatible =3D "sony,imx832", .data =3D &imx832_autodetect_info }, { /* sentinel */ } }; =20 --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.54 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690484; b=WT9SDsrdU8EXOIUs74pTl0N9TnsW6YYJWPpbzrI0MCU/iiW//0ns5csMtBKQzBdWhbAI KcBVgiL11Orwzu7fzEQMQ6WBCIwFEGtVX2w9B6dMeKkYNqiUidtsr6TzPhG96TYse9t/k suNxzEidiVq+/4P0LTqxdRmas4t9LhR+tKGrqKgS1Ed2Fb8w7Fzi0S80cKUBaluEqVKF3 OX0iqzO6ncVy5j4QBXtcvhIv/NWhuXywfNBzJ7NG4V5t1kjmT9Be3jKFrXcYdNiP9xZSO zczaAjUAyPhzA/U4RlpUOkphw6slT/64L9u0IWwJZfb/DH2Ze9Tsn+8QFqo9JGY1cGg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690484; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=djTWxpT1ovKkbA0vbSvCTa6GvH4LLAvCDTO8fermq8s=; b=uAmH74PsTjcvr5VxcyvfJv5dDd121pOGa3QTo70J1m6A2vVAXFSejQpJGDvN+INSEOFZ ZM51Yot/m/0kdkRO7sfds1Cd0IAz5YskzlMbKz6dmYMDGpeT1dMNlZU52tmbLjD1Vnl+6 koLJIZ44eop90VlRKTFzLMgc4AZAaeEdKWKsGUX3qQECU0s1rUsFqgMPF3iBcWo/tN2US s8hcPDK2JuO9SqIySvyfR9gMdlr9KiyjvWYH9MkBc5NDzSBDlZhS61aC9GFHLa3toE+n8 7ayArtKL9FCBQIa4qM8bcLhWlumX4i6hNZ55WqNo21WlFSoV4MSdHJcOIJ6nL0BQBIQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=oZKn81O0; arc=none smtp.remote-ip=209.85.221.54 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 766E460A5BE2 for ; Thu, 22 Oct 2026 17:34:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 766E460A5BE2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=oZKn81O0 Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-48af4d4e61fso33908f8f.2 for ; Thu, 22 Oct 2026 10:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690483; x=1793295283; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=djTWxpT1ovKkbA0vbSvCTa6GvH4LLAvCDTO8fermq8s=; b=oZKn81O0a11SpkUNeq2NAxJwSgzjpEfa7Rt7URUvcUigkeVeR6y+gSwCWzHGJgosfg oEye/GszlPOD7YktNmWOjC+tXfVrMfi+810862/ttdzsqpjrDR/hYxTLwWLFDQNDbFTI 2Q19Cq/w9jF2bSRVq5iqWbmSQnIN7SrfdoWM4dbmajBGEenGW2voPdZRNER6A6/DvhkN 9rRb1OAuGH5cZkrUzLX/1G0YjPYWfMuk/1Zj0u8rvoWNEnuNQrosVWs5+WoKwS0E8SM1 QIo7unWbf6ybwQHolfuEmMJLUYGidpR/fkjyyeN98xbiTZAtS3U1PsulMvI34hdjzDcc 6wKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690483; x=1793295283; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=djTWxpT1ovKkbA0vbSvCTa6GvH4LLAvCDTO8fermq8s=; b=yxD57RrbYpu91P9KN0MNwTB1uoklWB9+8m0F0CRM7W6nxq0S4FCUF3saRqk9iddrx8 mBAM1WtuNvnWCzQYhxLYgrPaPFTuoWo9smuqSYY8ktIS55bvFNoSZ7Salq/rpvMeY7hm GOqQDOUQq2sGSCSb1eq0zqKSF7mAa1kIj4WlZdrUFpghxUOKkA84VYQncLrG0MVgQ87W qzhkoRCMj6ryQpbNFCar1jVyf4FKVWmTWcTseCYilA5CL+qnlVocjd9nzp3uN2pRxE0r tGN80KoFLtnSYVI7cK6pfPqgFJMztH6vJLkr02ZBOPjSk4qhmFo57F1VC0eXG18QbGdh YTCg== X-Forwarded-Encrypted: i=1; AKwUvByqx7GL5lFgI6+q8DIVWIBIEROVC8CibBna8C4BtyDGXDH88QknJUfRbbCiBru3nTpGsCqQExPQuY0WmLs=@vger.kernel.org X-Gm-Message-State: AFq9FYLIgdJHoJnCbIgzYA64q7sVwIDYPjWJ2QBazIQc+DjarRld16F/ V2o45dD8kQLy+6lvrBeYpdKrR8ZURI3tUCd+/NqQUMwjhSVg5qdtrW5Lna/lNS9rXjY= X-Gm-Gg: AYBFou2YLjE3FTUt9l3DEZ/NkT1xJILGdQSQzF1KDWApGbGY+tL/Pi8TSZYoogxa/LH 2sxpk/lDgGnpeE2//17D1COmx4zu6knvV/Ys77yP3zpEwWpzIHGwxCA7dPumYyxtM3U0UKmBc6g 8npdlecpzsRHwAxu0my17efCj8d91t7ftBG5CvZoxNKWVEj4g+CgQkawh4xz7N0GrQaCukEQlUj 13BlXoPve0bKGLzoSkvNmdJJIii9HGfAfQ6nQnTO+jKGUgg3zZPhBqzBF8Ve66bfTAgG1BGn1Ox 76i6DVVU18IT8OAn2J6AwRK36iLXsZL16UxW/5qMIaxW9FMGGiKaFasMim9ZGNMJxJTErbQsQFl APdK8+FKPkpDKnezyiDqIJzOiKlOxpCknHMGDIDoEO3uYzO8JIX+rfg3I7yGKBlQNIdTnZkQWOL ItOD4zFLyw2d/Aaa89h2bZC6SjrIPUpDV9AO3If3SpXR1J0Nd2uzl9bXhSbPdQVqoVY3Sj3MVnn EEgB3inL1K1RIVqnyfyzT+JIBjTWf16CDRkrYreKwG0lrJpHmDluefSLIhiJeQ3lzduX/+Y4dkD npiW9uuzZKltiU+V/oL/20wPEc/HBKk= X-Received: by 2002:a05:6000:29c9:b0:48e:203e:84f0 with SMTP id ffacd0b85a97d-48e264a7cc6mr8368922f8f.24.1792690482821; Thu, 22 Oct 2026 10:34:42 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:42 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:07 +0100 Subject: [PATCH v6 14/18] media: sony-starvis2: Only update bits for window mode X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-14-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 IMX585 requires bit 4 of the WINMODE register (0x3018) to be set, whilst the bottom nibble selects between all-pixel and window mode. Switch to using cci_update_bits so that only the bottom nibble is updated, thereby working on all supported Starvis2 sensors. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 645417cc08fb..e64d943369b1 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -89,6 +89,7 @@ =20 /* Crop */ #define STARVIS2_REG_WINMODE CCI_REG8(0x3018) +#define STARVIS2_REG_WINMODE_MASK 0x0f #define STARVIS2_REG_PIX_HST CCI_REG16_LE(0x303c) #define STARVIS2_REG_PIX_HWIDTH CCI_REG16_LE(0x303e) #define STARVIS2_REG_PIX_VST CCI_REG16_LE(0x3044) @@ -1460,7 +1461,8 @@ static int starvis2_program_window(struct starvis2 *s= tarvis2, int ret =3D 0; =20 cci_write(starvis2->cci, STARVIS2_REG_ADDMODE, 0x00, &ret); - cci_write(starvis2->cci, STARVIS2_REG_WINMODE, 0x04, &ret); + cci_update_bits(starvis2->cci, STARVIS2_REG_WINMODE, + STARVIS2_REG_WINMODE_MASK, 0x04, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_HST, crop->left - starvis2->variant->active_area.left, &ret); cci_write(starvis2->cci, STARVIS2_REG_PIX_HWIDTH, crop->width, &ret); --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.42 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690499; b=Uub5YSq7sZM0qmR/S7noki4Gdu21nf5r2ufIrOFOCg0ShG/SBep8S1GZq2R+5rGQPx1n K4WQGj5InGTWjBKCgYpSLWannSMYEu8pu/LAdzWIGw8xGJXoVfQ7wYRclO/jYefQyIW3l Dhl9h+KNyQ1V99FqqTu6DjFxxE2i/X+/66/yfL7GumNGVIVhMsG9MZp7aIX0swOytelYB 4BupXa0hlZRqh/EDBQvy1AI9dPzoxDiAO9IBQYB8QwUF+0ZhNjszhxqr7E7X4z8VPfiPl 6Vc8w7Cua/YkwLpi1McDwEkP9TXT61geaU79qtM6+uAOwNx2KQ+TGRZVcG5tn0GcJfA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690499; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=dLYCwHkfWndTyUICgstRm5AOeTm77IFTdEwOfyWPNH4=; b=Iz/O3e0r7zR2gQnAWIa+KFLqYqFIIQ4fnu8bJ2kO/+hufEoWzsL/mU21xr+/fVjuWi86 9Ffmh+oPiKw/ZVaMeQYqxSSni8QkpZ9MxzzUGY9qOqFWOcgg0QJ/I/c31ZG0filTyrGd4 M7TvJXGeUHvuFPFARTxBRwtdoAOLHgwlaaiU0HHhXN2jS+kxWkszLipGaFFcHReAXAF1w u77jEVEZ0KhxI7d2biEQBWrNi0yLNBOYZPY1DjWD3Nv1P7Sre4qNUvJCAbPoMXYKcx307 9aoFZWErA6iGGj92WVVnnA5iqxDgq4Np4DejJy0FO1bahPyuhkU3z4fv42immy9ghPQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b="p0VOD7/4"; arc=none smtp.remote-ip=209.85.128.42 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9922860A6F63 for ; Thu, 22 Oct 2026 17:34:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 9922860A6F63 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=p0VOD7/4 Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4a2001dd4e7so513915e9.3 for ; Thu, 22 Oct 2026 10:34:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690484; x=1793295284; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dLYCwHkfWndTyUICgstRm5AOeTm77IFTdEwOfyWPNH4=; b=p0VOD7/47GnJVee5zQGc3RUGE3DwbyRG+LM2cIYcp9MMekKZBr/6mOQNuMJ0IV3zj1 wXCv8KfJ7zW/VREJzYTJifNZiR9K/pgxcCncQ1BDV+YwUkz4Rj8ThxJf1zc2ZskRt/PK 4TzOKVMuzKM51YmNd7xVcG4mlu7uD0DCIJOydcBEbQBKXmBxo0yiKzUV9V2ywci/t4G0 SytXsOnUrWGOoFVySD+ZTkmXWS3SGiBABYnYgJyRimoMCVJwhajl9X4E4+1+7u2j5/as gYiq88R2DFu3AqYKEearTjqkB2qimc7wWK69Yp8Z2e1D1gx25X/MWhjvrxRAvfXG7MAt aaPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690484; x=1793295284; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dLYCwHkfWndTyUICgstRm5AOeTm77IFTdEwOfyWPNH4=; b=VyizTw6CK/XW+Xxt8PBKxlauuuGNcjoo89bNlQcUsPGkqxwIhDo9iCm5eBzbTGTeHM uHff7cncjkDSac3QyJEYWDtish/3WsZDRZoOZ6hKaqyRKoobw+3JrgeHYFt4h4JCnm+8 d6Os71Twcv8v1TgZC9yjPXjW0CGOz3IbPui+c7oMIC8tQm8sYjGpyScaLYXWSGs7dAy2 GVniJgpUh9LMY6e6G+GidSb5cz8K6aFBw2DB4O0uikYXYQuPwEnhp6nWNbuj7t0fXiwl hgvTZUyy+vDfCfKMW/Qdjvv+NMYaRz3xisw9dO/zSk/du+92Dou+R7npxg1CYy3NiNt1 RV8g== X-Forwarded-Encrypted: i=1; AKwUvByXIyp33jw1eR9LHofJHZBPfndKG5XytYEJ92cfxesvf2kJwyXfoLJs62+AoJiFi4yyXxVe6mKRuie4Ls4=@vger.kernel.org X-Gm-Message-State: AFq9FYK+iGvvOC4qsfdiyfR4RglGgizxqlNRDOC9LLRvmWQctBnzpGUZ MkwLD0U/gcMy86a9P/RxkvBKrRnAZ6vlv6lfqrAINJlsfU9opYI3ijk5h6j+qLxaAhc= X-Gm-Gg: AYBFou35VMC53Ypuy3GqyACFrhtzDtW0piTD9ReBu57zPFNNCB53KktpwGphRG/HfqT 2ANWW/tv/37i4xUvjw8CMOJutBbH9ACklsrsJJmGuT2eaT+36R4BhQcCYKdFL9n3OnodR65cTfb iqNbYgoAFSJQaEJlJA6V8NMGfVUGMeLpXpL0U+bcw9H8MZ+IOsdf2KFwSX+naACwayk0fxQWMno ZmHQemuyeE93cDA63WDbuZRko3R6sv6k3Yw60SGAyXEX07iG5KcYZeVd9/88YD7CpLVFj/bESsW AJ/wqcnOKRGQCkcDONJ8PHfJKrYCgaxOg5+v7sMg5SGLuOP4BOdeXeL6Lomcd1MAJlQ1iw1O2Dn okg4JZsEENuurl87ju3JrM5uR1G5U9fdn2eUk6D80aiCG66p570/IpDDuS8Udf3BzKk/xcfNNaS kz0JbTmfoyMfIj7Dd4+1zTye5UQrOUB+PyvJ/eE5ji8yUqG4drbP6XvSKIij5YFst6xlVkgw69v 4PciI156vQ/203oDcWHNqYJq5jsk5bflfowuhYl9ruIZZPFkEhDeA5DGJ+7UYbsDT8DdKHbnrGa /hGHucNPblFtYHVhmzOWuWjgvXo2OTw= X-Received: by 2002:a05:600c:6305:b0:4a1:e01e:1927 with SMTP id 5b1f17b1804b1-4a1fdaf72cdmr116212945e9.5.1792690483983; Thu, 22 Oct 2026 10:34:43 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:43 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:08 +0100 Subject: [PATCH v6 15/18] media: sony-starvis2: Parameterise exposure min and step X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-15-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 All the Starvis2 sensors supported to this point have specified the range for the SHR (exposure) register as being 4 to (number of line per frame -1). Newer sensors are deviating from that, so parameterise these into the sensor variant, replacing STARVIS2_EXPOSURE_MIN, STARVIS2_EXPOSURE_STEP, and STARVIS2_SHR_MIN. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 37 ++++++++++++++++++++++++++---------= -- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index e64d943369b1..15d5a066a556 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -68,11 +68,8 @@ =20 /* SHR internal */ #define STARVIS2_REG_SHR CCI_REG24_LE(0x3050) -#define STARVIS2_SHR_MIN 4 =20 /* Exposure control */ -#define STARVIS2_EXPOSURE_MIN 1 -#define STARVIS2_EXPOSURE_STEP 1 #define STARVIS2_EXPOSURE_DEFAULT 1000 =20 /* @@ -641,6 +638,9 @@ struct starvis2_variant { unsigned int vmax_default; const u16 *hmax_min_link_freq; u16 hmax_min_pixel_array; + unsigned int exposure_min; + unsigned int exposure_step; + unsigned int shr_min; }; =20 static const struct starvis2_variant imx678_variant_def =3D { @@ -668,6 +668,9 @@ static const struct starvis2_variant imx678_variant_def= =3D { .vmax_default =3D 2250, .hmax_min_link_freq =3D imx678_min_hmax_2lane, .hmax_min_pixel_array =3D 550, + .exposure_min =3D 1, + .exposure_step =3D 1, + .shr_min =3D 4, }; =20 static const struct cci_reg_sequence imx662_common_regs[] =3D { @@ -798,6 +801,9 @@ static const struct starvis2_variant imx662_variant_def= =3D { .vmax_default =3D 1136, .hmax_min_link_freq =3D imx662_min_hmax_2lane, .hmax_min_pixel_array =3D 990, + .exposure_min =3D 1, + .exposure_step =3D 1, + .shr_min =3D 4, }; =20 static const struct cci_reg_sequence imx675_common_regs[] =3D { @@ -985,6 +991,9 @@ static const struct starvis2_variant imx675_variant_def= =3D { .vmax_default =3D 2024, .hmax_min_link_freq =3D imx675_min_hmax_2lane, .hmax_min_pixel_array =3D 528, + .exposure_min =3D 1, + .exposure_step =3D 1, + .shr_min =3D 4, }; =20 static const struct cci_reg_sequence imx832_common_regs[] =3D { @@ -1078,6 +1087,9 @@ static const struct starvis2_variant imx832_variant_d= ef =3D { .vmax_default =3D 1136, .hmax_min_link_freq =3D imx832_min_hmax_2lane, .hmax_min_pixel_array =3D 990, + .exposure_min =3D 1, + .exposure_step =3D 1, + .shr_min =3D 4, }; =20 struct starvis2_model_info { @@ -1249,12 +1261,15 @@ static int starvis2_set_ctrl(struct v4l2_ctrl *ctrl) starvis2->vmax =3D format->height + ctrl->val; =20 current_exposure =3D clamp_t(u32, current_exposure, - STARVIS2_EXPOSURE_MIN, - starvis2->vmax - STARVIS2_SHR_MIN); + starvis2->variant->exposure_min, + starvis2->vmax - + starvis2->variant->shr_min); ret =3D __v4l2_ctrl_modify_range(starvis2->exposure, - STARVIS2_EXPOSURE_MIN, - starvis2->vmax - STARVIS2_SHR_MIN, - 1, current_exposure); + starvis2->variant->exposure_min, + starvis2->vmax - + starvis2->variant->shr_min, + starvis2->variant->exposure_step, + current_exposure); if (ret) return ret; } @@ -1778,10 +1793,10 @@ static int starvis2_init_controls(struct starvis2 *= starvis2) =20 starvis2->exposure =3D v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_EXPOSURE, - STARVIS2_EXPOSURE_MIN, + starvis2->variant->exposure_min, starvis2->variant->vmax_default - - STARVIS2_SHR_MIN, - STARVIS2_EXPOSURE_STEP, + starvis2->variant->shr_min, + starvis2->variant->exposure_step, STARVIS2_EXPOSURE_DEFAULT); =20 v4l2_ctrl_new_std(ctrl_hdlr, &starvis2_ctrl_ops, V4L2_CID_ANALOGUE_GAIN, --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.41 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690487; b=XKS8mHXM9qJnm9b3gJBo2WiI6MtV2wWlh84rwrqmCEmyTO6XBBjBI47yDc0f6d5dLe1C KsP0VdM1ObcNhYd+56m8Ihsx7t3BcRB/bScIH0KkrhrG5GcJLKZ9bygxWQGu6qYagAdbB 1I2pHFQRpXz1N9SKshGnVONBc5hp4u7ve6fPlxjCqoPwTOUBhGGVyWpUbKITl8t92UqFV bSucs+YlBRtcS00EiJSJelH7VtgrR23+1mWwNvn0bP9koyc14kJXXNyzn5LETZooF5L3f FX8ZcU7n/weIIyOGJ7EZwow7kPnysG28xVf9V/QnY/8zR5dGi6fjV6lvdXcrLCMxLOQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690487; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=SpPolyfzJYMmE5VU9BMzMFqCxVbYb3ZUGO3YoElucf4=; b=V7/pERQSj9SZtcSKTxUkOuSLh3KgnamU2kDWMUFeMgQ2h94cPLI9DhhUfQT5YsET3GXS L7T2lMj6sqFeEk0LxJ6m0bVkS5rpjL7O3PkQdas0EaHk0M9qWzHGeTyiUQONrl+gPUJ2T bQ60uKUxQJj6EWQfzu3ljDQvv4AJ1JzV0801aPWNwmG3+tUjqoeyfG6ZDb10nmpOD+2fF 4juHkWMcienucWoTaFFL8lEqC6kmcSN8+LPNFNX1yDOtaw8mELt4eUF2pB02TBiU/+8k9 AWbF0fWCL/zeP9Y8FBqk1xQqK/YP5tCRxj3SseDBXtdm07CajgGrACrTEdtiBeWHwrg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=ccXMW09i; arc=none smtp.remote-ip=209.85.221.41 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CCD3606A31F for ; Thu, 22 Oct 2026 17:34:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 8CCD3606A31F Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=ccXMW09i Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-48c5358fc28so59933f8f.0 for ; Thu, 22 Oct 2026 10:34:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690485; x=1793295285; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SpPolyfzJYMmE5VU9BMzMFqCxVbYb3ZUGO3YoElucf4=; b=ccXMW09isYUy4ucoPunTFXnFO/iXlPSy6aXP4EVOxAe+qe0fateYkqiy6N1AUhgjC/ Ks1/d2sr0e/kjoLoKqnFgKGZsed1bFfxVMFHkGE6mfaXS7uEqQlJqUWvQhkIRxAV0B0h +SCyFrIIG+wt5OUh+ROZbCwgRxxFE64TDlaEjXE4UJP8+vHnCR+zoRDw1XqYr2FbeHew /4d+BBdixZykwXTHrz8PoUCVgVa7rMit/zHcJYXonnjWFKO0e59cnT2Q2rgchmGGmPvU 9TnG0BFxQdg5lIwKYEXKiTRCR20UWIvipDKIaHASNfKeu+xX+ae4/J44eYqskzbDOfzL j5dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690485; x=1793295285; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SpPolyfzJYMmE5VU9BMzMFqCxVbYb3ZUGO3YoElucf4=; b=gFjPHYaft/gNnpKeGlpX0CWAIeif/deV0bNBqdNtUaV5KnyziNJNbm5UwZT2yreQHv Po/P9NNiKHuxuLQRgCvfcbkF9de1lt+ctxTzEWIkzLF3w35RoqiHSgX3vWH+Zw4k9/UD VmDv1882Ii6rddp3nQdf1s9hqmBqlyeCgIMqv5pCaawOGDDgWRNdNw9EB54yG/lA7nbt EYE3lvQZkJRCfwQ870TzD0Nzt6rSRv6Kui5tFolKHEjPA34zF0azyKZjYNE+kGIKpKVz eHrBXcLovnhbxzMbOLzrzI1rp/+L7fS1BiUvVlNBflEeUWQJaYOabEGUEw59y8VGvBrp BUxw== X-Forwarded-Encrypted: i=1; AKwUvBzl4gJgk2Hz4he2uHeKPVyD3ty8wjvgIAx+KaMY2Lo9XU0Mg7XEc/01PE2SZqQ84OJLTO1xTUJHtckpP3A=@vger.kernel.org X-Gm-Message-State: AFq9FYKLN3O8KT3yCf9fyqFzWE1HEnSlWceeb4/tCKLs6g3o9SmPje/Q if10dbwY1xgJGvWahIAGDUIe5vZR4mog0IOKYAszrl7Bud8xARLqiVTBfVbBV/aQhGY= X-Gm-Gg: AYBFou1IsRnM/pTMFH0fSpy1yNEyijsrWIT6DXbjP+jwJIx8AXO7wfOYZF+yBqFllMG ZCM/YpAt72OOS1cn+tdNXrYV0VHiXNffBYsVlpkn61E8txqAQ3QLniFpyMsX8IFSQoMtYf1X+Sk LOhKCSkyZ3uzX4SxbWhuW0bwH2Ebtp8xGRBvZxnVGhwcy7uJ+OZEBPE+vloEQNP8BZBLfL0fQbW Wg7t3AvWQTxP+zztSoRwOPRqhcgojUZr5srTA9U0sL/4hjzPDMpW2GC9MSpQwqyUr1DhSEq1/Ag m4arI2R9g7+RxyxXV4oLvUwe5LS7JNpOMLy83ln9PdoWuAAv1uUZCbkKTtFmHzJNyPRab2LcAzK p/N4+uy+qixvOd/IyNFUL4JTA+mHonxhtl9yzb5pdi1+ltkPTqrA1qXKbvtJlQZg2mDWHdwd180 boAJnj5pNl6Iifl5GNFZg3igmLixu0ZYsf6wJmq3t0YRJJNZMSxdgyNF140ltLZ/j5fP+7Hek5w 8/gL2Yrmd60luc3jUCB6xBOPjdKqv0yPINY2CxsdpuyAc/PvlD7GDhNNk26aKYYGusgUfvJUV7F 2uTTlCxWZ9cOzFlgUvquNoVdPPb1rWYtRY2HM0dyApPVlp//YD5e X-Received: by 2002:adf:d00e:0:b0:48c:7083:be67 with SMTP id ffacd0b85a97d-48e264cf195mr9675789f8f.42.1792690484990; Thu, 22 Oct 2026 10:34:44 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:44 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:09 +0100 Subject: [PATCH v6 16/18] media: sony-starvis2: Parameterise the mono ID register X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-16-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 All sensors to this point have used register 0x4d18[0] to signal whether it is a mono or colour module. IMX585 uses a different register (0x5a18[0]), so parameterise which register to use. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 15d5a066a556..b526ea3ce2e4 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -97,7 +97,6 @@ #define STARVIS2_REG_WINMODEV CCI_REG8(0x3021) =20 /* Sensor Identification */ -#define STARVIS2_REG_MONOCHROME CCI_REG8(0x4d18) #define STARVIS2_TYPE BIT(0) #define STARVIS2_MODULE_ID_DELAY 80000 =20 @@ -629,6 +628,7 @@ struct starvis2_variant { u32 id_mask; u32 id_value; u32 interface_sel_reg; + u32 mono_id_reg; struct v4l2_rect native_area; struct v4l2_rect active_area; u64 pixel_rate; @@ -649,6 +649,7 @@ static const struct starvis2_variant imx678_variant_def= =3D { .id_mask =3D 0x3ff, .id_value =3D 0x2a6, .interface_sel_reg =3D CCI_REG8(0x4e3c), + .mono_id_reg =3D CCI_REG8(0x4d18), .native_area =3D { .top =3D 0, .left =3D 0, @@ -782,6 +783,7 @@ static const struct starvis2_variant imx662_variant_def= =3D { .id_reg =3D CCI_REG16_LE(0x4d1c), .id_mask =3D 0x3ff, .id_value =3D 0x296, + .mono_id_reg =3D CCI_REG8(0x4d18), .native_area =3D { .top =3D 0, .left =3D 0, @@ -972,6 +974,7 @@ static const struct starvis2_variant imx675_variant_def= =3D { .id_reg =3D CCI_REG16_LE(0x4d12), .id_mask =3D 0xfff, .id_value =3D 0x576, + .mono_id_reg =3D CCI_REG8(0x4d18), .native_area =3D { .top =3D 0, .left =3D 0, @@ -1068,6 +1071,7 @@ static const struct starvis2_variant imx832_variant_d= ef =3D { .id_reg =3D CCI_REG16_LE(0x4d1c), .id_mask =3D 0x3ff, .id_value =3D 0x340, + .mono_id_reg =3D CCI_REG8(0x4d18), .native_area =3D { .top =3D 0, .left =3D 0, @@ -1675,7 +1679,7 @@ static int starvis2_identify_model(struct starvis2 *s= tarvis2) goto err_standby; } =20 - cci_read(starvis2->cci, STARVIS2_REG_MONOCHROME, &val, &ret); + cci_read(starvis2->cci, variant->mono_id_reg, &val, &ret); =20 if (ret) { dev_err(&client->dev, --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.51 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690488; b=eArbZO1QvIWUditn6EO+C1iovgvQISFAWRHuWXpyccWuAqaCN5F0xczoM/IdfV/YaKjJ D45BVTl4WfzHDS9yFuondRe20zetg88DJ6/3bAnluQNUQ5n0pySljQcmkt1yvTE7o+ITb L8n7WQgkEdWA6SpitJqtkpFXTxxSpadc4wcd7BIiSFjcGQEkuVVwzPvFPzs7iXcvcZJDx 8e86jAa4rALonkNi2RyKBw/2ulxao2E+8siVF3bcYhXskjfEhhf4//zHLyZ22c0EdNyEn J/3RP5bXsFmJb4VTAGayI1SP1AoUOi3wXZNiHWQgVDH/htAn912fgd6glaA1UQYVPmQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690488; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=Dm3Iqmw5Hh7puhN5qtgLJL8Ms/kK/NEm7YUHOhJMh/0=; b=h/Jc7Z/g8n8YgnDibsMsV8D1hXdcCpWi2VL06euc2ENkTTTHyNAj1QXomvZj+2GLI/9a IreOKyyzDk5VcQM6B8bPk8VUXYQ5dqRPmyH0PJ0wFqQ1VkbN9AeeCaQlLC9lCgYuoW1FF dlz3GmxAvD+nM2hvKJ1+zJgpltJjqFVwKv1t6TdbKPoGZRSfVGY0thDenMiQjk42cc9Ro YHlrZiM9i2sgNJkfL+Qx5hkGZ8OTLTkHvnKD+n9e0aytQgJDBjnAK2aZjturzWwOEMmXJ gu2+pWJmfIQId+UQbtjJFTlA/8vOzVXJpfg8eanyHZACNrwhM6dSqaSMxplC87MDvsA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=g0O7zin1; arc=none smtp.remote-ip=209.85.221.51 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EE9B60A380D for ; Thu, 22 Oct 2026 17:34:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 6EE9B60A380D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=g0O7zin1 Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-48df8fe8513so66131f8f.0 for ; Thu, 22 Oct 2026 10:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690487; x=1793295287; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Dm3Iqmw5Hh7puhN5qtgLJL8Ms/kK/NEm7YUHOhJMh/0=; b=g0O7zin1c1AmzSb+uzTOeh3Izi0txptvBW+YXTHxw/OLVLyXnwQSKaDpWxdS2fL7Bb l9h1DYSoQOkrfBD3ZqLrwQukIMsxohB/YTYryLPxaNLqHWs4TupcrpdJND/z9ULqESAX EM1CKJAJQcevgk4HKqQvk9NpimB5mlh/lkEqplAfOsb8wB1GtzWSLbFX78xa5zA8Tsn3 huTn5POonZ65lwRmfQ3mc4W73kVIPGYl39bU4ge1FVqC+QkuF6HUApeNwtA5CkOfaCbH sH0UHGGm+N2zQMNJhSg4vcEcDfKx92TXJt+yvqnT+mOg1r8U2rLLmqzqZIXm2N6leFy5 OTjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690487; x=1793295287; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Dm3Iqmw5Hh7puhN5qtgLJL8Ms/kK/NEm7YUHOhJMh/0=; b=zbhWoKPFwWqWGUnNPRlkFUNIbXaTCKGWK/g5AFsgVN7ilGNllg1XIaCg/StRwFcAdo 6VZoaswkTJkzz+CYOFPjzAfAN5aT765S6kNJd0Vartq8EP1NCn15nkLLlrXHE+VnO3Hu RNWfK9TckHlhV+712pXqg7SQul4A28mtKVgc56bg8HGQCHWrZf5T3kp1RiU8jmk8pWlB vmslwYe0hr0iS2r8qbpE6UObBEiDcTRiP7ZFcmPedNi5XzBRHBD8tgQz5exV19aVPFJV tUMUQ50g2YDpm7L7mCMESdgOEuY4aWWx75lz2c3lIw/AHfZ7i4ql78cXuEGWF4xYYnfr ex3Q== X-Forwarded-Encrypted: i=1; AKwUvBy4hO2j5CZpvK4L3ei5yyFrK8tpaoSx5RCaib2+R23M2db6rvm12P0TFXOiw/bw+L7xfylQoSnD4wEBF+A=@vger.kernel.org X-Gm-Message-State: AFq9FYKNWhdDXk03x0kQERc6cAdyl5H4ILIym8IApYJV0Nssjg2e2S0l so6b/8ZSbfGrUF1aNMBd55OlYp21ywI4SIyyP8eIdyKc5OeueVho5LrulsXxoky6SGs= X-Gm-Gg: AYBFou3pp6FxsS8r3qUSNw4C8QHFPpD583wxkpJ89vG+j0H42T2jntCjARkWYMsALFr z9GuoZ+/fb+hUsQlod+M4UhHmdznw2PUWVbCVOp1MBEfcT6YaG4GFoUkG40t6IArlfKK6PySAkV RbV9tSjRfDTl1qoXVzIx7sktY1kl+dvVcBTkveL1S0ywQY+HT1zJ+VF8uc5SZeXCEdW/BIP1VdB GFyMp9zRcRDEEBwEZ8/LlREUjx+ETLbF00zRHgEKYJXoR1TYNY92SsKFsyq0Q/yEttY3etzyzM7 BjK0/mg2E8CDPQ+SQU0hhoLoIXrvRRChRMw6qUHiGKUEeqyO/+sorMpIfh/YdizfzroNRRhgevP 7KJW8EZKEvjgGY6HHtZvkEbm1vAS53eQeU1sMBoOjJgk6zGJ/ZXwly+eRObqKFEeBlJwGfBH3A3 qJIoNfA11iYcOaNIjNamEZwLZzotLZMMD5FVzoDFR51zUy/zOB9tUl2EHXkqsN4OnSZcNU54xo9 qYhKqkDmuzBhYe+NphC5kvkjxIQ00s02/B07p3supxQ3qLc8jYu9PFtsp7D0xsk67fUR4IkEUOs JzFpXb2n82ePMa7A2W+C0SqIVrYTZ+g= X-Received: by 2002:a5d:5e8b:0:b0:48e:e98:8b6a with SMTP id ffacd0b85a97d-48e2643106dmr13216999f8f.4.1792690486817; Thu, 22 Oct 2026 10:34:46 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:45 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:10 +0100 Subject: [PATCH v6 17/18] media: sony-starvis2: Add support for IMX585 X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-17-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 IMX585 is an 8MPix Starvis 2 sensor, so add support for it. Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 307 ++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 307 insertions(+) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index b526ea3ce2e4..5c407211edc8 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -14,6 +14,8 @@ * pixels. * IMX832: Diagonal 6.45mm (Type 1/2.8) CMOS image sensor with 2.12 M effe= ctive * pixels. + * IMX585: Diagonal 12.84 mm (Type 1/1.2) CMOS image sensor with 8.40 M ef= fective + * pixels. * * Copyright (C) 2026 Ideas On Board Oy. * Copyright (C) 2026 Raspberry Pi @@ -1096,6 +1098,288 @@ static const struct starvis2_variant imx832_variant= _def =3D { .shr_min =3D 4, }; =20 +static const struct cci_reg_sequence imx585_common_regs[] =3D { + { STARVIS2_REG_THIN_V_EN, 0x00 }, + { STARVIS2_REG_VCMODE, 0x01 }, + { CCI_REG8(0x306b), 0x00 }, + { STARVIS2_REG_GAIN_PGC_FIDMD, 0x01 }, + + { CCI_REG8(0x3460), 0x21 }, + { CCI_REG8(0x3478), 0xa1 }, + { CCI_REG8(0x347c), 0x01 }, + { CCI_REG8(0x3480), 0x01 }, + { CCI_REG8(0x3930), 0x0c }, + { CCI_REG8(0x3931), 0x01 }, + { CCI_REG8(0x3a4c), 0x39 }, + { CCI_REG8(0x3a4d), 0x01 }, + { CCI_REG8(0x3a4e), 0x14 }, + { CCI_REG8(0x3a50), 0x48 }, + { CCI_REG8(0x3a51), 0x01 }, + { CCI_REG8(0x3a52), 0x14 }, + { CCI_REG8(0x3a56), 0x00 }, + { CCI_REG8(0x3a5a), 0x00 }, + { CCI_REG8(0x3a5e), 0x00 }, + { CCI_REG8(0x3a62), 0x00 }, + { CCI_REG8(0x3a6a), 0x20 }, + { CCI_REG8(0x3a6c), 0x42 }, + { CCI_REG8(0x3a6e), 0xa0 }, + { CCI_REG8(0x3b2c), 0x0c }, + { CCI_REG8(0x3b30), 0x1c }, + { CCI_REG8(0x3b34), 0x0c }, + { CCI_REG8(0x3b38), 0x1c }, + { CCI_REG8(0x3ba0), 0x0c }, + { CCI_REG8(0x3ba4), 0x1c }, + { CCI_REG8(0x3ba8), 0x0c }, + { CCI_REG8(0x3bac), 0x1c }, + { CCI_REG8(0x3d3c), 0x11 }, + { CCI_REG8(0x3d46), 0x0b }, + { CCI_REG8(0x3de0), 0x3f }, + { CCI_REG8(0x3de1), 0x08 }, + { CCI_REG8(0x3e10), 0x10 }, + { CCI_REG8(0x3e14), 0x87 }, + { CCI_REG8(0x3e16), 0x91 }, + { CCI_REG8(0x3e18), 0x91 }, + { CCI_REG8(0x3e1a), 0x87 }, + { CCI_REG8(0x3e1c), 0x78 }, + { CCI_REG8(0x3e1e), 0x50 }, + { CCI_REG8(0x3e20), 0x50 }, + { CCI_REG8(0x3e22), 0x50 }, + { CCI_REG8(0x3e24), 0x87 }, + { CCI_REG8(0x3e26), 0x91 }, + { CCI_REG8(0x3e28), 0x91 }, + { CCI_REG8(0x3e2a), 0x87 }, + { CCI_REG8(0x3e2c), 0x78 }, + { CCI_REG8(0x3e2e), 0x50 }, + { CCI_REG8(0x3e30), 0x50 }, + { CCI_REG8(0x3e32), 0x50 }, + { CCI_REG8(0x3e34), 0x87 }, + { CCI_REG8(0x3e36), 0x91 }, + { CCI_REG8(0x3e38), 0x91 }, + { CCI_REG8(0x3e3a), 0x87 }, + { CCI_REG8(0x3e3c), 0x78 }, + { CCI_REG8(0x3e3e), 0x50 }, + { CCI_REG8(0x3e40), 0x50 }, + { CCI_REG8(0x3e42), 0x50 }, + { CCI_REG8(0x4054), 0x64 }, + { CCI_REG8(0x4148), 0xfe }, + { CCI_REG8(0x4149), 0x05 }, + { CCI_REG8(0x414a), 0xff }, + { CCI_REG8(0x414b), 0x05 }, + { CCI_REG8(0x420a), 0x03 }, + { CCI_REG8(0x4231), 0x08 }, + { CCI_REG8(0x423d), 0x9c }, + { CCI_REG8(0x4242), 0xb4 }, + { CCI_REG8(0x4246), 0xb4 }, + { CCI_REG8(0x424e), 0xb4 }, + { CCI_REG8(0x425c), 0xb4 }, + { CCI_REG8(0x425e), 0xb6 }, + { CCI_REG8(0x426c), 0xb4 }, + { CCI_REG8(0x426e), 0xb6 }, + { CCI_REG8(0x428c), 0xb4 }, + { CCI_REG8(0x428e), 0xb6 }, + { CCI_REG8(0x4708), 0x00 }, + { CCI_REG8(0x4709), 0x00 }, + { CCI_REG8(0x470a), 0xff }, + { CCI_REG8(0x470b), 0x03 }, + { CCI_REG8(0x470c), 0x00 }, + { CCI_REG8(0x470d), 0x00 }, + { CCI_REG8(0x470e), 0xff }, + { CCI_REG8(0x470f), 0x03 }, + { CCI_REG8(0x47eb), 0x1c }, + { CCI_REG8(0x47f0), 0xa6 }, + { CCI_REG8(0x47f2), 0xa6 }, + { CCI_REG8(0x47f4), 0xa0 }, + { CCI_REG8(0x47f6), 0x96 }, + { CCI_REG8(0x4808), 0xa6 }, + { CCI_REG8(0x480a), 0xa6 }, + { CCI_REG8(0x480c), 0xa0 }, + { CCI_REG8(0x480e), 0x96 }, + { CCI_REG8(0x492c), 0xb2 }, + { CCI_REG8(0x4930), 0x03 }, + { CCI_REG8(0x4932), 0x03 }, + { CCI_REG8(0x4936), 0x5b }, + { CCI_REG8(0x4938), 0x82 }, + { CCI_REG8(0x493c), 0x23 }, + { CCI_REG8(0x493e), 0x23 }, + { CCI_REG8(0x4940), 0x23 }, + { CCI_REG8(0x4ba8), 0x1c }, + { CCI_REG8(0x4ba9), 0x03 }, + { CCI_REG8(0x4bac), 0x1c }, + { CCI_REG8(0x4bad), 0x1c }, + { CCI_REG8(0x4bae), 0x1c }, + { CCI_REG8(0x4baf), 0x1c }, + { CCI_REG8(0x4bb0), 0x1c }, + { CCI_REG8(0x4bb1), 0x1c }, + { CCI_REG8(0x4bb2), 0x1c }, + { CCI_REG8(0x4bb3), 0x1c }, + { CCI_REG8(0x4bb4), 0x1c }, + { CCI_REG8(0x4bb8), 0x03 }, + { CCI_REG8(0x4bb9), 0x03 }, + { CCI_REG8(0x4bba), 0x03 }, + { CCI_REG8(0x4bbb), 0x03 }, + { CCI_REG8(0x4bbc), 0x03 }, + { CCI_REG8(0x4bbd), 0x03 }, + { CCI_REG8(0x4bbe), 0x03 }, + { CCI_REG8(0x4bbf), 0x03 }, + { CCI_REG8(0x4bc0), 0x03 }, + { CCI_REG8(0x4c14), 0x87 }, + { CCI_REG8(0x4c16), 0x91 }, + { CCI_REG8(0x4c18), 0x91 }, + { CCI_REG8(0x4c1a), 0x87 }, + { CCI_REG8(0x4c1c), 0x78 }, + { CCI_REG8(0x4c1e), 0x50 }, + { CCI_REG8(0x4c20), 0x50 }, + { CCI_REG8(0x4c22), 0x50 }, + { CCI_REG8(0x4c24), 0x87 }, + { CCI_REG8(0x4c26), 0x91 }, + { CCI_REG8(0x4c28), 0x91 }, + { CCI_REG8(0x4c2a), 0x87 }, + { CCI_REG8(0x4c2c), 0x78 }, + { CCI_REG8(0x4c2e), 0x50 }, + { CCI_REG8(0x4c30), 0x50 }, + { CCI_REG8(0x4c32), 0x50 }, + { CCI_REG8(0x4c34), 0x87 }, + { CCI_REG8(0x4c36), 0x91 }, + { CCI_REG8(0x4c38), 0x91 }, + { CCI_REG8(0x4c3a), 0x87 }, + { CCI_REG8(0x4c3c), 0x78 }, + { CCI_REG8(0x4c3e), 0x50 }, + { CCI_REG8(0x4c40), 0x50 }, + { CCI_REG8(0x4c42), 0x50 }, + { CCI_REG8(0x4d12), 0x1f }, + { CCI_REG8(0x4d13), 0x1e }, + { CCI_REG8(0x4d26), 0x33 }, + { CCI_REG8(0x4e0e), 0x59 }, + { CCI_REG8(0x4e14), 0x55 }, + { CCI_REG8(0x4e16), 0x59 }, + { CCI_REG8(0x4e1e), 0x3b }, + { CCI_REG8(0x4e20), 0x47 }, + { CCI_REG8(0x4e22), 0x54 }, + { CCI_REG8(0x4e26), 0x81 }, + { CCI_REG8(0x4e2c), 0x7d }, + { CCI_REG8(0x4e2e), 0x81 }, + { CCI_REG8(0x4e36), 0x63 }, + { CCI_REG8(0x4e38), 0x6f }, + { CCI_REG8(0x4e3a), 0x7c }, + { CCI_REG8(0x4f3a), 0x3c }, + { CCI_REG8(0x4f3c), 0x46 }, + { CCI_REG8(0x4f3e), 0x59 }, + { CCI_REG8(0x4f42), 0x64 }, + { CCI_REG8(0x4f44), 0x6e }, + { CCI_REG8(0x4f46), 0x81 }, + { CCI_REG8(0x4f4a), 0x82 }, + { CCI_REG8(0x4f5a), 0x81 }, + { CCI_REG8(0x4f62), 0xaa }, + { CCI_REG8(0x4f72), 0xa9 }, + { CCI_REG8(0x4f78), 0x36 }, + { CCI_REG8(0x4f7a), 0x41 }, + { CCI_REG8(0x4f7c), 0x61 }, + { CCI_REG8(0x4f7d), 0x01 }, + { CCI_REG8(0x4f7e), 0x7c }, + { CCI_REG8(0x4f7f), 0x01 }, + { CCI_REG8(0x4f80), 0x77 }, + { CCI_REG8(0x4f82), 0x7b }, + { CCI_REG8(0x4f88), 0x37 }, + { CCI_REG8(0x4f8a), 0x40 }, + { CCI_REG8(0x4f8c), 0x62 }, + { CCI_REG8(0x4f8d), 0x01 }, + { CCI_REG8(0x4f8e), 0x76 }, + { CCI_REG8(0x4f8f), 0x01 }, + { CCI_REG8(0x4f90), 0x5e }, + { CCI_REG8(0x4f91), 0x02 }, + { CCI_REG8(0x4f92), 0x69 }, + { CCI_REG8(0x4f93), 0x02 }, + { CCI_REG8(0x4f94), 0x89 }, + { CCI_REG8(0x4f95), 0x02 }, + { CCI_REG8(0x4f96), 0xa4 }, + { CCI_REG8(0x4f97), 0x02 }, + { CCI_REG8(0x4f98), 0x9f }, + { CCI_REG8(0x4f99), 0x02 }, + { CCI_REG8(0x4f9a), 0xa3 }, + { CCI_REG8(0x4f9b), 0x02 }, + { CCI_REG8(0x4fa0), 0x5f }, + { CCI_REG8(0x4fa1), 0x02 }, + { CCI_REG8(0x4fa2), 0x68 }, + { CCI_REG8(0x4fa3), 0x02 }, + { CCI_REG8(0x4fa4), 0x8a }, + { CCI_REG8(0x4fa5), 0x02 }, + { CCI_REG8(0x4fa6), 0x9e }, + { CCI_REG8(0x4fa7), 0x02 }, + { CCI_REG8(0x519e), 0x79 }, + { CCI_REG8(0x51a6), 0xa1 }, + { CCI_REG8(0x51f0), 0xac }, + { CCI_REG8(0x51f2), 0xaa }, + { CCI_REG8(0x51f4), 0xa5 }, + { CCI_REG8(0x51f6), 0xa0 }, + { CCI_REG8(0x5200), 0x9b }, + { CCI_REG8(0x5202), 0x91 }, + { CCI_REG8(0x5204), 0x87 }, + { CCI_REG8(0x5206), 0x82 }, + { CCI_REG8(0x5208), 0xac }, + { CCI_REG8(0x520a), 0xaa }, + { CCI_REG8(0x520c), 0xa5 }, + { CCI_REG8(0x520e), 0xa0 }, + { CCI_REG8(0x5210), 0x9b }, + { CCI_REG8(0x5212), 0x91 }, + { CCI_REG8(0x5214), 0x87 }, + { CCI_REG8(0x5216), 0x82 }, + { CCI_REG8(0x5218), 0xac }, + { CCI_REG8(0x521a), 0xaa }, + { CCI_REG8(0x521c), 0xa5 }, + { CCI_REG8(0x521e), 0xa0 }, + { CCI_REG8(0x5220), 0x9b }, + { CCI_REG8(0x5222), 0x91 }, + { CCI_REG8(0x5224), 0x87 }, + { CCI_REG8(0x5226), 0x82 }, + { CCI_REG8(0x5b3c), 0x07 }, + + { STARVIS2_REG_WDMODE, 0x00 }, + { STARVIS2_REG_MDBIT, 0x01 }, + { STARVIS2_REG_XXS_DRV, 0x00 }, +}; + +static const u16 imx585_min_hmax_2lane[] =3D { + [STARVIS2_LINK_FREQ_297MHZ] =3D 2984, + [STARVIS2_LINK_FREQ_360MHZ] =3D 2464, + [STARVIS2_LINK_FREQ_445MHZ] =3D 2004, + [STARVIS2_LINK_FREQ_594MHZ] =3D 1512, + [STARVIS2_LINK_FREQ_720MHZ] =3D 1260, + [STARVIS2_LINK_FREQ_891MHZ] =3D 996, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 856, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 856, +}; + +static const struct starvis2_variant imx585_variant_def =3D { + .name =3D "imx585", + .id_reg =3D CCI_REG16_LE(0x5a1d), + .id_mask =3D 0x3ff, + .id_value =3D 0x259, + .interface_sel_reg =3D CCI_REG8(0x5b3c), + .mono_id_reg =3D CCI_REG8(0x5a18), + .native_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 3857, + .height =3D 2201, + }, + .active_area =3D { + .top =3D 20, + .left =3D 0, + .width =3D 3856, + .height =3D 2180, + }, + .pixel_rate =3D 594000000, + .pix_per_clk =3D 8, + .common_regs =3D imx585_common_regs, + .num_common_regs =3D ARRAY_SIZE(imx585_common_regs), + .vmax_default =3D 2250, + .hmax_min_link_freq =3D imx585_min_hmax_2lane, + .hmax_min_pixel_array =3D 550, + .exposure_min =3D 2, + .exposure_step =3D 2, + .shr_min =3D 8, +}; + struct starvis2_model_info { enum starvis2_type type; const u32 *codes; @@ -1186,6 +1470,26 @@ static const struct starvis2_model_info imx832_autod= etect_info =3D { .auto_detect_mono =3D &imx832_amr_info, }; =20 +static const struct starvis2_model_info imx585_aaqj_info =3D { + .type =3D STARVIS2_COLOR, + .codes =3D codes_bayer, + .num_codes =3D ARRAY_SIZE(codes_bayer), + .variant =3D &imx585_variant_def, +}; + +static const struct starvis2_model_info imx585_aamj_info =3D { + .type =3D STARVIS2_MONOCHROME, + .codes =3D codes_monochrome, + .num_codes =3D ARRAY_SIZE(codes_monochrome), + .variant =3D &imx585_variant_def, +}; + +static const struct starvis2_model_info imx585_autodetect_info =3D { + .variant =3D &imx585_variant_def, + .auto_detect_colour =3D &imx585_aaqj_info, + .auto_detect_mono =3D &imx585_aamj_info, +}; + static const char * const starvis2_supply_name[] =3D { "avdd", /* Analog (3.3V) supply */ "dvdd", /* Digital Core (1.1V) supply */ @@ -2025,6 +2329,8 @@ static const struct dev_pm_ops starvis2_pm_ops =3D { }; =20 static const struct of_device_id starvis2_of_match[] =3D { + { .compatible =3D "sony,imx585-aamj", .data =3D &imx585_aamj_info }, + { .compatible =3D "sony,imx585-aaqj", .data =3D &imx585_aaqj_info }, { .compatible =3D "sony,imx662-aamr", .data =3D &imx662_aamr_info }, { .compatible =3D "sony,imx662-aaqr", .data =3D &imx662_aaqr_info }, { .compatible =3D "sony,imx675-aamr", .data =3D &imx675_aamr_info }, @@ -2034,6 +2340,7 @@ static const struct of_device_id starvis2_of_match[] = =3D { { .compatible =3D "sony,imx832-amr", .data =3D &imx832_amr_info }, { .compatible =3D "sony,imx832-aqr", .data =3D &imx832_aqr_info }, /* for non-conforming DTs that rely on runtime check */ + { .compatible =3D "sony,imx585", .data =3D &imx585_autodetect_info }, { .compatible =3D "sony,imx662", .data =3D &imx662_autodetect_info }, { .compatible =3D "sony,imx675", .data =3D &imx675_autodetect_info }, { .compatible =3D "sony,imx678", .data =3D &imx678_autodetect_info }, --=20 2.34.1 From nobody Fri Oct 23 22:43:19 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.48 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792690490; b=Oilei1QHCK3l1ZEjbgV62Gi6ynG7bg0JdInB2u4ectVIRPZkYrp8mZLJZNGFKFh8GHnE ABpQjJ5C7+3OycGxdB2G+5R+8+vtRxxnDv6fSbEj8bmKKPBfEjRj1e0ODg4tf1/0XK6+3 yMX/ms/Kq+RF+flK45+8qL2eH2X29WjmWrgIlQoMFNpHhI4DNrib1A+DdLO/neDoqXWeI 3Vx0po+QcUCFb2WPaNSyQZFDCHi0IqfTvPmhk9Q/H6S7YFAIBO/VfD19g9C4Q3EDc04nM noCgRq0JZUX4HX9JdHRL4ETYmteO0k6dx3rhoc8IDodjL7W8DPXBga8+ZKiq0HUD+5w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792690490; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=+PLa8/BTSYSpY5O/iBWQgejv9mgsV4q9dlKuDq8W1LA=; b=Nt/DxWItDsOLzDluXr1yM0V11SHxCoChnUVERX7b5MdIo4tsVdZIfL+NOy0Cl41O0DIT XmUtke/gwU6gFbyfRVLdABH+1MMvAd7Dl0VwgtIWsJXTs8n9hllwoEc8koJje9W8w2xCZ c9dGQn11i9+2UBoPWTzWULD5tbSsc2CBJCfJMzFr0q10ofZCZNVjFjiSKCsuec7rA+6mu F+W1NME2GEy9VaGQA0VB1VCKYOWs6aEETh8tM93W2jUKxJylv/zjOGa9FEicIKTkApibW SaMhy52OsWsHMgSThIH0vsmyV1C8U3LAQ6olKgqCnVAO+BeveIsD+Ez3BDxTanoBaxA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Sut1OsTF; arc=none smtp.remote-ip=209.85.221.48 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7EBA60A6F6E for ; Thu, 22 Oct 2026 17:34:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org B7EBA60A6F6E Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=raspberrypi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha256 header.s=google header.b=Sut1OsTF Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-48afcfc4bf5so47562f8f.1 for ; Thu, 22 Oct 2026 10:34:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1792690488; x=1793295288; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+PLa8/BTSYSpY5O/iBWQgejv9mgsV4q9dlKuDq8W1LA=; b=Sut1OsTFVy0BCOnpRe/o3z0bVqVrXAeK6nIHESfGluE7rdS3k/u41OAGxpLMmGErna dhkVDLzVYzeuN+JAwrYPcbm9YSjfMVrZtyi4dBa3zXAeS78GXxN1x2Z19P9TF1h5w4Hn cgjzy87H5WO0TX1S9EdPgYhKM/3QNREr02ieYWwPDRaEw0qW/ayEldGzm/fPhPh/Tkwy qfrl2GxEuNDzaatioN3o7AicJRKoqx1KaOhA8o/50OuSNBXcQWslMy0vWsvIZDR2JGd6 yHR+w0kWRER5xYLkBQwo45fi5pf7Zp51aOlF73l9gfHu0qmpNR3KU5M40qpZyrcvLYLg Mnxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792690488; x=1793295288; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+PLa8/BTSYSpY5O/iBWQgejv9mgsV4q9dlKuDq8W1LA=; b=JlWh1vHz5epvlOT92HV7yjL3CvQIsijbJ82Talx3k+LKo1SeSd4Re0+r1oaZSoueAR yGthXoXV9YD7G4Cd/QDNKooSjqZkugpeODL1gzl+q3Z8/JzCz8wQbweINawcxmxdhTDx otVPocOIOebcwLBOR5KtHOfkEY01LUYciIW58sP00OcPM8kLPSWZIg7cdcNdtkVCPgei bFm4RPXSJbkNqtHl2H0oCOL6zagA3qVoBE8yLDe5jml4nYaib9p2Nc9h532zzfw4qX+g dnzHJj4GOTslP/ZRLHdiYj69cuSWzr/CYKcJkP5SQR78mSDydlR7BjgcxEqb6+trh4r2 L8yg== X-Forwarded-Encrypted: i=1; AKwUvBwFDjmEMO3G755KKctNNHmZf4D5vZjdmyPRkIbA+K6NOSj8nV+ji9BvBnuuEKcp5jBQggv22IRK2f7aU+w=@vger.kernel.org X-Gm-Message-State: AFq9FYJUHCUuePsnNvlv2asnekajX7lw4fDq1qHQJ9qtE73yNvOGNEX6 aZYoaRgAlTxXJZbYp2SSZ1nDDev/eZDwILBcyjYTWyFCxoeBVV8aH2s2RM6YUJpvNVY= X-Gm-Gg: AYBFou0G6dHUVfx4byuWrQBK5rDZcUMvlGSKxW87l0bz04QVa/sG0Vf/xChzjaTcCkF /O0gKdG04T7pYwQlNIgx9efnHQcwDeWyWsnDzx0kDObTSWVx8d3T5AwMWcpYC76xftC1ay1aZeQ fpAR/c0ugLkBsQTEKHlMGV3vYbpDdScO/guJkSuBF418ocL4rfJHtOZ+v1LsBTh8PKrM/jPfwKb TFvNFuCAX6JjKOZxCSkHbnhFMJnQFwEbT4sQs+WUj38HQoXWN1anQiX6iSJaXBLL7xMGh95rNSx z5I9ZBJmDKstUU/ubgZETUswGzF61ISvZTiWUlAAGUc1ItGnl3tN4i8COWenkNWiOdMkH0ScdCp iQuqslk6LxBKiFYgHBtwMz+lBk8MQPP54hZGvj1/B6osaCdnwAzHJ1C7YgCbLB+bZBJAleXXBEF 5hkHDwe9E+xpBEe+2ieVapVhS7G1l+6HJEZ6odPi5SXVVMZvc/yhSN+nvRjMIoRm95B0AJuI//G SvFa0LLyXH5Eyur1AbJY3I7LTI7AmeAkM90iUIjZQAkd0/p7O3cNRLWlBrx5RKI8SSlAyjD0TsW kB0SQL3WIwBFSY6ZSl/h0EO7W/tKyL4= X-Received: by 2002:a05:6000:310c:b0:48d:f730:bda8 with SMTP id ffacd0b85a97d-48e264b1fb9mr12767924f8f.50.1792690488217; Thu, 22 Oct 2026 10:34:48 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-48e25828cd1sm13572410f8f.22.2026.10.22.10.34.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 10:34:47 -0700 (PDT) From: Dave Stevenson Date: Thu, 22 Oct 2026 18:34:11 +0100 Subject: [PATCH v6 18/18] media: sony-starvis2: Add support for IMX676 X-Mailing-List: linux-kernel@vger.kernel.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: quoted-printable Message-Id: <20261022-media-starvis2-v6-18-374343f55fd3@raspberrypi.com> References: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> In-Reply-To: <20261022-media-starvis2-v6-0-374343f55fd3@raspberrypi.com> To: Sakari Ailus , Jai Luthra , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Laurent Pinchart , Alexander Shiyan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 From: Jai Luthra The IMX676 is a 12.63MPix Starvis 2 sensor, so add support for it. Signed-off-by: Jai Luthra Signed-off-by: Dave Stevenson --- drivers/media/i2c/sony-starvis2.c | 196 ++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 196 insertions(+) diff --git a/drivers/media/i2c/sony-starvis2.c b/drivers/media/i2c/sony-sta= rvis2.c index 5c407211edc8..8e574a9e920f 100644 --- a/drivers/media/i2c/sony-starvis2.c +++ b/drivers/media/i2c/sony-starvis2.c @@ -1380,6 +1380,179 @@ static const struct starvis2_variant imx585_variant= _def =3D { .shr_min =3D 8, }; =20 +static const struct cci_reg_sequence imx676_common_regs[] =3D { + { CCI_REG8(0x304e), 0x04 }, + { CCI_REG8(0x3148), 0x00 }, + { CCI_REG8(0x3460), 0x22 }, + { CCI_REG8(0x347b), 0x02 }, + { CCI_REG8(0x355a), 0x1c }, + { CCI_REG8(0x3a3c), 0x0f }, + { CCI_REG8(0x3a44), 0x0b }, + { CCI_REG8(0x3a76), 0xb5 }, + { CCI_REG8(0x3a77), 0x00 }, + { CCI_REG8(0x3a78), 0x03 }, + { CCI_REG8(0x3b22), 0x04 }, + { CCI_REG8(0x3b23), 0x44 }, + { CCI_REG8(0x3c03), 0x04 }, + { CCI_REG8(0x3c04), 0x04 }, + { CCI_REG8(0x3c0a), 0x03 }, + { CCI_REG8(0x3c0b), 0x03 }, + { CCI_REG8(0x3c0c), 0x03 }, + { CCI_REG8(0x3c0d), 0x03 }, + { CCI_REG8(0x3c0e), 0x03 }, + { CCI_REG8(0x3c0f), 0x03 }, + { CCI_REG8(0x3c30), 0x73 }, + { CCI_REG8(0x3c34), 0x6c }, + { CCI_REG8(0x3c3c), 0x20 }, + { CCI_REG8(0x3cb8), 0x00 }, + { CCI_REG8(0x3cba), 0xff }, + { CCI_REG8(0x3cbb), 0x03 }, + { CCI_REG8(0x3cbc), 0xff }, + { CCI_REG8(0x3cbd), 0x03 }, + { CCI_REG8(0x3cc2), 0xff }, + { CCI_REG8(0x3cc3), 0x03 }, + { CCI_REG8(0x3cc8), 0xff }, + { CCI_REG8(0x3cc9), 0x03 }, + { CCI_REG8(0x3cca), 0x00 }, + { CCI_REG8(0x3cce), 0xff }, + { CCI_REG8(0x3ccf), 0x03 }, + { CCI_REG8(0x3cd0), 0xff }, + { CCI_REG8(0x3cd1), 0x03 }, + { CCI_REG8(0x3e00), 0x1e }, + { CCI_REG8(0x3e02), 0x04 }, + { CCI_REG8(0x3e03), 0x00 }, + { CCI_REG8(0x3e20), 0x04 }, + { CCI_REG8(0x3e21), 0x00 }, + { CCI_REG8(0x3e22), 0x1e }, + { CCI_REG8(0x3e24), 0xb6 }, + { CCI_REG8(0x4490), 0x07 }, + { CCI_REG8(0x4494), 0x10 }, + { CCI_REG8(0x4495), 0x00 }, + { CCI_REG8(0x4496), 0xb2 }, + { CCI_REG8(0x4497), 0x00 }, + { CCI_REG8(0x4498), 0x4c }, + { CCI_REG8(0x449a), 0x4b }, + { CCI_REG8(0x449c), 0x4b }, + { CCI_REG8(0x449e), 0x49 }, + { CCI_REG8(0x44a0), 0x33 }, + { CCI_REG8(0x44a2), 0x10 }, + { CCI_REG8(0x44a4), 0x10 }, + { CCI_REG8(0x44a6), 0x10 }, + { CCI_REG8(0x44a8), 0x4b }, + { CCI_REG8(0x44aa), 0x4b }, + { CCI_REG8(0x44ac), 0x4b }, + { CCI_REG8(0x44ae), 0x46 }, + { CCI_REG8(0x44b0), 0x33 }, + { CCI_REG8(0x44b2), 0x10 }, + { CCI_REG8(0x44b4), 0x10 }, + { CCI_REG8(0x44b6), 0x10 }, + { CCI_REG8(0x44b8), 0x42 }, + { CCI_REG8(0x44ba), 0x42 }, + { CCI_REG8(0x44bc), 0x42 }, + { CCI_REG8(0x44be), 0x42 }, + { CCI_REG8(0x44c0), 0x33 }, + { CCI_REG8(0x44c2), 0x10 }, + { CCI_REG8(0x44c4), 0x10 }, + { CCI_REG8(0x44c6), 0x10 }, + { CCI_REG8(0x44c8), 0xe7 }, + { CCI_REG8(0x44ca), 0xe2 }, + { CCI_REG8(0x44cc), 0xe2 }, + { CCI_REG8(0x44ce), 0xdd }, + { CCI_REG8(0x44d0), 0xdd }, + { CCI_REG8(0x44d2), 0xb2 }, + { CCI_REG8(0x44d4), 0xb2 }, + { CCI_REG8(0x44d6), 0xb2 }, + { CCI_REG8(0x44d8), 0xe1 }, + { CCI_REG8(0x44da), 0xe1 }, + { CCI_REG8(0x44dc), 0xe1 }, + { CCI_REG8(0x44de), 0xdd }, + { CCI_REG8(0x44e0), 0xdd }, + { CCI_REG8(0x44e2), 0xb2 }, + { CCI_REG8(0x44e4), 0xb2 }, + { CCI_REG8(0x44e6), 0xb2 }, + { CCI_REG8(0x44e8), 0xdd }, + { CCI_REG8(0x44ea), 0xdd }, + { CCI_REG8(0x44ec), 0xdd }, + { CCI_REG8(0x44ee), 0xdd }, + { CCI_REG8(0x44f0), 0xdd }, + { CCI_REG8(0x44f2), 0xb2 }, + { CCI_REG8(0x44f4), 0xb2 }, + { CCI_REG8(0x44f6), 0xb2 }, + { CCI_REG8(0x4538), 0x15 }, + { CCI_REG8(0x4539), 0x15 }, + { CCI_REG8(0x453a), 0x15 }, + { CCI_REG8(0x4544), 0x15 }, + { CCI_REG8(0x4545), 0x15 }, + { CCI_REG8(0x4546), 0x15 }, + { CCI_REG8(0x4550), 0x10 }, + { CCI_REG8(0x4551), 0x10 }, + { CCI_REG8(0x4552), 0x10 }, + { CCI_REG8(0x4553), 0x10 }, + { CCI_REG8(0x4554), 0x10 }, + { CCI_REG8(0x4555), 0x10 }, + { CCI_REG8(0x4556), 0x10 }, + { CCI_REG8(0x4557), 0x10 }, + { CCI_REG8(0x4558), 0x10 }, + { CCI_REG8(0x455c), 0x10 }, + { CCI_REG8(0x455d), 0x10 }, + { CCI_REG8(0x455e), 0x10 }, + { CCI_REG8(0x455f), 0x10 }, + { CCI_REG8(0x4560), 0x10 }, + { CCI_REG8(0x4561), 0x10 }, + { CCI_REG8(0x4562), 0x10 }, + { CCI_REG8(0x4563), 0x10 }, + { CCI_REG8(0x4564), 0x10 }, + { CCI_REG8(0x4604), 0x04 }, + { CCI_REG8(0x4608), 0x22 }, + { CCI_REG8(0x479c), 0x04 }, + { CCI_REG8(0x47a0), 0x22 }, + { STARVIS2_REG_WDMODE, 0x00 }, + { STARVIS2_REG_MDBIT, 0x01 }, + { STARVIS2_REG_XXS_DRV, 0x00 }, +}; + +static const u16 imx676_min_hmax_2lane[] =3D { + [STARVIS2_LINK_FREQ_297MHZ] =3D 2744, + [STARVIS2_LINK_FREQ_360MHZ] =3D 2277, + [STARVIS2_LINK_FREQ_445MHZ] =3D 1854, + [STARVIS2_LINK_FREQ_594MHZ] =3D 1410, + [STARVIS2_LINK_FREQ_720MHZ] =3D 1176, + [STARVIS2_LINK_FREQ_891MHZ] =3D 965, + [STARVIS2_LINK_FREQ_1039MHZ] =3D 838, + [STARVIS2_LINK_FREQ_1188MHZ] =3D 743, +}; + +const struct starvis2_variant imx676_variant_def =3D { + .name =3D "imx676", + .id_reg =3D CCI_REG16_LE(0x4d12), + .id_mask =3D 0xfff, + .id_value =3D 0x676, + .interface_sel_reg =3D CCI_REG8(0x4e3c), + .mono_id_reg =3D CCI_REG8(0x4d18), + .native_area =3D { + .top =3D 0, + .left =3D 0, + .width =3D 3553, + .height =3D 3577, + }, + .active_area =3D { + .top =3D 24, + .left =3D 0, + .width =3D 3552, + .height =3D 3552, + }, + .pixel_rate =3D 594000000, + .pix_per_clk =3D 8, + .common_regs =3D imx676_common_regs, + .num_common_regs =3D ARRAY_SIZE(imx676_common_regs), + .vmax_default =3D 3940, + .hmax_min_link_freq =3D imx676_min_hmax_2lane, + .hmax_min_pixel_array =3D 454, + .exposure_min =3D 2, + .exposure_step =3D 2, + .shr_min =3D 8, +}; + struct starvis2_model_info { enum starvis2_type type; const u32 *codes; @@ -1490,6 +1663,26 @@ static const struct starvis2_model_info imx585_autod= etect_info =3D { .auto_detect_mono =3D &imx585_aamj_info, }; =20 +static const struct starvis2_model_info imx676_aacr_info =3D { + .type =3D STARVIS2_COLOR, + .codes =3D codes_bayer, + .num_codes =3D ARRAY_SIZE(codes_bayer), + .variant =3D &imx676_variant_def, +}; + +static const struct starvis2_model_info imx676_aamr_info =3D { + .type =3D STARVIS2_MONOCHROME, + .codes =3D codes_monochrome, + .num_codes =3D ARRAY_SIZE(codes_monochrome), + .variant =3D &imx676_variant_def, +}; + +static const struct starvis2_model_info imx676_autodetect_info =3D { + .variant =3D &imx676_variant_def, + .auto_detect_colour =3D &imx676_aacr_info, + .auto_detect_mono =3D &imx676_aamr_info, +}; + static const char * const starvis2_supply_name[] =3D { "avdd", /* Analog (3.3V) supply */ "dvdd", /* Digital Core (1.1V) supply */ @@ -2335,6 +2528,8 @@ static const struct of_device_id starvis2_of_match[] = =3D { { .compatible =3D "sony,imx662-aaqr", .data =3D &imx662_aaqr_info }, { .compatible =3D "sony,imx675-aamr", .data =3D &imx675_aamr_info }, { .compatible =3D "sony,imx675-aaqr", .data =3D &imx675_aaqr_info }, + { .compatible =3D "sony,imx676-aamr", .data =3D &imx676_aamr_info }, + { .compatible =3D "sony,imx676-aacr", .data =3D &imx676_aacr_info }, { .compatible =3D "sony,imx678-aamr", .data =3D &imx678_aamr_info }, { .compatible =3D "sony,imx678-aaqr", .data =3D &imx678_aaqr_info }, { .compatible =3D "sony,imx832-amr", .data =3D &imx832_amr_info }, @@ -2343,6 +2538,7 @@ static const struct of_device_id starvis2_of_match[] = =3D { { .compatible =3D "sony,imx585", .data =3D &imx585_autodetect_info }, { .compatible =3D "sony,imx662", .data =3D &imx662_autodetect_info }, { .compatible =3D "sony,imx675", .data =3D &imx675_autodetect_info }, + { .compatible =3D "sony,imx676", .data =3D &imx676_autodetect_info }, { .compatible =3D "sony,imx678", .data =3D &imx678_autodetect_info }, { .compatible =3D "sony,imx832", .data =3D &imx832_autodetect_info }, { /* sentinel */ } --=20 2.34.1