Received: by 2002:a05:7412:1e0b:b0:fc:a2b0:25d7 with SMTP id kr11csp996742rdb; Fri, 16 Feb 2024 01:57:53 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUZXSunacsmqyBIY7LJomKUQj7Tnk/F3EHH59tik8AM03ydIDm1zq+g+Dq+Ju2Xj8VKMeDCapLhuCjunLmAMaRse8vujlHA+JOATRle1A== X-Google-Smtp-Source: AGHT+IE8wpJhBpw2lkiHhSgKh7KdWy8ekuV3opxS6z2iJsvKSTJ+qeJIc2FVk4GanvVSJfGV+8JX X-Received: by 2002:a0d:ca8e:0:b0:604:9f75:930d with SMTP id m136-20020a0dca8e000000b006049f75930dmr4321393ywd.18.1708077472821; Fri, 16 Feb 2024 01:57:52 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708077472; cv=pass; d=google.com; s=arc-20160816; b=GI9i1BSyg1Ud2SHECDi8m2szWPoiA8SBuJEdUDK3Q5bUovRBq6WULTgSZbaTnTSPAi jWhnQS24IItK59Pzyj6IF4kwChG9QZfPU017CGrJB6ek7mvPnv3u8s+6PQvanP5RpdNx KKyudLdOXaaPKOVflbecBHH4aSZqcjY8jOtb/rKiRuynJtlCrnkxmh9lJ2gRLaPbd51D +XcVSNJYDcRrcDwGuKMvrBvX1GHOQQA7/g7MacP/0k2ujFOtxOiQStDqzVD0V0IEdBo7 eNSgK4jYXfIFTU9eq/kDEDmXA7SlKsELGirKCxT21y4kZz6I83EvEPF8D3QsdhWNCrcX /U4g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=ILGoQwo7mEDud1nZfFoWQZE6lAURn5u8MnkWiFKEz0s=; fh=umSzPHAeNmSBhpDl7Ba4ElbET6cYzKRFPeRC9WGHErc=; b=s1QPzsbuocarkgTFkKcWXLahz3MdghDNN+k0OwJn6+XZQOluUuouXhQIfJPkAKJLBk A81HDAs5QK2bwkVAAbD7uHopzLJ6UtiWftbkjbqoLBHQRutiHfJzruc9OhhcCUfCTXYS FIh3DyeHKdC9RzGKY09HHfj1rnhE7cuOxObNyEYGxl48tkSwoHyKV6lT+FcZuUjoGcHD 4c+FviSGhwjOrvalyayRmv7S1WTIuPL49aNcYJvuKt6EfcLW0Sbzg0wg2q/5jSUMBpVX T1HLM34MGc8Qe4jg8TVowbH1JrGHUiqR6Oyysryces+3IIks686xJEY1y5xZt657X+2v suUw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=dY9h2Y2b; arc=pass (i=1 spf=pass spfdomain=ideasonboard.com dkim=pass dkdomain=ideasonboard.com); spf=pass (google.com: domain of linux-kernel+bounces-68387-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-68387-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id m14-20020a05622a118e00b0042dd04bfd70si3306032qtk.136.2024.02.16.01.57.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Feb 2024 01:57:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-68387-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=dY9h2Y2b; arc=pass (i=1 spf=pass spfdomain=ideasonboard.com dkim=pass dkdomain=ideasonboard.com); spf=pass (google.com: domain of linux-kernel+bounces-68387-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-68387-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 838341C2195A for ; Fri, 16 Feb 2024 09:57:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8B7A1208A4; Fri, 16 Feb 2024 09:55:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="dY9h2Y2b" 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 02E121F93E; Fri, 16 Feb 2024 09:55:37 +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=1708077339; cv=none; b=cMDoPtDiq5F12dC+BW5IeEqHaaNtuWCh9Cql5t/syzgkmIHppwaQkh6SmF0DNR6VS9uhQ8IcWo36asgvT/6L0HIRCDmjHtbK0kWNozMUi/Qj1bwtoSCCZc1gm5cj5dWWAYcyAZsJtMtBB8z9ttxKs51Lf2vJXOsKuCGxE/UfN80= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708077339; c=relaxed/simple; bh=8U+d6hL24MZGPZFxK9bYc4RDQf5dPvWZOf7qapIJo0I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=I6G1b4X429xNBb1we02SGEtrrKiY1mv+JHK9MHWDcaycIiRo/5eMBwahGvSfYj/E1wwerqCGTkiwFtughT/j7gM2dKikFaze8M4sKKcoKS1ZAPZGJnA4JBw168EdM90d9BaFoDsvAsWOO6Ji7cFw7crsk8cas7Icr9rsndFgUJ0= 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=dY9h2Y2b; 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 Received: from pyrite.hamster-moth.ts.net (h175-177-049-156.catv02.itscom.jp [175.177.49.156]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 04DA5D4A; Fri, 16 Feb 2024 10:55:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1708077332; bh=8U+d6hL24MZGPZFxK9bYc4RDQf5dPvWZOf7qapIJo0I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dY9h2Y2bHKE5aKn51aImxQVGxPzKk7tXWlmJ4aQqYxeu+hH02clk3UUO9nfXA9SSK 4Vaze+gj20sZ76Sk5NZoeCDtwuRWtsGGiVR8xwcYSxalOXOiDFoqFLyMbngLkivNPY xSmvqoT1wBmwOt3I49jeOUkRZWYqumlGxeWzTgLw= From: Paul Elder To: linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org Cc: kieran.bingham@ideasonboard.com, tomi.valkeinen@ideasonboard.com, umang.jain@ideasonboard.com, aford173@gmail.com, Paul Elder , Laurent Pinchart , Alexander Stein , Dafna Hirschfeld , Mauro Carvalho Chehab , Heiko Stuebner , linux-arm-kernel@lists.infradead.org (moderated list:ARM/Rockchip SoC support), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v12 04/12] media: rkisp1: Support devices lacking dual crop Date: Fri, 16 Feb 2024 18:54:50 +0900 Message-Id: <20240216095458.2919694-5-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240216095458.2919694-1-paul.elder@ideasonboard.com> References: <20240216095458.2919694-1-paul.elder@ideasonboard.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Some versions of the ISP supported by the rkisp1 driver, such as the ISP in the i.MX8MP, lack the dual crop registers and don't support cropping at the resizer input. They instead rely on cropping in the Image Stabilization module, at the output of the ISP, to modify the resizer input size and implement digital zoom. Add a dual crop feature flag to distinguish the versions of the ISP that support dual crop from those that don't, and make sure that the sink crop is set to the sink format when dual crop is not supported. Signed-off-by: Laurent Pinchart Signed-off-by: Paul Elder Tested-by: Alexander Stein Tested-by: Adam Ford Reviewed-by: Tomi Valkeinen --- Changes in v12: - Remove mention of moving resizer input crop to image stabilizer from commit message - Make sure the sink crop is set to the sink format when dual crop is not supported --- .../media/platform/rockchip/rkisp1/rkisp1-common.h | 2 ++ drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c | 6 ++++-- .../media/platform/rockchip/rkisp1/rkisp1-resizer.c | 11 +++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h index f7c251f79aa9..219d4a2547aa 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h @@ -112,6 +112,7 @@ enum rkisp1_isp_pad { * @RKISP1_FEATURE_MIPI_CSI2: The ISP has an internal MIPI CSI-2 receiver * @RKISP1_FEATURE_MAIN_STRIDE: The ISP supports configurable stride on the main path * @RKISP1_FEATURE_SELF_PATH: The ISP has a self path + * @RKISP1_FEATURE_DUAL_CROP: The ISP has the dual crop block at the resizer input * * The ISP features are stored in a bitmask in &rkisp1_info.features and allow * the driver to implement support for features present in some ISP versions @@ -121,6 +122,7 @@ enum rkisp1_feature { RKISP1_FEATURE_MIPI_CSI2 = BIT(0), RKISP1_FEATURE_MAIN_STRIDE = BIT(1), RKISP1_FEATURE_SELF_PATH = BIT(2), + RKISP1_FEATURE_DUAL_CROP = BIT(3), }; #define rkisp1_has_feature(rkisp1, feature) \ diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c index f48a21985b18..2e40c376cab5 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c @@ -507,7 +507,8 @@ static const struct rkisp1_info px30_isp_info = { .isr_size = ARRAY_SIZE(px30_isp_isrs), .isp_ver = RKISP1_V12, .features = RKISP1_FEATURE_MIPI_CSI2 - | RKISP1_FEATURE_SELF_PATH, + | RKISP1_FEATURE_SELF_PATH + | RKISP1_FEATURE_DUAL_CROP, }; static const char * const rk3399_isp_clks[] = { @@ -527,7 +528,8 @@ static const struct rkisp1_info rk3399_isp_info = { .isr_size = ARRAY_SIZE(rk3399_isp_isrs), .isp_ver = RKISP1_V10, .features = RKISP1_FEATURE_MIPI_CSI2 - | RKISP1_FEATURE_SELF_PATH, + | RKISP1_FEATURE_SELF_PATH + | RKISP1_FEATURE_DUAL_CROP, }; static const struct of_device_id rkisp1_of_match[] = { diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c index dd77a31e6014..755d319b568e 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c @@ -447,8 +447,9 @@ static void rkisp1_rsz_set_sink_crop(struct rkisp1_resizer *rsz, /* Not crop for MP bayer raw data */ mbus_info = rkisp1_mbus_info_get_by_code(sink_fmt->code); - if (rsz->id == RKISP1_MAINPATH && - mbus_info->pixel_enc == V4L2_PIXEL_ENC_BAYER) { + if ((rsz->id == RKISP1_MAINPATH && + mbus_info->pixel_enc == V4L2_PIXEL_ENC_BAYER) || + !rkisp1_has_feature(rsz->rkisp1, DUAL_CROP)) { sink_crop->left = 0; sink_crop->top = 0; sink_crop->width = sink_fmt->width; @@ -635,7 +636,8 @@ static int rkisp1_rsz_s_stream(struct v4l2_subdev *sd, int enable) struct v4l2_subdev_state *sd_state; if (!enable) { - rkisp1_dcrop_disable(rsz, RKISP1_SHADOW_REGS_ASYNC); + if (rkisp1_has_feature(rkisp1, DUAL_CROP)) + rkisp1_dcrop_disable(rsz, RKISP1_SHADOW_REGS_ASYNC); rkisp1_rsz_disable(rsz, RKISP1_SHADOW_REGS_ASYNC); return 0; } @@ -646,7 +648,8 @@ static int rkisp1_rsz_s_stream(struct v4l2_subdev *sd, int enable) sd_state = v4l2_subdev_lock_and_get_active_state(sd); rkisp1_rsz_config(rsz, sd_state, when); - rkisp1_dcrop_config(rsz, sd_state); + if (rkisp1_has_feature(rkisp1, DUAL_CROP)) + rkisp1_dcrop_config(rsz, sd_state); v4l2_subdev_unlock_state(sd_state); -- 2.39.2