From nobody Tue Aug 25 18:56:40 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF858478E51 for ; Wed, 8 Jul 2026 14:49:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783522167; cv=none; b=Ezd0wa81TlsYsD3iMa4mBZK0yRZ3L/pZNcM1KUTr0OvGcYUtP8eAWirKuL4GbPPSOC4qfe6DY/DqaDOLgrHD5Ss9WyfDO1nGnp5OcpbjTn6m5/ewMekThr8ILQ45u0qyIf6LhpovqFAjq7Ed5cLPwvJNmdRiqdBE4+mDYrrxX7g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783522167; c=relaxed/simple; bh=UElEKgx5eHfzk8J2KAJPSWZW6uMMfWtwZrksO9N6Tgw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mZMhH80JdeGfnT3cyEZxto9yr6StxzahoXiJ9UFYUUUA7itkeKa5xR6wdMsmXjTJ6HtxPsXN4CMHPCXsFx6TUt2+Phx9V4dqDspFyZ2LploZ9QUKqtAldKTxvFVWbiYqrd5UTEXysl53tddb45bew4SyL/jtc1fl+BB1b7BSWVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=raspberrypi.com; spf=pass smtp.mailfrom=raspberrypi.com; dkim=pass (2048-bit key) header.d=raspberrypi.com header.i=@raspberrypi.com header.b=g+jz2P4B; arc=none smtp.client-ip=209.85.128.45 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) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="g+jz2P4B" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-493c59f740cso5679455e9.3 for ; Wed, 08 Jul 2026 07:49:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1783522158; x=1784126958; 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=8MdvxgOZXywHJMIvMKFBTdmdPZacbqOOXj1fqUFx+10=; b=g+jz2P4B5ayBWbaYFt/0zbbaswROo/uLmAM48UQ4DTTRh70I0HHE9MhYOplG1iPhGw AXTDLqOEddI0iRn+Nesl3RGJIO33sFZjW80/mhe8Uq5LA+qlcYx8MDxDbyYdrLCcyJTG v9SrjaOsujRmXuYsb6lN4gNZYsURrK77i3+fi3/byAqhwnnYWqgRO9D2vnyy+XI4pr2i +DaaqTC9ui1xlbcLv34X2680FJU9LtDGHRAv8DNEp9/AqHLFru2cDtvB41FyBXYbu8Fw /NtpsOXeGSgAFc3yLGFqabvRUeRw1CU9nye8cOpg5ugWxoXorH0Q7YK9bPH0omu2IiZq I0vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783522158; x=1784126958; 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=8MdvxgOZXywHJMIvMKFBTdmdPZacbqOOXj1fqUFx+10=; b=jxE+tshpXNfg7ISjn6UgCf1WD+69vUquPQBf5lSqA836ok1GEmZFbNyILaUKc6RDjV uWmzONnK8DkhYx68T94rEzl1WIFSBnO7cad4VV+TvEhOTC699CKJmRdDaamizF0Kp6uj LHb+Hqg7DQOufSE8UWb1J2Vn2wbOoiRQkIO6G/P7GIcnqGlRG7YxHTXr7BgQ+4nfQQNj 5RDjyJiAhBp1/lUPkf/LwmAa0SM0yAguSVHHgNuBDkq5dFWUek4fgxT3ojKLzgPd1RbG ykOQvVdglGL1NvuqVvOJ85DS3WC9oQmcpS6TU9xgyjH7K0Xsz3NAT1SPi8dcRS/AlaEz S82Q== X-Forwarded-Encrypted: i=1; AHgh+Rr+46hPNduUKerMXbgI9gWQxIQQF3VYM/F0yLvVSk0TlGiHiLbD/rzTNLMB1oYVYmzbR0lf2X5s5VwE8mQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxOOZSC2DusXETbZNFfikF7v62U0HxVBjIpEgnan2u0kxwmOQqA /+tfcg2wSuwzIJ2IiFAvIrTNVi9+jrAhY2iMFGITupASfMedlj1h79PCfRA+Lu5QiZM= X-Gm-Gg: AfdE7ckDZYwIKzzSE0KL2dbyQfgd7VYJrBlQ28jEv7quRyzgwKWTL3opapbjRiciCd+ 5xnG1nEuvn4aX9xNo5MbKnjnfnwvnR4VotwAx457rVY+NMfJvVMRUWX3JGBH/KABUVNz7BJhVZG CYKQoEw8pEeWG1J18l5XjoUPASW6qzrWQD6oJ88DubTVcgiZE1LoIwmWL+AzY3M0Ylkq6KLDtiU 5cpkdmSnCVNE7In6nYPBhSVKu05za3UyKI6EFhjLn0vqLcAsGuaWnj42ZvDos706+FBvqD6tG1T Ay1rpBdIMiJgRXUxf3H1OYkp+UwPxkQQ/C7UtXJPChOhpLcxa8KENSbCcqSTtsX9W2oBOzfGAM5 V8uk6/Vr3fO60ru86CEoZNkMiIUmQi+aYB+phWsYBP50KfRj96qsv2CAyUqrbjsBWWXHHpqqmv7 IY+R1fjpJ+KF9FADVwKUPjhaIcIPtEomJCiTwYahh9kRsh4mR1LdMB7YiMpyVaVo8a22fm7xhMs VA= X-Received: by 2002:a05:600c:3b10:b0:493:a7fd:15d6 with SMTP id 5b1f17b1804b1-493e689b2d8mr34274405e9.9.1783522158200; Wed, 08 Jul 2026 07:49:18 -0700 (PDT) Received: from [127.0.1.1] ([2a00:1098:3142:e::8]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-493e0fbd355sm135363315e9.13.2026.07.08.07.49.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jul 2026 07:49:17 -0700 (PDT) From: Dave Stevenson Date: Wed, 08 Jul 2026 15:48:47 +0100 Subject: [PATCH v3 11/20] media: imx355: Add support for get_selection 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: <20260708-media-imx355-v3-11-9df386a623d7@raspberrypi.com> References: <20260708-media-imx355-v3-0-9df386a623d7@raspberrypi.com> In-Reply-To: <20260708-media-imx355-v3-0-9df386a623d7@raspberrypi.com> To: Sakari Ailus , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Richard Acayan Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, David Heidelberg , Jacopo Mondi , devicetree@vger.kernel.org, Dave Stevenson X-Mailer: b4 0.14.1 Provide all the cropping information via get_selection. Signed-off-by: Dave Stevenson --- drivers/media/i2c/imx355.c | 59 ++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 59 insertions(+) diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c index c6f27cf269b4..ee1f41a66a0b 100644 --- a/drivers/media/i2c/imx355.c +++ b/drivers/media/i2c/imx355.c @@ -86,6 +86,11 @@ /* number of data lanes */ #define IMX355_DATA_LANES 4 =20 +#define IMX355_PIXEL_ARRAY_TOP 0 +#define IMX355_PIXEL_ARRAY_LEFT 0 +#define IMX355_PIXEL_ARRAY_WIDTH 3280 +#define IMX355_PIXEL_ARRAY_HEIGHT 2464 + struct imx355_reg { u16 address; u8 val; @@ -677,6 +682,7 @@ static int imx355_open(struct v4l2_subdev *sd, struct v= 4l2_subdev_fh *fh) struct imx355 *imx355 =3D to_imx355(sd); struct v4l2_mbus_framefmt *try_fmt =3D v4l2_subdev_state_get_format(fh->state, 0); + struct v4l2_rect *crop =3D v4l2_subdev_state_get_crop(fh->state, 0); =20 mutex_lock(&imx355->mutex); =20 @@ -686,6 +692,8 @@ static int imx355_open(struct v4l2_subdev *sd, struct v= 4l2_subdev_fh *fh) try_fmt->code =3D imx355_get_format_code(imx355); try_fmt->field =3D V4L2_FIELD_NONE; =20 + *crop =3D imx355->cur_mode->crop; + mutex_unlock(&imx355->mutex); =20 return 0; @@ -869,6 +877,12 @@ imx355_set_pad_format(struct v4l2_subdev *sd, if (fmt->which =3D=3D V4L2_SUBDEV_FORMAT_TRY) { framefmt =3D v4l2_subdev_state_get_format(sd_state, fmt->pad); *framefmt =3D fmt->format; + + crop =3D v4l2_subdev_state_get_crop(sd_state, 0); + crop->width =3D mode->crop.width; + crop->height =3D mode->crop.height; + crop->left =3D mode->crop.left; + crop->top =3D mode->crop.top; } else { imx355->cur_mode =3D mode; /* Update limits and set FPS to default */ @@ -892,6 +906,50 @@ imx355_set_pad_format(struct v4l2_subdev *sd, return 0; } =20 +static void +__imx355_get_pad_crop(struct imx355 *imx355, + struct v4l2_subdev_state *sd_state, unsigned int pad, + enum v4l2_subdev_format_whence which, struct v4l2_rect *r) +{ + switch (which) { + case V4L2_SUBDEV_FORMAT_TRY: + *r =3D *v4l2_subdev_state_get_crop(sd_state, pad); + break; + case V4L2_SUBDEV_FORMAT_ACTIVE: + *r =3D imx355->cur_mode->crop; + break; + } +} + +static int imx355_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +{ + switch (sel->target) { + case V4L2_SEL_TGT_CROP: { + struct imx355 *imx355 =3D to_imx355(sd); + + mutex_lock(&imx355->mutex); + __imx355_get_pad_crop(imx355, sd_state, sel->pad, sel->which, + &sel->r); + mutex_unlock(&imx355->mutex); + + return 0; + } + case V4L2_SEL_TGT_CROP_DEFAULT: + case V4L2_SEL_TGT_CROP_BOUNDS: + case V4L2_SEL_TGT_NATIVE_SIZE: + sel->r.top =3D IMX355_PIXEL_ARRAY_TOP; + sel->r.left =3D IMX355_PIXEL_ARRAY_LEFT; + sel->r.width =3D IMX355_PIXEL_ARRAY_WIDTH; + sel->r.height =3D IMX355_PIXEL_ARRAY_HEIGHT; + + return 0; + } + + return -EINVAL; +} + /* Start streaming */ static int imx355_start_streaming(struct imx355 *imx355) { @@ -1066,6 +1124,7 @@ static const struct v4l2_subdev_pad_ops imx355_pad_op= s =3D { .get_fmt =3D imx355_get_pad_format, .set_fmt =3D imx355_set_pad_format, .enum_frame_size =3D imx355_enum_frame_size, + .get_selection =3D imx355_get_selection, }; =20 static const struct v4l2_subdev_ops imx355_subdev_ops =3D { --=20 2.34.1