From patchwork Fri Jan 31 16:33:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurentiu Palcu X-Patchwork-Id: 861140 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 C50641F03D4; Fri, 31 Jan 2025 16:34:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341274; cv=fail; b=U/1j4zJQPsBZ+zAg1ZAUePtcocnuqzcDzdg0N6y21b8vEANkDZdrJnNjc7ydKgJD5EW4o1hKLFbNPho9HlYMaFBZ63j0+hXt23eNc0Id/5qtPNuChgWu9Uqdtw1YhW7gzbmvovXo/EU12FXIW/h9K4zgpNTVsad3HlfjMD4q9jY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341274; c=relaxed/simple; bh=uMGnWazdw4yzMf10XZFI+JXETxKT1vyy2UNrn6LaO2c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=DxEAMzBAx/kDTO8rKErm9h91GFiEDkjj9IV+xicmRbEyrD3/f+naIwEDM4uCoxp+sB54DcY740Yd0DABR8Krh5Rkc2MwZmttsZM8r1iEMUFaxWtgQgyDXbnWZN7OvMzwT5aPtUDSPG6wp4b0yXkgw1NJM/b2X0DQN2/3WMvFXcY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=p+tzEiC3; arc=fail smtp.client-ip=40.107.159.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="p+tzEiC3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dRJP4W07ZechUv+3xUs1hVdsHVPhdv/tlfFNhhyEJlHakU7n1FjBxVs+gI/EqxbXE0fqMKpZzEIh/Ilsy/y86e6/w/awAM5jrdUm0PeoK0aOY3Cyo1yjSbxKJws195N1pFqCmQ50r5k+y9Bq+F65Cs7jb1j/JnnZuBymAx4l/AM1RKmOxHI6lUBU6pvuEk9I+CpyAicY1YY47X5RYHwXWPYMujLY0I8PBstRxHGXYrxlxAMoKLfwsA1iK+QpzNIous5V4a/aXI/Q8wi25+xxYS4b7fBN9rmw/Te0MlvWcR0a8bTzhYnF4gp9NHFZIY0ZpoN+22YN0jHr0Yf9aAxFoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DkeoquS2GY5W2kC4bmCtoAwABXdEm/40yU391U4VFm4=; b=wPJcR5wbu4ZYlihCKbY9Q5XQ/15Lvwk646eeDUJIvxwEoatLGOBCczMV5hxcz3gHwme6kd4JkJwDAfpZZ0CSbC0VqjjvmYT+X4fRNls2baz851l0tRgHV2yk+kIcA337P71jXm7dA1VuprwkU2Ry6Rkp6swIupUiCzTGfTeoxLJhYldZS+17OkpA9o7/PDR83eABSnbwr8zqUKBQfywr4BWqj+5j/p7ZxTMaA+aMOb9wmtRwoeDbr1Q19+XwthFTyChciMnkXcFe0vhp3gSG+1PMfUpLypMDSRuplX6wC1X+I6Wt0m/QPV+5X+WrR+BhKyw1jJqUhxY33+vRT4Pxiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DkeoquS2GY5W2kC4bmCtoAwABXdEm/40yU391U4VFm4=; b=p+tzEiC3UfxzL3w46zxnxFaOhcHLdH9ygWERxtZF3Y8S3s3YiuEg56PCALP1l2UNxKYEZou2xzCgnGVsO/U/DXkEDGyZIs121bTn+UMFiDiyNaImbnbq9hNVnHlte6FiRr7gf3j+f9L1DHScq+Z28Led+jjVpo+DX12wxtdoyVhV2W9pBayLSq4cPYnGoomVkNBs3RPU8t478tG/RoR3lnYDNqlbbzIqQZbzaNZ6y1HEyj2am0XMc2RJKfrAM0e0hb3n/ZmcjubKz1F9Ex6Qmxa/Rzq3LpG2MzmKFfBw+ghk9zoc3yAlWzxQl2d8urHc62iDQWdaV+1yjvdIFjFDYg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) by AS8PR04MB8529.eurprd04.prod.outlook.com (2603:10a6:20b:420::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 16:34:28 +0000 Received: from AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30]) by AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30%6]) with mapi id 15.20.8398.017; Fri, 31 Jan 2025 16:34:28 +0000 From: Laurentiu Palcu To: Mauro Carvalho Chehab , Sakari Ailus , Laurent Pinchart Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org Subject: [RFC 01/12] media: mc: Add INTERNAL pad flag Date: Fri, 31 Jan 2025 18:33:55 +0200 Message-Id: <20250131163408.2019144-2-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> References: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> X-ClientProxiedBy: AS4P189CA0012.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5d7::15) To AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9576:EE_|AS8PR04MB8529:EE_ X-MS-Office365-Filtering-Correlation-Id: c50ebcdc-0a31-483e-0fdc-08dd42152182 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: o8iX2BWau1VF8D6AXHZdeWZuPXFw7H8UmIWH+3UC+8I4c6iu/DWpBO7FIC1pAHRkhDJkwyep3unTZjoMtdpTMiGXhGInpIxo/atOHnyzbKj5A6mRxJ3UcXaMArIV+zpzAvj2GLiL6yI+TuWbR4g8lqS+lU/vjcaBp1vPbVkKv8G1sznFnge499hMehULCwp3iqLRAtzci8dP9biG55pim34xRHDuIvgUCN50tnfENEFZiIMa4Wnt1h4hAaPddlOmhul20xwOiIjppfdgcJqjGZKJakoCFtlHsDi8A+gk/OJQRTVT/XsNEAhdFkmLxfcoNCdwvt9jAzDj5NiO7V1ky1z45TstykluYcQj00uduHu5BnJvcSDNENaDW1CitY2nyvmrJ8HNmnN7A5NvSbZUN7FZQD95pM3TYnFugN0gJGQxQYMNU5oKfhYrSpN7x2naGnNJkhfkudo/toctgZadGretGghE5N2MtbvL7i9kcyNC/I1yikW5J6q2G2z4zHD8Td6QLL/nZgnbUNo1w/JRl6iXa7uewng6DdS0xp2wUcGUeQKsf0gMl6Amdv7Ay+Qz1y/6EAS+aIFWQDXEFXnJo0cEwrDHI2QIDpomXVqPWiBBgcY3CKAjpZeBKAsMvwjgzSLfzsVazVG+Eyt4kRm18EScmzCdxjvHgIVZvg8JE/Vsq82VllT/VBdjD/ynsHYmXO91MTg9THgF3bfGsc5Gl6RJ3kc/30LKb4BMtp2mijXU8l/6Wp7qyXtOb4PPLUdCisGjc+9Zu3Ol1Qf4KFGxRFwO3zw71UjycEaVSxwxEjpvMOgbOOH23OiFtKefHawzznTpajngdUZUKIlS4S7JZnz9BOUDZSDrS07N4IaaIvsNvRmF6VL6aqrPJ26JWy/T87yzhqocWoeSn8ONAgl92O/zFPldzUzvWjShazf73QNWnk2hFF0V3OAiApzNf1h2K6U7DKDd+GsbitvCT0t9zl5IjuJ/tkI/qdQPHaoscwZqAKzIgL+VfmIyis7DkA2XyZNg6HJoC2cJJwqJR4xemBgNq6u+LNrvjwOpRxkZp0MbXd3RV52DlucONjFlWlXC34SBXlwU7AEraHEk32yZpkHdZQAk/++CRzZtC1G0sbAc5D6kElsRyihyKFP6t9hUH5jx9gw7PG7RWxXvVCoEBlMZFEvsfPJa5TSkfZJ/IYerr17xiYD53P49QM0DykRL6FT7/4AI5Grds7/Gnr8lWx1+r4QsjO2ncKZZhalFO4qr10bDJWGlgcsN9wCYIulQbGltRK3uMOP77uYHChU/VnWQOuheeUqMiZQW9PXsrsGXX91LnI/xlhabL7Li/gJQKHW1+glEH0fFfdmVnYv7OR/V8C1c/A2m4LZyuG/TSKDk+WGm5B+FdVed0Pn320a8 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR04MB9576.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 68TlGe3HfeXyEmPXcEXlBbyYGfvp0sZJCu6xSTpJeqBG1GuZ3li6edhdn7sy99z0ua11HuqwLnhqJt6DB/WWgVDEtrnBzTO7B8j+zVemDafP3GvvKXy6w9Z+Rm+66MMpK5eihGrUJk2pLW/YDWlHgnshbfqrFBdlARyetwQ7JSXx6h6j5aHQhen3wQk7iiH9fLYho3/YrQ4h/sdsOn0bbf0HRmdym9JfVLgnOfbxuFuUl9Bs8BbvIfj3Axomia+hS97a7S2TML6jsObsZj9MLVkvDQ3qZeiGo4y73/Vba2Xf7AUFbiYbdI6Y4aD1u+0ug+7WlRU7+hS70E/wjhBgq/F4HzCaoP0qaA28WFFGMl1fQGNJSbQmdzqTMyOIfTbQ4HnIiTIO+2WBPSgjxa3xXD0E047FNJL7r1IFOfuc8c8J2adQy+pJQFmigW0uZ4ZSgdewxMzHlkDodEXwefMJZoU66EPqBxV7JUbRTDJKeMBOkuCnFR6xHEBeGYMmFqY/PHThvPikPQg74Hxd51CacgltH7PpuPW25xK+75TGhxpmfreEnMMJ38oStwexxde/L5uwYfgbDIbonraIpLhbOuropdskS6zFAF1HEwfAWTjVNQ0XU4KKV96aH/P1pdyCA5rcOkSvtnU19PfG0+zOx9/OrlWN21xEI2D/iGoevcDV94JDvfHmcteWufm360WybnKZjkrkul7tqXLsPNbHqHcKOmNbgyrXjWbGekrnJD44B6cnOjzp3Roj3ghEdNEsxdBLrfNUGJCr+YRvR5+tRl5fqkYFwWTZ4V+wdhMl684MPNrXvXkx46gfK2XqR1PGT1ZaCQ2jlxNepxVbmyXq9DcWSYEq5reaXOJZQ3MbRCjf9ajN5VRpsOuNbHjdtK7ZNnQZzUESFQbSyVu/QPlhxq5/TfX/oMh6Ge+7GqTExgEq6HihXMxKCjoFs444V4D+5KVjMirF9yAipEcrGnCfrtT8N/IQnr5LzG+0aGSVHR+VbVUzQDLK5+qFNaCPGqKODaUi2AuCoeoC1F7E/Si+TjgtigL/6B+ab6UYXm/9MQKxHB00PBvlCXhqr7r1WtJ1u2GglH+ptueJRWyahrfFeAa/PdIN4HhI3hc1K6iJzNfFQvnApedLZnsKKy5aP/VHjBfYutu0HwYnP9S326+Gl7Ugbp+VfhXmZ8ziWWTmWH1RXQPreuCAqvulpV42sks+Z2h6af34RLdo8SufoDevPaSVbh1YkVuSCtkjiySdPaA0pY5aP2JoOQKd5SNf4Oz//GV2hshC3gOjtNCxjU4U1Q452bysXh+zRCcBpiZwCuvjSduhab0oQBpD9XRTd9IFvzvR8ahdWC6bgwDOigAkDHBbHY7erTsI8QVulg8xOvYB2D7t94Yyv65iu6aNEos34inBvfvrwE2mlkn87VKiSL0VVNOdDQOmPkJRhcH8kw6UU5Eq84tr6DGjnvjr90A1+nNuCj5qljYdmXWI5RxKOOKETBNW53UpXQIoIXQDL2gfq8dNKKXX3Neo6namtthyUtaeUg0Lm45oS/Nhehku0ObQfLz8N8cTGDlvOdN35n0v1tK8WZzFDh/XI/+XVsU056u4CkDJOpt4JOgtIlSmDQ== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c50ebcdc-0a31-483e-0fdc-08dd42152182 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9576.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 16:34:28.2555 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wYmehKpVO1UR92y0NaaDqC8+Cf3jUqT/ZTQZlGh30IWZB5ajwv6rqCJwJRnBdY4tmcoOewwmED4xXo7vT95Dcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8529 From: Sakari Ailus Internal source pads will be used as routing endpoints in V4L2 [GS]_ROUTING IOCTLs, to indicate that the stream begins in the entity. Internal source pads are pads that have both SINK and INTERNAL flags set. Also prevent creating links to pads that have been flagged as internal and initialising SOURCE pads with INTERNAL flag set. Signed-off-by: Sakari Ailus --- .../userspace-api/media/mediactl/media-types.rst | 8 ++++++++ drivers/media/mc/mc-entity.c | 10 ++++++++-- include/uapi/linux/media.h | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Documentation/userspace-api/media/mediactl/media-types.rst b/Documentation/userspace-api/media/mediactl/media-types.rst index 6332e8395263b..f55ef055bcf85 100644 --- a/Documentation/userspace-api/media/mediactl/media-types.rst +++ b/Documentation/userspace-api/media/mediactl/media-types.rst @@ -361,6 +361,7 @@ Types and flags used to represent the media graph elements .. _MEDIA-PAD-FL-SINK: .. _MEDIA-PAD-FL-SOURCE: .. _MEDIA-PAD-FL-MUST-CONNECT: +.. _MEDIA-PAD-FL-INTERNAL: .. flat-table:: Media pad flags :header-rows: 0 @@ -381,6 +382,13 @@ Types and flags used to represent the media graph elements enabled links even when this flag isn't set; the absence of the flag doesn't imply there is none. + * - ``MEDIA_PAD_FL_INTERNAL`` + - The internal flag indicates an internal pad that has no external + connections. Such a pad shall not be connected with a link. + + The internal flag may currently be present only in a source pad where + it indicates that the :ref:``stream `` + originates from within the entity. One and only one of ``MEDIA_PAD_FL_SINK`` and ``MEDIA_PAD_FL_SOURCE`` must be set for every pad. diff --git a/drivers/media/mc/mc-entity.c b/drivers/media/mc/mc-entity.c index 0455909055820..d1feacc608072 100644 --- a/drivers/media/mc/mc-entity.c +++ b/drivers/media/mc/mc-entity.c @@ -213,7 +213,9 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads, iter->index = i++; if (hweight32(iter->flags & (MEDIA_PAD_FL_SINK | - MEDIA_PAD_FL_SOURCE)) != 1) { + MEDIA_PAD_FL_SOURCE)) != 1 || + (iter->flags & MEDIA_PAD_FL_INTERNAL && + !(iter->flags & MEDIA_PAD_FL_SINK))) { ret = -EINVAL; break; } @@ -1118,7 +1120,8 @@ int media_get_pad_index(struct media_entity *entity, u32 pad_type, for (i = 0; i < entity->num_pads; i++) { if ((entity->pads[i].flags & - (MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_SOURCE)) != pad_type) + (MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_SOURCE | + MEDIA_PAD_FL_INTERNAL)) != pad_type) continue; if (entity->pads[i].sig_type == sig_type) @@ -1148,6 +1151,9 @@ media_create_pad_link(struct media_entity *source, u16 source_pad, return -EINVAL; if (WARN_ON(!(sink->pads[sink_pad].flags & MEDIA_PAD_FL_SINK))) return -EINVAL; + if (WARN_ON(source->pads[source_pad].flags & MEDIA_PAD_FL_INTERNAL) || + WARN_ON(sink->pads[sink_pad].flags & MEDIA_PAD_FL_INTERNAL)) + return -EINVAL; link = media_add_link(&source->links); if (link == NULL) diff --git a/include/uapi/linux/media.h b/include/uapi/linux/media.h index 1c80b1d6bbaf3..80cfd12a43fc1 100644 --- a/include/uapi/linux/media.h +++ b/include/uapi/linux/media.h @@ -208,6 +208,7 @@ struct media_entity_desc { #define MEDIA_PAD_FL_SINK (1U << 0) #define MEDIA_PAD_FL_SOURCE (1U << 1) #define MEDIA_PAD_FL_MUST_CONNECT (1U << 2) +#define MEDIA_PAD_FL_INTERNAL (1U << 3) struct media_pad_desc { __u32 entity; /* entity ID */ From patchwork Fri Jan 31 16:33:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurentiu Palcu X-Patchwork-Id: 861139 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 E72A41F3D24; Fri, 31 Jan 2025 16:34:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341279; cv=fail; b=fef9mDyfhJoubQgOKqRex4hPN+3HDqworz3UvTL6/GPjil1MbiJB/gGPWp9dAb7/LcL0q+v3MnO8mlBYH1sd+ApwoxL64ZWTgzMOAzpkyVXHJ3n8hAexOLuA4YmvgXHznrJw+3CzaTQ6jsbBdSaHr1mHlyXrheG1tJfPLSzs0nA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341279; c=relaxed/simple; bh=0L6AP5OqHs7iZtlI4niQM+FgMvW1e4iphoVJbXOUXUI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XHNyD3L8foZpfxU96LhOkJDruWpIdQwTLxg/2UrYkp9n6vLqaLYijsdEMFwAl8Oaq+XrZ9WnPGwoxRtC/OrTOzz1pXHS+1rtgghFm8676+6VUOXnpeO6GtDa9jn16hIHfWdljVROpzgid45dKDwvqHrZHlkePbtTVylJOpGqhzM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=oypUF9h/; arc=fail smtp.client-ip=40.107.159.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="oypUF9h/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MaZ/gnNj/nYIgwbe1rnDipxwZwl5Oo1EOHAXfwmHUA1UX3WxPp5d6SwOCIoQJJkvBX/g3GZM26F1O58PgJDhMtOeWyxtYO5UCeTZ4zZ56hG43tgj970C4CV/vC/CbMPnEB/YV8XQ2jQ/YZAysV+ZYQT9sYPuYc6LaBn5bBrpsVm1v3zGV0V5JhCgxCMa9cpVqRIdUzyfShKL6N7/7c/cQLStNobO0V7tlTETzxEITw6nKwm8HAmmYV14Ij9AH7PZ4hTu8g8lg0pWklUDxU4Pk3/NkUz9zZFhUaq0CskXZQ7uysyVQZSdH8Q/9S5bYOuGPE2U6fYyCfer2v13s2y6Ag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HWU5/XBDyTBVXhHWFqQtcuSVFXOSDkAyN/L7zhGL4JU=; b=p+sOMJeA83aiL7fwoRW+Z40VCuNSKAuVlKDMHGJoWL3C+qKK2lnsimuKPzTRcIPNTqZrBDO7M6Yc4xmgEeVn99ZpJteG4t4tnCIL9DLIU2Qw8iBM67HfdknxZsnqriJVg7OGezOuRqqEASAo5/Lr3z6TxpG5aQj1viWnsV9qbrIoNE8IMnQafNLjYa0t74E3ExaYW9CNu9Zbw5hVaR5F4LCZC7ncVKWtMsoMpZrVZx6s7AwjPFaQXNa7T5986mLmXrviSTPdj1AsrZU+urPxlu2GbvdhdySGuItao3wL56jp486g20kmpYarpnQeVoKX3dliOFSgY2Rh/d0IAOw7wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HWU5/XBDyTBVXhHWFqQtcuSVFXOSDkAyN/L7zhGL4JU=; b=oypUF9h/I0f/p0dj98m+dseb97fQZDgSQctdF2UApZmqPRgQ5Btp0jpd+b4gjaBdlouM+OYbDltKFLr8GgOa5sNYC/4xhd+Sb7Ykl+09fNGTgsPS/xkekRAuBfEtOaCQ0mI0i2xaDhTjjwRkPM9lb2qstW+QUCL51wUScBfbHdbl4m7orCnEVxysgnIChXll1F3GwT/BqBF1bj0rIbGsXd9xlpGsHGSfUkQfADQ2qjnUhn1l+xmK5xaHVxOIscBFYTRJzqJdTzkTUlKhZuia/wKkJZ6WaLh8TNPUeRCBE9qp+mAW6T6X3Y4qFp+/5urtRdabnXh8gr2HFrulA07uIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) by AS8PR04MB8529.eurprd04.prod.outlook.com (2603:10a6:20b:420::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 16:34:33 +0000 Received: from AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30]) by AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30%6]) with mapi id 15.20.8398.017; Fri, 31 Jan 2025 16:34:33 +0000 From: Laurentiu Palcu To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Greg Kroah-Hartman Cc: Laurentiu Palcu , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev Subject: [RFC 03/12] staging: media: max96712: convert to using CCI register access helpers Date: Fri, 31 Jan 2025 18:33:57 +0200 Message-Id: <20250131163408.2019144-4-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> References: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> X-ClientProxiedBy: AM0PR05CA0086.eurprd05.prod.outlook.com (2603:10a6:208:136::26) To AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9576:EE_|AS8PR04MB8529:EE_ X-MS-Office365-Filtering-Correlation-Id: 99f744b2-bb31-40c7-5e79-08dd4215246b X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: Nwsbwbvse/IJqDoZgsLYQqiSbuo9Rp1hHZtDXvdf4s0/h/7gt036pd2N5GU6kH8kCDOjLEeiyq1SRaYu6SzBjVLT/y1ORScve+kZZ0suInlP94CEI0nC7/4YZTr2t/bJxq+sQFp1j4iFNvGmzIpGFGkPPBAn3s3ON7RldGY5BN2aev55Ud5Ym4mVHW8IsfnoKKowGrFOT1ygzwyNwkJk8RyB7t7pqI7yu1b0JBHqRjDSkHqAqS1LYRfN4cC4nvscIHLYsRYybAHrFpRU0zwCabbgfS/G76Fkgp0YdWM12onzxBTV/eVjDQ1mdO9Nr7bWXJ8Dz2/3e0Guuljc+wvzhIAXAWlgH+gbVUNXgR282oqyayx7OvQVG64Koftw/WkWk4LTtqBY8HSr8JC1/le/BKY6fqpKW+4flHWcrB3a3QZNPcZy0ObGLaatWxWz/ifnxwf9bgiG4LyEa5fs/IS7axBzd69KVIqF0JiQRni4TCgp5Cx70bm3wBcsbT+i2ExzRph2eJQF+AXErJykDbUWm9fd7oAm08ivQ4Hf5yQzH5OvtwtobOjWbQuSYL1kXHm6tuWJc9C4//7Ku473O9i3jAMsPiOl8ekfgpi07RtvGM4T0c4GHIFcxiAc3MUoOhaJGDtsGQwgUPH9m8anI9G59UW5gV9TLgMDYmmPQjfZk9O/ZVin3XQHNHpBlErd6Hz4sDwiki/1WPVgjiSYK+QfBTIjcDRuKiq5h0CrxSLlc+jMbMiZZrK3N5odXZLemR7ao9nhDORbeblUv4hz9gEzerr9m5QlpyQnGRcs9Zb73MVX0Yib+dTFKttW3tjZKgA8TN5LHMVWShwFD0ZBto+imSILx8B0VP30opKRLla2KZggEEMk0E8hu5QT2TrUvTDzdr/wjHBpGlsI0VJMquvchirsbtQKCbbewPrOEE9IcQsw/8Xozvyn5tzCFWM7uiTmo9WPmS9I96lmopXnpj68t7BxpRqG69a5U005Ia/ulfrm97eNoUIdlCU5a+Guvt8pb4XMdef50FR60VxxLWis7nhQVmmNYGY3sCZNsqyy104Y7fUope39sfU5FgIbTWuWLUhNlh38uA8eUI6TQADXJcH13Z+NB7VFJEO29TrueBMVJAQ3+wyVQgSfG4+zaW97qJnapmy2VZ9TFQeFYavVG97ZHEE/C5fY6Z2CFWA4AiSHUSqhWzhhCuIrRgweVDdSjFX3XjHfFgzK4iN37Ep4Rsv1mray9cn9qn70tMxRLRxA0RjEl/lG9B+WhDMXyu7g7pjM2/zsTgLKUjEClcZQWW0zJim1C4FxKxeTpSRu2i8AHXbQNisbibIE1u0D+GoFlmbluhxGuOChapwNCCXI3xy0xSV3ohuNDWSAdGkwwMkVXD9gFK32acisXE/6U500 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR04MB9576.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RnN0WZ3PafGOMZE3jKfzJc6Zz9JmZcHSBkihv8QON1iRcI2TVQ8aZ1OwYOg3YT61hkk2xbqU7XqleuL3QRhWc+72bMevQQ5CsWTAa5IJXx5lFO5gWIkSmaOGGrDwQZ0SpSQsofncOUf2Mms0G3KU+uDWy9rlud3asU6nZ5lALlLy9kp076zOD3vSkPxF8BtMdV0HYIu5TaI12fyxe8P0I+a6dy+3V34+Td2gpIo5xYMCzObcl2UVbiZgeF1Y9lLVS9QYKg37mezUY82FxaqviLgeiob+hGzV4SKHBYDvbOw5KVbJN6AieQQMiJFYrix1hyA2TDiHlpbZWCBRbX44EkXN+8BisWwI9Y0FLhuqNDnwYWu+fMUZF3drkdsxfSIBKrDugg7PYoHtHLY/EvBj9M8tfaqxylU11EBKaMB04VSaZdJLXjul5gMcIV3g77f39vVOYTS+KMot8kKltDZdtFL2gehlKKLRsGTprhXrN1SANvtlquuCfOyK2ENy7y+YVQJMysY9zBqMIqbGbmOlaTRMLD2x/VXtopMOWpIBG3JKEbGFkzEkufyfDFtuPY0/rk57t/SrrON0BNkn9qEHlsrr+JGlGzFDj0Ha+44pUc4DYTAf+ZEtYzOn9WVkuG6y9FZxqhPMldR+4wY/gNIXRWtMGnahvmVGNZp8aWiUkw7W64CY3hsRo4Eiq4+Cx0sNXA4nHglk9xdPeMr8GPwGhr/G7TFH7cpgMUrNabpTPIy1eNOnJAYMNoNMSFEyKBLmr2oQUmYnlotAYCqIQ1z+s18CJJT6wvPqxN8a0D8IzJ0+bx3ni95PM26RbyuIUuRPOApivbwAVTR8RzdPZ89K1dqCqlFVWZDgAV8UCt9yrLQ10IyzqcBPwR4gSbrN+8997larAjPIC09QH1qgcHzCPns6H3MurmZAf9+s5y+Qt68I0f/oq2CSB0thY5B7XasTL/m/0zNpXl/j8EoseM5c+sgCqM4L+jCHjup2KP2mKqwgBYcwM6HviqeKPS7sH5cbEUPaWO2ADhZrXaG3HqIOBtkjlLqpf+Kn8P5dSyf0q5hdqXV56dGYHqpNPkoAxDVb2GIJc8Xrm1mTXIRikEraQPEzrBFlrp3ibSaijq0pRmykv7VBN8rs/Eli5od0veixEGDE9UfpGuHIxQpt+0//9amHwdxCD9Z334loqJVnkZKR9N0mCNwB9USVDc/+wdntd7KYJ9Ln75fYIcmKi15aWrpcP3VsOiZOPlbv6Re2paaV1IPQ338ev595jmfDJ4zbePp/aKi/cFh5lFf2wcsn/7+qIyWUDVQZHKiRS0P18Bt3fBgLkRF1IVfT2OJOfThen7MOZxlySIX38QynD4b0wikyjhE5zfotec9kGiKw5cVs+kKw2skHoRxBpTsf/8V0tiU4AEl0VU/jbqnyN1sVtDQgb2BE9/mAOraljg5Blj6U0AOzphz5vAFSk8L2I7pfVAeU1PJO1Ub8Oba7c8hlF74UWh8YNgztgoEfYgpHUn8IJLPvpveXTnHrhJjIkL413ZUWAiq1Khma+yJmJlZ7/HZ0Tsvxyn8BNz07xOb2ybOQl6X1PAgAOeMmsHNDkYOaG35ywuL16+yYfjsVdrtv2g== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99f744b2-bb31-40c7-5e79-08dd4215246b X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9576.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 16:34:33.1015 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MUc/eycoRbx8eafFr4n/g7O8NXQn5u/m4q7IZ0kJ/Gac1YiUYoRITRLinq5IE+zRASQEfiVhXAVMjc+mfmOAZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8529 Use the CCI register access helpers instead of regmap's. Signed-off-by: Laurentiu Palcu --- drivers/staging/media/max96712/max96712.c | 126 +++++++++------------- 1 file changed, 51 insertions(+), 75 deletions(-) diff --git a/drivers/staging/media/max96712/max96712.c b/drivers/staging/media/max96712/max96712.c index 47842facec125..cf39f5243cd6d 100644 --- a/drivers/staging/media/max96712/max96712.c +++ b/drivers/staging/media/max96712/max96712.c @@ -12,24 +12,25 @@ #include #include +#include #include #include #include /* TOP_CTRL */ -#define MAX96712_DEBUG_EXTRA_REG 0x0009 +#define MAX96712_DEBUG_EXTRA_REG CCI_REG8(0x0009) #define DEBUG_EXTRA_PCLK_25MHZ 0x00 #define DEBUG_EXTRA_PCLK_75MHZ 0x01 -#define MAX96724_TOP_CTRL_PWR1 0x0013 +#define MAX96724_TOP_CTRL_PWR1 CCI_REG8(0x0013) #define RESET_ALL BIT(6) /* BACKTOP0 */ -#define MAX96712_BACKTOP0_12 0x040b +#define MAX96712_BACKTOP0_12 CCI_REG8(0x040b) #define CSI_OUT_EN BIT(1) #define SOFT_BPP_0_MASK GENMASK(7, 3) #define SOFT_BPP_0_SHIFT 3 -#define MAX96712_BACKTOP0_22 0x0415 -#define MAX96712_BACKTOP0_25 0x0418 +#define MAX96712_BACKTOP0_22 CCI_REG8(0x0415) +#define MAX96712_BACKTOP0_25 CCI_REG8(0x0418) #define PHY_CSI_TX_DPLL_PREDEF_FREQ_MASK GENMASK(4, 0) #define PHY_CSI_TX_DPLL_PREDEF_FREQ_SHIFT 0 #define PHY_CSI_TX_DPLL_FB_FRACTION_PREDEF_EN BIT(5) @@ -37,7 +38,7 @@ #define OVERRIDE_BPP_VC_DT_1_3 BIT(7) /* MIPI_PHY */ -#define MAX96712_MIPI_PHY_0 0x08a0 +#define MAX96712_MIPI_PHY_0 CCI_REG8(0x08a0) #define PHY_4X2 BIT(0) #define PHY_2X4 BIT(2) #define PHY_1X4A_22 BIT(3) @@ -45,7 +46,7 @@ #define FORCE_CLK0_EN BIT(5) #define FORCE_CLK3_EN BIT(6) #define FORCE_CSI_OUT_EN BIT(7) -#define MAX96712_MIPI_PHY_2 0x08a2 +#define MAX96712_MIPI_PHY_2 CCI_REG8(0x08a2) #define T_HS_TRAIL_MASK GENMASK(1, 0) #define T_HS_TRAIL_SHIFT 0 #define T_LPX_MASK GENMASK(3, 2) @@ -56,22 +57,22 @@ #define PHY1_EN BIT(5) #define PHY2_EN BIT(6) #define PHY3_EN BIT(7) -#define MAX96712_MIPI_PHY_3 0x08a3 +#define MAX96712_MIPI_PHY_3 CCI_REG8(0x08a3) #define PHY0_LANE_MAP_MASK GENMASK(3, 0) #define PHY0_LANE_MAP_SHIFT 0 #define PHY1_LANE_MAP_MASK GENMASK(7, 4) #define PHY1_LANE_MAP_SHIFT 4 -#define MAX96712_MIPI_PHY_5 0x08a5 +#define MAX96712_MIPI_PHY_5 CCI_REG8(0x08a5) #define PHY0_POL_MAP_MASK GENMASK(2, 0) #define PHY0_POL_MAP_SHIFT 0 #define PHY1_POL_MAP_MASK GENMASK(5, 3) #define PHY1_POL_MAP_SHIFT 3 #define T_CLK_PREP_MASK GENMASK(7, 6) #define T_CLK_PREP_SHIFT 6 -#define MAX96712_MIPI_PHY_13 0x08ad +#define MAX96712_MIPI_PHY_13 CCI_REG8(0x08ad) #define T_T3_PREBEGIN_MASK GENMASK(5, 0) #define T_T3_PREBEGIN_SHIFT 0 -#define MAX96712_MIPI_PHY_14 0x08ae +#define MAX96712_MIPI_PHY_14 CCI_REG8(0x08ae) #define T_T3_PREP_MASK GENMASK(1, 0) #define T_T3_PREP_SHIFT 0 #define T_T3_PREP_40NS 0 @@ -82,7 +83,7 @@ #define T_T3_POST_SHIFT 2 /* MIPI_TX: 0 <= phy < 4 */ -#define MAX96712_MIPI_TX_10(phy) (0x090a + (phy) * 0x40) +#define MAX96712_MIPI_TX_10(phy) CCI_REG8(0x090a + (phy) * 0x40) #define CSI2_TWAKEUP_H_MASK GENMASK(2, 0) #define CSI2_TWAKEUP_H_SHIFT 0 #define CSI2_VCX_EN BIT(4) @@ -91,7 +92,7 @@ #define CSI2_LANE_CNT_SHIFT 6 /* VRX_PATGEN */ -#define MAX96712_VRX_PATGEN_0 0x1050 +#define MAX96712_VRX_PATGEN_0 CCI_REG8(0x1050) #define VTG_MODE_MASK GENMASK(1, 0) #define VTG_MODE_SHIFT 0 #define VTG_MODE_VS_TRACKING 0 @@ -104,30 +105,30 @@ #define GEN_DE BIT(5) #define GEN_HS BIT(6) #define GEN_VS BIT(7) -#define MAX96712_VRX_PATGEN_1 0x1051 +#define MAX96712_VRX_PATGEN_1 CCI_REG8(0x1051) #define VS_TRIG BIT(0) #define PATGEN_MODE_MASK GENMASK(5, 4) #define PATGEN_MODE_SHIFT 4 #define PATGEN_MODE_CHECKERBOARD (1 << PATGEN_MODE_SHIFT) #define PATGEN_MODE_GRADIENT (2 << PATGEN_MODE_SHIFT) #define GRAD_MODE BIT(7) -#define MAX96712_VRX_PATGEN_VS_DLY 0x1052 -#define MAX96712_VRX_PATGEN_VS_HIGH 0x1055 -#define MAX96712_VRX_PATGEN_VS_LOW 0x1058 -#define MAX96712_VRX_PATGEN_V2H 0x105b -#define MAX96712_VRX_PATGEN_HS_HIGH 0x105e -#define MAX96712_VRX_PATGEN_HS_LOW 0x1060 -#define MAX96712_VRX_PATGEN_HS_CNT 0x1062 -#define MAX96712_VRX_PATGEN_V2D 0x1064 -#define MAX96712_VRX_PATGEN_DE_HIGH 0x1067 -#define MAX96712_VRX_PATGEN_DE_LOW 0x1069 -#define MAX96712_VRX_PATGEN_DE_CNT 0x106b -#define MAX96712_VRX_PATGEN_GRAD_INCR 0x106d -#define MAX96712_VRX_PATGEN_CHKR_COLOR_A 0x106e -#define MAX96712_VRX_PATGEN_CHKR_COLOR_B 0x1071 -#define MAX96712_VRX_PATGEN_CHKR_RPT_A 0x1074 -#define MAX96712_VRX_PATGEN_CHKR_RPT_B 0x1075 -#define MAX96712_VRX_PATGEN_CHKR_ALT 0x1076 +#define MAX96712_VRX_PATGEN_VS_DLY CCI_REG24(0x1052) +#define MAX96712_VRX_PATGEN_VS_HIGH CCI_REG24(0x1055) +#define MAX96712_VRX_PATGEN_VS_LOW CCI_REG24(0x1058) +#define MAX96712_VRX_PATGEN_V2H CCI_REG16(0x105b) +#define MAX96712_VRX_PATGEN_HS_HIGH CCI_REG16(0x105e) +#define MAX96712_VRX_PATGEN_HS_LOW CCI_REG16(0x1060) +#define MAX96712_VRX_PATGEN_HS_CNT CCI_REG16(0x1062) +#define MAX96712_VRX_PATGEN_V2D CCI_REG24(0x1064) +#define MAX96712_VRX_PATGEN_DE_HIGH CCI_REG16(0x1067) +#define MAX96712_VRX_PATGEN_DE_LOW CCI_REG16(0x1069) +#define MAX96712_VRX_PATGEN_DE_CNT CCI_REG16(0x106b) +#define MAX96712_VRX_PATGEN_GRAD_INCR CCI_REG8(0x106d) +#define MAX96712_VRX_PATGEN_CHKR_COLOR_A CCI_REG24(0x106e) +#define MAX96712_VRX_PATGEN_CHKR_COLOR_B CCI_REG24(0x1071) +#define MAX96712_VRX_PATGEN_CHKR_RPT_A CCI_REG8(0x1074) +#define MAX96712_VRX_PATGEN_CHKR_RPT_B CCI_REG8(0x1075) +#define MAX96712_VRX_PATGEN_CHKR_ALT CCI_REG8(0x1076) enum max96712_pattern { MAX96712_PATTERN_CHECKERBOARD = 0, @@ -155,11 +156,11 @@ struct max96712_priv { enum max96712_pattern pattern; }; -static int max96712_write(struct max96712_priv *priv, unsigned int reg, u8 val) +static int max96712_write(struct max96712_priv *priv, unsigned int reg, u64 val) { int ret; - ret = regmap_write(priv->regmap, reg, val); + ret = cci_write(priv->regmap, reg, val, NULL); if (ret) dev_err(&priv->client->dev, "write 0x%04x failed\n", reg); @@ -167,42 +168,17 @@ static int max96712_write(struct max96712_priv *priv, unsigned int reg, u8 val) } static int max96712_update_bits(struct max96712_priv *priv, unsigned int reg, - u8 mask, u8 val) + u64 mask, u64 val) { int ret; - ret = regmap_update_bits(priv->regmap, reg, mask, val); + ret = cci_update_bits(priv->regmap, reg, mask, val, NULL); if (ret) dev_err(&priv->client->dev, "update 0x%04x failed\n", reg); return ret; } -static int max96712_write_bulk(struct max96712_priv *priv, unsigned int reg, - const void *val, size_t val_count) -{ - int ret; - - ret = regmap_bulk_write(priv->regmap, reg, val, val_count); - if (ret) - dev_err(&priv->client->dev, "bulk write 0x%04x failed\n", reg); - - return ret; -} - -static int max96712_write_bulk_value(struct max96712_priv *priv, - unsigned int reg, unsigned int val, - size_t val_count) -{ - unsigned int i; - u8 values[4]; - - for (i = 1; i <= val_count; i++) - values[i - 1] = (val >> ((val_count - i) * 8)) & 0xff; - - return max96712_write_bulk(priv, reg, &values, val_count); -} - static void max96712_reset(struct max96712_priv *priv) { max96712_update_bits(priv, MAX96724_TOP_CTRL_PWR1, RESET_ALL, RESET_ALL); @@ -293,19 +269,19 @@ static void max96712_pattern_enable(struct max96712_priv *priv, bool enable) max96712_write(priv, MAX96712_DEBUG_EXTRA_REG, DEBUG_EXTRA_PCLK_75MHZ); /* Configure Video Timing Generator for 1920x1080 @ 30 fps. */ - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_VS_DLY, 0, 3); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_VS_HIGH, v_sw * h_tot, 3); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_VS_LOW, - (v_active + v_fp + v_bp) * h_tot, 3); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_V2H, 0, 3); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_HS_HIGH, h_sw, 2); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_HS_LOW, h_active + h_fp + h_bp, 2); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_HS_CNT, v_tot, 2); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_V2D, - h_tot * (v_sw + v_bp) + (h_sw + h_bp), 3); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_DE_HIGH, h_active, 2); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_DE_LOW, h_fp + h_sw + h_bp, 2); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_DE_CNT, v_active, 2); + max96712_write(priv, MAX96712_VRX_PATGEN_VS_DLY, 0); + max96712_write(priv, MAX96712_VRX_PATGEN_VS_HIGH, v_sw * h_tot); + max96712_write(priv, MAX96712_VRX_PATGEN_VS_LOW, + (v_active + v_fp + v_bp) * h_tot); + max96712_write(priv, MAX96712_VRX_PATGEN_V2H, 0); + max96712_write(priv, MAX96712_VRX_PATGEN_HS_HIGH, h_sw); + max96712_write(priv, MAX96712_VRX_PATGEN_HS_LOW, h_active + h_fp + h_bp); + max96712_write(priv, MAX96712_VRX_PATGEN_HS_CNT, v_tot); + max96712_write(priv, MAX96712_VRX_PATGEN_V2D, + h_tot * (v_sw + v_bp) + (h_sw + h_bp)); + max96712_write(priv, MAX96712_VRX_PATGEN_DE_HIGH, h_active); + max96712_write(priv, MAX96712_VRX_PATGEN_DE_LOW, h_fp + h_sw + h_bp); + max96712_write(priv, MAX96712_VRX_PATGEN_DE_CNT, v_active); /* Generate VS, HS and DE in free-running mode. */ max96712_write(priv, MAX96712_VRX_PATGEN_0, @@ -320,8 +296,8 @@ static void max96712_pattern_enable(struct max96712_priv *priv, bool enable) max96712_write(priv, MAX96712_VRX_PATGEN_CHKR_ALT, 0x3c); /* Set checkerboard pattern colors. */ - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_CHKR_COLOR_A, 0xfecc00, 3); - max96712_write_bulk_value(priv, MAX96712_VRX_PATGEN_CHKR_COLOR_B, 0x006aa7, 3); + max96712_write(priv, MAX96712_VRX_PATGEN_CHKR_COLOR_A, 0xfecc00); + max96712_write(priv, MAX96712_VRX_PATGEN_CHKR_COLOR_B, 0x006aa7); /* Generate checkerboard pattern. */ max96712_write(priv, MAX96712_VRX_PATGEN_1, PATGEN_MODE_CHECKERBOARD); From patchwork Fri Jan 31 16:33:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurentiu Palcu X-Patchwork-Id: 861138 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 468CC1F3FE4; Fri, 31 Jan 2025 16:34:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341286; cv=fail; b=TIygwwrQyLUOed1kk6CFmk8YHG3XNrJO0URoWpuVrcLlv2kJGpRTx7+Wh49pHUv+EplSS83Ziqx0ERB8/MV865prveXtoC0Sb0p1V2C3F2WRhAlpB8logpW9Zh1erfKCHoFZs2SJU7z+VpQSyZtxnajfx7uKknjV2GBBAMCA8Io= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341286; c=relaxed/simple; bh=xN7mKk0e4D5yI3zux/rvI87HzLOdyYbz1vf7YIlL00Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=JOjRMC81NLArbte/Lm+GsZjw37q9gKxnSaYe+38ZzyXm0IZcDzIJ2GaEg7CkHicEwOqc9jqfbSL/gmJ0j0LlZ/5DyokpoZmxcmOIzUwTmyk+/Kf9jzIcQyWGb7rvWq48GLIMWOxKdhkdOHRH98wZPcu/pyKexeb/yrNjhOk+mtg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=e2UQkjXj; arc=fail smtp.client-ip=40.107.159.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="e2UQkjXj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NKPn0wbmq1OeHreTAMkFSy46xu6lLqbkmajoMhn42ncqIM2/TmMdY06E9emcoWjdIl/s8HW1ZI9D6bbu8hHS6B7aa5WFMwoDSUpaQAq6MqzJ/m3TVjZkx8Fw/OFxD92eFVuPu1sKDbptz3sOtSRnpt8TBe1mQcOxFJgahOf6R6V5nv7AF2WvFYlnf/YnDTyGN1eARFrGJYhxWu599mV11o5cUNylIdlhm5+2xujTxJDivI1QEO633FwguNdKfjpesn79QqxHozUrlIYsKp4x2/cVEo/8JYOrxTxSa0S/HyudWHxXXelT3X1MRyfrApYC6n4GhZ44DpD/GDTXppW+Rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=v0hgAqAg5QZs4n4zHj3ymCXDESQ2BybMl9OjrA5/qBE=; b=sayFWIo8Sc9CIOusBMGcU05/eLnNfXcvXjwOJ1tAsAky+rTHUZD6QKJRnHJX1ySfKqu2R1jnm2oM5jHERp7wWUzUmU4DElXtmkT/n/PWcSE6jJEMRWQ54UCETpJOOTL2p63UlCKa+ROPd1UYfynyr8cv2US+vtx7Yi/jjsdUE3gzRvBoAJ5D/Q2yHAz+7kWRdI3HRb6iynA376NC5vkbYmcmtuK8SGrfd07otiOTa+Lx/AcGK22+J2jvswMv13czW6Cu2tEwK4MGKi5io1bJidCne3XXUhX3ZRPb0MKKk5DKiX/S0HQdNP9ovYbuw32Z37kEGKEBro5tyUvYw3SVNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v0hgAqAg5QZs4n4zHj3ymCXDESQ2BybMl9OjrA5/qBE=; b=e2UQkjXjIPv6Ua2hTOm+GkJULOx+DzGJTJVht2yZGlmN8dWZxW8p6yWivHjRogtJctbiguTcHj2eEtwSvsFa5kR+v86DSyGVyRTLY/aAtD+ZZNf6jWX+sGdIrYXFbHy9/Le2AfTgXxdc0v0TQJNa4X7B0XyMkOqTFNJPK1UanPlhnSST5k0kMfsDSwMQURyxZ4gnIgQS16GKDyaTvIoPK7/KjAvY8XyheFPI8FP4GLuI3nGUJBvfub4zQrQisGO+Eb8gLpR0ssUSAx+2MbSRyjYZiF5yeAK9fWGygUqSKt09uuGDsrpJHoZE4zQoOPk+U4vfmdrTNmCRHiApz7fDzw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) by AS8PR04MB8529.eurprd04.prod.outlook.com (2603:10a6:20b:420::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 16:34:38 +0000 Received: from AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30]) by AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30%6]) with mapi id 15.20.8398.017; Fri, 31 Jan 2025 16:34:38 +0000 From: Laurentiu Palcu To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Greg Kroah-Hartman Cc: Laurentiu Palcu , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev Subject: [RFC 05/12] staging: media: max96712: add link frequency V4L2 control Date: Fri, 31 Jan 2025 18:33:59 +0200 Message-Id: <20250131163408.2019144-6-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> References: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> X-ClientProxiedBy: AM0PR01CA0151.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::20) To AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9576:EE_|AS8PR04MB8529:EE_ X-MS-Office365-Filtering-Correlation-Id: 7ea9961e-8e01-4df2-016e-08dd42152756 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: CfopW1DAwhret72PqjFmIkKuLBN/OJSClEOF65YDokuJBvpJ7K6JtQ4DkcrSg1OQadrOZcY7ApIOVOjnhcKuIZWBl3gRZwiqlxj8tMoimNsdwW7S7/jOdtOLkUXMJavdhiBBZ6JrkUAEH32N/l+yXRZo/ln11YllFy8ub3DV+Me+baYPj2NZbvgkj7jEVdXGvt3fUY80Xv1+8QzCOwOsQlg4RMeREXTY54MdL1x65tTbgwmZ8h6ejMgYWAlfTvWIVLOClYlgLIJ1F4q16GsWMdYzVbeZd2u4Nc+q2cRo/ERfK23tQpIQwnLxfXjdkJRCSeQkJLCFUHRxv+lyaDsNDJkegoYhDrkgtj9M8CHOwVwoQXFX1X3ciNo61Zca4Z1tcMlGrSY4VAHGkR6D+Rhyynq+fNrPVL/VXLthFDqPcG2ONz2VjSuJoAYPzUcrZR91BgaCujmRkbHUazICO15uAtwkXpH/f0KYRkYSJ0Y1uyvCV1gDLiOf2eWYGrRQiyCMp2GguT+d0EzapXz+Xdsjzg+Yi8l7mUV3ss/nFbJedYsRIwuplx9mOIrospYQUgKGGFIF3FX2gua3C4TxouIRVV0m9e0UaYbSdx9p77dDRYh3l9iH2tskOVwP2tDVXzWxsAEYKV5hI/v1cASYHioqT1J5mDmDWqmSPe18B9yPoCrbQSOzvi4Pyf+0fgmfmjy6vPTUFXzSqBEX3sR+GSdTve/AeIjqMhbSNGS5rmQ3mNG8xc5Je+RTxOpJo+OOLsdVRGMBwADTtrmL1m5VhuZrNLx/iovhvhYeYm0GXKoRmiYjSSmIQOiSXgdHIk3h0t5FPsyTOyUKyaNbp+HZhLvT6F2b8KW8BXoHA4bjWsKAVxy1Xqfq1gv9XunN+9UyxBJuelBy/3324mF4Q2NjicfXZonZh4qqa7hSQ8rCkGZYgNIYoMivluip4y3TUlTNeJPYuSFnUWRaC/5t6gOd5iRhKjgKJrueNBrmGqKmtI6GYhfdr28/6Iqd7X/YO39j3ld9raxP6shj5gAsz605Miy9ubOi6UQCnS7HTLFiDAJNkrwVAJ1mToOw1wkhnP0VoKxIFUz0TF7QM5xQQxRmLChirtxX/fU3/vxqKkI8RnwmXdpuODhSLn7TmlbQGeOjtlX5yEYfjxG5zDxBieHvC2aWlDo1iZEXRA5yRTWHUp6Bg4M8WU+vVEkAisXclqeUV66p5uhVQ2xMaEf6UHiwB8xSN8deTDXPMpM6a9sZs9rENW1KV5sOTurIo2XMdbRtZHaG7+l4yNi3o5lI+JZKN+nE5pT1dD8JsCqYaamtbwhsCI+CUpVvJwxTW+aDMxsI4bZYEs5VE4AyXeB67b7n2BudAGAIbmfuHftjiZHOGBHOlGW2zqqBPz0DHUvBonJ2CJrq X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR04MB9576.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TDOZkFJUgFYyNhqkoZxk+arIAPbA/5y1TZLCiVANMIlYfrekzYlKRQaRzW0IO88iUBiRVB4lT1/LH2aFzvtFhPLy3cCZTImNUbfU+nzLREyWyN74tfRorTvW+xVrHzUW4ZZP0BQFcjBy6MNfO2Ds45FOrh1VvN1REF3FJk2VUMwiE6IAP7hJFD0an3YyuEEdehwCBE38rl3dSFIvuNWhv4h2S/r46XpHIb+lrzkMZ97syY0zAxYOjuNfWopBhowmKwYGKRGqXCD++5qdrX1nQvbhrW0M+OAqtJUxSA4hquFx3MR5n5DVwyJHMbiDAUbMSC77D4noUP9Uy+lJ6IaI5jFJ4/OjrzeFcgP1ZHZLj97EZKV2cs+xnHTo5FWd1RcmDQiHD3Vb/wthUqji3+lgeSGsf5zMO5rIk/d3FyaQk8Hbwa9N6wBz6oN/uQyDt66ZrcWQp6ZQh7CXL2PTm3izEWbUkXvBr6r6HSKYDEHlpC14LciEh/BQ51RPrPIx2+KBKIAsboV6f8lg2ZiZbDr4T8G/IBxRqkJzkjeH3VdwpOn/WVHnYwodO4Te8zJB+o2EVteawugNCvtpgF/UENSX4/sSTlf740moXGrHnT4abYu9yefxYBltj1n1THkiwli4h1CcqaqZIYqs3ToOoXeiUdgaerjYY7dDfR03YS66qthIetrWnE20qa54GbTXGhvJHXgNoEfXyzT2VBgLPigDb+eWm9RLv+ZiCga5Bu6Fh1pwJGcYcCOG9A1xgYeOypuSCDj8meh0gQcr62jxxxgXBBTOOBB05k5JAnC1KD2KtIX73C5q6jaPVwLTuYZu1kUT8HhBnaGQwa/adRPe81xwnTE/EXa0BLWmdSBdVa6h41CfPSVZS17/P9NEWhJ6IIz3U34M/0QrzXi8jwnTuUqjS31yn74dd0DPlF1jE7QwnIwl9a2atYhFKQDy8rR1F1w+MnJtZ0jjOOWH05wvH6wGLTKqzFDSx7/yIE6d7xb5cdw6byz4gNCJeZz8gDMQU3x2SqoOppucdiLn+rl5GLcAFRxuBO7LCyzKcBQP53dVr8tkRaaS53AV8aCcb9/upu4fqYvT2GXutG1LGX0scAP66xcRbnT05LjSTyUgSYZ9TbA3qS68dR+2oYA/U4y6xBFCYPuqyhhAyI+eAx/ms/T62WL9ohRXE3g7CAiYXa6/BodSA8S33Z0R9fZC+XANIvz4wgDHhPMEJexpH96JmUfvNLQfxE4xnTMinmVfCetJRCh4QOM9XEDqiKcDb9zPugNna2zmAzOPoaWCaLJsNdzhOR9uQNxgZySUY8kv05kCfyUqxGrKU9S5HFmyFcIe7nHR9WIGmHdAvhgUk4GOHkOwqquJh8u1ubCNy2Q/HpD2ltXH57Oi/L46yvy2L+NUeTrmmb8d497gxPMORcZWB1okMyfHzUf9FhtV08+2y5xlynfaZfJqNw2bGQDw6ow0YawlRCPkoVBErT55iI+jp9+xEbMVSUNN6s4Gf0sioel7exmG6POJEN90Am0tsrw7bJknk/398SaUvbsLGnqC5plTFHeiJ0Hr4wTYsLUzToYahuHdWkQS37T26xt7hNdAb10G8egDhoQPE+yjMHHPqAN47w== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ea9961e-8e01-4df2-016e-08dd42152756 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9576.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 16:34:37.9842 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: P87Vfl43a9rHjGyAImeA9mYpRM0yiubYmDbZXPFja/XxW6DZYp+5Uu0vuqWI+b2VnXxh2hFfwmtmbEU5MgDQsQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8529 The downstream nodes can use the V4L2_CID_PIXEL_RATE control to estimate the link frequency but this can result in innacurate rates. Instead, implement the V4L2_CID_LINK_FREQ control and pass the link frequency from DT. If link-frequency DT property is missing fallback to using the platform info DPLL value to compute the link frequency. Also, remove the pixel rate control since it's not needed anymore. Signed-off-by: Laurentiu Palcu --- drivers/staging/media/max96712/max96712.c | 79 +++++++++++++++++------ 1 file changed, 60 insertions(+), 19 deletions(-) diff --git a/drivers/staging/media/max96712/max96712.c b/drivers/staging/media/max96712/max96712.c index 9c255979932d6..546660e4b3d1e 100644 --- a/drivers/staging/media/max96712/max96712.c +++ b/drivers/staging/media/max96712/max96712.c @@ -83,7 +83,11 @@ #define T_T3_POST_SHIFT 2 /* MIPI_TX: 0 <= phy < 4 */ -#define MAX96712_MIPI_TX_10(phy) CCI_REG8(0x090a + (phy) * 0x40) +#define MAX96712_MIPI_TX_DESKEW_INIT(phy) CCI_REG8(0x0903 + (phy) * 0x40) +#define DPHY_DESKEW_AUTO_INIT_EN BIT(7) +#define MAX96712_MIPI_TX_DESKEW_PER(phy) CCI_REG8(0x0904 + (phy) * 0x40) +#define PERIODIC_DESKEW_CALIBRATION_EN BIT(7) +#define MAX96712_MIPI_TX_10(phy) (0x090a + (phy) * 0x40) #define CSI2_TWAKEUP_H_MASK GENMASK(2, 0) #define CSI2_TWAKEUP_H_SHIFT 0 #define CSI2_VCX_EN BIT(4) @@ -137,6 +141,8 @@ MAX96712_MAX_TX_PORTS + \ MAX96712_MAX_VPG_PORTS) +#define MHZ(f) ((f) * 1000000U) + enum max96712_pattern { MAX96712_PATTERN_CHECKERBOARD = 0, MAX96712_PATTERN_GRADIENT, @@ -160,6 +166,7 @@ struct max96712_priv { bool cphy; struct v4l2_mbus_config_mipi_csi2 mipi; + s64 link_freq; struct v4l2_subdev sd; struct v4l2_ctrl_handler ctrl_handler; @@ -252,12 +259,28 @@ static void max96712_mipi_configure(struct max96712_priv *priv) PHY_CSI_TX_DPLL_FB_FRACTION_PREDEF_EN | PHY_CSI_TX_DPLL_PREDEF_FREQ_MASK, PHY_CSI_TX_DPLL_FB_FRACTION_PREDEF_EN | - ((priv->info->dpllfreq / 100) & 0x1f)); + (((priv->link_freq * 2) / MHZ(100)) & 0x1f)); max96712_update_bits(priv, MAX96712_BACKTOP0_25, PHY_CSI_TX_DPLL_FB_FRACTION_PREDEF_EN | PHY_CSI_TX_DPLL_PREDEF_FREQ_MASK, PHY_CSI_TX_DPLL_FB_FRACTION_PREDEF_EN | - ((priv->info->dpllfreq / 100) & 0x1f)); + (((priv->link_freq * 2) / MHZ(100)) & 0x1f)); + + /* disable deskew on PHY0 and PHY1 if D-PHY is used and DPLL <= 1500MHz */ + if (!priv->cphy) { + u32 dpll = priv->link_freq * 2; + u8 auto_deskew_en = dpll > MHZ(1500) ? DPHY_DESKEW_AUTO_INIT_EN : 0; + u8 auto_deskew_calib_en = dpll > MHZ(1500) ? PERIODIC_DESKEW_CALIBRATION_EN : 0; + + max96712_update_bits(priv, MAX96712_MIPI_TX_DESKEW_INIT(0), + DPHY_DESKEW_AUTO_INIT_EN, auto_deskew_en); + max96712_update_bits(priv, MAX96712_MIPI_TX_DESKEW_PER(0), + PERIODIC_DESKEW_CALIBRATION_EN, auto_deskew_calib_en); + max96712_update_bits(priv, MAX96712_MIPI_TX_DESKEW_INIT(1), + DPHY_DESKEW_AUTO_INIT_EN, auto_deskew_en); + max96712_update_bits(priv, MAX96712_MIPI_TX_DESKEW_PER(1), + PERIODIC_DESKEW_CALIBRATION_EN, auto_deskew_calib_en); + } /* Enable PHY0 and PHY1 */ max96712_update_bits(priv, MAX96712_MIPI_PHY_2, PHY_STDBY_N_MASK, PHY0_EN | PHY1_EN); @@ -409,7 +432,7 @@ static const struct v4l2_ctrl_ops max96712_ctrl_ops = { static int max96712_v4l2_register(struct max96712_priv *priv) { - long pixel_rate; + struct v4l2_ctrl *link_freq_ctrl; int ret; int i; @@ -420,18 +443,15 @@ static int max96712_v4l2_register(struct max96712_priv *priv) v4l2_ctrl_handler_init(&priv->ctrl_handler, 2); - /* - * TODO: Once V4L2_CID_LINK_FREQ is changed from a menu control to an - * INT64 control it should be used here instead of V4L2_CID_PIXEL_RATE. - */ - pixel_rate = priv->info->dpllfreq / priv->mipi.num_data_lanes * 1000000; - v4l2_ctrl_new_std(&priv->ctrl_handler, NULL, V4L2_CID_PIXEL_RATE, - pixel_rate, pixel_rate, 1, pixel_rate); + v4l2_ctrl_new_int_menu(&priv->ctrl_handler, NULL, V4L2_CID_LINK_FREQ, + 0, 0, &priv->link_freq); - v4l2_ctrl_new_std_menu_items(&priv->ctrl_handler, &max96712_ctrl_ops, - V4L2_CID_TEST_PATTERN, - ARRAY_SIZE(max96712_test_pattern) - 1, - 0, 0, max96712_test_pattern); + link_freq_ctrl = v4l2_ctrl_new_std_menu_items(&priv->ctrl_handler, &max96712_ctrl_ops, + V4L2_CID_TEST_PATTERN, + ARRAY_SIZE(max96712_test_pattern) - 1, + 0, 0, max96712_test_pattern); + if (link_freq_ctrl) + link_freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; priv->sd.ctrl_handler = &priv->ctrl_handler; ret = priv->ctrl_handler.error; @@ -515,7 +535,7 @@ static int max96712_parse_tx_ports(struct max96712_priv *priv, struct device_nod unsigned int supported_lanes; int ret; - ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(node), &v4l2_ep); + ret = v4l2_fwnode_endpoint_alloc_parse(of_fwnode_handle(node), &v4l2_ep); if (ret) { dev_err(&priv->client->dev, "Could not parse v4l2 endpoint\n"); return -EINVAL; @@ -533,18 +553,39 @@ static int max96712_parse_tx_ports(struct max96712_priv *priv, struct device_nod default: dev_err(&priv->client->dev, "Unsupported bus-type %u\n", v4l2_ep.bus_type); - return -EINVAL; + ret = -EINVAL; + goto free_v4l2_ep; } if (v4l2_ep.bus.mipi_csi2.num_data_lanes != supported_lanes) { dev_err(&priv->client->dev, "Only %u data lanes supported\n", supported_lanes); - return -EINVAL; + ret = -EINVAL; + goto free_v4l2_ep; + } + + if (v4l2_ep.nr_of_link_frequencies != 1) { + dev_info(&priv->client->dev, + "No link frequencies provided in DT, use platform info.\n"); + priv->link_freq = MHZ(priv->info->dpllfreq) / 2; + } else { + priv->link_freq = v4l2_ep.link_frequencies[0]; + + if (priv->link_freq < MHZ(100) || priv->link_freq > MHZ(1250) || + priv->link_freq % MHZ(50)) { + dev_err(&priv->client->dev, + "Link frequency must be a multiple of 50MHz.\n"); + ret = -EINVAL; + goto free_v4l2_ep; + } } priv->mipi = v4l2_ep.bus.mipi_csi2; - return 0; +free_v4l2_ep: + v4l2_fwnode_endpoint_free(&v4l2_ep); + + return ret; } static int max96712_parse_dt(struct max96712_priv *priv) From patchwork Fri Jan 31 16:34:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurentiu Palcu X-Patchwork-Id: 861137 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 947951F4E52; Fri, 31 Jan 2025 16:34:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341292; cv=fail; b=Z0E/jYuaFzWVeGRrOsV1+DEBoHezuze+kW1E0C3ZvAF1xUJXL6JrDJqmZNjG5Hp47jmM+zth0y/qiOSRoALJga3rt2q4lj73RhmExEA7mkRuUh5l1jSrheZanmtaG41aHU0Jdx1pmc6UdTYYaySch2pK2PErf/gTp98vh6SYSHc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341292; c=relaxed/simple; bh=WzJNASaAyqTw40nhxOqyg0Vs6gPQxfk+3aVs3/7tMbg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=qHdyc4T7aTpKFzDEeqyCc1QySkzdMA1xForUs8fbLCzL1cu9gXJ4yfZoklpEY2HTQDbpixRRcWrqzo1L9TRft88f7msy9c2ATB6Nq/IrSTjcpCRXVIskV7BGsQ5aJiT5eWhHWQF0PFX9EZwdnCbXgRbWm7pGsZyZd6akcNVX13w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=dAAihuDY; arc=fail smtp.client-ip=40.107.159.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="dAAihuDY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AfRVJQVucqN8X9A5ijQlHWcBkXHT8S5RrhxLv1ciKR0M5BK93o6SyTLUmxUNfeArgRhMiEEUloOaje1OM1AVEjURYNv27y/jNAYRaY859iwlEeGOiSi5uBIheB3wZVmCwsVX5nsp34HA8aK873LPW8xof0sE7/MDRwP/ZT3uguXLUHdVR920Fs5MSGrigJOfiZbJnEj4i2mccpj6jhqquZx8f0QVwEhAN1JSbRDgIRavX/BfBrS5AunxXGh7FPIrju5VoEV+t32Z9TMTde5fMw28uykn6Wm5rbefpQZXg49YmI4y9xZR0u/M2pAaEQIWFaSVXRNhpsd4vjxONGPm9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JZSjDZKxZoP/9q0aJBxwZjcP0Jc3EyFsW7qHS2lKeoo=; b=kUG9nm/NChBNn/OmkObQmUvi77EqK7mE+g6gjZGYaFgULYJlMmetx/ueV+cT8ZlQEjXj49pVlo3dxtmPjhN0StsDWb3R61cXTFWCcgWKnVYAa7aWOTNvgPQ36hVmFK4xk18PfGoqXDJ639c+r/DDC350DnJNhkhqT+RGIepOva0mi1TRSZWJwZlFdJODrWq8xKXEBveAQqFoQK3cLnSCw+R9CvkQ9QYBHHsWnSeBm1tknmJJPf8HV0uy0K8nhLnHCp1HRjLu/0whGVXMWPS5+uWedKUHUR3HlocMka7bt1KjIpiYzywwamHuyBpfNg4h/RjIPF8Xx3vMu2/e12+gNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JZSjDZKxZoP/9q0aJBxwZjcP0Jc3EyFsW7qHS2lKeoo=; b=dAAihuDYuT6BMVse1qBIFlhYDKB1IuChdDVCUwIxJ1HF3M6I624q5cwaD2jLMUXtQ4gH3k6omsEqveSZlrWYCu2aTJDfftL5jCIEthb/bFjANzuyyM5bUQQ7K6bbtsmu6dqwyA1jdfbSkvCLmGXZhtKBo0tqR7nlKlCrTXzbkZcDoF7mUZVmoPqf9mLkPT1LfDfHZxoHS1iDfjj1AUlqqGmUmPJNJPewgqSspRvquTlMlaPz1ieY+DkCsfMe5cZM0AvgNYgCsJJCrlIiUTWKtaUXPLBP+W15P8+USLfJsKSnbywfX7luOTzQD6adUN9tNLOiJrmBnU/byv0+RGlVRQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) by AS8PR04MB8529.eurprd04.prod.outlook.com (2603:10a6:20b:420::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 16:34:43 +0000 Received: from AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30]) by AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30%6]) with mapi id 15.20.8398.017; Fri, 31 Jan 2025 16:34:43 +0000 From: Laurentiu Palcu To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Greg Kroah-Hartman Cc: Laurentiu Palcu , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev Subject: [RFC 07/12] staging: media: max96712: add support for streams Date: Fri, 31 Jan 2025 18:34:01 +0200 Message-Id: <20250131163408.2019144-8-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> References: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> X-ClientProxiedBy: AM0PR08CA0020.eurprd08.prod.outlook.com (2603:10a6:208:d2::33) To AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9576:EE_|AS8PR04MB8529:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ae0564a-a4df-4a14-2818-08dd42152a3b X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: Qdi2upsIG6zA5UaIUMCa+UC8a/7TuUQOs1Aq0KvYtAOIw6moU7GeCXzBW7/HhoG1/fJlgfnD1VmqhGk/chzDmuts5MUw0OoavLMA+uloOX0WMbIhaV27k0q4vC5RTUlNLy2lm4dnpfIBB6YQbo57l8jH182sagtSEhLntQLdpqSQ0enJZwu3n+pXdYACUhnrQ3ootP52NKoUmD/crqXCUaztXAaZJhOlYaqK41LHpvHtBMvbqLiMmICj+lKxQne+Bi0piVWp7YLhcmOr9znmykn5bxUfzkX4zwSJYnUwLmZ2+gkQ092N0wHgIZ7uxZaEpflQeeVk6Agnjps+X581i72aIbsxdt1jyDzTiWnz62ScCu3TfoUPKGT3KP4VSy/9794aYFwx2HPFn9LdDZ9klfY+iiIj8R7ymn8sASY4rlp3G3/kwOzydsUZwLEpADCI4mnOf+cKO1N4/Excpo3O42kSWe8C1CaDMV/cd0AWpytEO43nrVY+wOuNE6YQnyEu2ByCCBv6r7J8PmExDBHFSV0s95JATMCVKe0Ma9uO/VZ2s70FSmKNsZvlnIniWU3bFfUL9WAgIQgEJdNDQtJvpY16Tgk2+EZQMnjKRVBH6Oc+1eq+GQI98ZdVTqdA289T4RTmRjSY9nIPetVguJnm0wji9DBSeGKSopgGvwICCRS5atUICaC23kk977fq+VqbLXE8iyhRVbRmhctuzMYn8aPpCdxLKDxVlhuUwPnAV2Zz24+aPXVQcjUwdIYqrizSzeytR2AIGXvg3qnFBfVUVWEj0EggntPutS1BplVhS7N0vtikyveSctRkmJIJwsAOzzThJ01cWKwm/EsZrD5LkmlgkvvlsLtfQReHc0cvwoOfq1LFe880HkXZCtnjkIKrtIOD1B1U8rNs5o+QNr2NjycJeKnPtTQO8yd92VajLtd/lUEYawAFd7fbU2XRfBWH8A1Cv2TvZyCtaGtxgbcz8H7QixuwSENFuxmGHQD4ECtyAG0jvtS7cK1VbnDskrlMf5eQPp+R/4Iv1NN/f+XGdifezpCr6Mu4P7tG2RcI70pXGtYi28X5r7zDWf9fXcX3PMY9HUHXV8JKwPZrC9lbRAYhvbfSoRMqp9utzbkbHgeY/Ra5XNvLkE8qviYCWivwJhNsNU07Z5lHlg8U96kXDaH5RatmGSNsKpFPOIoeMysmQ/T6uWOj9PGGDEtH2YXKhtiVw5IkRULWqOjhNGOyC1xtnlVKu6nEjzRs7LZTmN4r4DuNfR9TNISHO0kM4mWzLV7rsQFONULbOX44PP0j8lCoTZCtrIuSX526xr4DH/MRm3XH+oAx/oYtRJ/Iazh5jNBHjPVNltgyZxVuzJEd4Wprmm0q/oax8bZK6MRXgXLEcaK9l+/JL2trrjpu9xFn X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR04MB9576.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: S7qR0Y5thErn1F3OiA3RyqyqhqLlLDZGItWOrlIFn7q2JL/Ni1rA4ejs5t0ml6kD+TbATE+s9e7yXHOApZ1+3Km4u98XODweztdo0dmhTtw9hute5WCRi9rVEq+bqeAtz7SlQMJKOjeQ70YxkkY0daBz/Dd2wdEBpfRgxNHhTiXjN8y90b6n3yj9i2MqFxHGqKsQIDoHfFShSwB9NkAYdZgeM9uZ9xxVZ+iGsLnUSf8uFxSVldNM+6OwGYDQW9Wk2CBQn7NBP0qk4LfrT4rBvCOpR2PD3MIpVI5pO9WNasa66mMg8Z3lzmtyT8/w7PNVURy3B7XfBUhoN0Sp8dhdm4BSyO86YmD0GR61/Rx46yMMc43rJKnfxm/tzOROmCy21Ai9iS2dvIpj0+sSPpXmmojI27+WMpcNZt9xWM4BjARS+Y9p0FIzFr/xG0yCMM5WJ0GgwfooWuV/oIv5gK328p+w76/VuXeAA3IERo6yobIwJs5IYu6xqRdejecHWJ7FIc4UKK9VwgDp0PvIrK2KiVehp04Axc05hQIYscKtOnJvthxN9I7p5C2SCv51aMlXCTRSqcCXkE4fhx1X84p/VYQsnUNlr2Cjf2FGBWcVX261V0f9ut38j7cHP25+Wnj+oV89cSnpgeVXkVGLWP0L+XXc7Hz083MzHrSn+WZRsSJtk0ZqhtpngGpKdhrhlh8UPdh1z9CzFlOswB8va4YvZJGxv9UAwm+vBqqbowk4MMDdAAsmvZrPNZkmHSSbzE5rFOWvGQIUsqceYVGS7BPO/MjhsK9ivwQHFFa1g8XSLuBxXursLJmv7ympu29EMkYccoYf5RJytZsQ2LCwBi5MZ+uOL2XNcpTe+6iN+WtphK8soTu8a/31YZMwiX/UvhvfroXdcz4HuVglmjCPatOwWvqiKz2hOcT5KMQwbiyeRofc16bsdcntZ5wHUr0lvogyJgfJ4RaDSLcY7ekq0sLlNnmFoGtSSFk1V0Ep1vS5Ymjwj8B2m1UvWiJr3b0+UfBGvESFNJbmEItkSh/j2xjt3phijbOsD9sUBZzh5ycWNTmVQvW3jkLc591Wf8FpmKhNiwaHSVt/aEgs2lYEztcQWObSnQP6dp9yFLYPN2Z+qoCWhIxKLE6Uv4rRGch7RX4HVTZJy6aG+36yhMjLvI9jvI9JdjrqpNetqt9HkNYFsXuoXokHh3GSIiL5B1vaf8gdueOdPlhwELvAq2U3Lm8F0eS5LYvHrz55ZT+sgj+GrPkBzVCI/IcL7fagCZikOIlsFimidXeI5pMjp4FFIuRHyJ+4gFQzk5ipOEbo2tEjUZa8C8meG+Mj8rPui9/Aa1M+wmkVJYdk5QJcAvFz048+B1dv4y8bcJ+xwyJNZoFkPtojSjJulTy0cNC6h3jLAYkfzsvoUyHl3GgwDf4Uhsb8S0BVAlq8R2yOfIXIY4ZLwbFNRE14q09/HMceA3CgKwIa2SrM07n+KvKABC3M9kcxlqDgqnJmGlTG6tphQRDybu9hBJvR6gKxAsw6i6uV++U/GuOWJYPRiOjvVnbzNwKaa2iBDYjcp796UNlacYxDbu7HSmi7uW+7MnNlG23PZF9YunBAGY9tscSG8VrNPfX/5g== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ae0564a-a4df-4a14-2818-08dd42152a3b X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9576.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 16:34:42.8459 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iImW4zRKbdEP60rtAygTFAuiKq4rQQ/+jZ15RebaFo0dq8Oq3PXzZrPnV7ODZBjwes2vPdv97jexF/0Jfr/QxA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8529 Since the chip supports 4 incoming GMSL links allowing for 4 sensors to be connected, we need to add support for streams if we are to use more than one sensor with this deserializer. Signed-off-by: Laurentiu Palcu --- drivers/staging/media/max96712/max96712.c | 177 +++++++++++++++++++--- 1 file changed, 158 insertions(+), 19 deletions(-) diff --git a/drivers/staging/media/max96712/max96712.c b/drivers/staging/media/max96712/max96712.c index f68a1d241b846..a078e4c67c360 100644 --- a/drivers/staging/media/max96712/max96712.c +++ b/drivers/staging/media/max96712/max96712.c @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -153,6 +154,10 @@ MAX96712_MAX_TX_PORTS + \ MAX96712_MAX_VPG_PORTS) +#define MAX96712_FIRST_SOURCE_PAD MAX96712_MAX_RX_PORTS +#define MAX96712_VPG_PAD (MAX96712_FIRST_SOURCE_PAD + \ + MAX96712_MAX_TX_PORTS) + #define MHZ(f) ((f) * 1000000U) enum max96712_pattern { @@ -194,6 +199,16 @@ struct max96712_priv { enum max96712_pattern pattern; }; +static inline bool max96712_pad_is_sink(u32 pad) +{ + return pad < MAX96712_FIRST_SOURCE_PAD || pad == MAX96712_VPG_PAD; +} + +static inline bool max96712_pad_is_source(u32 pad) +{ + return pad >= MAX96712_FIRST_SOURCE_PAD && pad < MAX96712_VPG_PAD; +} + static int max96712_write(struct max96712_priv *priv, unsigned int reg, u64 val) { int ret; @@ -364,27 +379,119 @@ static void max96712_pattern_enable(struct max96712_priv *priv, bool enable) } } -static int max96712_s_stream(struct v4l2_subdev *sd, int enable) +static int max96712_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_frame_desc *fd) { - struct max96712_priv *priv = v4l2_get_subdevdata(sd); + struct max96712_priv *priv = container_of(sd, struct max96712_priv, sd); + struct device *dev = &priv->client->dev; + struct v4l2_subdev_state *state; + struct v4l2_subdev_route *route; + struct media_pad *remote_pad; + int ret = 0; + int i; - if (enable) { - max96712_pattern_enable(priv, true); - max96712_mipi_enable(priv, true); - } else { - max96712_mipi_enable(priv, false); - max96712_pattern_enable(priv, false); + if (!max96712_pad_is_source(pad)) + return -EINVAL; + + memset(fd, 0, sizeof(*fd)); + + fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2; + + state = v4l2_subdev_lock_and_get_active_state(sd); + + for_each_active_route(&state->routing, route) { + struct v4l2_mbus_frame_desc_entry *source_entry = NULL; + struct v4l2_mbus_frame_desc source_fd = {0}; + + if (route->source_pad != pad) + continue; + + if (route->sink_pad == MAX96712_VPG_PAD) { + fd->entry[fd->num_entries].stream = route->source_stream; + fd->entry[fd->num_entries].pixelcode = MEDIA_BUS_FMT_RGB888_1X24; + fd->entry[fd->num_entries].bus.csi2.vc = 0; + fd->entry[fd->num_entries].bus.csi2.dt = MIPI_CSI2_DT_RGB888; + fd->num_entries++; + continue; + } + + remote_pad = media_pad_remote_pad_first(&priv->pads[route->sink_pad]); + if (!remote_pad) { + dev_dbg(dev, "no remote pad found for sink pad\n"); + ret = -EPIPE; + goto unlock_state; + } + + ret = v4l2_subdev_call(priv->rx_ports[route->sink_pad].sd, pad, get_frame_desc, + remote_pad->index, &source_fd); + if (ret) { + dev_err(dev, "Failed to get source frame desc for pad %u\n", + route->sink_pad); + + goto unlock_state; + } + + for (i = 0; i < source_fd.num_entries; i++) { + if (source_fd.entry[i].stream == route->sink_stream) { + source_entry = &source_fd.entry[i]; + break; + } + } + + if (!source_entry) { + dev_err(dev, "Failed to find stream from source frame desc\n"); + + ret = -EPIPE; + goto unlock_state; + } + + fd->entry[fd->num_entries].stream = route->source_stream; + fd->entry[fd->num_entries].flags = source_entry->flags; + fd->entry[fd->num_entries].length = source_entry->length; + fd->entry[fd->num_entries].pixelcode = source_entry->pixelcode; + fd->entry[fd->num_entries].bus.csi2.vc = source_entry->bus.csi2.vc; + fd->entry[fd->num_entries].bus.csi2.dt = source_entry->bus.csi2.dt; + + fd->num_entries++; } +unlock_state: + v4l2_subdev_unlock_state(state); + + return ret; +} + +static int max96712_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 source_pad, u64 streams_mask) +{ + struct max96712_priv *priv = v4l2_get_subdevdata(sd); + + max96712_pattern_enable(priv, true); + max96712_mipi_enable(priv, true); + + return 0; +} + +static int max96712_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 source_pad, u64 streams_mask) +{ + struct max96712_priv *priv = v4l2_get_subdevdata(sd); + + max96712_mipi_enable(priv, false); + max96712_pattern_enable(priv, false); + return 0; } static const struct v4l2_subdev_video_ops max96712_video_ops = { - .s_stream = max96712_s_stream, + .s_stream = v4l2_subdev_s_stream_helper, }; -static int max96712_init_state(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state) +static int _max96712_set_routing(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_krouting *routing) { static const struct v4l2_mbus_framefmt default_fmt = { .width = 1920, @@ -396,15 +503,43 @@ static int max96712_init_state(struct v4l2_subdev *sd, .quantization = V4L2_QUANTIZATION_DEFAULT, .xfer_func = V4L2_XFER_FUNC_DEFAULT, }; - struct v4l2_mbus_framefmt *fmt; - int i; + int ret; - for (i = 0; i < MAX96712_MAX_PORTS; i++) { - fmt = v4l2_subdev_state_get_format(state, i); - *fmt = default_fmt; - } + ret = v4l2_subdev_routing_validate(sd, routing, V4L2_SUBDEV_ROUTING_ONLY_1_TO_1); + if (ret) + return ret; - return 0; + return v4l2_subdev_set_routing_with_fmt(sd, state, routing, &default_fmt); +} + +static int max96712_set_routing(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, + enum v4l2_subdev_format_whence which, + struct v4l2_subdev_krouting *routing) +{ + if (which == V4L2_SUBDEV_FORMAT_ACTIVE && media_entity_is_streaming(&sd->entity)) + return -EBUSY; + + return _max96712_set_routing(sd, state, routing); +} + +static int max96712_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) +{ + struct v4l2_subdev_route routes[] = { + { + .sink_pad = MAX96712_VPG_PAD, + .sink_stream = 0, + .source_pad = MAX96712_FIRST_SOURCE_PAD, + .source_stream = 0, + .flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE, + }, + }; + struct v4l2_subdev_krouting routing = { + .num_routes = ARRAY_SIZE(routes), + .routes = routes, + }; + + return _max96712_set_routing(sd, state, &routing); } static const struct v4l2_subdev_internal_ops max96712_internal_ops = { @@ -414,6 +549,10 @@ static const struct v4l2_subdev_internal_ops max96712_internal_ops = { static const struct v4l2_subdev_pad_ops max96712_pad_ops = { .get_fmt = v4l2_subdev_get_fmt, .set_fmt = v4l2_subdev_get_fmt, + .enable_streams = max96712_enable_streams, + .disable_streams = max96712_disable_streams, + .set_routing = max96712_set_routing, + .get_frame_desc = max96712_get_frame_desc, }; static const struct v4l2_subdev_ops max96712_subdev_ops = { @@ -453,7 +592,7 @@ static int max96712_v4l2_register(struct max96712_priv *priv) priv->sd.internal_ops = &max96712_internal_ops; v4l2_i2c_subdev_init(&priv->sd, priv->client, &max96712_subdev_ops); - priv->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; + priv->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_STREAMS; priv->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE; v4l2_ctrl_handler_init(&priv->ctrl_handler, 2); From patchwork Fri Jan 31 16:34:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurentiu Palcu X-Patchwork-Id: 861136 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 8DFCA1F5435; Fri, 31 Jan 2025 16:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341297; cv=fail; b=MLJFyo9e2pZstzNPquhlTgUQjZjDuyDmzFgnDG2ikcYSb0FWntqDTsz5r9keqYgXHUDTBwU2BHIXUnpXqL6+ezUV51lEBJazQ0rJC1MwhHpDAyYlSvF/VGRwNL+MJUTMw5c/aFjkdbupUghuaxwRJrpjM8rhGepTnhe2cYN9r3M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341297; c=relaxed/simple; bh=fRNHTWxDFYyTsrv0QYiefZZYb2AVArN5438n1axWlyE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pZse5PNZ/Z62bbyKSQ8mK5bqMkXPd+irU8mV4BD8OBNGaOTg9bo0N9C6BoK2GZz3QnSGWcG5OVnYxLXESnwScXMJTdwWrLw1uMaYeBvNjYe92Lui1RfwfyLM2o2dXEAV5cZ1iHd85HywjeVmJ1zUflTGLgb0aaSa+Z7eD1i32tk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=neazvYEU; arc=fail smtp.client-ip=40.107.159.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="neazvYEU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hK2vicD+BH5Cj8L+j6un7iEMHKmhLlwHvrHJ8S6UEuzo3GWca6QGE04jVRE+NWXiuL9S66uqpRpW9YvlZfwElVNlW0DNVBdUWukPdz0bgHXBwvwQgwP7FXejXlRy8zFhXoFdNe1im46lZ8ceFox0RM5XMeknstlrcVeoEoWOsa+GjGXyPEyblaizVMyoqxhYOJcAHnXlV4zoF2slQZlDMMYPacT5kq00kub5mpqK5YOXYlxzS4FOl8HlE9xTo0hsWdEhORiKBTXGfWXILb3o+t9QwPfjuM+8KEANws3KaiyC2ihYeXOSQN2v6GM9kVSy1fpXTKElBkRa+967GTWFHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aSW0G4OXovQaBEsBShWAmHq4Q7Up1gDrLIl6BdRgZbQ=; b=bsFnGwICVB7h0XakYuTkdxLUpB4D6O9dqjr4uklIKDkZ0fgV6+eI8y20jqEioOL5HwCgKo5rp7VLBVKWlZM3s6U2YEHwtDIuvOLyUDYNxwRXmgBcDx0t+6ck0JQILzAUtOiLx9qlU7sZz+t0IIwjN3SLAX77QK5PwbnR3PqmivPlDuaMUEhAIfA9MNNJ8bynP5EMBBqvy39/1j58jdzSCvLke64cM/W942kQcbVlVTgVZRoPBJdcKbctiBnqayvpz151dO7i4cPqOVpSeL2EOXKC4o0chuv6i5+lfOTGA7RwFetDPVi67pBtWnScN1B+SpnF7wk5+4Q34yg4w9XQEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aSW0G4OXovQaBEsBShWAmHq4Q7Up1gDrLIl6BdRgZbQ=; b=neazvYEUN5XwHXRyPFYIwIOg11Hc7MeQd/UMUGPG1A9VIKgPCQ3YVxxF0gUeroSESiJbmk2ZMPuQvrGDVtxg9hiZVAZwUuKWLwPG4LnzuFzUh8yUAVNXHDbXeRmC8WpNw6Zz6FMgeXQy8k9fKzJNGL4LRMws2akf7DKxGmmbqUGzrN2e40siYx+BSHF68hOwjDcvhZ0GQNdV7AL8PhnCy2wG7Lfmy8DU/V89bS5yRh9aAVZyff2jbLE4TqmrSugRPH5F5jtT4HhaLVb2ESfxRclV9qlLOz9oELXt1KlylGId8TKwNTj2PbzaGmzT+QCeSzxRIjTUUtUtvgXUgRnvIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) by AS8PR04MB8529.eurprd04.prod.outlook.com (2603:10a6:20b:420::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 16:34:47 +0000 Received: from AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30]) by AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30%6]) with mapi id 15.20.8398.017; Fri, 31 Jan 2025 16:34:47 +0000 From: Laurentiu Palcu To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Greg Kroah-Hartman Cc: Laurentiu Palcu , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev Subject: [RFC 09/12] staging: media: max96712: add set_fmt routine Date: Fri, 31 Jan 2025 18:34:03 +0200 Message-Id: <20250131163408.2019144-10-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> References: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> X-ClientProxiedBy: AM0PR06CA0122.eurprd06.prod.outlook.com (2603:10a6:208:ab::27) To AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9576:EE_|AS8PR04MB8529:EE_ X-MS-Office365-Filtering-Correlation-Id: 33a0f83f-aa17-4247-1d61-08dd42152d1f X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: Nn6ghpo0r4OzulyHPZ2vu4ztw9KnAcaVHUou9ysRzN8y89eFrq7AsZ/Zgx4UED0dWCK9lTRjsiMAUS6M90uk7Hfglw7A5qz75vRE9WBz8JwKYphRw3V10ItcdaTzJ+AkawNbloBFm2zJZ8hapLenTfmpTdHp20UuUKWpnSxhV9hgM4neY8MmC9J4uW0i2RxbeP3CwHVrQxxTDfheZvCzd6vMlvoOAfnxRPj0noBp1ZyvF9Fr/9bw+2HswPxZx7xate/z7J6AVvC24OnqeYEKpN0/tBo5w2iF6udeK9B/oWtW3JaBlay+piwL3nPolxGRQMkMNBqc8U8aaxXx9Gh8AmDDqDhZdk/roe9WUhv+tFIea4SszTC67iDMgivbTTHoFtiJBK77EglKaktNIyFceJRiqZPE7mo5dSNQJ4bxgJmsIfWEIoWb1PQ+hDhMoFzylZmd5oThJbys+WpvLbErl6hfx505P5M4w2dsJvYp0iZnwOguOhe1PSa1qlF2U6SIolP6QGOq+Ci7y3llr3FFiD3BpfSAG5LSumaSWU9qszr7EVjZEwuEBvcTxWlrXdPkIbKcyN8RZnbEVegZGbZcW/RXj2B6uLRu44LUjSC18DFMfYSosQdcPrXyBTDWXAOK81XmF7xGthl8DT6nxShFbH3ibg+BgJeVa9G9y54wMuPDdd1yrW3A1Kn20EHECzr2+ulBd4NNHUEcmkEfIGRNnf/hUO45wYugR1vXFrsa5b7uUEJ9mM1UeEL/mUoPjMAfTsJO8gDYBkn1kIy8q329dO1tFucI+hK8AHuUdKaTKV9dUmmcmIg2U9/gybrNgBARvliQrNKk3cAhhyFKANol/gQrU3DOK/WyHIp7HyfLtXvtEi6nvzMw+js8Q156olFIwwMZT79ucjzrKPbh8Cu5QOZoFGRKMbfideu7+UPlk3VYccy4QRsm4E57Sg9D46F5wfI9Zw4hDcDPU/eYyL7g9Sf4Qdb+ZF86u0AcQGiVD9cu77ISxZ6Ga2vCPpMca+W+2nd8TVbSEKKjXK6qWijU4Y35YyvqCGZrEidaOwxQ9CEo8bXbkRyvnilVFCO79M0cMBGj8/1N09I8o95iOWWt0GadPkFJd9Z6vNFbMp0Rg44ue0w0AxbevWVv460pooS9L/Oou1vyG47wrh0cPRUu20mzGBk+7CKs/kMWOZjvSTLeh+hFbZvsnAiet2ME9bPW/5d52t3AxYGuHP7pZDDJuAS+pluy0Oou2sKnBtygfG4YZ9SFE984UqPaEC6+FqI8qJyi9954dOEoDr8pytUTEtE1MDvblkHWt37Q5Ri43ttWCX+SXX+hyLhqHwBd8QTPDgfn4bygCSU9uLpWwpmanaP28wxrjNKEwZ0W7Jr4ytvV42BldDPdQcg6cpC8Gli7 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR04MB9576.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8A0Zpcz3EYFNtyzSu/uuyIBV295syE2fitbXCVaBAPY/Fjm4xC/8NLMhIdIt11hocpynoyAQhHox3EZuRbiKdK4WrpYrzA3pNzjbRI+QnbvgHmUtbTyuK26bhrKJ5Kx22JBVrBrKapr1jYEIBxvhvCmovVLniTkRgLvcIxfl96NMhK3A9EXn9Cb5U/a48c6rAnUFvI5ZM656iZY2M7X8EnqPVN/zx8W6BNkvcfUE0r6SoeswZLNnWnL80gc7yg4KI5RRsetTyasDcKSqT/2EtbfS8qUUzJy1XGQCbqEFRucV0QM3tuZFtnfddxyEv/ViJ3068XkgLrscTru1CO3/6wDrU4PJdGd9RGTQSMVIJ9TwDuStjzh6ABJQmh4kqVyBwQc1rBXCr2unNrPUdDUywF5DudczIA9Wt177J2VijHqWM3zDXQWKBrBq+aXuGfQhQWiy03lnGLG168xq+tSIObGyBnUTRJTGXY74Gv6sK6jRrH5wEaPjWtIaIpMcvRec1KTrGK9xUggMQpUkk3UQ4Xiwuwf4ZynPo5jnmp9ARhZIW97FPgFnPn3mkUnHPUVpw56tPBtd6Mx8Dpm1jmzjpZsGq4JSY88JcPdQcnHRLc9OvukL2UpqpyPn7tiSaTPLwB0w1zQBqM2diSqABxRgOMqwdb+81dHMOHK5fQp6thQO+ALsn6f7nr2J93pyO/ffo7C3XZANrmvA2XgnNp/mDTrfggqxrfwgBKqlvGywycvonEYmI5MCKZK0rlPR+Tzln95mCVkB6Q7gRGtKuMIKCbCv9U6nnd/3/nISOkRAXV2yR/cuWBP5yUtECbYwVnaXkzVXLwrA9NYpwCSWzSx4G3oH9iLJmmMLI+YGV44Qf6biCBDt2L/ob39SHkfovJYFk8QnzSArz025vebpwFhJfLkM9Q4CymPDlklyGAqYTdr9rUxe5iusJfvK0G15m0CGIcUO00KNljaXpJxkmeJ9QIDvIoKNOojJjTpTnSFOsVaItJte+J07T9Pl/Rt0RZOS630BcXuzeBXlh2EH0MS6wj0NJ+oAaNh3mm86baOqtK3wJjfzThYVAKXWdHmU3fNx8QiqmOYVEwljqs1J8HPnsmkY7qRd6ezqe9vF6NV1rT2VhMt2nqHl4r8CL4vkdWLhghKEQU9ZVuDojVmDB8MzZesuUqEtWLNMYyvUO3wW+kkZS5dEYzq9GWoRp52MNZJ7Wg+L1hWrzCzKeZ7NyL7fF1T6TFzpyAvVSg3RCRigQ0x78BfuIJP/qTAWBxJflL7l0/FbG58OqqhCPT2nvkBkuqv/USR/RozWB71WNCymcpITgkydX/1xRINZS6JCiFIQfRygiugC6GotC4bWVWU+4WKXIGR9d2qfonx6J5fXChE6JIzY0jqF51VGb1+Z7T6Pql+g1srMRLUraoXf3S0fKoBJwx3YQpIcx7w5mCb0fvoRI97ark1lBUuXFsF7g9YjIxfRmSoHGIZYA4bp3+/gt+ecQj/OINO/NT+1Ejeae0UueM1Rv9TadHBwK5yzoKgHzuUtYIHgdBWcm5EjyaYsl+ugi6rmBpXn8aLhgLy7yYRbYBkW02XtvdBVODrONhaCmb+ZNtuGBQ1S7N4JERKEew== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33a0f83f-aa17-4247-1d61-08dd42152d1f X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9576.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 16:34:47.6793 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oyP41MtJHuS99C4xqefCJvf96FFLpqjha50PLkpULQkAY9c08Kqw/jyzNKK9Cw7E+VQMzFNB6e799puAZQtbtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8529 Allow apps to change the format of the pads. Also, use the provided width and height when generating the test pattern. Signed-off-by: Laurentiu Palcu --- drivers/staging/media/max96712/max96712.c | 57 ++++++++++++++++++++--- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/drivers/staging/media/max96712/max96712.c b/drivers/staging/media/max96712/max96712.c index d735798effa5c..ed1d46ea98cb9 100644 --- a/drivers/staging/media/max96712/max96712.c +++ b/drivers/staging/media/max96712/max96712.c @@ -417,15 +417,18 @@ static void max96712_mipi_configure(struct max96712_priv *priv) max96712_update_bits(priv, MAX96712_MIPI_PHY_2, PHY_STDBY_N_MASK, PHY0_EN | PHY1_EN); } -static void max96712_pattern_enable(struct max96712_priv *priv, bool enable) +static void max96712_pattern_enable(struct max96712_priv *priv, struct v4l2_subdev_state *state, + bool enable) { - const u32 h_active = 1920; + struct v4l2_mbus_framefmt *fmt = v4l2_subdev_state_get_format(state, MAX96712_VPG_PAD); + + const u32 h_active = fmt->width; const u32 h_fp = 88; const u32 h_sw = 44; const u32 h_bp = 148; const u32 h_tot = h_active + h_fp + h_sw + h_bp; - const u32 v_active = 1080; + const u32 v_active = fmt->height; const u32 v_fp = 4; const u32 v_sw = 5; const u32 v_bp = 36; @@ -608,7 +611,7 @@ static int max96712_enable_streams(struct v4l2_subdev *sd, { struct max96712_priv *priv = v4l2_get_subdevdata(sd); - max96712_pattern_enable(priv, true); + max96712_pattern_enable(priv, state, true); max96712_mipi_enable(priv, true); return 0; @@ -621,7 +624,7 @@ static int max96712_disable_streams(struct v4l2_subdev *sd, struct max96712_priv *priv = v4l2_get_subdevdata(sd); max96712_mipi_enable(priv, false); - max96712_pattern_enable(priv, false); + max96712_pattern_enable(priv, state, false); return 0; } @@ -663,6 +666,48 @@ static int max96712_set_routing(struct v4l2_subdev *sd, struct v4l2_subdev_state return _max96712_set_routing(sd, state, routing); } +static int max96712_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_format *format) +{ + struct v4l2_mbus_framefmt *fmt; + int i; + + if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE && media_entity_is_streaming(&sd->entity)) + return -EBUSY; + + /* No transcoding, source and sink formats must match. */ + if (max96712_pad_is_source(format->pad)) + return v4l2_subdev_get_fmt(sd, state, format); + + /* Validate the format. */ + for (i = 0; i < ARRAY_SIZE(max96712_formats); ++i) { + if (max96712_formats[i].code == format->format.code) + break; + } + + if (i == ARRAY_SIZE(max96712_formats)) + format->format.code = max96712_formats[12].code; + + if (format->pad == MAX96712_VPG_PAD && format->format.code != MEDIA_BUS_FMT_RGB888_1X24) + return -EINVAL; + + fmt = v4l2_subdev_state_get_format(state, format->pad, format->stream); + if (!fmt) + return -EINVAL; + + *fmt = format->format; + + fmt = v4l2_subdev_state_get_opposite_stream_format(state, format->pad, + format->stream); + if (!fmt) + return -EINVAL; + + *fmt = format->format; + + return 0; +} + static int max96712_init_state(struct v4l2_subdev *sd, struct v4l2_subdev_state *state) { @@ -690,7 +735,7 @@ static const struct v4l2_subdev_internal_ops max96712_internal_ops = { static const struct v4l2_subdev_pad_ops max96712_pad_ops = { .enum_mbus_code = max96712_enum_mbus_code, .get_fmt = v4l2_subdev_get_fmt, - .set_fmt = v4l2_subdev_get_fmt, + .set_fmt = max96712_set_fmt, .enable_streams = max96712_enable_streams, .disable_streams = max96712_disable_streams, .set_routing = max96712_set_routing, From patchwork Fri Jan 31 16:34:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurentiu Palcu X-Patchwork-Id: 861135 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013049.outbound.protection.outlook.com [40.107.162.49]) (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 4D7451F1300; Fri, 31 Jan 2025 16:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341330; cv=fail; b=oB4i8cv+MEjz+Ay0h0B0RwDJGPdnvM1Dl2y4jwB3p/JNk2sncxkmPkTCddGi2IZGvsI4GQDkKl+Z2VH6Eiy3FnH1Swiw7o7CNF5kL2pMLli3vF24g21cKMq+9n4WFkoGG7wwk8RxyhdtPwoaYKT9JRnEvO52YWoNnXCZYwh5B9Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738341330; c=relaxed/simple; bh=ScbIN9E6UvPErbTjewPQawKMhn7RGAdVDugBxka+uhI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=EXzgrZ+tC+O97GHD4Pr6VbwtoQ83HxDsJhQ5udLr2DrAu3+KGsGtN7YnZaGrDA1wBW0qrqitOz/mvwNfUGCUgUxWlmTfXh9glFJ6g1bUIDRybch/QV/RsCx1p5jkDE7mghWE/W3TqqOi6c+9C7/vjwyOYoOa9oSWwSaeq7mdDWA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=aev9DyKe; arc=fail smtp.client-ip=40.107.162.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="aev9DyKe" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kG/eYg9C6eQDO6ToeuMEDEKqSZC7//6QzEnG3e7pK8LIQT64vHLlV/GCcQISFOJq027emrien/zJXjou+Q9nEY1cakf9PBBDDtvFsHhZOZw9X4BDVMpioDWBFu98uvKqo7iCK0O2T3X5jQKdQxT6aCvnV58ejHALfyWmkyYogK1A5GEP5AEDrd6Z22+cySc/MLbj7qFXpzPbmvCVS9fid4oPR5DqT19EPLKzeMhLwrehT9TsPkJoiWgwoIZfSJHH00kdRPxlzvEtig+UejNc3gLdhPEqH0dsfhw9t58BAzbIdjo+AyhABRpwxnx+JHPbaWLq77E0HDxABrvdAb8Tog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wttD6joR26DBTP2Qmp+TYvMnlNC3uk887WLbKZNMnfA=; b=kwAsLBgU7QQQ27b7z96Ks40JbW1Dqt3BI6YoehXj0JZDcyOD1Z6Jqs/7gmcH3Ar4bGaBCv0bM2iyVGF3NWQSPmQaawuCvLqKlkwKZq4m6OVZLRGzLnCzuae+GnVOjEDZhabt+BlxRq32U6ju1+PBo6dKNNqLncw1DW5xwNWsKoQ/FvTSm8lJEODQl0/+SkBnyIBjHFTjSKSXstt9OxDCoUu3IkVALs95ThUtyOH8E/SwoSELLKKlqm0BVsdmYV4AWSE38T7c2VlynWM9tPy1U1twWGImV8qC9tzn5eaJe1GPzrLWcNlYBI2bFoct5wAonFWyPZANIyW8W+JQJU9D1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wttD6joR26DBTP2Qmp+TYvMnlNC3uk887WLbKZNMnfA=; b=aev9DyKeZJFtE6QJISMd5dLNi19/HwV9+lyOFmWzASJOlrXs2LvwtdDC4LufjYSg0Wa/L1Kn15XxOd3atDwlYijGu9DTRMeQIBC42QMOnpieBnn0qVH8diJjm5pyhfQy3JCExE4RiQEOtYruSh6TkTBBEgnicBiaSNemeJ/cUU0wNxMhj+hmC8fUloju3NQ18jsEcX4JxX0u29xar0JUsL6ZXjiMcZaCslHa7dzyOfqFzExf0dZbQAImzcZAk8c+vnC7EHRMOlKdP0CwCNCYwkZ67qx/u176CYceb+nXuabw6UsEh+bKUdLiOFGhIiZ9V4rakmsyhS6OOfNd37WfrQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) by AS8PR04MB8529.eurprd04.prod.outlook.com (2603:10a6:20b:420::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 16:34:50 +0000 Received: from AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30]) by AS4PR04MB9576.eurprd04.prod.outlook.com ([fe80::9cf2:8eae:c3d1:2f30%6]) with mapi id 15.20.8398.017; Fri, 31 Jan 2025 16:34:50 +0000 From: Laurentiu Palcu To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Greg Kroah-Hartman , Linus Walleij , Bartosz Golaszewski Cc: Laurentiu Palcu , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev Subject: [RFC 10/12] staging: media: max96712: add gpiochip functionality Date: Fri, 31 Jan 2025 18:34:04 +0200 Message-Id: <20250131163408.2019144-11-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> References: <20250131163408.2019144-1-laurentiu.palcu@oss.nxp.com> X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) To AS4PR04MB9576.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::12) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9576:EE_|AS8PR04MB8529:EE_ X-MS-Office365-Filtering-Correlation-Id: 74961cd7-17ba-415d-4969-08dd42152e94 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: Ae9+1W0fg0OTBAO0+coC/nAU+UHiJfrSqzC9aRj98tfQW1+k+OQO8oqkuA52xkQoBY6JO6PhJvkE32OUZeGAhRVJbmuxcTAcvQE8LDRKw6/b4QDMgaqEgdjfBkQOGQdumZ0bu3zye98V8FphInC9tjlEmiwf/Dy4Ts1iRX7eYJn90U4jQ6PfGKmsSYfIr5E/9WYMyzDtXXTnTaGWQIEY/t4TifymJhUYxltzn1XKgCvU+7r/RjPLLXzxtQpdZB5Nw5+szmw3rtXMvbbm1rdn+xkppqXcMcIgim6JOcVaIPk1v2NSXTJR3aKxfdeApAV6zevLgfmY39UCEuxXKiJaAbps8fZYXY69olq3VappS3Lo48VRblAWuLPNgTjsyvuZtRoD0O7d+aQcEOINZzY5iZg0hAXpdtLSHM9aG56yWJIqZlyUpdD3XWMHC+xKXKeWco2jAlS9QqNzGITHvcNNJl4VvZngidW0ZT+ap3d03ZNTvhz45c/uapwL5Q4tLXP9j+8E9tsCEOFUtlQF9PUhpKqz68BJohYpRUEhms54RURpUbiHq0MaaFtiNUm7qdil3W4AChWv8RUNSF0FoWlBozsfgkep+g3jQkHFu6Mugmxcwbn+xa1t2TC+rVBKbzaHI7q1EIGy/7Emy0Pm2LzSPBYdeGe6K5pInnTauAQSniryYoDF3H2+3SLmwlnnFevezqCzrnhldXLuZLtQsZBv/B2W38NZyZmRMkCk+0/rs7jp1e9M8bKTJLOU2Ubkqn9I11M9dxtuQwGmykaQroDfdrjqpabjlb79QCG5XBkDZfylYRXChXvEeSfdtm81m35Q0SsyE5/h9JCTGrPxNxuvCq1nBpJzW/VN9kO0GyDQ/mrvmzGGvFkvXe8SN1z5D9wamkq5aU6/4yPRP3NESjaN+Xdc21w/71AAFGyGAZ/xR0DSxD5/WYCqfHV4KwulxaOpji42O3ZOUg459JiCrSLFdqYzQ4ourGl7AEDheoQUw7625zdud4WyaUMU/jnXEEG+aedOR7e31cwOHQzIJTgY7C3AeKUz7MRFvi99MS8c3tvd7vqmByf90Vmk7+cujFtrTIFJoDO6H4iC8L40obOlv0fgdnr/hxq5yswV7Pn4iLmNUzDBNu3hso9kPSaTf8inFhJaSnhyharwycKkHLFZjORQYF3c6rnj/IMgSxGz626m/CyYXNrvJOdaO4W0l8XSzvc6sB9Rs0449GPn92sGVWiJBkuya2Cm+Z/kCgOvwThANpazhCuMFnZKtb8XGDjO2t6hUO7Ud/1wPYzC6USkIA+pUS5pmQ81EcAvF82AwpgnaFCUCAmzuAHaef9NkglrJVHk1ed4HpPGXOQ4LNY4MVzfa93+aSdd8FCp/KKDn0i/wkuVp3m463GsGe4DaEzf X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR04MB9576.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LFF+JQjb7LeZ1DAhI3cjxzjIrkSq31UXWGU38jaOAnm8EzRh3L5a+YTH8SnVzB9946uOnhDtoedWiAkr25HOm8QQmBV2ekmKTnjIX68MVT08e6ovu+6Fp+qi5NpbXBqMtnrT6hlp3VjQYTfd6Ht+J3snk4OwQyyRB2KHOJp3618sspTWcMc09pVQFt0VNJrxxM1wSih1xNXkda3igus8kIMomzXgQ/Zo912jSRzp5DFe/yLBWmLyOdBWhLE71lThnC5Tv3/yHW3IpGMiMWmXiMc3zZxy6XHl9EqIkX7cZdLH05ujGBBr/dZtF8NdT5HGf9/W8a2BiL12yy9w98FjGz0cQoIDD3VOtolTYlQypj3zR2gjIwUlUA9VABaJTi9Q/Az5jLDU1Dm4DNXBgSr/UCxA4hsgN+pTIpZ6wZ04LURqUQXY33y7VT5ZiS0mpe8J0bjz13BGvfOvstA8D0CEltfLzYoDg+wYOp9nOvFM2q08Tx+/oNftPX5EQqVr4VrdufC1pLxC7uylAW4mOPt+LTIX21jda3w0HKyerYzRtTiHRJdemXIXulmE4heeMuEqgtbP/zRlq97GHKpeOZcqey59J1lkLoPQv0JGPJsVFRl7NmXyPm1lw1qXQR+Mxi4AqHyeFUTjIox8SWFVAVid8Wfzlss3gGoXu4PEOgAMy4rVRq5PjNN7mjx4RPZmfqrRsg2bEtjHftoreCZnndtpjBctBGPzXlQR1tWZsuebr3D2NMQjicAAQjLnzoAnc4qC3zpEulJGri1iQXXaIKnm4qbYRcYduMTArnvdfTg/3kNceyRr61vW7ozAm84QsnRC25V3tU06fwVlaWUsd9iezrDC3xMhgYrUCS06N+cuAZ0pLv8X1vMPhkT1Ke4uvPu447O/+HidFlzgYJSYKpirto7afoVeNYcLIkLznK5y7Mg1nATaxdZVwJiy/ayA5g2RYRGWpkwK6HCnPNs3PCM4trqvegs2WmtN8wzGI0TvV5MoNdjHHrAAL+TMq53rOy3VpNsfsimTdu+uETicNseC5ZmvPPs77g9Gof0/RZvYon5k/ENrPWVa1CKX5tFPQmDbb70hmzm2k/L+6Xk4WfxiTwbULJK0d8NDYWscQ70cfIZnZG7ry/awjz0wDhHg6ksoC8u5gK+3GaoQSMG/ZAfYGZltpMkeESDSyFUeHuIcicIdRLb8Vca6whv+9yND5HDcNEuVD3Grm4Z+ZMWyleQeyKvQ+o2lycrjOnJ9Hk+f5sFr3zgz1oTYPxuYJ+8wO3faQ9Lkc3a4FQaJ1oA6DVemJQvEleKkd4VQWpg0+qHU56sxKTDg44h6kuGdITafLJCWjiamBUV6CRQJ4Ml7o6HU5stocOKbMU+eRXI5zz3kU4zI19kdAicgoatNI5h9GN44wRRT5Szv5BY/ZMrDkbpHQ2cmpPZgei9d+ZUnuyrP4LyViIv3YBylrnSLzDgQASSWNeUjOQZNhff2oHxGEz/BWUimzNDd4z0rH8aMfhYjDhwTsZsTSrXX55hYRQo56a+f7PO74v00Nsd2HV3U9E5qE/HpKry1Q/XERYS+EPjbcmCfL0ZPlRGVuA0cgzRDV/y96BkQQTia326tJGpOKZBmlA== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74961cd7-17ba-415d-4969-08dd42152e94 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9576.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 16:34:50.1329 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hS1hFSAwCLtaUzEexipXpBU7fbqR63hU3len48bafvKKslMtGNI7Jckc0fbaugevhjzc610fevvTSDM5iiEbGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8529 The deserializer has GPIOs that can be used for various purposes. Add support for gpiochip. Signed-off-by: Laurentiu Palcu --- drivers/staging/media/max96712/max96712.c | 140 ++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/drivers/staging/media/max96712/max96712.c b/drivers/staging/media/max96712/max96712.c index ed1d46ea98cb9..307b2f1d3a6be 100644 --- a/drivers/staging/media/max96712/max96712.c +++ b/drivers/staging/media/max96712/max96712.c @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -108,6 +109,41 @@ #define CSI2_LANE_CNT_MASK GENMASK(7, 6) #define CSI2_LANE_CNT_SHIFT 6 +/* GPIO_A: 0 <= gpio < 11 */ +#define MAX96712_GPIO_A_A(gpio) CCI_REG8(0x0300 + (gpio) * 0x03) +#define GPIO_OUT_DIS BIT(0) +#define GPIO_TX_EN_A BIT(1) +#define GPIO_RX_EN_A BIT(2) +#define GPIO_IN BIT(3) +#define GPIO_OUT BIT(4) +#define TX_COMP_EN_A BIT(5) +#define RES_CFG BIT(7) +#define MAX96712_GPIO_A_B(gpio) CCI_REG8(0x0301 + (gpio) * 0x03) +#define GPIO_TX_ID_A_MASK GENMASK(4, 0) +#define GPIO_TX_ID_A_SHIFT 0 +#define OUT_TYPE BIT(5) +#define PULL_UPDN_SEL_MASK GENMASK(7, 6) +#define PULL_UPDN_SEL_SHIFT 6 +#define MAX96712_GPIO_A_C(gpio) CCI_REG8(0x0302 + (gpio) * 0x03) +#define GPIO_RX_ID_A_MASK GENMASK(4, 0) +#define GPIO_RX_ID_A_SHIFT 0 +#define GPIO_RECVED_A BIT(6) +#define OVR_RES_CFG BIT(7) + +/* GPIO_B, GPIO_C, GPIO_D: 0 <= gpio < 11, link: 1, 2, 3 */ +#define MAX96712_GPIO_B(gpio) CCI_REG8(0x0301 + (link) * 0x36 + \ + (gpio) * 0x03) +#define GPIO_TX_ID_MASK GENMASK(4, 0) +#define GPIO_TX_ID_SHIFT 0 +#define GPIO_TX_EN BIT(5) +#define TX_COMP_EN BIT(6) +#define MAX96712_GPIO_C(gpio) CCI_REG8(0x0302 + (link) * 0x36 + \ + (gpio) * 0x03) +#define GPIO_RX_ID_MASK GENMASK(4, 0) +#define GPIO_RX_ID_SHIFT 0 +#define GPIO_RX_EN BIT(5) +#define GPIO_RECVED BIT(6) + /* VRX_PATGEN */ #define MAX96712_VRX_PATGEN_0 CCI_REG8(0x1050) #define VTG_MODE_MASK GENMASK(1, 0) @@ -160,6 +196,8 @@ #define MHZ(f) ((f) * 1000000U) +#define MAX96712_NUM_GPIO 12 + enum max96712_pattern { MAX96712_PATTERN_CHECKERBOARD = 0, MAX96712_PATTERN_GRADIENT, @@ -179,6 +217,8 @@ struct max96712_priv { struct regmap *regmap; struct gpio_desc *gpiod_pwdn; + struct gpio_chip gpio_chip; + struct i2c_mux_core *mux; int mux_chan; @@ -830,6 +870,7 @@ static int max96712_v4l2_register(struct max96712_priv *priv) return ret; } +/* I2C Mux section */ static int max96712_i2c_mux_select(struct i2c_mux_core *muxc, u32 chan) { struct max96712_priv *priv = i2c_mux_priv(muxc); @@ -885,6 +926,101 @@ static int max96712_i2c_init(struct max96712_priv *priv) return ret; } +/* GPIO chip section */ +static int max96712_gpiochip_get(struct gpio_chip *gpiochip, + unsigned int offset) +{ + struct max96712_priv *priv = gpiochip_get_data(gpiochip); + unsigned int val; + int ret; + + ret = regmap_read(priv->regmap, MAX96712_GPIO_A_A(offset), &val); + if (ret) + return ret; + + if (val & GPIO_OUT_DIS) + return !!(val & GPIO_IN); + else + return !!(val & GPIO_OUT); +} + +static void max96712_gpiochip_set(struct gpio_chip *gpiochip, + unsigned int offset, int value) +{ + struct max96712_priv *priv = gpiochip_get_data(gpiochip); + + regmap_update_bits(priv->regmap, MAX96712_GPIO_A_A(offset), GPIO_OUT, + GPIO_OUT); +} + +static int max96712_gpio_get_direction(struct gpio_chip *gpiochip, + unsigned int offset) +{ + struct max96712_priv *priv = gpiochip_get_data(gpiochip); + unsigned int val; + int ret; + + ret = regmap_read(priv->regmap, MAX96712_GPIO_A_A(offset), &val); + if (ret < 0) + return ret; + + return !!(val & GPIO_OUT_DIS); +} + +static int max96712_gpio_direction_out(struct gpio_chip *gpiochip, + unsigned int offset, int value) +{ + struct max96712_priv *priv = gpiochip_get_data(gpiochip); + + return regmap_update_bits(priv->regmap, MAX96712_GPIO_A_A(offset), + GPIO_OUT_DIS | GPIO_OUT, + value ? GPIO_OUT : 0); +} + +static int max96712_gpio_direction_in(struct gpio_chip *gpiochip, + unsigned int offset) +{ + struct max96712_priv *priv = gpiochip_get_data(gpiochip); + + return regmap_update_bits(priv->regmap, MAX96712_GPIO_A_A(offset), + GPIO_OUT_DIS, GPIO_OUT_DIS); +} + +static int max96712_gpiochip_probe(struct max96712_priv *priv) +{ + struct device *dev = &priv->client->dev; + struct gpio_chip *gc = &priv->gpio_chip; + int i, ret = 0; + + gc->label = dev_name(dev); + gc->parent = dev; + gc->owner = THIS_MODULE; + gc->ngpio = MAX96712_NUM_GPIO; + gc->base = -1; + gc->can_sleep = true; + gc->get_direction = max96712_gpio_get_direction; + gc->direction_input = max96712_gpio_direction_in; + gc->direction_output = max96712_gpio_direction_out; + gc->request = gpiochip_generic_request; + gc->set = max96712_gpiochip_set; + gc->get = max96712_gpiochip_get; + gc->of_gpio_n_cells = 2; + + /* Disable GPIO forwarding */ + for (i = 0; i < gc->ngpio; i++) + regmap_update_bits(priv->regmap, MAX96712_GPIO_A_A(i), + GPIO_RX_EN_A | GPIO_TX_EN_A, 0); + + ret = devm_gpiochip_add_data(dev, gc, priv); + if (ret) { + dev_err(dev, "Unable to create gpio_chip\n"); + return ret; + } + + return 0; +} + +/* DT parsing section */ static int max96712_parse_rx_ports(struct max96712_priv *priv, struct device_node *node, struct of_endpoint *ep) { @@ -1061,6 +1197,10 @@ static int max96712_probe(struct i2c_client *client) max96712_mipi_configure(priv); + ret = max96712_gpiochip_probe(priv); + if (ret) + return ret; + ret = max96712_v4l2_register(priv); if (ret) return ret;