From patchwork Wed Feb 19 11:46:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 866979 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DADD2286291; Wed, 19 Feb 2025 11:47:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739965640; cv=none; b=ZbqcSuwJc71WraPvHhmwm2U2hlosdvn4glKcvJDXUH3qp2hlEoW7Yw0hZge1R98o9u6f8MAYjTwfX+n78kjMgGRV6+hwSaw9pOdE4Xq+nSFmUpv6+fcCIm4mps91QOnfC/G4B+ssDQnN5Eoy8tA1iql4LbGlUfIuSBhC6ncAkEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739965640; c=relaxed/simple; bh=BtEu9PtRzSnbhZz0wx2YPb1bjhWIGOD8GrfxUZprkJk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ufAqu7UEx1wtYrI5k5h3bDeaX75Ak54tdSEYiJ0fiu0WrMssnnSd2yWSR0F7//q6i65kkYBO/Vs66jGUdm9qnc/SCvf0doHykQi2poJBd+Fkzkxj9VANINKp2xc+GRQ3DuThfkfXbD9PwNPxPmXYV8dvrMw0rvUEDOxVfCfCpo0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=fkAR+39Q; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="fkAR+39Q" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c30:4abb:6de5:9248:813e:8db3]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EA753514; Wed, 19 Feb 2025 12:45:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739965553; bh=BtEu9PtRzSnbhZz0wx2YPb1bjhWIGOD8GrfxUZprkJk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fkAR+39QwB1+1BXSGkbMo4ZKAMPbQB+fPE+RfIMaahaNrEPtDp9OoJNl6V3yMpJfO +sqtgHSzTXuJRxygv7yEf97S0tKZeFGjz526IWOCCEt8ouR9OojYHhWZ3chnP6OPwD QCkMztG6lD0yY5+DJpXPpGKnUrJgeBzHI8mOOZoc= From: Jai Luthra Date: Wed, 19 Feb 2025 17:16:43 +0530 Subject: [PATCH 1/3] media: i2c: imx219: Only use higher LLP_MIN for binned resolutions Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-imx219_fixes_v2-v1-1-0e3f5dd9b024@ideasonboard.com> References: <20250219-imx219_fixes_v2-v1-0-0e3f5dd9b024@ideasonboard.com> In-Reply-To: <20250219-imx219_fixes_v2-v1-0-0e3f5dd9b024@ideasonboard.com> To: Sakari Ailus , Dave Stevenson , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jai Luthra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2964; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=BtEu9PtRzSnbhZz0wx2YPb1bjhWIGOD8GrfxUZprkJk=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBntcS1Z9tXBZffzSrfiji0QsQeFlUCLRPEWNsoW 19Wp7mBtbqJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ7XEtQAKCRBD3pH5JJpx RUauD/wJKZMu/YFRSfE5sJx4ma8ZFSu0ZyPj4/lXS1ZFgEJjuw6CTx7N7pzVtaCEGzHbTrbxadp GxdO7yvDVG6KYnPbbqLVB1eRxk85U8B+dyFNgykpQG7n05iGrb0So3vruiakN2PRdIRCUH2CmYp dfff4BHNv8i1L4oPun4Q/l//v2ziboTXSMTnx8lR6CUKtUqypBFvjtIrsAKCMhHY+losfHFOI4a 5p8TUh8LIMLvky/9s8vtVRMBXkSpgFkhybWO9+D+SwBdiZnTKw+sN++gR1zB8JL1J75IIRji7ja cU2TahOf2LNfZTPolGTKoloh0LjiCEL131ZV/ynYlvYFR2672Rv8+W9/mnaZaJ5lJZb1PRGZAVi XQ+bgNbs43LHe/nb7bZHZAjeucvBlESotai1wbfi9qWVPi0JFNxD61WFNQa4zR/Yk+WGEYRpSJI D70vngoQ2+GwDlFbaHRV1OZKZZhGseq098pSlJlQgrzdiYwhQ8qm9eaTashRhI61Jwdp38apVa+ iSFfG4AsKHbivr/2NlYUAT2VIi5WH7lgiZPM65AuoBzgfUZK1RhGrZ3mZz/l5Kgop3NKsi/pZ3i 2EfbviOuaRlStogE/fXERF+Z8QrI5aIZc0fDaIeDhLb36752LJDuOJRG3oDy1TeciRgLB5OVIYi KBMLHshrr//DLPw== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 The LLP_MIN of 3560 is only needed to fix artefacts seen with binned resolutions. As increasing the LLP reduces the highest possible framerate by ~3%, use the default minimum of 3448 for non-binned resolutions. Suggested-by: Dave Stevenson Link: https://lore.kernel.org/linux-media/CAPY8ntC1-S6zKtDvmc6EgyxP+j6rTShuG8Dr8PKb9XQr2PeS_w@mail.gmail.com/ Signed-off-by: Jai Luthra --- drivers/media/i2c/imx219.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c index f662c9d755114265aad46c5cc7f5031b9bc0dbba..6e51a7af5e2a05cacefb201d96a9fbdc349f17d8 100644 --- a/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c @@ -74,7 +74,8 @@ #define IMX219_FLL_MAX 0xffff #define IMX219_VBLANK_MIN 32 #define IMX219_REG_LINE_LENGTH_A CCI_REG16(0x0162) -#define IMX219_LLP_MIN 0x0de8 +#define IMX219_LLP_MIN 0x0d78 +#define IMX219_BINNED_LLP_MIN 0x0de8 #define IMX219_LLP_MAX 0x7ff0 #define IMX219_REG_X_ADD_STA_A CCI_REG16(0x0164) @@ -317,13 +318,13 @@ static const struct imx219_mode supported_modes[] = { /* 8MPix 15fps mode */ .width = 3280, .height = 2464, - .fll_def = 3415, + .fll_def = 3526, }, { /* 1080P 30fps cropped */ .width = 1920, .height = 1080, - .fll_def = 1707, + .fll_def = 1763, }, { /* 2x2 binned 60fps mode */ @@ -901,7 +902,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd, if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) { int exposure_max; int exposure_def; - int hblank; + int hblank, llp_min; int pixel_rate; /* Update limits and set FPS to default */ @@ -918,6 +919,17 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd, imx219->exposure->minimum, exposure_max, imx219->exposure->step, exposure_def); + + /* + * With analog binning the default minimum line length of 3448 + * can cause artefacts because the ADC operates on two lines + * together. Switch to higher minimum of 3560 if we are binning. + */ + llp_min = (bin_h || bin_v) ? IMX219_BINNED_LLP_MIN : + IMX219_LLP_MIN; + __v4l2_ctrl_modify_range(imx219->hblank, llp_min - mode->width, + IMX219_LLP_MAX - mode->width, 1, + llp_min - mode->width); /* * Retain PPL setting from previous mode so that the * line time does not change on a mode change. @@ -926,10 +938,6 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd, * mode width subtracted. */ hblank = prev_line_len - mode->width; - __v4l2_ctrl_modify_range(imx219->hblank, - IMX219_LLP_MIN - mode->width, - IMX219_LLP_MAX - mode->width, 1, - IMX219_LLP_MIN - mode->width); __v4l2_ctrl_s_ctrl(imx219->hblank, hblank); /* Scale the pixel rate based on the mode specific factor */ From patchwork Wed Feb 19 11:46:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 866611 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 739931DEFF7; Wed, 19 Feb 2025 11:47:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739965646; cv=none; b=rX4UaAba4gN3kR/pj1UikbvYOeMzqw0At31RRJdwL2QlmJjQfk2yF9QFakDqeeZXRbRUKRMv5VM4lwLwkfGxSpDjB11UXc0nNl1jSA51ST9HJzUSBgRcvM8LPpHaYfhVKOpRollZil9B1Au/aKW/1A/xtei3Nf3eMQcpngSFrhM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739965646; c=relaxed/simple; bh=VlV8WyFDoIICqjbwQwi/nMjALKnR7Xan0VUKAoqPBWE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HWtJK6Jk6+FZoy4fp1GXmjSJX4QnniOdzdV8vdvXd1lCvcYVmmyPNFldvqcNHMJbJSt1hf60t43Kog0ZrqTSjrLfGjxTaYbqmf4wnzDRK37YTkz6pUawDpSFZzMWVRnoX49OTcz0Wjj3yy/pFn6Ja0YNGZntLCHDjd3FwArYOMs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=LVpI5S7p; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="LVpI5S7p" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c30:4abb:6de5:9248:813e:8db3]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D9A6D169; Wed, 19 Feb 2025 12:45:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739965560; bh=VlV8WyFDoIICqjbwQwi/nMjALKnR7Xan0VUKAoqPBWE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=LVpI5S7pK0XHgfI0Bud1a1KzP0hBaVIT+rg9TywQGaTDXZYOR+Wp6xyplbXbDvHaJ fH+38dsd3cJ2jQSfQzJ5NmpGOpXm54TCKcmBj03rf4j77j5Lwo0ooKRoYXfvCAs+cG 7vXh/G5pCN2VX+d7Wy+HYz70DTISiebgLX4PT0NA= From: Jai Luthra Date: Wed, 19 Feb 2025 17:16:44 +0530 Subject: [PATCH 2/3] media: i2c: imx219: Simplify binning mode Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-imx219_fixes_v2-v1-2-0e3f5dd9b024@ideasonboard.com> References: <20250219-imx219_fixes_v2-v1-0-0e3f5dd9b024@ideasonboard.com> In-Reply-To: <20250219-imx219_fixes_v2-v1-0-0e3f5dd9b024@ideasonboard.com> To: Sakari Ailus , Dave Stevenson , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jai Luthra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4441; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=VlV8WyFDoIICqjbwQwi/nMjALKnR7Xan0VUKAoqPBWE=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBntcS2R7N2vZJ3Ej9O2E4jvpNldmtt4MrdQwwzF yvfAwQGatiJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ7XEtgAKCRBD3pH5JJpx RbRZEAC1vjnpW+gpW4E8mmm1kR7yRMJYX1mtXU4der2QAFz73kyyO0XJqGJmWmQeKMDdXnXk9XE 3qs947Pb1sNlcprR+S6/DY75tnmp+XXjxyy89Y78ROsMF4EZqroZfK5OANuKgt3AaYErkHrcrJp tTMagj4hnKk6WGMUo5dJUn1YAXvH6IE9DXWS36PU8SVg11wjkGcplKmISWKeZFTt4xIqS06JgMo Grcm2K8PaeQnlypn5q9N6eYT9TEj7sYx5C3zjWXCT6rK0bK0CKbG2oRFKjvRHt/L5LcdycuyvHR iyRZzwXzFRuZ3hIuvK6/+4Wj5GCmv/wrX1W1lxcjmTE076j3Fiftx2VMignwRzYEC87Osomb8wN DHpL0yBjeMIO6QELQ9gtnwDqF083hAoh9wLTB6OTHqTfpoG2IjN8aaXjWDXHhHqDxv+3ix02YP9 y0YBgstd5GhBcKCqZBy6lKldLfvSrU9ZbLYIvUzLFuTKDmdpKFB/EYpjODqcTBoSjOtL1d0PRan Cm42XGw3YMzzFPsDN5+2sDZ/e6lzG//fr8cCxX8B2+E6Jiew9YTIV+tzKZO88WZBgG2u+XW0TM7 +M4Yta4I6wBZFPy0PJWq8MjHw4Rb//wPFBltktxrITDGRYgih41iAM5VGsQr76SoKAaI2qKMp9W HoPNGEelIAA346g== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 The imx219_get_binning() function currently returns two separate pieces of information, the return value is the binning mode enum, and the bin_h and bin_v references are updated with whether to perform binning in horizontal and vertical dimensions. It is simpler to combine both of these pieces of information, and directly update the bin_h and bin_v references with the register value that we will write to the sensor, which includes if the binning is digital or analog mode, thus allowing us to remove the superfluous binning mode enum. This is only a style change for the driver, with no functionality updated. Suggested-by: Jacopo Mondi Link: https://lore.kernel.org/linux-media/ubuuob7mb3o5bxoumrxv4rufutgk3lvdmdery6d3bfc6rytfti@tcchhlechzzp/ Signed-off-by: Jai Luthra Reviewed-by: Jacopo Mondi --- drivers/media/i2c/imx219.c | 55 +++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c index 6e51a7af5e2a05cacefb201d96a9fbdc349f17d8..f02732d8fa95de0a295f247d4f0b60017dbb2ed2 100644 --- a/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c @@ -146,12 +146,6 @@ #define IMX219_PIXEL_ARRAY_WIDTH 3280U #define IMX219_PIXEL_ARRAY_HEIGHT 2464U -enum binning_mode { - BINNING_NONE = IMX219_BINNING_NONE, - BINNING_X2 = IMX219_BINNING_X2, - BINNING_ANALOG_X2 = IMX219_BINNING_X2_ANALOG, -}; - /* Mode : resolution and related config&values */ struct imx219_mode { /* Frame width */ @@ -406,39 +400,43 @@ static u32 imx219_get_format_bpp(const struct v4l2_mbus_framefmt *format) } } -static enum binning_mode imx219_get_binning(struct imx219 *imx219, u8 *bin_h, - u8 *bin_v) +static void imx219_get_binning(struct imx219 *imx219, u8 *bin_h, u8 *bin_v) { struct v4l2_subdev_state *state = v4l2_subdev_get_locked_active_state(&imx219->sd); const struct v4l2_mbus_framefmt *format = v4l2_subdev_state_get_format(state, 0); const struct v4l2_rect *crop = v4l2_subdev_state_get_crop(state, 0); + u32 hbin = crop->width / format->width; + u32 vbin = crop->height / format->height; - *bin_h = crop->width / format->width; - *bin_v = crop->height / format->height; + *bin_h = IMX219_BINNING_NONE; + *bin_v = IMX219_BINNING_NONE; - if (*bin_h == 2 && *bin_v == 2) - return BINNING_ANALOG_X2; - else if (*bin_h == 2 || *bin_v == 2) - /* - * Don't use analog binning if only one dimension - * is binned, as it crops the other dimension - */ - return BINNING_X2; - else - return BINNING_NONE; + /* + * Use analog binning only if both dimensions are binned, as it crops + * the other dimension. + */ + if (hbin == 2 && vbin == 2) { + *bin_h = IMX219_BINNING_X2_ANALOG; + *bin_v = IMX219_BINNING_X2_ANALOG; + + return; + } + + if (hbin == 2) + *bin_h = IMX219_BINNING_X2; + if (vbin == 2) + *bin_v = IMX219_BINNING_X2; } static inline u32 imx219_get_rate_factor(struct imx219 *imx219) { u8 bin_h, bin_v; - enum binning_mode binning = imx219_get_binning(imx219, &bin_h, &bin_v); - if (binning == BINNING_ANALOG_X2) - return 2; + imx219_get_binning(imx219, &bin_h, &bin_v); - return 1; + return (bin_h & bin_v) == IMX219_BINNING_X2_ANALOG ? 2 : 1; } /* ----------------------------------------------------------------------------- @@ -674,7 +672,6 @@ static int imx219_set_framefmt(struct imx219 *imx219, { const struct v4l2_mbus_framefmt *format; const struct v4l2_rect *crop; - enum binning_mode binning; u8 bin_h, bin_v; u32 bpp; int ret = 0; @@ -692,11 +689,9 @@ static int imx219_set_framefmt(struct imx219 *imx219, cci_write(imx219->regmap, IMX219_REG_Y_ADD_END_A, crop->top - IMX219_PIXEL_ARRAY_TOP + crop->height - 1, &ret); - binning = imx219_get_binning(imx219, &bin_h, &bin_v); - cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_H, - (bin_h == 2) ? binning : BINNING_NONE, &ret); - cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_V, - (bin_v == 2) ? binning : BINNING_NONE, &ret); + imx219_get_binning(imx219, &bin_h, &bin_v); + cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_H, bin_h, &ret); + cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_V, bin_v, &ret); cci_write(imx219->regmap, IMX219_REG_X_OUTPUT_SIZE, format->width, &ret); From patchwork Wed Feb 19 11:46:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 866978 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E59101DF730; Wed, 19 Feb 2025 11:47:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739965653; cv=none; b=hAgBKmlIjEsDeimVXg5KwlrQ7mIB0QRN7ic4QOX9uhero0AE42IDNTSJAx/W6NLKXkeYqi1jcJKt2j2O+Q47V1pta1vbh5wWj4OmDwhUHHfca/I36ei2nKTMoYi3YlybIzztVwVwyFS1kFbE76tp8SJdh3YFZi6RBYQsxNz/+Bo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739965653; c=relaxed/simple; bh=4F4BQbwhZ42l1hicc/rXsFLMooM0Yyz+PO4b6Gl8KkM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N04e53UJOWFlOpZR2EdPM4r4FKNEQwh/cGfEddZYxz3axhTcq4oaSvNbaUDk/2yl+En9HoPPHFkqO2uDNex16Pukzc9wfavYIcaq5rOul8t51rBN1E4+ErepvC5sYin9hleeO5rDmfD08ExPN5HXI6E8EFz0lOsxbyKYZDtbdeo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=dLngnWDT; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="dLngnWDT" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c30:4abb:6de5:9248:813e:8db3]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9506E169; Wed, 19 Feb 2025 12:46:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739965568; bh=4F4BQbwhZ42l1hicc/rXsFLMooM0Yyz+PO4b6Gl8KkM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dLngnWDT2KtTfOleSMZsTTkgKtZvtHz5QvJA2PwhbLbS12wixGtAZW7plzORvawCj c3xql2gQWWAp0cXP7hoIQm2TWuUY3ulzUpG8B0bFbo2+2YvT+zKkfbO0GBcz7BcBIG EBtnZ56VLZAGEZDPc0vgk59aKvwUnYYdIrYdxgNc= From: Jai Luthra Date: Wed, 19 Feb 2025 17:16:45 +0530 Subject: [PATCH 3/3] media: i2c: imx219: Use subdev state to calculate binning and pixelrate Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-imx219_fixes_v2-v1-3-0e3f5dd9b024@ideasonboard.com> References: <20250219-imx219_fixes_v2-v1-0-0e3f5dd9b024@ideasonboard.com> In-Reply-To: <20250219-imx219_fixes_v2-v1-0-0e3f5dd9b024@ideasonboard.com> To: Sakari Ailus , Dave Stevenson , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jai Luthra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2950; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=4F4BQbwhZ42l1hicc/rXsFLMooM0Yyz+PO4b6Gl8KkM=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBntcS25HVKh8yh9wn7Cve+Ujd9p3brD8cupdGR0 0ZhU4L4M/mJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ7XEtgAKCRBD3pH5JJpx RS4wEACd3PVfkrQM1pon3+eOtOBmLWQxoJ2LD6hErMtOghdW76jFmhyRNZFPS0+Yg41vB1db6Wj litNPIiAo8JucJDmIh/Lk7zd5cf1h7/UbK+UczBNZwp+bvJIm7nweIHFGj5WOFhjezP2UQ1X5qT nzRMBETFtlPciOhoZhPS4nf5Uf985EfF1BDEFol2fg/JXP6R5ZzcqlJeZ1rrXSu3iStRiVhxdvX 0CXlykoLPyiLK4ri65jx093Hm1u67imrpBNXopRcDDtDYAjMyunO11cc3fTIEU2ymcACUhG3LzR Pkkq0lwVyWaif6gNjQw5REI8IwTgN7sqJiJVKJUfvv2SDQFBn40k76C3RBCQ+tnGiBFh8BAlho1 1Yq8uiMLn65SOy0X9G7Wc5ctKRNNPjzhJqI2De+k5biTRHwMhQisTbXkYPCd33Yc3WvUkwWEmbf H9XICemEfeJhtDVKuerT0iA9RkbrFRC6LX5aNnLEcq+bwMxWtCdkZ8EPmd8AP52WrmR25uCaE1H kwQpbxcnMd1yq7VdoYP99PghDVYfC6ZjlTTzESIQiwXYeqTOVJT1ojPQw4rzXveybOcSm3LWl7N Be83R4Aseh5UhwcK2Zh8A4SXJB4+BialR0Ns9kbNYQQgQmHVMGJA9CKrd6g2rJCH5y3lrEY3P3T lO9TYwlt3VvWKPA== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 The pixel rate and binning calculations need the format and resolution of the sensor, so pass the v4l2 subdev state directly instead of always operating on the active state. Suggested-by: Jacopo Mondi Link: https://lore.kernel.org/linux-media/sejl7xskif6rlpdsg3jhczjwe5gi6rs53ehbyka6omv2zeg7qq@4iis7i2lla5p/ Signed-off-by: Jai Luthra --- drivers/media/i2c/imx219.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c index f02732d8fa95de0a295f247d4f0b60017dbb2ed2..0adfe8e5775ba6661f7d06fedfd920d91c24cba5 100644 --- a/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c @@ -400,10 +400,9 @@ static u32 imx219_get_format_bpp(const struct v4l2_mbus_framefmt *format) } } -static void imx219_get_binning(struct imx219 *imx219, u8 *bin_h, u8 *bin_v) +static void imx219_get_binning(struct v4l2_subdev_state *state, u8 *bin_h, + u8 *bin_v) { - struct v4l2_subdev_state *state = - v4l2_subdev_get_locked_active_state(&imx219->sd); const struct v4l2_mbus_framefmt *format = v4l2_subdev_state_get_format(state, 0); const struct v4l2_rect *crop = v4l2_subdev_state_get_crop(state, 0); @@ -430,11 +429,11 @@ static void imx219_get_binning(struct imx219 *imx219, u8 *bin_h, u8 *bin_v) *bin_v = IMX219_BINNING_X2; } -static inline u32 imx219_get_rate_factor(struct imx219 *imx219) +static inline u32 imx219_get_rate_factor(struct v4l2_subdev_state *state) { u8 bin_h, bin_v; - imx219_get_binning(imx219, &bin_h, &bin_v); + imx219_get_binning(state, &bin_h, &bin_v); return (bin_h & bin_v) == IMX219_BINNING_X2_ANALOG ? 2 : 1; } @@ -455,7 +454,7 @@ static int imx219_set_ctrl(struct v4l2_ctrl *ctrl) state = v4l2_subdev_get_locked_active_state(&imx219->sd); format = v4l2_subdev_state_get_format(state, 0); - rate_factor = imx219_get_rate_factor(imx219); + rate_factor = imx219_get_rate_factor(state); if (ctrl->id == V4L2_CID_VBLANK) { int exposure_max, exposure_def; @@ -689,7 +688,7 @@ static int imx219_set_framefmt(struct imx219 *imx219, cci_write(imx219->regmap, IMX219_REG_Y_ADD_END_A, crop->top - IMX219_PIXEL_ARRAY_TOP + crop->height - 1, &ret); - imx219_get_binning(imx219, &bin_h, &bin_v); + imx219_get_binning(state, &bin_h, &bin_v); cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_H, bin_h, &ret); cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_V, bin_v, &ret); @@ -937,7 +936,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd, /* Scale the pixel rate based on the mode specific factor */ pixel_rate = imx219_get_pixel_rate(imx219) * - imx219_get_rate_factor(imx219); + imx219_get_rate_factor(state); __v4l2_ctrl_modify_range(imx219->pixel_rate, pixel_rate, pixel_rate, 1, pixel_rate); }