From nobody Sun Sep 27 02:52:01 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 ABF633F2118; Thu, 27 Aug 2026 09:26:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787822814; cv=none; b=XAQGSJYDSzlPPQznk1oHFa0q+iKnw0IKYGCVFWEm/IZ45SG1JFkhB+/kcawMhgwEPgzVei+Gqh88h1mUcilpevOZ2Y4/XUCfQMYVP88RXzRhhtM1PgJYl8ZtPFUQazOtvNOO1A2NtZG3k77LU404VOf07Y3p8Txig7A7oF8XcuU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787822814; c=relaxed/simple; bh=jLzvZjqDnxlyZd2/yg5KilJ6gkcPsBkyU3U//aFt+Z0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=d9qriEQnd9BK583qzArjHSl34D+fbztDFkF9GH4PMBaaaU7uskg76ESkb7nTvw6RGIkilBzlxbg5Ij1rFH/d0mly7F9TNj10M0Vx2l4wmpenopSzH6tQujj5O0XxseMlGsZHTcTkimkdFivF9pDsu9iL9D0szGLERLjJTW7D1iA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZWY6CLF4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZWY6CLF4" Received: by smtp.kernel.org (Postfix) with ESMTPS id 2D71DC19425; Thu, 27 Aug 2026 09:26:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1787822814; bh=jLzvZjqDnxlyZd2/yg5KilJ6gkcPsBkyU3U//aFt+Z0=; h=From:Date:Subject:To:Cc:Reply-To:From; b=ZWY6CLF4rTX2tZ1AomGcBeZkxS/t5sE1A0ly+VRHUkUUZSBj84Vux+n5gO7OU/QU6 unsKJ3x8EmBxpMZ1ZfBWNryc/R2Rb4zHbaeHuOAmKAjKScg/W9z6gw0nvIkGzIHkMc MZIFptOZM3EA8cs9o7VE9dIOWGyikFoFc9FHftrcUm56j4MVe17Pj/Esu/kl3gcraj /L04X9d1iQwe4M8n0y+G4ntvdEOfHbtMbluemLO8BeJAvscIWpfjLkABwPom8Pb2Ke niJdzpH4lwxkzNvGgFuhayUFMbtVa1hvgpaHNuzklv3Me4e160cMSVu24iOKkT8eAP 886yOOM3MxqLA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B084C61DC7; Thu, 27 Aug 2026 09:26:54 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 27 Aug 2026 11:26:53 +0200 Subject: [PATCH v2] media: imx355: reuse existing CCS defines Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-imx355-ccsify-v2-1-3a97bc708315@ixit.cz> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/3WNQQ6CMBBFr0JmbU1bLKAr72FYyDiVMRFMWwlIe ndbXLt8yfvvr+DJMXk4FSs4mtjzOCTQuwKwvw53EnxLDFrqSjbqKPg5l8YIRM92EY2psDHS1MY qSJuXI8vz1ru0P/bv7kEYciQbPfswumU7nFT2/rUnJZSQXYVk65rKgzzzzGGPH2hjjF+O9wQSu gAAAA== X-Change-ID: 20260819-imx355-ccsify-856c850575f1 To: Sakari Ailus , Dave Stevenson , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10030; i=david@ixit.cz; h=from:subject:message-id; bh=8fjmIEf2Uou5I7hSyXj2MRgsHK14tG7lVR5oqFFpIqQ=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqkALdaU7SCL9MD2CLhpq7GVVTKytztNX37egim 9gfQ5I8Ra+JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapAC3QAKCRBgAj/E00kg civREADP0/akWHg818ryfVEvANU5flZiBcQagxj5ESZ0pvy8+1sEi6Hka/aUUrj0Un6SO/32xcQ fyFHIv5g5OrQKCpIy/0q4ro6AclzE9iu7R3TGAACipS4DXcFm8Z6XP5SDikO47kIRDOJe+26ai0 5iQcKkQsvXj9iJb6mc/mdNDKQekGMnmVQ45x8EYI3rfiZ+H3cjWNbSOFyHkzUXL9B8IGRkm6+kY RezZxNT2gxHmHQW8+l44SILcJVLIrl4zAmm0Bl06ysMnTJnZ50n31FaMcg4mldUjkNAZFDOpZdq EMst8ev6O/pp+XpgSLlyavKZlqsQyaZGcHrHWM8U2CKqkki8NoooVOU+kIfVacEfsOH3ivybDJm C29JH3BmIa+ROq/IijFZkXwiDHiqG7Xa75LygU8smIY1NVK+JomSj7W+dHt88haqtagKhyZbHp7 cWuNnKCYJS4cGtxKOM+Q9lvzQdBjjl7n6xSMNaKj/1e6oel92AtW7WPuuNEggMdsXWgkac38Inq 2q9NKWuRGFYC8PU/pBN6vaKrxNVPwPn/k1E8ErZ3vYIjC5QuWIMv9M3JrqV6Cy3k/jtTsz6TEuv MHFvMh4xoosKFv+7s34g9WUWfjFVGPnKx2mmbA0UMnt7jiGOHeKSn/j4cvMD3/FR8wi+2m5cdCi us5zaHndb613qgw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg The driver may not be MIPI CCS compliant, but does use same address and often set same values as compliant drivers. Do not redefine registers we already know and are standard. No functional changes. Signed-off-by: David Heidelberg Reviewed-by: Dave Stevenson Reviewed-by: Jai Luthra --- Changes in v2: - Replaced all occurences with CCS ones. - Link to v1: https://patch.msgid.link/20260819-imx355-ccsify-v1-1-0b6cef77= e340@ixit.cz --- drivers/media/i2c/imx355.c | 84 ++++++++++++++----------------------------= ---- 1 file changed, 25 insertions(+), 59 deletions(-) diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c index 8eb8588cb71bb..2c845b7b3df4f 100644 --- a/drivers/media/i2c/imx355.c +++ b/drivers/media/i2c/imx355.c @@ -14,89 +14,55 @@ #include =20 #include #include #include #include #include =20 -#define IMX355_REG_MODE_SELECT CCI_REG8(0x0100) -#define IMX355_MODE_STANDBY 0x00 -#define IMX355_MODE_STREAMING 0x01 +#include "ccs/ccs-regs.h" =20 -/* Chip ID */ -#define IMX355_REG_CHIP_ID CCI_REG16(0x0016) #define IMX355_CHIP_ID 0x0355 =20 -#define IMX355_REG_LANE_SEL CCI_REG8(0x0114) - /* PLL registers that depend on the external clock frequency */ -#define IMX355_REG_EXTCLK_FREQ CCI_REG16(0x0136) #define IMX355_REG_PLL_OP_PREDIV CCI_REG8(0x030d) -#define IMX355_REG_PLL_OP_MUL CCI_REG16(0x030e) #define IMX355_REG_PLL_IVT_PCK_DIV CCI_REG8(0x0301) #define IMX355_REG_PLL_IVT_SYSCK_DIV CCI_REG8(0x0303) #define IMX355_PLL_OP_PREDIV 2 #define IMX355_PLL_IVT_PCK_DIV 5 =20 /* V_TIMING internal */ -#define IMX355_REG_FLL CCI_REG16(0x0340) #define IMX355_FLL_MAX 0xffff #define IMX355_VBLANK_MIN 20 =20 -#define IMX355_REG_LLP CCI_REG16(0x0342) #define IMX355_LLP_MAX 0xffff =20 -#define IMX355_REG_X_ADD_START CCI_REG16(0x0344) -#define IMX355_REG_Y_ADD_START CCI_REG16(0x0346) -#define IMX355_REG_X_ADD_END CCI_REG16(0x0348) -#define IMX355_REG_Y_ADD_END CCI_REG16(0x034a) -#define IMX355_REG_X_OUT_SIZE CCI_REG16(0x034c) -#define IMX355_REG_Y_OUT_SIZE CCI_REG16(0x034e) - /* Exposure control */ -#define IMX355_REG_EXPOSURE CCI_REG16(0x0202) #define IMX355_EXPOSURE_MIN 1 #define IMX355_EXPOSURE_STEP 1 #define IMX355_EXPOSURE_DEFAULT 0x0282 #define IMX355_EXPOSURE_OFFSET 10 =20 /* Analog gain control */ -#define IMX355_REG_ANALOG_GAIN CCI_REG16(0x0204) #define IMX355_ANA_GAIN_MIN 0 #define IMX355_ANA_GAIN_MAX 960 #define IMX355_ANA_GAIN_STEP 1 #define IMX355_ANA_GAIN_DEFAULT 0 =20 /* Digital gain control */ #define IMX355_REG_DPGA_USE_GLOBAL_GAIN CCI_REG8(0x3070) -#define IMX355_REG_DIG_GAIN_GLOBAL CCI_REG16(0x020e) #define IMX355_DGTL_GAIN_MIN 256 #define IMX355_DGTL_GAIN_MAX 4095 #define IMX355_DGTL_GAIN_STEP 1 #define IMX355_DGTL_GAIN_DEFAULT 256 =20 -/* Test Pattern Control */ -#define IMX355_REG_TEST_PATTERN CCI_REG16(0x0600) -#define IMX355_TEST_PATTERN_DISABLED 0 -#define IMX355_TEST_PATTERN_SOLID_COLOR 1 -#define IMX355_TEST_PATTERN_COLOR_BARS 2 -#define IMX355_TEST_PATTERN_GRAY_COLOR_BARS 3 -#define IMX355_TEST_PATTERN_PN9 4 - +/* Link rate register: 16-bit wide, unlike the CCS 32-bit one */ #define IMX355_REG_REQ_LINK_BIT_RATE CCI_REG16(0x0820) =20 -#define IMX355_REG_BINNING_MODE CCI_REG8(0x0900) -#define IMX355_REG_BINNING_TYPE CCI_REG8(0x0901) -#define IMX355_REG_BINNING_WEIGHTING CCI_REG8(0x0902) - -/* Flip Control */ -#define IMX355_REG_ORIENTATION CCI_REG8(0x0101) - #define IMX355_PIXEL_ARRAY_TOP 0 #define IMX355_PIXEL_ARRAY_LEFT 0 #define IMX355_PIXEL_ARRAY_WIDTH 3280 #define IMX355_PIXEL_ARRAY_HEIGHT 2464 =20 struct imx355_reg_list { u32 num_of_regs; const struct cci_reg_sequence *regs; @@ -616,39 +582,39 @@ static int imx355_set_ctrl(struct v4l2_ctrl *ctrl) * when power is up for streaming */ if (!pm_runtime_get_if_in_use(imx355->dev)) return 0; =20 switch (ctrl->id) { case V4L2_CID_ANALOGUE_GAIN: /* Analog gain =3D 1024/(1024 - ctrl->val) times */ - ret =3D cci_write(imx355->regmap, IMX355_REG_ANALOG_GAIN, + ret =3D cci_write(imx355->regmap, CCS_R_ANALOG_GAIN_CODE_GLOBAL, ctrl->val, NULL); break; case V4L2_CID_DIGITAL_GAIN: - ret =3D cci_write(imx355->regmap, IMX355_REG_DIG_GAIN_GLOBAL, + ret =3D cci_write(imx355->regmap, CCS_R_DIGITAL_GAIN_GLOBAL, ctrl->val, NULL); break; case V4L2_CID_EXPOSURE: - ret =3D cci_write(imx355->regmap, IMX355_REG_EXPOSURE, + ret =3D cci_write(imx355->regmap, CCS_R_COARSE_INTEGRATION_TIME, ctrl->val, NULL); break; case V4L2_CID_VBLANK: /* Update FLL that meets expected vertical blanking */ - ret =3D cci_write(imx355->regmap, IMX355_REG_FLL, + ret =3D cci_write(imx355->regmap, CCS_R_FRAME_LENGTH_LINES, format->height + ctrl->val, NULL); break; case V4L2_CID_TEST_PATTERN: - ret =3D cci_write(imx355->regmap, IMX355_REG_TEST_PATTERN, + ret =3D cci_write(imx355->regmap, CCS_R_TEST_PATTERN_MODE, ctrl->val, NULL); break; case V4L2_CID_HFLIP: case V4L2_CID_VFLIP: - ret =3D cci_write(imx355->regmap, IMX355_REG_ORIENTATION, + ret =3D cci_write(imx355->regmap, CCS_R_IMAGE_ORIENTATION, imx355->hflip->val | imx355->vflip->val << 1, NULL); break; default: ret =3D -EINVAL; dev_info(imx355->dev, "ctrl(id:0x%x,val:0x%x) is not handled", ctrl->id, ctrl->val); break; @@ -823,75 +789,75 @@ static int imx355_start_streaming(struct imx355 *imx3= 55) crop =3D v4l2_subdev_state_get_crop(state, 0); mode =3D v4l2_find_nearest_size(supported_modes, ARRAY_SIZE(supported_modes), width, height, fmt->width, fmt->height); cci_multi_reg_write(imx355->regmap, mode->reg_list.regs, mode->reg_list.num_of_regs, &ret); =20 /* Set readout crop and size registers */ - cci_write(imx355->regmap, IMX355_REG_X_ADD_START, crop->left, + cci_write(imx355->regmap, CCS_R_X_ADDR_START, crop->left, &ret); - cci_write(imx355->regmap, IMX355_REG_Y_ADD_START, crop->top, &ret); - cci_write(imx355->regmap, IMX355_REG_X_ADD_END, + cci_write(imx355->regmap, CCS_R_Y_ADDR_START, crop->top, &ret); + cci_write(imx355->regmap, CCS_R_X_ADDR_END, crop->width + crop->left - 1, &ret); - cci_write(imx355->regmap, IMX355_REG_Y_ADD_END, + cci_write(imx355->regmap, CCS_R_Y_ADDR_END, crop->height + crop->top - 1, &ret); - cci_write(imx355->regmap, IMX355_REG_X_OUT_SIZE, fmt->width, &ret); - cci_write(imx355->regmap, IMX355_REG_Y_OUT_SIZE, fmt->height, &ret); + cci_write(imx355->regmap, CCS_R_X_OUTPUT_SIZE, fmt->width, &ret); + cci_write(imx355->regmap, CCS_R_Y_OUTPUT_SIZE, fmt->height, &ret); =20 binning_mode =3D ((crop->width / fmt->width) << 4) | (crop->height / fmt->height); - cci_write(imx355->regmap, IMX355_REG_BINNING_MODE, + cci_write(imx355->regmap, CCS_R_BINNING_MODE, binning_mode =3D=3D 0x11 ? 0x00 : 0x01, &ret); - cci_write(imx355->regmap, IMX355_REG_BINNING_TYPE, binning_mode, &ret); - cci_write(imx355->regmap, IMX355_REG_BINNING_WEIGHTING, 0x00, &ret); + cci_write(imx355->regmap, CCS_R_BINNING_TYPE, binning_mode, &ret); + cci_write(imx355->regmap, CCS_R_BINNING_WEIGHTING, 0x00, &ret); =20 /* Set PLL registers for the external clock frequency */ - cci_write(imx355->regmap, IMX355_REG_EXTCLK_FREQ, + cci_write(imx355->regmap, CCS_R_EXTCLK_FREQUENCY_MHZ, imx355->clk_params->extclk_freq, &ret); - cci_write(imx355->regmap, IMX355_REG_PLL_OP_MUL, + cci_write(imx355->regmap, CCS_R_OP_PLL_MULTIPLIER, imx355->clk_params->pll_op_mpy[lane_idx], &ret); cci_write(imx355->regmap, IMX355_REG_PLL_OP_PREDIV, imx355->clk_params->pll_op_prediv[lane_idx], &ret); cci_write(imx355->regmap, IMX355_REG_PLL_IVT_SYSCK_DIV, lane_idx ? 2 : 1, &ret); =20 /* Set MIPI configuration */ - cci_write(imx355->regmap, IMX355_REG_LANE_SEL, + cci_write(imx355->regmap, CCS_R_CSI_LANE_MODE, imx355->hwcfg->num_lanes - 1, &ret); =20 link_bitrate =3D imx355->link_freq->qmenu_int[imx355->link_freq->val] * imx355->hwcfg->num_lanes * 2; do_div(link_bitrate, 1000000); cci_write(imx355->regmap, IMX355_REG_REQ_LINK_BIT_RATE, link_bitrate, &ret); =20 /* set digital gain control to all color mode */ cci_write(imx355->regmap, IMX355_REG_DPGA_USE_GLOBAL_GAIN, 1, &ret); =20 /* set line length */ - cci_write(imx355->regmap, IMX355_REG_LLP, + cci_write(imx355->regmap, CCS_R_LINE_LENGTH_PCK, imx355->hblank->val + fmt->width, &ret); =20 /* Apply customized values from user */ if (!ret) ret =3D __v4l2_ctrl_handler_setup(imx355->sd.ctrl_handler); =20 - cci_write(imx355->regmap, IMX355_REG_MODE_SELECT, IMX355_MODE_STREAMING, + cci_write(imx355->regmap, CCS_R_MODE_SELECT, CCS_MODE_SELECT_STREAMING, &ret); =20 return ret; } =20 /* Stop streaming */ static int imx355_stop_streaming(struct imx355 *imx355) { - return cci_write(imx355->regmap, IMX355_REG_MODE_SELECT, - IMX355_MODE_STANDBY, NULL); + return cci_write(imx355->regmap, CCS_R_MODE_SELECT, + CCS_MODE_SELECT_SOFTWARE_STANDBY, NULL); } =20 static int imx355_set_stream(struct v4l2_subdev *sd, int enable) { struct imx355 *imx355 =3D to_imx355(sd); struct v4l2_subdev_state *state; int ret =3D 0; =20 @@ -931,17 +897,17 @@ static int imx355_set_stream(struct v4l2_subdev *sd, = int enable) } =20 /* Verify chip ID */ static int imx355_identify_module(struct imx355 *imx355) { int ret; u64 val; =20 - ret =3D cci_read(imx355->regmap, IMX355_REG_CHIP_ID, &val, NULL); + ret =3D cci_read(imx355->regmap, CCS_R_SENSOR_MODEL_ID, &val, NULL); if (ret) return ret; =20 if (val !=3D IMX355_CHIP_ID) { dev_err(imx355->dev, "chip id mismatch: %x!=3D%llx", IMX355_CHIP_ID, val); return -EIO; } --- base-commit: 5453bc3279e9f8578ac3e534d476240e40c879e1 change-id: 20260819-imx355-ccsify-856c850575f1 Best regards, -- =20 David Heidelberg