From nobody Sun Oct 5 20:11:54 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011033.outbound.protection.outlook.com [52.101.70.33]) (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 13B3C29826D; Tue, 29 Jul 2025 16:07:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805240; cv=fail; b=F1HkoNkirFs5E+ERJ+YpSpGp8Ebi8OzLcVO02oLjr91JrGBejuPES3WVWStxuhw2W0ubrDFbmDIFhEZ5NWO2zL32sjOZp0rlTfKUdYFnI0sTQw7gi+ClqsGehLi50b4jlnbpYc+1Hh/Uzjvo2dy4znnpABdOqlzPhKcdKqcxTAs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805240; c=relaxed/simple; bh=sri1kHiyPVPeyxO74jqsiPIn3eCs4ge2zo7N5/3X10M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Sg91ly/UONYAR9WK3E5sJHzJ7mDGwSEHaWCKav2w7x4ZCMBT4TdfT/quuFU9aD/lA+aqS3X3857L3swVcXG2CXCXThmd1DK6DLSqfTwR2UOyZq+OFdZ7Zn2zO7FpigQ/R1f0gvx9jvS/NntD3vmMxjDOZ/uFEYoQ3JcmTXlCZrw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=L5Wv8IwG; arc=fail smtp.client-ip=52.101.70.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="L5Wv8IwG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mft3kFHlVeadIxy3Ek3+jx2hAeqmMKMX2esD6TW4vER85Z59XdU9pNiOuVE3JxVHJ8f3tiOVxJAq1HFYPTkj7KEAsj2FYf+RT58IQPTe+d/JOZ+GPGF3rxs2YZb+rP0ixZpGWEd27xZ1TmdZxARTHR+q5ba4PXBvxwHXdUzYXtHR3JV/EJMhTPjv2H5fzU+5v0Mw4Ppbc0HkqWdn4ekXfAhkcewlX0d+2F1rEoNJV9A6vwxeIEsCyhNoio3oqXYc8pSTbGG9uLDB9EY4qDAbqN5EUVnJTjNukmrgrSa8AHYrTcvZI6PXD/stgVJ+giZ7NyX8N9wB+ZfnoA65Byx4zA== 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=Sknn1cb5m/oDO7TKDikYDeGPp+/53sPuM6qnDApVIlE=; b=MH49NPPvj1QIB5l/v8egXPhyRWY9YsqwlECf5gEWzeI4LeXsIkOOf7Yw11HZ3Av7dsQ7XJFoUZMk9qW994N2f9XbpKNwDBV2iV1+58vX60irtjCSElOMXMU++w/kCYZOIwKCoXUGDMskcsO+LrfA2JyP4mDDwB3Aotljvke4si4UM9hlDL1aZITxBGKJhjnc9Uua+Ivhqsyi/F/T8ku/IQAgg65wplWsJTbdDmf8DBugloxebjWsmmxls6KmzoWeUlJWZgEhlC6KmQ/M+pzG0bV4a9cdvtqzLkrhTiuka+AODH1iLdcluVZWyjjBpxkLcQbrYzEXidMfSBP0ralPqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sknn1cb5m/oDO7TKDikYDeGPp+/53sPuM6qnDApVIlE=; b=L5Wv8IwGyk0K56McALjDdKImQAg0bYsmwoGqWjKLmuXDguA+mbmoEiJCLM884wQb94ftSs/PpMXjYEVMVFvtnzeDsRWp7vQraUdUf3A7g3VFzvPl1mgp+8KtFaMNLKcmjb6VQ/VpWGoxktDLX+ZrIdTDxSFm2ofYqDMHLyK7/EhL5MWLUfKoASouOH3RH9RoIs0+Pp9aatPMxmZ9TUBAJ1NhznqLiyn6Y+Ljw+D7sPEmnwFUJbq1yI6QjQBKZm2L0pNK0JVubLR9WvpyUgy4jOgSKS4Jm9KSvGhAeA8gPIxT8xetwzZn884t8pk5ID5/540J4ieGIhK91GPEanF/bQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by DU4PR04MB10551.eurprd04.prod.outlook.com (2603:10a6:10:588::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.11; Tue, 29 Jul 2025 16:07:13 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.8964.025; Tue, 29 Jul 2025 16:07:13 +0000 From: Frank Li Date: Tue, 29 Jul 2025 12:06:22 -0400 Subject: [PATCH v4 1/5] dt-bindings: media: add i.MX parallel CPI support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250729-imx8qxp_pcam-v4-1-4dfca4ed2f87@nxp.com> References: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> In-Reply-To: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Frank Li , Alice Yuan , Krzysztof Kozlowski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1753805222; l=5211; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=syiCvbhru1dP75h0vu3xJghJklrkmd56bEA1TVlCZCA=; b=xdv6G+70VoN699n9iWKyJxC5gAL2SHAGedKgb8Ylc0ub/qm5+hQPDcK4TYPdYALojU1rVyFh4 k/iNj/PUI3MCaDdmoqAmGRatwgvHYTkq/v0SG+zEm71RhpZ8dFTWaH8 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BY3PR05CA0028.namprd05.prod.outlook.com (2603:10b6:a03:254::33) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10551:EE_ X-MS-Office365-Filtering-Correlation-Id: c6dd84e9-b3a5-49ac-30fc-08ddceb9fb04 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|19092799006|52116014|376014|7416014|366016|1800799024|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MXh6RTI3ZTQycktLNnR6d3hlSVMxQWZrb00xd2owempMWTFJY0pTcFFjcitv?= =?utf-8?B?LzI2aHlTd1JGbGZTaUZmbngwaDFYNFhsQ0pjZkdoeDR4ZE9xeHBnRS8rNlp2?= =?utf-8?B?aCtGWmcrU0hDZ3F6MENyL0xvQXVRbTBpM0pOM2tZemF2djBIWm9NT0M4c1Rp?= =?utf-8?B?MnNlSUIzYnZvMGdKZTBOME00NDcyREVqbDFEc0xjN3NJUDIxbkxWNEF5d0xU?= =?utf-8?B?Q2loM00wajBWS3hFVmwyb0tzQTdwYmNVeTcyVWJPZkRvenVraUtKVENEM1JX?= =?utf-8?B?OEFGNEpsVzNaU1c4YnFVUEg5UVg0Wk5wVWI0azlLVlJGNjlDQnMrVlY0SUNr?= =?utf-8?B?Zm9PNUQ2c1lLSlNNKzczUFVGUExuWE81ajd3SW82OVFPdHU0TnpEQVlSMEZG?= =?utf-8?B?c3RRbU9mcjJwWGhxVzMycWtzMCtPSzJkS2RaN2VXc05aQTBuUUU2RHBEcjVw?= =?utf-8?B?QTNtS2M0YnhsK0dCR3B5cXp1eVMvSWpENGJnajhVUi83VmhyLytqZ3pJNDVT?= =?utf-8?B?WG1NZzd4eVg0YnprVStXTEFLWTBuTkErWFozZndxRlJpQmdvanB1ekZSdjZl?= =?utf-8?B?eXNXVjdneGdNSzNVVWVPQVpmODF1cERBZ0pISk5XNDVxVk1IUDZDL0ZVdHVL?= =?utf-8?B?bEhaQXgyS2NWaDRHTzNvemlPNEZtTGJ2VEdIcVE4RDlEOG1nbWlVUVZId2Ro?= =?utf-8?B?TjhqbzZ2Y3F3RXRtL1R3SmhRM2lCYUhZNGxYTnRXRit2RHhTZEViQWJvL3NU?= =?utf-8?B?N1NCN0Z6KzFzS0FsQVRQeDVFQnBjWmIzRmsxVUxmWlMyN0FsbmROVlJSU3JC?= =?utf-8?B?R1gxeitqYTMybi9hemU1cG4zZGd5TnhoMkhHSmFrZ2h5Y2JBVGRNWjhzYTQv?= =?utf-8?B?dHYyWVQvNCtFT01vSGk2M0lvZ3NjdTlrWFJaRFpFQWg1ZktIMWhmdXQ0N1J6?= =?utf-8?B?Vm5MZmVBNHNMM1JibWF6ekJGcCtpR0RQYitGWEVTMExpaHgvb1VhS1R3ZWlk?= =?utf-8?B?ekoyaExndkp6clhXcG1pSktCQlNTSVk4bzRJYndZMko3SlBSbkllY1d3Y09r?= =?utf-8?B?U29pczllRkJNVjZGUUlMN0pja1laTjdXZkc5R3JhMFArOGNEL2FFNzVtTEE0?= =?utf-8?B?TnA5VE40Mm8wQzhPOTVjSXNpTkdLdjFQdEo3a0owanQxamFNSHVBUzN1VzBv?= =?utf-8?B?U1Z0aFRQaUFjWU9Rb08ySEJPNGFMZVlVdVg3TXZ5TkgzelJqSThuM2N0dXh3?= =?utf-8?B?aHJuOVdEL0ErWVFDTXdTZGowNmE3eTIwajl3aGhEbU14TTdWdGFyU291QnBD?= =?utf-8?B?VHl5YUF0cHZkSlVKUVRBMHFTd2lUdnRzVXo5YnJNWjR3ZHRtYVZIbHBDK3hR?= =?utf-8?B?N25zTFcwdEEzMlh4OG5GMXc4bmYzNXBmbTlacXFoV2d3eHBNN1AxdzkxUUUy?= =?utf-8?B?NVNWeWNJQ0t2YzNKTDZtTWovR1R3bHhVWktKZTRVeU9leUhucTZCM0VzUXo0?= =?utf-8?B?dUR4ek9TR2lwVzF4UnRleFhHNFk4aUYyeHNzb2ZsT1c4TnRqQmtDWXBLbUpQ?= =?utf-8?B?NFBmTG5xQ1JIVk9yV2V2WTZKVFplbkRMSlpMSkQ4Q2UrQngzbGNhZUtHNUo5?= =?utf-8?B?RGhWZmJYZmpkWWdvdWtJNVJkdkMrcFY3NWtKSDBCdWw0cWNPNUQ2bWxmcERY?= =?utf-8?B?TnhSWXpZQlc5RWd4d3ZwSnlpTExWSlJ0KzN1aGF0SXV1Y0l4cTM0bUlBa2dt?= =?utf-8?B?MjdxUXFITjFSOHBiRnp3TjNQUFRWbTVpRXNReXVIQUJKejNGLzJTWXlSNmZu?= =?utf-8?B?UEwrLzJrN0NNTDlLZmpOdHZvQUxYTEJkMnJQZ1pQdjdFSnBPbDVuL1FoQXp2?= =?utf-8?B?dW1nN2toUm9maHIwcFgzd3Z0WVV1NDFacGNuZFJzVWR3ZURZQkhCS21KREV4?= =?utf-8?B?OFNUY0pxRk9ybG1wSm92RXV0WEwzdG5SY0JDc1ZWcEFycElLdkNVMlhvdUpH?= =?utf-8?B?S0RpOGI0b1dBPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(7416014)(366016)(1800799024)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1oxVkRFU01IU09ETUk2bTZ2SmRQME5LakJWTi9mSWRrWUhyWVdrMnVLQmpn?= =?utf-8?B?ejlQRVJPeTBsaVFWMFVFZzArRzIvZEVLOXZjSzRIdWRucVJEWEVVL2s4bkVF?= =?utf-8?B?Mk9BRnQrWHcwWHNtT2pXN0hPRkVWdU5DT3RsN1lNZXIwajc4VTJVWStIemM4?= =?utf-8?B?MlFXNUVvQlVVR0YwOUUxZ2NTaTBvUnZSc3M0cWVmVThHQUVWdmdVMFQ2ejFn?= =?utf-8?B?TjRmV1FQUzdGM2Q2NTJhYUZBdjNKL0xhc2VWNHc1b2lkUm1rTkgwa3VDb1d0?= =?utf-8?B?YUNqTmh3NU5QYlZaT1pac0pCWnFhRWpKSXh6dks2Z1V4d3pTYUliV2dBMGxI?= =?utf-8?B?UnhwQjFBNUZpc080ZCtyd1lOL2ZkTUVGcEZ0OHRvU0haeTUrVDdsbEtwZ0JE?= =?utf-8?B?d25mN29LWTlLb3U0bFVaSW1aTnlWRGt4ZG11N013bVNIUjZYblRLdFBaV1Mr?= =?utf-8?B?QXVWakFrdUQzS2wvOTU4U3J0YXkxQk5vdGVqV1NuSXlMNi84Z01jYk04T25R?= =?utf-8?B?TjVxTy9ycU5tZVhZUzFGMHZSNWlqQVpwYm94dTVUdThrN3NqbVZEYlRCS0VG?= =?utf-8?B?UVc4Y1cvdVBpSk42VkZJencwbGt1bS9wcm52aWJyWGF0ME5lcm5xTHUzQVdZ?= =?utf-8?B?ZWhCRmIyN3BoS3FxZ0wrTFV5clF0YUp6SXFhVm5ia2IzNVNUZDcwZFNqOGh4?= =?utf-8?B?VmVTV1pYNHRIYk9DQ0lqUzdHZk9XOVI2dmZ2eGlFclRLMHlVVTcwN29Za00z?= =?utf-8?B?OHRId2Jrb01hVE0xdGxqMHBJcE5McVFuRk9udnB4VWhra0JvUXhXeFoxd2pi?= =?utf-8?B?MzJJWklMeFJPalVyS09JSmI0cTB5Vmo3eTN1S3VLc2d4UFd6Qk5UdkxRNVEw?= =?utf-8?B?S1NXV3FoODZSUnFPRWxOSHlsVEZ0d2o2Z01qRXV6bGxTclI0MmMrM1BLdUhq?= =?utf-8?B?dndSMnRITE5aN0tQTHRUNG1vNVBiRHhSb0t3TEJzTkMwMTRxTDIwZFR2MlNP?= =?utf-8?B?NVZaWGVlSk5TQ2R6NDZvM3dIMXFQZGZrQjA3NERsdFlGR3RRRm1TT0hPWDFz?= =?utf-8?B?WDFRT28zUFJCa3ZJVTNDWDcxM1VOZE8ySUJiN0V0R0FLdmdVcEtqWXdubDZY?= =?utf-8?B?UXlLYmZmMmt5ZUNuQ2FwcDNrWGlnZ2I5U0svVGQ4Q0EvZW5HcUUyc3NkOUdq?= =?utf-8?B?THNSUEp2TkxXOElhb2NVOFE0V1FlY1d3L2hZbjdENzZCeFRhQ0VNNnRQeTRq?= =?utf-8?B?bW5TWUxNYWRHY0ltdjdLbHptRmZ6YXdqVmtnL2pzdmlTdXdlaDgvN3p5UFg1?= =?utf-8?B?ZnlJVXhrSzJrVGE5Z3M3TVc2MTRMVi9BODVJbzJvcjdodTljUndpdlV3ZjNM?= =?utf-8?B?K28zR2dBRkxvZmtwTlgwZ0hYbEc2SHpjdkQyekJPK1EyU2xCS0VhWmhkUzlm?= =?utf-8?B?NURlNjFOdnhhbEEzRHo3RUhaWmJmQXFUb0RIU29BcnYxelEzYjJ3RDdhck9p?= =?utf-8?B?SVFaMFc0R0Z3M2NBZ0pPOWFkMWdES1k1cEswNTJXOS9OS0RVSUlsM3d5MTFs?= =?utf-8?B?Y09RN1VBOEFWbUQzL1R4d01YMG9RYTFkTWkvbVJOVHhWd0NYNmlwVzVKWlZq?= =?utf-8?B?YXVNNWozTTRtQ3VFdE1taU1qTXBINlh2dURJU2hKeHFlUWFIdHpHZDlteXZ2?= =?utf-8?B?S0tESlFkdTdKaFFJajAvb0twd3JxRFNGNlFrTm9KMzJYMHZXQnoyN0JHR09F?= =?utf-8?B?R3BTRGVQejFXTW8xNkN5YVRaSjlPeFR2VmE3eUd3a1NJMmZheFkzSTUyU1Ni?= =?utf-8?B?WWJzSDQ2NnFydjJnbWEzZjBlSURSTU1OMUg3VFovZUxVb01nK3B3WHcyeVo0?= =?utf-8?B?YzVMSUE3UE1JRVcwejNrY0Q0R2t2VnRmNGxoWEZiTmx2MVpsUGtFQkhlMVFr?= =?utf-8?B?VVE1MDBYWUZ1MWNtanNYT1p6bkdid0Z2eFRSVldZVU5GZjJKOGd5L0Y0anpv?= =?utf-8?B?Y0wybUVCb2Q4SjAxaVBkVnFjdU1hQ2lRc3hDV3EvYWNtMENqbmNvRFcxZEdF?= =?utf-8?B?SDNTVENZOHNrQ25FeXp5YnAweHF3SGJDaVZNb0FMZ2ZGWWQ0UU5OeFg5NjYv?= =?utf-8?Q?XK12DW7Tiq3O7B6S2bEItyInT?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c6dd84e9-b3a5-49ac-30fc-08ddceb9fb04 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2025 16:07:13.3372 (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: Qeu5aXPrBHcZ0V5vSRb96ABTfPFKYkh1/+LATFQ8x5Pg1srsz8M6CCC5ej+2hRBmg1JiTdo4xp2m0HASMpNomQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10551 From: Alice Yuan Document the binding for parallel CPI controller found in i.MX8QXP, i.MX93 and i.MX91 SoCs. Signed-off-by: Alice Yuan Reviewed-by: Krzysztof Kozlowski Reviewed-by: Laurent Pinchart Signed-off-by: Frank Li --- Chagnes in v4 - add Laurent Pinchart's review by tag - fix $ref: /schemas/graph.yaml#/$defs/port-base, original is $ref: /schemas/graph.yaml#/properties/port-base Change in v3: - use enum at compatible string - add ref to video-interfaces.yaml# - use cpi as node name in examples. - replace csi (Camera Serial Interface) with CPI (Camera Parallel Interface) in commit message. Change in v2: - use pcif surfix as Laurent Pinchart's suggest. - put power-domains into required list --- .../devicetree/bindings/media/fsl,imx93-pcif.yaml | 126 +++++++++++++++++= ++++ MAINTAINERS | 1 + 2 files changed, 127 insertions(+) diff --git a/Documentation/devicetree/bindings/media/fsl,imx93-pcif.yaml b/= Documentation/devicetree/bindings/media/fsl,imx93-pcif.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9dd0331f6ef7503f343eb576fe6= 878e32d91c182 --- /dev/null +++ b/Documentation/devicetree/bindings/media/fsl,imx93-pcif.yaml @@ -0,0 +1,126 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/fsl,imx93-pcif.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: i.MX8/9 Parallel Camera Interface + +maintainers: + - Frank Li + +description: | + This is device node for the Parallel Camera Interface which enables the + chip to connect directly to external Parallel CMOS image sensors. + Supports up to 80MHz input clock from sensor. + Supports the following input data formats + - 8-bit/10-bit Camera Sensor Interface (CSI) + - 8-bit data port for RGB, YCbCr, and YUV data input + - 8-bit/10-bit data ports for Bayer data input + Parallel Camera Interface is hooked to the Imaging subsystem via the + Pixel Link. + +properties: + compatible: + oneOf: + - enum: + - fsl,imx8qxp-pcif + - fsl,imx93-pcif + - items: + - enum: + - fsl,imx91-pcif + - const: fsl,imx93-pcif + + reg: + maxItems: 1 + + clocks: + maxItems: 2 + + clock-names: + items: + - const: pixel + - const: ipg + + power-domains: + maxItems: 1 + + ports: + $ref: /schemas/graph.yaml#/properties/ports + + properties: + port@0: + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: Input port node. + + properties: + endpoint: + $ref: video-interfaces.yaml# + unevaluatedProperties: false + + properties: + bus-type: + const: 5 + + port@1: + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: Output port node. + + properties: + endpoint: + $ref: video-interfaces.yaml# + unevaluatedProperties: false + + properties: + bus-type: + const: 5 + +required: + - compatible + - reg + - clocks + - clock-names + - power-domains + - ports + +additionalProperties: false + +examples: + - | + #include + #include + + cpi@4ac10070 { + compatible =3D "fsl,imx93-pcif"; + reg =3D <0x4ac10070 0x10>; + clocks =3D <&clk IMX93_CLK_MIPI_CSI_GATE>, + <&clk IMX93_CLK_MEDIA_APB>; + clock-names =3D "pixel", "ipg"; + assigned-clocks =3D <&clk IMX93_CLK_CAM_PIX>; + assigned-clock-parents =3D <&clk IMX93_CLK_VIDEO_PLL>; + assigned-clock-rates =3D <140000000>; + power-domains =3D <&media_blk_ctrl IMX93_MEDIABLK_PD_MIPI_CSI>; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + endpoint { + remote-endpoint =3D <&mt9m114_ep>; + }; + }; + + port@1 { + reg =3D <1>; + endpoint { + remote-endpoint =3D <&isi_in>; + }; + }; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index 4df15c09cca08924b503753646487a116bc6be98..4eb0d0de16299a3bcd5c2f6f644= 5e416c8fa0a48 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15235,6 +15235,7 @@ L: linux-media@vger.kernel.org S: Maintained T: git git://linuxtv.org/media.git F: Documentation/admin-guide/media/imx7.rst +F: Documentation/devicetree/bindings/media/fsl,imx93-pcif.yaml F: Documentation/devicetree/bindings/media/nxp,imx-mipi-csi2.yaml F: Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml F: Documentation/devicetree/bindings/media/nxp,imx8mq-mipi-csi2.yaml --=20 2.34.1 From nobody Sun Oct 5 20:11:54 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011033.outbound.protection.outlook.com [52.101.70.33]) (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 7C805298982; Tue, 29 Jul 2025 16:07:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805243; cv=fail; b=UvZO48YdzxYKc+YfIY353jmJmakJmT5o3xE526ZMXO+tOfow8Cs1oxs943BNfL9JMALOKU0NI5X5FrJAvyrUDcnOBLQa2Fefaj0Z4NrMGF26I5r+4Jon/KziyVeJ81giITzJbiubIizsZnkRyS1tiiBfTlb/6beAun798GIJ9Aw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805243; c=relaxed/simple; bh=rlLpVBi3tgP1LHh5jfFIDhCUdVv6pbVgB/rSwTDtXts=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=FHeKLFqHKrKVKQlUGt6Z4lT1ZuZYH3C8Vas2F0/g8PirCQ6I3GHbl9gDPzikKu2KOpEFI//EFP1QI70BLuwEU8HOd5oLUkKBF+g3rpTF288o4vMs9VwZsp8fqjhRcteN1AeIzdcnhA0+EbM6006KF7g09gHsXCSsje5GN89P88E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=ZKfPe0Cx; arc=fail smtp.client-ip=52.101.70.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="ZKfPe0Cx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BAUvFGK0QM9zctlXv5HlwlL9ztJ3OkObE9xuwFO9VzzXqCcLyRfLrkMvtG0Bb+Ldhnzg4tVsaK+C6hyRf6bOCHonyNAEHLv/7JgSaoeC7zx3sqvMJGcuLJVI6D2NOmd0/z4at+2scLchH4QKiskWN87sb4NdV0wCLmfJEKNqy3XJy2FzptYA1JaIqbk/2bxJNE5dSXG9Ztunt3/qtyhmg9eH6DZ6TG8IIAEM9RduY1HZMi92HvQRwpXNj4RYhJw31GHIJNNDZywnepuYxchPkfZpy0O9jzL6v3QXVj+CzW43K7ImpsqjuV0lLM3u2xf3ypHUHuFcG0DBDz1v7pqykA== 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=dUGHvjvBaPTIhTgV0bDD1WGrR3UptUaMwXCJuTSbIaY=; b=vS11BrQlb79UY5bSoFp86MDN/HE3Z80AdShdVW3el2a2+zG3mpNRYzRf/Hc5A810vENaqFvKdyqKuHBx8CFR7LvfftQFHKB68ohAYazAdf4U2z82E/h+a8DqxgcjKzLecysS3zTYSXdG449g/VcCXfW0AmEXOdzGATsroltn7yHZSbiBifGWGYuLc9p+Z3fktF5BLVGVAlA6O+Omd+Nki3EKb3PQC7dMYKmI70nPXNOXd52nqF8oPMYQRPQ5jKn1dscSgfkw6SG5Rf7mKEkHz/0p2+z5brycQ/mVMnZpuzXjS5XzWMJVgke2iGnU5Z+YbHtWhMzKt6tvBE16xDR2CA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dUGHvjvBaPTIhTgV0bDD1WGrR3UptUaMwXCJuTSbIaY=; b=ZKfPe0CxmPF2OS9vSSE6vX5GZJ1+sKEOJVvW9uJ584R+pVlMlKINPsJIXHJG+/7YklLASaXuSlOfwri4LXETX+PBZY2UqEfQBay7wjse40lE7IWOUt45np5bG1Xod1kozzKzvS42Tt8td9UrhkFvjzUkPVnE1cRzf6DYmAukc9dCVdBV0DP2zgbXnKfigsEJgHp731bDFJ77IAq7d2p/ThR6oM33q3nqpdAx/j6P635DszPRzjpiiBvostw0npu/zPxL2joowYdpR6HBEE5OE73R9uHw1n0MyLH5UC8OzZrEKTnitt7KQ5AQBHYDifkBoXcinhCtysnV2vHPFKRwAg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by DU4PR04MB10551.eurprd04.prod.outlook.com (2603:10a6:10:588::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.11; Tue, 29 Jul 2025 16:07:18 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.8964.025; Tue, 29 Jul 2025 16:07:18 +0000 From: Frank Li Date: Tue, 29 Jul 2025 12:06:23 -0400 Subject: [PATCH v4 2/5] media: v4l2-common: Add helper function v4l_get_required_align_by_bpp() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250729-imx8qxp_pcam-v4-2-4dfca4ed2f87@nxp.com> References: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> In-Reply-To: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1753805222; l=2099; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=rlLpVBi3tgP1LHh5jfFIDhCUdVv6pbVgB/rSwTDtXts=; b=DUKaLz8j9AmWcnqL1fFgt2rzz0X1HtCvKqrZmAlaF4G47XopjOBhqRZxev60ROJb58OAySJfi FYID3zL4vsSAXvN5sJkshpNjYK4pPXrHWmJF8j+iCD1TF2dsxmkPTrc X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BY3PR05CA0028.namprd05.prod.outlook.com (2603:10b6:a03:254::33) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10551:EE_ X-MS-Office365-Filtering-Correlation-Id: 6fec3ae7-f96d-42fd-958d-08ddceb9fdbf 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|19092799006|52116014|376014|7416014|366016|1800799024|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bjdjVkh3Y2x1WDVFK3pFdURUeU5kakVXTThZeWJndnM1UGx2S2I4cXJ4UDR6?= =?utf-8?B?c0k5V2VuUm14UzZCcnhhalZtM0hCSkF1VVVZM2dRYmhNU3MvMGp6dkNFMlFs?= =?utf-8?B?bmU1bTFqU2FyRGFaS2hjWFpxQ1ZRWGpZOTdIUGN4MkREamhyL3hBTWtEVWEv?= =?utf-8?B?aVUzbUhEeE1BN1o3NXFnSUNaYVQycEc2T1cvek93Umxkd1ZvUURoeDNZRUl4?= =?utf-8?B?MHNzaVdCQ2xDWUdVajQ5Q1pJTm10b1FDUis3ZFNtckFTaGpZZG14REdkdlgv?= =?utf-8?B?Q1hwYlB2QWNZNFJObytaTVZNRUhiTTluL0p0d05acmxBRUZoM3N3ZXZTRnNl?= =?utf-8?B?UGNmOFR1QkxodFBTdUM5dDMwZC9JSkJ2aWdCdTk2dXIxS2tLQWRKMUJ5YUt1?= =?utf-8?B?Z1o4dlpzbXpSbW5hdnRSdkxWZ1hHa1hPWE9RKytpRG9ianVRL1FKbzBNblVq?= =?utf-8?B?Rm95ayt1U1RoK0Mvc1kvU0g1Y0FSb1VyMkJOSHVid3N3MEpDbDdQUTZIa290?= =?utf-8?B?YjIvS0ZZYWZobTFrWXFDOVlHMVI0SFd6RGg0TmxLMlBJUzFIeVhJd1c2Zity?= =?utf-8?B?dGtSMEUvYWQxb2gwUUF1WXRqVUJicjU4U29VV3E0SkRteXpxV3FCbnM2V0M5?= =?utf-8?B?TU1RQTQwdnhFcmVNK1lPTFZveWRUOGJpa0J6cjIwL1QyOXAvUzFmZVVCMllI?= =?utf-8?B?K3kweHkzeTdCbnBjbTNLYVFuRFhscS91ektiS1FJTVBvQi9ueGM3dGFoN0x0?= =?utf-8?B?QnRCN254UVRQOG84d3JnaktxUVl0Y1ZHdEpSeXRXU0VYMmxWV3h6d0NmQmVw?= =?utf-8?B?cUxMYlVEYllEQUs2NGpGZDkxckczemptWEY0c0dKTXJ4aFFMMWtHR2NJMitN?= =?utf-8?B?eXdobUhBU3hDOVhRMlJGMVdiVEZrVkFBWkg4NTZ2VDhiYzJHSlU0ZTFyejNE?= =?utf-8?B?c3E3RXJiQVVON0FmUXF4alNuSGtYTFJxdS9KN3ZkeUdRVEMySlZmRVdXSDZa?= =?utf-8?B?RGdtN01XTEh0d2J3UnA4M0NPSTJBcktKemZZMXNOWDlOdVdXNXVNcXlabG0v?= =?utf-8?B?Q3doVUhVcDhXdVV5MXpZcTJ6MWFuZVQxUHdJRlZ6SmM5R0lBMHJnM3I4UUE3?= =?utf-8?B?RGZ2TTBBUUF5TVlMcUFIYjRrMkhsSDgzc1JBTG9kakhkcTlXTnRNSXcrK0Jp?= =?utf-8?B?MEozN2NlUmo4aVNlM0FxdXFCMjFtYXV1RXQyRnBXOHRvTUszb3gremNFcnAv?= =?utf-8?B?MkJzYkRNWUNnM3BIUERld3U1RmhsWHVpS2V4QW96djdaeXBsS1lKSDZ5a2Fv?= =?utf-8?B?WEwwazd6UzZiTVVWT21JZnkrcjRRZDE2MkpwWFBoOHNsbzRrWkU3Zy9ST2lq?= =?utf-8?B?dlNlWXVhMWc3L2RWZzk0OEt1YndDYmlNbEhOT201QmF0ZjJXcXBTK0UvQldM?= =?utf-8?B?VkRNaW1uOE1ad1lmYjdrbEd5UmxPUmVBUkZiemJuRFVsQWo4Y1NpYjJUNkc2?= =?utf-8?B?UCt2RkZCQWV1Q2Z1d28xWStsRmhWUXBUV1h4QUFDQTFZWlFLekVlQVFlYkRi?= =?utf-8?B?QUkwSEk4dnZyb0JQN3pnNGdjcUxYY2o4c3FSaVNqV0hnZkI0dVNmaUlKZEJL?= =?utf-8?B?UkhESS9aYWZoSHQ4Y3M2RUFZWGttQ2J1RHhhYUROWGx6Z0FLNGRabVBzemRF?= =?utf-8?B?M1Z3RXhyR3lSSkxRN0FYSzdMdjh1OUY0QmNKSDAzdm13MSt2TVE0bWI1RVh2?= =?utf-8?B?SGdDNG9NNXFoeW9Eb1RWaTVtS3BlMmhYZ05xYmRreEFKOEJXVmwyNldNd3du?= =?utf-8?B?TEkrdEJGazM5WEE1eWxjUWxyYkk4T2RVVXo4NyszTStRNmJJMXNjVzJxSzA1?= =?utf-8?B?R01XdnlaVFZQc2t4a3BncWJMQjl0Zkx0clJiSXlrQzBuc0M0UHpkdjJWRFVz?= =?utf-8?B?YVAyMmgwSzdCU1JrRnkvMG5TWW8rTFVISVMwVUpkcE9KT2Q4b2t3WE4wSDFt?= =?utf-8?Q?8PI/J4kwbPbf5ow2KXtMEHA6KAwLiY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(7416014)(366016)(1800799024)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N1FpNm1qOFRNK05lQlFtazFwRmlMT0lyQ3RzMkFqbUFSL3NqV29tcTloRzVs?= =?utf-8?B?VFVRSlRMT0QzT1JCa0cxdkUzaWJqR0tpSVQ3WUxmSUZMcWpvZzlJaXdtTTZm?= =?utf-8?B?Z3RBN2Z2WWxEYlRKZVhJN1hoa2VnbkxsMDBkelFYV1gwdHltY3E4OVRXdHE5?= =?utf-8?B?UExmTktobG5DeS9qdnNielAyVmZvTW9hMW5QWXdqcS93ckNpT2FDRjhEUVI0?= =?utf-8?B?K3lOSUU0ODl1ODFOejZudmh2THpOWUlkTzJLZGo2QjNQdHhQblBRSDJNTG5m?= =?utf-8?B?Y3ZHb0s3b3RCSTYxSmtBamtMV1BTcjRLSXhzME85aDlsSUtEcmJtalAraG05?= =?utf-8?B?YkdCc2RZYUZQWGpzSFhVOEs5VmFBRnVtdXRhTk4wWS8rcUVwM21YUmpQVTln?= =?utf-8?B?WnMwYVEyU2x0djM1ZnRaOU4rWE1FRk9ocUx0SGkzWitjZUZIK3ZwMzlzZ2dy?= =?utf-8?B?WXZZT1FCM1R5S29mTGNrZlUxeUhnMjl5TzB1NHFWdFRJTHNvUlFtNkk3T0VC?= =?utf-8?B?ZU9adVRhUXZ5U0Yzb1ZiKzhjZEFDT0N3M1ljM0FOdHErZG1kc3VSelNJNjlJ?= =?utf-8?B?SENnTkhCQXBUa2JvM2I1UWVpZWFUc3VEbDk5Vlg3SG02bThVTHF0WTVYNjJJ?= =?utf-8?B?TmM1UnRwWGNqcER5c25uN3JTS2M1MjJFRnp6aElTRyt4VXlSUTBWMDIzalp6?= =?utf-8?B?Q0psV0xmNFpjMkoxVENxU0MrWE94S0NzeDl1OWdhcURMK3M5NDh1RFhYNHM4?= =?utf-8?B?WXJUbkZPNnU5TWFZZlZaTDd3OXR2UkVuM1JCelBCVlUvbkp1MDZYV3JWS2Ev?= =?utf-8?B?WFRINUpnTHJ5M2JjOTR1cXN3cGNoa1F5VmRUdmlQQVRxWjZFNGxqcmJON2p2?= =?utf-8?B?R29UY2llQ1dFMGMwc00vblhhNngweW9PVmRNbFJzTm8wN2kzbE5PRFdtT1BV?= =?utf-8?B?SXNQQjlYVjVHQ2IvMnJoQTR2aDRPbTR2bXlNZ1pPRkcwNHBZY0tySGY0OHF3?= =?utf-8?B?YzlJd3VvdjB5WXpMUEJZWjFqZjgrcm1MZnRMWHIxcFNsQXVlOXRqcGswT01E?= =?utf-8?B?WlQwVklkaXhLMXhmSXhNV1hHczl6TmtRQWpjN2JNeFF2dE1hVmdoNmZqNWVk?= =?utf-8?B?R2xicGRBWU1LTDZZN1BBUHovWFpvU3dTMng1SjYwWURGZDZNMk9ianpoWStB?= =?utf-8?B?aUw5MlpseWUwTSs5cy9wWUxGQnZDTUdWQzNvalRrMWQ0MjI5VFhqbkozRWJa?= =?utf-8?B?emdZYzFqakZiRktFNG1XMHh4SWU4RXVQVytEZm0xRHYwQmRidTBqMFVUVkxG?= =?utf-8?B?YWNhbHhGZms0aTdNQ0k1ZmZWaWh1VHZCR1ZMcSt5WHF1bFZhSkYwalQydTFx?= =?utf-8?B?WDhFVHM1aEd0SkdEcUVuQnVKNHdTVjBBYUc4L3RzQVlwbGtSNWExNHkzM0pq?= =?utf-8?B?Ri9ndTRzcVdhNDZkK2pLUlA5QUFvbktPbU54TVY5L2ROT1FZQkswd200N2RS?= =?utf-8?B?UDVza2QrOUd0MDgxTGo2VkNqNGlKZWlQVlRWakVJRXJCbnVXc2p1M1Rmby9S?= =?utf-8?B?a05QRVoxTzc2RzVwSGJrVUVEZzdJVXVmSmwveXFOZkVKZDMzcHJ0WFFBQW1S?= =?utf-8?B?OHlRK05FdGhKQjlQWVM3U2hxNDZuZk43N25JbytMT3VNdEUvRE1zYlczUE04?= =?utf-8?B?RkVxTm1kOWVVMnN6UW9YbENWWkdXajNMMFNHRktTeWQwbDlFU3ZxVlhtL1JO?= =?utf-8?B?SVNvM0pGYkhQTHdwcGthcTFLVnJZZWZQWHptUk5NUHJKSmdQRHcrb2E0Mk84?= =?utf-8?B?MHpmaGR5UlYwcWhwREwwQWdWZmFaSWVKMUtxL1Q3bWlZMCtoOXo1TXNRREls?= =?utf-8?B?RG5MbmcybjM2OG9CbjBqOU0wbWZKcDRKMFFNSnJ3ZXRqZlhOSG1DSmZvdHhS?= =?utf-8?B?V2NIOVRHZ3lwVSttUUVrdmhseWJWVnVlRUFBSHlTYXBheU5ZVFVNQTJ3YTFr?= =?utf-8?B?WTdEZlpSc2RXcmlrcC9MR0EzeGFmN3lmZ2lCUS81WE9xUW56eWw2cEQyb1VH?= =?utf-8?B?TC9DTmp6MUtYdThEQ2s1SFlBdlZNL1VhbmhmM0d4RFZRZ0RJV1pkMWtLbTFn?= =?utf-8?Q?gbubzoPM5TA/Vr8OTSNPWHnRN?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6fec3ae7-f96d-42fd-958d-08ddceb9fdbf X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2025 16:07:17.9651 (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: JmKzLC8aM3fUprHzICk5Yks0T5No3x7t5g+VjSzL7JO0vfHF8jsUMiVA3k6apbdl3KNQbKiqCxSNz5FbziciPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10551 Add helper v4l_get_required_align_by_bpp() to help get width alignment requirement. Basic replace below logic and enhance to any 2^[0..31] in drivers/media/platform/nxp/imx-mipi-csis.c mipi_csis_set_fmt( { ... switch (csis_fmt->width % 8) { case 0: align =3D 0; break; case 4: align =3D 1; break; case 2: case 6: align =3D 2; break; default: /* 1, 3, 5, 7 */ align =3D 3; break; } ... } Signed-off-by: Frank Li --- changes in v4 - new patch --- include/media/v4l2-common.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index 0a43f56578bce1896cf63e29dd19f58ec0c46bed..a861d83bcd835dc854476b25919= 383415e5d434f 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h @@ -669,4 +669,34 @@ static inline bool v4l2_is_quant_valid(__u8 quantizati= on) quantization =3D=3D V4L2_QUANTIZATION_LIM_RANGE; } =20 +/** + * v4l_get_required_align_by_bpp - get align requirement for + * v4l_bound_align_image(). (bpp * width) % (1 << align) have to be 0. + * given number bpp, get width's alignment requirement. For example, + * if align is 3, means require bpp * width must be multiples of 8. + * bpp return width's requirememnt + * 0 0 none + * 1 3 8 (need 3 zero bits) + * 2 2 4 + * 3 3 8 + * 4 1 2 + * 5 3 8 + * 6 2 4 + * 7 3 8 + * @bpp: input bpp + * @align: expected alignment, 2^(align). + * + * return: required alignment. + */ +static inline u32 v4l_get_required_align_by_bpp(u32 bpp, u32 align) +{ + int pos; + + if (bpp =3D=3D 0) + return 0; + + pos =3D ffs(bpp) - 1; + return pos > align ? 0 : align - pos; +} + #endif /* V4L2_COMMON_H_ */ --=20 2.34.1 From nobody Sun Oct 5 20:11:54 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011067.outbound.protection.outlook.com [52.101.70.67]) (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 21C8F293C79; Tue, 29 Jul 2025 16:07:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805248; cv=fail; b=oIH3VWjiH+TcMsiW64neJNCK07NnfnJYkB3HF+JrOG39TkLCTnX9bk/VWdsS9hbcpYYj+bNflCU7kQVnLAcIJDiV8WvbOz4/fc4c7c0GBqRyi2LIPGLip7SCuLBUTkbeNyJeMG/0fi7ZcqeuLuOC2m4lxetQ2qUqqNz41xi/iOk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805248; c=relaxed/simple; bh=BRDOycBqVuICskJy1RE0YM8e7O+IwDPiZexNHMs8lvg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=robCIHcpF0kbk/BcMizFUUTb6X73Wc+ZB2eX6LbU9cPG1THTwRKWqMHTXd7D1D6bkJ8YFa54lrIrMFTkGE5yU1zYgSiR3175u8ro6muYx3W2B0PFbFdGgGkGMox9Z/7DsJiHlveZyj5sj72+4KE+FSgHL3jgd8A+spGaTzLzJqU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=jKWDGdaL; arc=fail smtp.client-ip=52.101.70.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="jKWDGdaL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yk9PVOm9k6AX0FHzeUP1/wB2JkrCsx+ihJcN4OQOfXqd2tSVFmNQjiryoq660o8DBIvOARCPjaZv7ZrMEZaF4szWvBvdfw1tBrfFnDznoedCJ71AAEIpGFMtv8OgGEy6kC3O0cXJmxk2ROWSsnhxyJcqHCaSTT4CBBlPjHYPjuMXC30WBKXaftYBhS66G6RdEgRCPhO4cAwLB4WbcwwwJQ6xH2T5DuUfDo2iZWCND2FHw34ApK6IdNT0MIhrF32SlXhmzjBV4IlwUHQz8YEMFtXtv04yM0x7MOaE2JEsU26moU/V+0zaf3KZx7j9UpZNHJk8kpXYrKh+K5Abq+KqNQ== 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=KvvtgL39q3k9QFLS835psf1aCDytvQu6r3BE7sKJE4o=; b=sSMCgEKmfBHVqxDlDcvbON+YWeZLfeH6ojyKda5+lsBFJEE1t+D2PqUAB/VvxBmJaMvWlhYKT+R7OEKgqeOI1Zp0baMLQoAUrSarP2wHNx8p/t5bVidSou3OK5xHUqUIoIV+x2A9hZvdpByYSrRIi+HlDSqwsAjyIvIYOjDqR2uIDYm4iA2l8/AMdD/yAKQqBi909LXv3XGmqfQCBCqkRxHHD8lh2FAQD+YM70NOH1ew3ZPI/PnTGGyuH2mtsSk535TeUl2sKbk+yA0J0PG/UxK2/tfOyuzVc9VK+g7T2Y4X2LeP2IJdPRVplR3A2b7wVe7nbxTCzmwi+JdcQ5smBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KvvtgL39q3k9QFLS835psf1aCDytvQu6r3BE7sKJE4o=; b=jKWDGdaLK9SmKAZJ2PBD1br7HHJRQ2hneGMHocAHYDcWXdKdVtLglQgy8Z173KaIcVJNA8fB2A/hAMTuh8oxJEZtUwP/Jj1cbz/QXIaaidPzDyo9pkD/VFS7hjLKEcmn+oRpTRB/vrMVj6+3rdPMjQxPWHCWq2c1lluEiQ/EOy7WnJY9VftD8fXtMTMpoaGZ0HHhaNQdl1FS5jKtIxQi66+DJCJEZGASCm4jcFyMDpF6V2aPnvGUaL/Hq+cVklJtu2HrYNzuXfMWagqGMX55NUBPdHs/RMywjAfvfoGwMh4BIHgAW+B4xHtIdPwNgmplYHbNakoqeBE6VZU32WJ1Tg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by DU4PR04MB10551.eurprd04.prod.outlook.com (2603:10a6:10:588::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.11; Tue, 29 Jul 2025 16:07:23 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.8964.025; Tue, 29 Jul 2025 16:07:23 +0000 From: Frank Li Date: Tue, 29 Jul 2025 12:06:24 -0400 Subject: [PATCH v4 3/5] media: nxp: add V4L2 subdev driver for camera parallel interface (CPI) Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250729-imx8qxp_pcam-v4-3-4dfca4ed2f87@nxp.com> References: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> In-Reply-To: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Frank Li , Alice Yuan , Robert Chiras , Zhipeng Wang X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1753805222; l=24973; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=YB+UpO8c8EV7Dgibk5QPQ9269SHdKfM0FyTnTEzirhg=; b=3iePwGH5I9HG6kz/uRMeZh+bmFDIPFIzu9tz3MjbSALXLA0aupFTVPZiJSOzUPyBFJfp90QxM MYBiFhLKsUrBkCP8PFSO4tQebnzEuLg6QnQZQQVSKOX1CEjJToeJ6Sz X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BY3PR05CA0028.namprd05.prod.outlook.com (2603:10b6:a03:254::33) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10551:EE_ X-MS-Office365-Filtering-Correlation-Id: a397bbe9-c44d-4970-ed88-08ddceba00f5 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|19092799006|52116014|376014|7416014|366016|1800799024|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MWRYeEt2R1AramE5UGtjZ2N2M3FQUkQ3OGdlOG52cEhmNnp0M29FM2ZSSVds?= =?utf-8?B?T29RbDVDaHVkVGFTbUl0aHBqYzV1a0lIaWlwdFdqKzkrb1BMTkd6RHJCcGN5?= =?utf-8?B?Y2RoNndiSlpmVWJtQ1NtNGNYM1ZoN29ieklzbFBzcnlRWklNRG8vU0ZYRyti?= =?utf-8?B?a2hTcW5zRnVkTXBsbFBFSWpBK056VzlsK2grL1pMdkxJZU12eGlDTkRvTzV1?= =?utf-8?B?QXlkVGkxWmpUM1BkbzU3TWpMb1lvMjFsc3RmVFlxRVd1L3JlV2Q1aHgydUNr?= =?utf-8?B?TkVkdlNmN2J3SCtuS1E1THBHSHM0Q1VoRHcraEpRMDk3RUoxUVR3RFhCQjdR?= =?utf-8?B?ajZwOVgzenZjYWgyY0M0bEJScEduMnQwTStTZThGRkkyOXZmajRvMkFUODEw?= =?utf-8?B?ekZzK2JpSUl4S2VJNndXM2ZDd2QwakUrNlRIZlA5ZVFIY2QzN09WcEg2SnM5?= =?utf-8?B?dWVBNHZFY1lFYjYwRUNpTjN3SmprbkxWeEgzQW81ZWtyL1djNUU2a09HRTNZ?= =?utf-8?B?Y2QyUUFyMFVQcVRCVzRDZzRvbkRSam8yYUYvelJzVTRJK2JLRzhZTkVZVi9N?= =?utf-8?B?eUJSVXRxYkhaWDkvOUdDdGlFM1ZoM2Z4ZStpN0pMVW1PcDJLVzlsdEl6Qmph?= =?utf-8?B?ZGFSRS96V1NDR1ZlRy9MNUxMekhURS9XWFRyK0NJUmhJUmxmdk9HQkxtT0VG?= =?utf-8?B?RWYvY2l3elExWERaMkg0YVdtUUl4cXluSERSVkpkR1dzMTdSUTdjZWp0U09o?= =?utf-8?B?SG1adkpYWHBkMExXYnQ1Y2E1K2d0bHlUd3J6Q3E2VGZxRU5PaWpZSkJBQmdS?= =?utf-8?B?MmZENW9xb01YQU01b2dPQVZOanNDb0JXQk5SRWRGczBHRGZTYjljeFFxbTNm?= =?utf-8?B?bUh3VlovVmpkdUFZaHN6ejVVT1VvN2NSTkRxYWMvL050SnAwK0xBUVUwazVN?= =?utf-8?B?azdob0FHYklhOWpxdGdRUkZhdTJMMEJQNWNRdHRVdGVQNFcreENBQmc1cUZx?= =?utf-8?B?L0FMRmM3SCtKUlNGNWxKNGprZlhQR2VzNCtEZnZ6ajBwd0VqWUNtMWNWbUI1?= =?utf-8?B?NkRId1REMW1FSlk5ZjFSelUyYysxREE1aFcveE5CN1FGdGorTVU2K3BBeUtI?= =?utf-8?B?b09YTGhqOWx4UEl5eXFsbGpNNUV2UDFwYWNQSXAvMzFSUGdsTGEveFpsU3RV?= =?utf-8?B?WVJXemM5cFFQNHRRU2FKOCtkNWwvR1ptaFlnajluc2VVUjhBVXhUZm5aMFo3?= =?utf-8?B?TDhnWjM3Vm03bWhlWkw2VHp4UXJuWmhzUXJoYWNicU4ybzVIeGFYQnA1azIv?= =?utf-8?B?WGEzS1E2bXphZHk4eCt2cWdUdlBlb2paS0wzbmR0N2YrbTRyVXNzYzJZK3ps?= =?utf-8?B?OVRaYTZEYjVHb01HK3M5T3dlaUVDeW04K2t2YmEyZmc2TlZpS3ZWU2c4QVBI?= =?utf-8?B?OHJYbWtLeXN5NHlMNmliYjRmTHBLZDBnRGYzWjV6N2MzOWpNNUNlRFdGZWhT?= =?utf-8?B?S1d0bWhFNy9NdVk5dTk0ZndLczcrQXF4S3AwMzRVZWxqV09IUEt0dUlEQVFi?= =?utf-8?B?YnBUMlBxeFRYWmRCNEdaUFlxa3o5SC9mblRaRFVYUzhwc0RGQXlURnBVWlQ3?= =?utf-8?B?TDBTS25UWUxUY25sWFZvY2NQQlVkekxpTFpSdnE5aDhkVDdaZHlkeXFFd2E5?= =?utf-8?B?cnUvQ2phRElQaGI2dWlsRXdDRXZSNEdHWHpHeE9WeUR6K1Brc0F2NFk3VXpG?= =?utf-8?B?R1NnTU9sMVJ2ZUs1QTNxRnBmdzAweVRlL1NlUlBvRm9kVFZkN3A1REQ3Zlhy?= =?utf-8?B?MHZiL3l4MzJBNzJYbVo2UXVyTEZWOWgwbW1hOGhCbmM4STAyN2ZGRGtGdFFt?= =?utf-8?B?MlV0cGhZVS9GSlk3b2Y3SHBiTEMyY0ZVU0M5RGpTUFErMG1SUDNZc3R3THVK?= =?utf-8?B?bUg4MXl6eWZ5STlQWXAwREdHS294Z2EwdE4yVWhYZEF4WnRKRy9LdzZvM2Va?= =?utf-8?Q?eAdp3Y6ro7CBFEeU1dsKUJXTpcRlBY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(7416014)(366016)(1800799024)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UUpwZDRxNUMrSEJMbmo5L0x3OEpQQ3NGSXlhUnRuNW55ZjR1bWNDai9xcFNu?= =?utf-8?B?U0xiUWsrWDFYWDRUYmR1Ukt5U1NpN2hWZ2ZlUDFvNFNKUlNXQ2FrTGtTTllw?= =?utf-8?B?UFNwbE1henBkSWsvbkpOeW55YlplSXJqeUV6ZHNLaWtKOXB2azdqZ3h6QThR?= =?utf-8?B?QWpWZ3YwUkppcHRhaEo5QU85cDBHZHVsS3FpZjNNY3JRV3JUb2cwalp4MjZT?= =?utf-8?B?cGVXTUJndjRBNGJSKzhZQU1PbjdxdkEyU2hwSGhzdjJMNUl1bzVxVUdEV1dM?= =?utf-8?B?Z2hHWjZaQ0ZzdU5zOFpSV2VUNS8vUFpvd1oySTBpQjlkNHJ6aUpBa1NFVWtQ?= =?utf-8?B?KzNmYmpId3VyMmtmVHA5OXNYNWRrc1dOMFVqd3VSMEFuNEU0STBPcEx0MDlX?= =?utf-8?B?akZDZHh4a2FUZmExOUFxK0UyZzV5Nlh6bld1RjhJSTQ2Qzk1VnZrdkFVNU5R?= =?utf-8?B?dmE4TXhzLzFsWEIyeXVBZzhONXNvWnZxQzlSaWdMN0FjSW1sbG03eVNSS25s?= =?utf-8?B?emtsQTlINGx3MU4wOFEyeXlmbHhoN1JUdlZTQVZTeXVZUkU1aE9KaWtnbHRJ?= =?utf-8?B?Q0tiM0RpL0tRVG13d1ZnR01JOEZWTE8rZVBGakFvUTJ0Mi9zMUNXenZBZURm?= =?utf-8?B?T1J0ZEUxZkR6Qm5SQUtFV3J4SFdzSmJPTGFGOWM3UENJcklxbGdjWnFzU05G?= =?utf-8?B?bVV0Ny81N0dnSTJqSmp3WnVaQS9lL2wyZzNLOU1CMHZKVkN4VGNqd0pwQTht?= =?utf-8?B?SUxFV0pzYW9nbExPRW9tK2Npb1hVaDdGVnVRK2QzaS9CcUNLVXRVMFVpYzU2?= =?utf-8?B?V0xkdW0xVTNVSUI2b2I5SFFOcGJVNEJWZTFWUDgxdXUzdWRMTmVybkJOZTRJ?= =?utf-8?B?R3RsNlJMbjI3SlFXS0NLMWtJNHdkTXR6YmMwVGpFRkpMaFFmREpQZ3FCYzgy?= =?utf-8?B?VGNiWlFaM1FhbExmaGRIUTZYMDdGQ01wMVZrbGVvZUgyWGdkUkY1cVFZQlAr?= =?utf-8?B?c1pmRWdHZzZ4bEkvdWtTMTVVOGlZenBPbE9reVZXUEJyVXBvM1pURzl6RjNo?= =?utf-8?B?THBRR2V0OW1CZk9qYmE4UTRyOVZlbGxCbFNEUnJxbDA5a21jYUs3ZUFGZ0hD?= =?utf-8?B?SzZRZmVHeWFiVkh3YWEzZktkUkVIWitIbVBqNXNYbCtqK0dENU1LUFdTRllD?= =?utf-8?B?QXhrYUxoMTlpK05xcjFxSmM5eU0xd2hNZTA0bi9IRkg5a0ZaMXZWVy9WZjFD?= =?utf-8?B?ZHVzcllpMHVmeEJUY2lIdTd5eG9xbmtNa3NZdU54Mld3LzZVUU1nT1FETjcr?= =?utf-8?B?WDVWdG4wdlp3cy9tU2lKS09oelFJU2NxNEJveEhYS3NGVU9sR1hIRG5VaWI3?= =?utf-8?B?dUdTSmFmaFNrbnZIa3BtNmFaYmtZK1Z6L3lvUmtKVnRsT0d3VUZmcjNMYmlv?= =?utf-8?B?dEpaOStJeHBPQUdJbkYxdktjaSt0LzZxYW9zR2U0L3E5WVJkUHdGWVM3aVZh?= =?utf-8?B?M212V1hnRVBZSzZ3WXFBbFBkeGdVZ1pUblh2M1hCbkVWaVVEeDNIVnlwNFVK?= =?utf-8?B?MjZhTG1DL1Q5N20xZ3JoSnp0OE1VRFJJWWVmelYySnczblpCSmNOUTZuVWx3?= =?utf-8?B?NUREbS9lM3llNlQyRDgvNGdFSytmMU1UVEpwR2x2Q1BMRnVjSWhZNFNQOEhk?= =?utf-8?B?TU90ckpzb1Z5OFkrVXpxK2tsaWlvUHVQM3JKR0phNWNacSt4SnRSUlBmeWp3?= =?utf-8?B?NzBXRXUvcnBLblpqUWRrR2RSSFhTY2hpMmRkZFVPbzZFcjBiTWFlcVdYbnFj?= =?utf-8?B?UjllTUpxUVY4d2pQVHgwS0xuYXAzQ0dkVEN4UTNEQkltN1IzTE9vZzVNNG9B?= =?utf-8?B?dktTaDBuRHJ0S2E2WHZ3Y2FrRmF2SmJLcGZUSko5MXk1SjhBYTBzaTFSWGpr?= =?utf-8?B?TUVjNTV1SEF6YldJd2ZQS0lWanhtOWJqSEdydU9ESGRvV3dNTG9SWUExQ2ZZ?= =?utf-8?B?MmpBOThqUnVUOFNYLzljVm1zVmVzd0dOd1Zya3d0R1M5bTBGbS9sSDRKSHhz?= =?utf-8?B?eE1vVkJvMVVma0c1bUF4YUZPZlQzY1VKMzZjSHZXTlZPSTlPZzFQWEJ2bjgv?= =?utf-8?Q?TL2twLYOryEeOBcr1LyQzlL0N?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a397bbe9-c44d-4970-ed88-08ddceba00f5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2025 16:07:23.4131 (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: UM2Cp22iBCKllZfm4MNEbff9mtaMbJH2vcLnroiRX7Ll+eo7AOyNwhGgAerwO5YZbTnXZ69y3miu3DG7kjhKLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10551 From: Alice Yuan Add a V4L2 sub-device driver for the CPI controller found on i.MX8QXP, i.MX8QM, and i.MX93 SoCs. This controller supports parallel camera sensors and enables image data capture through a parallel interface. Signed-off-by: Alice Yuan Signed-off-by: Robert Chiras Signed-off-by: Zhipeng Wang Signed-off-by: Frank Li --- change in v4 - remove unnecesary header file. - use devm_bulk_clk_get(). - update kConfig i.MX8/i.MX9 - Remove define IMX_CPI_DEF_PIX_WIDTH ..., which used once only - drop get_interface_ctrl_reg1_param - drop uv-swap - drop imx_cpi_link_setup by use immutable link. - use enable/disable_stream() replace depericated .s_stream. - remove dbg print and reg dump functions. - use goto/.remove() to do manual cleanup. - remove imx93 support. Add it later. change in v3 - replace csi with cpi - use __free(fwnode_handle) to simpilfy code - remove imx91 driver data, which is the same as imx93 change in v2 - remove MODULE_ALIAS - use devm_pm_runtime_enable() and cleanup remove function - change output format to 1x16. controller convert 2x8 to 1x16 format --- MAINTAINERS | 1 + drivers/media/platform/nxp/Kconfig | 11 + drivers/media/platform/nxp/Makefile | 1 + drivers/media/platform/nxp/imx-parallel-cpi.c | 728 ++++++++++++++++++++++= ++++ 4 files changed, 741 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 4eb0d0de16299a3bcd5c2f6f6445e416c8fa0a48..5fa349a2942ca05313b1dd6d754= be039b565f12e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15240,6 +15240,7 @@ F: Documentation/devicetree/bindings/media/nxp,imx-= mipi-csi2.yaml F: Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml F: Documentation/devicetree/bindings/media/nxp,imx8mq-mipi-csi2.yaml F: drivers/media/platform/nxp/imx-mipi-csis.c +F: drivers/media/platform/nxp/imx-parallel-cpi.c F: drivers/media/platform/nxp/imx7-media-csi.c F: drivers/media/platform/nxp/imx8mq-mipi-csi2.c =20 diff --git a/drivers/media/platform/nxp/Kconfig b/drivers/media/platform/nx= p/Kconfig index 40e3436669e213fdc5da70821dc0b420e1821f4f..99d5ee4208cce7361827d27ed43= 2abf71d0f627c 100644 --- a/drivers/media/platform/nxp/Kconfig +++ b/drivers/media/platform/nxp/Kconfig @@ -39,6 +39,17 @@ config VIDEO_IMX_MIPI_CSIS Video4Linux2 sub-device driver for the MIPI CSI-2 CSIS receiver v3.3/v3.6.3 found on some i.MX7 and i.MX8 SoCs. =20 +config VIDEO_IMX_PARALLEL_CPI + tristate "NXP i.MX8/i.MX9 Parallel CPI Driver" + depends on ARCH_MXC || COMPILE_TEST + depends on VIDEO_DEV + select MEDIA_CONTROLLER + select V4L2_FWNODE + select VIDEO_V4L2_SUBDEV_API + help + Video4Linux2 sub-device driver for PARALLEL CPI receiver found + on some iMX8 and iMX9 SoCs. + source "drivers/media/platform/nxp/imx8-isi/Kconfig" =20 # mem2mem drivers diff --git a/drivers/media/platform/nxp/Makefile b/drivers/media/platform/n= xp/Makefile index 4d90eb71365259ebdda84ea58483e1c4131d3ac7..5346919d2f1083b51ec99b66981= c5d38b3df960c 100644 --- a/drivers/media/platform/nxp/Makefile +++ b/drivers/media/platform/nxp/Makefile @@ -7,5 +7,6 @@ obj-y +=3D imx8-isi/ obj-$(CONFIG_VIDEO_IMX7_CSI) +=3D imx7-media-csi.o obj-$(CONFIG_VIDEO_IMX8MQ_MIPI_CSI2) +=3D imx8mq-mipi-csi2.o obj-$(CONFIG_VIDEO_IMX_MIPI_CSIS) +=3D imx-mipi-csis.o +obj-$(CONFIG_VIDEO_IMX_PARALLEL_CPI) +=3D imx-parallel-cpi.o obj-$(CONFIG_VIDEO_IMX_PXP) +=3D imx-pxp.o obj-$(CONFIG_VIDEO_MX2_EMMAPRP) +=3D mx2_emmaprp.o diff --git a/drivers/media/platform/nxp/imx-parallel-cpi.c b/drivers/media/= platform/nxp/imx-parallel-cpi.c new file mode 100644 index 0000000000000000000000000000000000000000..57d7c116d9f5b1cbc41e4a6f138= 828697601dcdc --- /dev/null +++ b/drivers/media/platform/nxp/imx-parallel-cpi.c @@ -0,0 +1,728 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * i.MX Parallel CPI receiver driver. + * + * Copyright 2019-2025 NXP + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define IMX_CPI_PAD_SINK 0 +#define IMX_CPI_PAD_SOURCE 1 +#define IMX_CPI_PADS_NUM 2 + +/* CI_PI INTERFACE CONTROL */ +#define IF_CTRL_REG_PL_ENABLE BIT(0) +#define IF_CTRL_REG_PL_VALID BIT(1) +#define IF_CTRL_REG_DATA_TYPE_SEL BIT(8) +#define IF_CTRL_REG_DATA_TYPE(x) FIELD_PREP(GENMASK(13, 9), (x)) + +#define DATA_TYPE_OUT_NULL 0x00 +#define DATA_TYPE_OUT_RGB 0x04 +#define DATA_TYPE_OUT_YUV444 0x08 +#define DATA_TYPE_OUT_YYU420_ODD 0x10 +#define DATA_TYPE_OUT_YYU420_EVEN 0x12 +#define DATA_TYPE_OUT_YYY_ODD 0x18 +#define DATA_TYPE_OUT_UYVY_EVEN 0x1a +#define DATA_TYPE_OUT_RAW 0x1c + +#define IF_CTRL_REG_IF_FORCE_HSYNV_OVERRIDE 0x4 +#define IF_CTRL_REG_IF_FORCE_VSYNV_OVERRIDE 0x2 +#define IF_CTRL_REG_IF_FORCE_DATA_ENABLE_OVERRIDE 0x1 + +/* CPI INTERFACE CONTROL REG */ +#define CPI_CTRL_REG_CPI_EN BIT(0) +#define CPI_CTRL_REG_PIXEL_CLK_POL BIT(1) +#define CPI_CTRL_REG_HSYNC_POL BIT(2) +#define CPI_CTRL_REG_VSYNC_POL BIT(3) +#define CPI_CTRL_REG_DE_POL BIT(4) +#define CPI_CTRL_REG_PIXEL_DATA_POL BIT(5) +#define CPI_CTRL_REG_CCIR_EXT_VSYNC_EN BIT(6) +#define CPI_CTRL_REG_CCIR_EN BIT(7) +#define CPI_CTRL_REG_CCIR_VIDEO_MODE BIT(8) +#define CPI_CTRL_REG_CCIR_NTSC_EN BIT(9) +#define CPI_CTRL_REG_CCIR_VSYNC_RESET_EN BIT(10) +#define CPI_CTRL_REG_CCIR_ECC_ERR_CORRECT_EN BIT(11) +#define CPI_CTRL_REG_HSYNC_FORCE_EN BIT(12) +#define CPI_CTRL_REG_VSYNC_FORCE_EN BIT(13) +#define CPI_CTRL_REG_GCLK_MODE_EN BIT(14) +#define CPI_CTRL_REG_VALID_SEL BIT(15) +#define CPI_CTRL_REG_RAW_OUT_SEL BIT(16) +#define CPI_CTRL_REG_HSYNC_OUT_SEL BIT(17) +#define CPI_CTRL_REG_HSYNC_PULSE(x) FIELD_PREP(GENMASK(21, 19), (x)) +#define CPI_CTRL_REG_UV_SWAP_EN BIT(22) +#define CPI_CTRL_REG_DATA_TYPE_IN(x) FIELD_PREP(GENMASK(26, 23), (x)) +#define CPI_CTRL_REG_MASK_VSYNC_COUNTER(x) FIELD_PREP(GENMASK(28, 27), (x)) +#define CPI_CTRL_REG_SOFTRST BIT(31) + +/* CPI INTERFACE STATUS */ +#define CPI_STATUS_FIELD_TOGGLE BIT(0) +#define CPI_STATUS_ECC_ERROR BIT(1) + +/* CPI INTERFACE CONTROL REG1 */ +#define CPI_CTRL_REG1_PIXEL_WIDTH(v) FIELD_PREP(GENMASK(15, 0), (v)) +#define CPI_CTRL_REG1_VSYNC_PULSE(v) FIELD_PREP(GENMASK(31, 16), (v)) + +#define CPI_CTRL_V2_REG1_PIXEL_WIDTH(v) FIELD_PREP(GENMASK(16, 0), (v)) +#define CPI_CTRL_V2_REG1_VSYNC_PULSE(v) FIELD_PREP(GENMASK(31, 16), (v)) + +/* Need match field DATA_TYPE_IN definition at CPI CTRL register */ +enum cpi_in_data_type { + CPI_IN_DT_UYVY_BT656_8 =3D 0x0, + CPI_IN_DT_UYVY_BT656_10, + CPI_IN_DT_RGB_8, + CPI_IN_DT_BGR_8, + CPI_IN_DT_YVYU_8 =3D 0x5, + CPI_IN_DT_YUV_8, + CPI_IN_DT_RAW_8 =3D 0x9, + CPI_IN_DT_RAW_10, +}; + +enum { + PI_GATE_CLOCK_MODE, + PI_CCIR_MODE, +}; + +enum { + PI_V1, + PI_V2, +}; + +struct imx_cpi_plat_data { + u32 version; + u32 if_ctrl_reg; + u32 interface_status; + u32 interface_ctrl_reg; + u32 interface_ctrl_reg1; +}; + +struct imx_cpi_device { + struct device *dev; + void __iomem *regs; + struct clk_bulk_data *clks; + int num_clks; + + struct v4l2_subdev sd; + struct media_pad pads[IMX_CPI_PADS_NUM]; + struct v4l2_async_notifier notifier; + + const struct imx_cpi_plat_data *pdata; + struct v4l2_fwnode_endpoint vep; + + struct { + struct v4l2_subdev *sd; + const struct media_pad *pad; + } source; + + u8 mode; +}; + +struct imx_cpi_pix_format { + u32 code; + u32 output; + u32 data_type; + u8 width; +}; + +static const struct imx_cpi_pix_format imx_cpi_formats[] =3D { + /* YUV formats. */ + { + .code =3D MEDIA_BUS_FMT_UYVY8_2X8, + .output =3D MEDIA_BUS_FMT_UYVY8_1X16, + .data_type =3D CPI_IN_DT_UYVY_BT656_8, + .width =3D 16, + }, { + .code =3D MEDIA_BUS_FMT_YUYV8_2X8, + .output =3D MEDIA_BUS_FMT_YUYV8_1X16, + .data_type =3D CPI_IN_DT_YVYU_8, + .width =3D 16, + }, +}; + +static const struct imx_cpi_plat_data imx8qxp_pdata =3D { + .version =3D PI_V1, + .if_ctrl_reg =3D 0x0, + .interface_status =3D 0x20, + .interface_ctrl_reg =3D 0x10, + .interface_ctrl_reg1 =3D 0x30, +}; + +static const struct imx_cpi_pix_format *find_imx_cpi_format(u32 code) +{ + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(imx_cpi_formats); i++) + if (code =3D=3D imx_cpi_formats[i].code) + return &imx_cpi_formats[i]; + + return NULL; +} + +static void imx_cpi_sw_reset(struct imx_cpi_device *pcpidev) +{ + const struct imx_cpi_plat_data *pdata =3D pcpidev->pdata; + u32 val; + + /* Softwaret Reset */ + val =3D readl(pcpidev->regs + pdata->interface_ctrl_reg); + val |=3D CPI_CTRL_REG_SOFTRST; + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); + + usleep_range(500, 1000); + val =3D readl(pcpidev->regs + pdata->interface_ctrl_reg); + val &=3D ~CPI_CTRL_REG_SOFTRST; + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); +} + +static void imx_cpi_hw_config(struct imx_cpi_device *pcpidev, + const struct imx_cpi_pix_format *pcpidev_fmt) +{ + const struct imx_cpi_plat_data *pdata =3D pcpidev->pdata; + u32 flags =3D pcpidev->vep.bus.parallel.flags; + bool hsync_pol =3D !!(flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH); + bool vsync_pol =3D !!(flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH); + u32 val; + + /* Software Reset */ + imx_cpi_sw_reset(pcpidev); + + /* Config PL Data Type */ + val =3D IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_YUV444); + val |=3D IF_CTRL_REG_PL_ENABLE | IF_CTRL_REG_PL_VALID; + writel(val, pcpidev->regs + pdata->if_ctrl_reg); + + /* Config CTRL REG */ + val =3D CPI_CTRL_REG_HSYNC_FORCE_EN | CPI_CTRL_REG_VSYNC_FORCE_EN; + + val |=3D CPI_CTRL_REG_DATA_TYPE_IN(pcpidev_fmt->data_type) | + FIELD_PREP(CPI_CTRL_REG_HSYNC_POL, hsync_pol) | + FIELD_PREP(CPI_CTRL_REG_VSYNC_POL, vsync_pol) | + FIELD_PREP(CPI_CTRL_REG_PIXEL_CLK_POL, 0) | + CPI_CTRL_REG_MASK_VSYNC_COUNTER(3) | + CPI_CTRL_REG_HSYNC_PULSE(2); + + if (pcpidev_fmt->code =3D=3D MEDIA_BUS_FMT_YUYV8_2X8 || + pcpidev_fmt->code =3D=3D MEDIA_BUS_FMT_UYVY8_2X8) + val |=3D CPI_CTRL_REG_UV_SWAP_EN; + + if (pcpidev->mode =3D=3D PI_GATE_CLOCK_MODE) { + val |=3D CPI_CTRL_REG_GCLK_MODE_EN; + } else if (pcpidev->mode =3D=3D PI_CCIR_MODE) { + val |=3D (CPI_CTRL_REG_CCIR_EN | + CPI_CTRL_REG_CCIR_VSYNC_RESET_EN | + CPI_CTRL_REG_CCIR_EXT_VSYNC_EN | + CPI_CTRL_REG_CCIR_ECC_ERR_CORRECT_EN); + } + + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); +} + +static void imx_cpi_config_ctrl_reg1(struct imx_cpi_device *pcpidev, + const struct v4l2_mbus_framefmt *format) +{ + const struct imx_cpi_plat_data *pdata =3D pcpidev->pdata; + u32 pixel_width; + u32 vsync_pulse; + u32 val; + + pixel_width =3D format->width - 1; + vsync_pulse =3D format->width << 1; + + switch (pcpidev->pdata->version) { + case PI_V1: + val =3D CPI_CTRL_REG1_PIXEL_WIDTH(pixel_width) | + CPI_CTRL_REG1_VSYNC_PULSE(vsync_pulse); + break; + case PI_V2: + val =3D CPI_CTRL_V2_REG1_PIXEL_WIDTH(pixel_width) | + CPI_CTRL_V2_REG1_VSYNC_PULSE(vsync_pulse); + break; + default: + val =3D 0; /* Never happen */ + } + + val =3D CPI_CTRL_REG1_PIXEL_WIDTH(pixel_width) | + CPI_CTRL_REG1_VSYNC_PULSE(vsync_pulse); + writel(val, pcpidev->regs + pdata->interface_ctrl_reg1); +} + +static void imx_cpi_enable(struct imx_cpi_device *pcpidev) +{ + const struct imx_cpi_plat_data *pdata =3D pcpidev->pdata; + u32 val; + + /* Enable CPI */ + val =3D readl(pcpidev->regs + pdata->interface_ctrl_reg); + val |=3D CPI_CTRL_REG_CPI_EN; + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); + + /* Disable SYNC Force */ + val =3D readl(pcpidev->regs + pdata->interface_ctrl_reg); + val &=3D ~(CPI_CTRL_REG_HSYNC_FORCE_EN | CPI_CTRL_REG_VSYNC_FORCE_EN); + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); +} + +static void imx_cpi_disable(struct imx_cpi_device *pcpidev) +{ + const struct imx_cpi_plat_data *pdata =3D pcpidev->pdata; + u32 val; + + /* Enable Sync Force */ + val =3D readl(pcpidev->regs + pdata->interface_ctrl_reg); + val |=3D CPI_CTRL_REG_HSYNC_FORCE_EN | CPI_CTRL_REG_VSYNC_FORCE_EN; + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); + + /* Disable CPI */ + val =3D readl(pcpidev->regs + pdata->interface_ctrl_reg); + val &=3D ~CPI_CTRL_REG_CPI_EN; + writel(val, pcpidev->regs + pdata->interface_ctrl_reg); + + /* Disable Pixel Link */ + val =3D readl(pcpidev->regs + pdata->if_ctrl_reg); + val &=3D ~(IF_CTRL_REG_PL_VALID | IF_CTRL_REG_PL_ENABLE); + writel(val, pcpidev->regs + pdata->if_ctrl_reg); +} + +static void imx_cpi_start_stream(struct imx_cpi_device *pcpidev, + const struct v4l2_mbus_framefmt *format, + const struct imx_cpi_pix_format *pcpidev_fmt) +{ + imx_cpi_hw_config(pcpidev, pcpidev_fmt); + imx_cpi_config_ctrl_reg1(pcpidev, format); + imx_cpi_enable(pcpidev); +} + +static void imx_cpi_stop_stream(struct imx_cpi_device *pcpidev) +{ + imx_cpi_disable(pcpidev); +} + +/* -----------------------------------------------------------------------= ------ + * Async subdev notifier + */ + +static struct imx_cpi_device * +notifier_to_imx_cpi_device(struct v4l2_async_notifier *n) +{ + return container_of(n, struct imx_cpi_device, notifier); +} + +static struct imx_cpi_device * +sd_to_imx_cpi_device(struct v4l2_subdev *sdev) +{ + return container_of(sdev, struct imx_cpi_device, sd); +} + +static int imx_cpi_notify_bound(struct v4l2_async_notifier *notifier, + struct v4l2_subdev *sd, + struct v4l2_async_connection *asd) +{ + struct imx_cpi_device *pcpidev =3D notifier_to_imx_cpi_device(notifier); + struct media_pad *sink =3D &pcpidev->sd.entity.pads[IMX_CPI_PAD_SINK]; + int idx =3D media_entity_get_fwnode_pad(&sd->entity, sd->fwnode, + MEDIA_PAD_FL_SOURCE); + if (idx < 0) { + dev_err(sd->dev, "no source pad found\n"); + return idx; + } + + pcpidev->source.sd =3D sd; + pcpidev->source.pad =3D &sd->entity.pads[idx]; + + return v4l2_create_fwnode_links_to_pad(sd, sink, + MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE); +} + +static const struct v4l2_async_notifier_operations imx_cpi_notify_ops =3D { + .bound =3D imx_cpi_notify_bound, +}; + +static const struct media_entity_operations imx_cpi_entity_ops =3D { + .link_validate =3D v4l2_subdev_link_validate, + .get_fwnode_pad =3D v4l2_subdev_get_fwnode_pad_1_to_1, +}; + +static int imx_cpi_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *sdformat) +{ + struct imx_cpi_pix_format const *pcpidev_fmt; + struct v4l2_mbus_framefmt *fmt; + unsigned int align; + + /* + * The Parallel cpi can't transcode in any way, the source format + * can't be modified. + */ + if (sdformat->pad =3D=3D IMX_CPI_PAD_SOURCE) + return v4l2_subdev_get_fmt(sd, sd_state, sdformat); + + pcpidev_fmt =3D find_imx_cpi_format(sdformat->format.code); + if (!pcpidev_fmt) + pcpidev_fmt =3D &imx_cpi_formats[0]; + + /* + * Validate the media bus code and clamp and align the size. + * + * The total number of bits per line must be a multiple of 16 (2 ^ 4). + * We thus need to align the width for formats that are not multiples of + * 16 bits. + */ + align =3D v4l_get_required_align_by_bpp(pcpidev_fmt->width, 4); + + v4l_bound_align_image(&sdformat->format.width, 1, + U16_MAX, align, + &sdformat->format.height, 1, + U16_MAX, 0, 0); + + fmt =3D v4l2_subdev_state_get_format(sd_state, sdformat->pad); + + fmt->code =3D pcpidev_fmt->code; + fmt->width =3D sdformat->format.width; + fmt->height =3D sdformat->format.height; + fmt->field =3D V4L2_FIELD_NONE; + fmt->colorspace =3D sdformat->format.colorspace; + fmt->quantization =3D sdformat->format.quantization; + fmt->xfer_func =3D sdformat->format.xfer_func; + fmt->ycbcr_enc =3D sdformat->format.ycbcr_enc; + + sdformat->format =3D *fmt; + + /* Propagate the format from sink to source. */ + fmt =3D v4l2_subdev_state_get_format(sd_state, IMX_CPI_PAD_SOURCE); + *fmt =3D sdformat->format; + + /* The format on the source pad might change due to unpacking. */ + fmt->code =3D pcpidev_fmt->output; + + return 0; +} + +static int imx_cpi_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state) +{ + struct v4l2_mbus_framefmt *fmt; + + fmt =3D v4l2_subdev_state_get_format(sd_state, 0); + + fmt->code =3D imx_cpi_formats[0].code; + fmt->width =3D 1920; + fmt->height =3D 1080; + + fmt->colorspace =3D V4L2_COLORSPACE_SMPTE170M; + fmt->xfer_func =3D V4L2_MAP_XFER_FUNC_DEFAULT(fmt->colorspace); + fmt->ycbcr_enc =3D V4L2_MAP_YCBCR_ENC_DEFAULT(fmt->colorspace); + fmt->quantization =3D V4L2_MAP_QUANTIZATION_DEFAULT(false, + fmt->colorspace, + fmt->ycbcr_enc); + + return 0; +} + +static int imx_cpi_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) +{ + struct imx_cpi_device *pcpidev =3D sd_to_imx_cpi_device(sd); + + v4l2_subdev_disable_streams(pcpidev->source.sd, + pcpidev->source.pad->index, BIT(0)); + + imx_cpi_stop_stream(pcpidev); + + pm_runtime_put_autosuspend(pcpidev->dev); + + return 0; +} + +static int imx_cpi_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) +{ + struct imx_cpi_device *pcpidev =3D sd_to_imx_cpi_device(sd); + const struct v4l2_mbus_framefmt *format; + const struct imx_cpi_pix_format *pcpidev_fmt; + int ret; + + format =3D v4l2_subdev_state_get_format(state, IMX_CPI_PAD_SINK); + pcpidev_fmt =3D find_imx_cpi_format(format->code); + + ret =3D pm_runtime_resume_and_get(pcpidev->dev); + if (ret < 0) + return ret; + + imx_cpi_start_stream(pcpidev, format, pcpidev_fmt); + + ret =3D v4l2_subdev_enable_streams(pcpidev->source.sd, + pcpidev->source.pad->index, BIT(0)); + if (ret < 0) + goto err_stop; + + return 0; + +err_stop: + imx_cpi_stop_stream(pcpidev); + pm_runtime_put_autosuspend(pcpidev->dev); + + return ret; +} + +static int imx_cpi_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +{ + /* + * The PARALLEL CPI can't transcode in any way, the source format + * is identical to the sink format. + */ + if (code->pad =3D=3D IMX_CPI_PAD_SOURCE) { + struct v4l2_mbus_framefmt *fmt; + + if (code->index > 0) + return -EINVAL; + + fmt =3D v4l2_subdev_state_get_format(sd_state, code->pad); + code->code =3D fmt->code; + return 0; + } + + if (code->pad !=3D IMX_CPI_PAD_SINK) + return -EINVAL; + + if (code->index >=3D ARRAY_SIZE(imx_cpi_formats)) + return -EINVAL; + + code->code =3D imx_cpi_formats[code->index].code; + + return 0; +} + +static int imx_cpi_get_frame_desc(struct v4l2_subdev *sd, + unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + struct v4l2_mbus_frame_desc_entry *entry =3D &fd->entry[0]; + const struct v4l2_mbus_framefmt *fmt; + struct v4l2_subdev_state *state; + + if (pad !=3D IMX_CPI_PAD_SOURCE) + return -EINVAL; + + state =3D v4l2_subdev_lock_and_get_active_state(sd); + fmt =3D v4l2_subdev_state_get_format(state, IMX_CPI_PAD_SOURCE); + v4l2_subdev_unlock_state(state); + + fd->type =3D V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL; + fd->num_entries =3D 1; + + entry->flags =3D 0; + entry->pixelcode =3D fmt->code; + + return 0; +} + +static const struct v4l2_subdev_video_ops imx_cpi_video_ops =3D { + .s_stream =3D v4l2_subdev_s_stream_helper, +}; + +static const struct v4l2_subdev_pad_ops imx_cpi_pad_ops =3D { + .enum_mbus_code =3D imx_cpi_enum_mbus_code, + .get_fmt =3D v4l2_subdev_get_fmt, + .set_fmt =3D imx_cpi_set_fmt, + .get_frame_desc =3D imx_cpi_get_frame_desc, + .enable_streams =3D imx_cpi_enable_streams, + .disable_streams =3D imx_cpi_disable_streams, +}; + +static const struct v4l2_subdev_ops imx_cpi_subdev_ops =3D { + .pad =3D &imx_cpi_pad_ops, + .video =3D &imx_cpi_video_ops, +}; + +static const struct v4l2_subdev_internal_ops imx_cpi_internal_ops =3D { + .init_state =3D imx_cpi_init_state, +}; + +/* ---------------------------------------------------------------------- + * Suspend/resume + */ + +static int imx_cpi_runtime_suspend(struct device *dev) +{ + struct imx_cpi_device *pcpidev =3D dev_get_drvdata(dev); + + clk_bulk_disable_unprepare(pcpidev->num_clks, pcpidev->clks); + + return 0; +} + +static int imx_cpi_runtime_resume(struct device *dev) +{ + struct imx_cpi_device *pcpidev =3D dev_get_drvdata(dev); + + return clk_bulk_prepare_enable(pcpidev->num_clks, pcpidev->clks); +} + +static const struct dev_pm_ops imx_cpi_pm_ops =3D { + RUNTIME_PM_OPS(imx_cpi_runtime_suspend, imx_cpi_runtime_resume, NULL) +}; + +static int imx_cpi_subdev_init(struct imx_cpi_device *pcpidev) +{ + struct v4l2_subdev *sd =3D &pcpidev->sd; + int ret; + + v4l2_subdev_init(sd, &imx_cpi_subdev_ops); + + sd->internal_ops =3D &imx_cpi_internal_ops; + snprintf(sd->name, sizeof(sd->name), "parallel-%s", + dev_name(pcpidev->dev)); + + sd->flags |=3D V4L2_SUBDEV_FL_HAS_DEVNODE; + + sd->entity.function =3D MEDIA_ENT_F_VID_IF_BRIDGE; + sd->entity.ops =3D &imx_cpi_entity_ops; + + sd->dev =3D pcpidev->dev; + + pcpidev->pads[IMX_CPI_PAD_SINK].flags =3D MEDIA_PAD_FL_SINK | + MEDIA_PAD_FL_MUST_CONNECT; + pcpidev->pads[IMX_CPI_PAD_SOURCE].flags =3D MEDIA_PAD_FL_SOURCE | + MEDIA_PAD_FL_MUST_CONNECT; + + ret =3D media_entity_pads_init(&sd->entity, IMX_CPI_PADS_NUM, + pcpidev->pads); + if (ret) + return ret; + + ret =3D v4l2_subdev_init_finalize(sd); + if (ret) + media_entity_cleanup(&sd->entity); + + return ret; +} + +static void imx_cpi_remove(struct platform_device *pdev) +{ + struct imx_cpi_device *pcpidev =3D platform_get_drvdata(pdev); + + media_entity_cleanup(&pcpidev->sd.entity); + v4l2_subdev_cleanup(&pcpidev->sd); + v4l2_async_nf_unregister(&pcpidev->notifier); + v4l2_async_nf_cleanup(&pcpidev->notifier); + v4l2_async_unregister_subdev(&pcpidev->sd); +} + +static int imx_cpi_probe(struct platform_device *pdev) +{ + struct fwnode_handle *ep __free(fwnode_handle) =3D NULL; + struct v4l2_async_connection *asd; + struct imx_cpi_device *pcpidev; + struct device *dev =3D &pdev->dev; + int ret; + + pcpidev =3D devm_kzalloc(dev, sizeof(*pcpidev), GFP_KERNEL); + if (!pcpidev) + return -ENOMEM; + + pcpidev->dev =3D dev; + platform_set_drvdata(pdev, pcpidev); + + pcpidev->pdata =3D of_device_get_match_data(dev); + pcpidev->mode =3D PI_GATE_CLOCK_MODE; + + ep =3D fwnode_graph_get_endpoint_by_id(dev_fwnode(pcpidev->dev), 0, 0, + FWNODE_GRAPH_ENDPOINT_NEXT); + if (!ep) + return -ENOTCONN; + + pcpidev->vep.bus_type =3D V4L2_MBUS_PARALLEL; + ret =3D v4l2_fwnode_endpoint_parse(ep, &pcpidev->vep); + if (ret) + return ret; + + pcpidev->regs =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(pcpidev->regs)) + return dev_err_probe(dev, PTR_ERR(pcpidev->regs), + "Failed to get regs\n"); + + pcpidev->num_clks =3D devm_clk_bulk_get_all(dev, &pcpidev->clks); + if (pcpidev->num_clks < 0) + return pcpidev->num_clks; + + ret =3D imx_cpi_subdev_init(pcpidev); + if (ret < 0) + return ret; + + v4l2_async_subdev_nf_init(&pcpidev->notifier, &pcpidev->sd); + pcpidev->notifier.ops =3D &imx_cpi_notify_ops; + + asd =3D v4l2_async_nf_add_fwnode_remote(&pcpidev->notifier, ep, + struct v4l2_async_connection); + if (IS_ERR(asd)) + goto err_nf_add; + + ret =3D v4l2_async_nf_register(&pcpidev->notifier); + if (ret) + goto err_nf_register; + + pm_runtime_use_autosuspend(dev); + devm_pm_runtime_enable(dev); + + ret =3D v4l2_async_register_subdev(&pcpidev->sd); + if (ret) + goto err_register; + + return 0; + +err_register: + v4l2_async_nf_unregister(&pcpidev->notifier); + v4l2_async_nf_cleanup(&pcpidev->notifier); +err_nf_register: +err_nf_add: + media_entity_cleanup(&pcpidev->sd.entity); + v4l2_subdev_cleanup(&pcpidev->sd); + + return ret; +} + +static const struct of_device_id imx_cpi_of_match[] =3D { + { .compatible =3D "fsl,imx8qxp-pcif", .data =3D &imx8qxp_pdata }, + { }, +}; + +MODULE_DEVICE_TABLE(of, imx_cpi_of_match); + +static struct platform_driver imx_cpi_driver =3D { + .probe =3D imx_cpi_probe, + .remove =3D imx_cpi_remove, + .driver =3D { + .of_match_table =3D imx_cpi_of_match, + .name =3D "imx-parallel-cpi", + .pm =3D pm_ptr(&imx_cpi_pm_ops), + }, +}; + +module_platform_driver(imx_cpi_driver); + +MODULE_DESCRIPTION("i.MX9 Parallel CPI receiver driver"); +MODULE_LICENSE("GPL"); --=20 2.34.1 From nobody Sun Oct 5 20:11:54 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011005.outbound.protection.outlook.com [52.101.65.5]) (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 C8AE2222597; Tue, 29 Jul 2025 16:07:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805252; cv=fail; b=teWJnY98Jz3CWBShnMLfwnWThV1h4v5U5ow0p7R8HMciQOK/tMzlyQN42DYljzOpOF2N8cth/98AEuoNYFCCVQmDjrFvQ74p0inczQwghqgf6rUyzHyPvSo27jXhKEkEcxUEnX60OWCEa2vjkPVu3snyrrwCsdz9HvcDoRVSZeU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805252; c=relaxed/simple; bh=9qIDNgcYdOBm/YxxXMalgQQAqMhduqyjn9QKgCVkc1k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=nin3Xe0AT9GefGrjnOy55l0l/ICDAAOvwej0EQl2U2Eihaa3Z7WntEDvayCUHKClwH8V7i3WoADaKegF4eEw2piKM73Sg2UlQ/VTegq59tEcTM3o4nVd+LvhFHUUqcOWJOWUJVMgQ5EVJ1t0/wy5AGSXDy/yocMJE5rx1W8tZk8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=LKxMevAU; arc=fail smtp.client-ip=52.101.65.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="LKxMevAU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fecfG+xF6rXW/NrsLeWYA91upVX6tfD/OdcHUYQoVjC1qoHYWchQ5AsD2X6Fe1+aBvWCl+AMx0gGEs0XLxeDdJywnySC2KZGSWLPvpWIq0ShCPrrowPMJWiH6FRp6PmruUZR8MAt919Rb1cj4NEYcW+iixiF+0dg9XrVDVIYRIkwoVTpiOvmAy7JV8nYSiu9YD2jfq4IOS/JijhAv5oQBfzuNjoXQXR2giCI7dwrEtzeiYcckUNYxlToLk+5H/BZxv3SPXVohtSB8Hg9HsE845Z6WVQr7JmPl8Uljj8giv9QcJbNhiFkkj6uuysmk9M+ZDSq/MfamJW0oIOdII9tlw== 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=E0AmwIytw8VcTDCV35uXWxaLTXEZaxXiIOB5DND3jJs=; b=SlxczzDGNeWtm01O4ASwo8BOyi/PuY0JUdlRhSWlVyVzWZZUmKLu+dAz1qqZYg7M4sf0yk9+feMS1f4bNjVvLw9jz7hoITD9pyraPEIS6mKRVg3dI7cw7Eph4I2irRAeh4BUspW4+wDCJByuQTRmNSSPSgiam4EONjWqZWzayNFVN8eB9FDGu6rLcroUSIyEhml/fzT/oC5SmBLTabRp85v4mtQJJOsZ0Es2wyasH9rwnutKTGEwtJZCW83sHnbxG4NNi7yChMQp3jyw/saGiWpqrkIBCfOanfH5J3G89IyK6OPfXjAuAMUDPG0hgVmPQkyscenZ9q0ngYxHJC0tIw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E0AmwIytw8VcTDCV35uXWxaLTXEZaxXiIOB5DND3jJs=; b=LKxMevAUHnh0KTXCKvs4iJPe9VBtFvz6ckskEmfwIxN7+pWfEuVZfNwL1Gski0nJs8MLhLoKchTlIqUWKJ1V9szWorvb2bg3dhLjATrwnOc80WEGOyPmUrcAc7YefEKUb91ejtEDZa4tOImEy/91GOQtcHC5uNOkqVLzVD4DMeUupRzTWELP+1ufpTV68CVV9+MYdy6QIphU6BPthXoFz0Qy7cX/HsmpIiMWZ4U/P4MxKaIjY4awnP17sTHf6WvU9zJXhN1PzC+vcNxHNjJ1rc0kpdzmIQt4SQmX0YBjf9WYfbQhiJS1MoemY024S0UN1aCJYHUhmA/mnXbjgDknRQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by DU4PR04MB10551.eurprd04.prod.outlook.com (2603:10a6:10:588::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.11; Tue, 29 Jul 2025 16:07:28 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.8964.025; Tue, 29 Jul 2025 16:07:28 +0000 From: Frank Li Date: Tue, 29 Jul 2025 12:06:25 -0400 Subject: [PATCH v4 4/5] arm64: dts: imx8: add camera parallel interface (CPI) node Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250729-imx8qxp_pcam-v4-4-4dfca4ed2f87@nxp.com> References: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> In-Reply-To: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1753805222; l=2314; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=9qIDNgcYdOBm/YxxXMalgQQAqMhduqyjn9QKgCVkc1k=; b=pLkUFF3PFgv46T977pbcbdDylSoJjPEMq/MDn1FiESpm9tliigSQTIN1snJgPsLJKGdEA3RzG mQRoO8h6I8RCw6tmtwC8LSfO6cKcag+tLS6c/1xmu3BMmvd1UCtiuht X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BY3PR05CA0028.namprd05.prod.outlook.com (2603:10b6:a03:254::33) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10551:EE_ X-MS-Office365-Filtering-Correlation-Id: e407f390-70ff-48c9-d673-08ddceba03d2 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|19092799006|52116014|376014|7416014|366016|1800799024|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?V2FVdllRcVBUSWUwTHdvYXcyaE42RjU4dGtpZFk4NWRtcXRsOU1tTmw4ZVo2?= =?utf-8?B?MEVkN2w1QWI2UGx6L2puRDQvc0g0WkEzbmJpdGFCSWUwUGlGZWdLQTg0djdF?= =?utf-8?B?WnBRcnBMOGdaOXVybDg3YU9QRXFycjdQeUJGM3RMNEtBU0pEcWV5V3JqNVRk?= =?utf-8?B?R3MwcDhOREoxZEFFQlMvck1lTGlwRHBQY21HMG9MTUZTMEJ4ZllDOTJmRlls?= =?utf-8?B?aWxhVU5KTnBPcDYyN1ZaUlc4SnNEbS9JWXdOYTF5TUowVHBNNk85a2ZTb1V2?= =?utf-8?B?OEYwTGpWQmZBYjJBVlpkWmdCaEJqSWVweW9ZTXNLcWZtaHl3aXB2Q1pSanM5?= =?utf-8?B?M1hPNDIyUDJVL05NdDV5K0MzQ0c5RExJcGhvYmNJeVphckVsOXovd2NleFlX?= =?utf-8?B?S2dEaGRBcGNTNmEyK1pwWW5HTFc5V2ZyaHlHK0VRNWFySkdGemp5UElWcGF5?= =?utf-8?B?UFFKdDJCc2xtTWZ0Tkt3VzFQK2lEakZWaGZrcG8yNGcwemc3YVp0VHVWSHpa?= =?utf-8?B?MFZvMDl5NnNSQlVuVWFXbWw2b3dTa3VJQWtzbFZrb2RyenhIbmxjVHlJTzJs?= =?utf-8?B?bFd5KzNDcllkQTNBSHBKb24xSVM1UFNuWUZUM2hHdGdFQUlYNDBCbHV5MDBw?= =?utf-8?B?N2ttemQ0bnJ3dlhXZmZ2WXlQcFRqZGgyMUN1UGozaTgrK293dXg4OXJtK05a?= =?utf-8?B?OVd3c3lZOHRZNmxyL2hJQndPNHFjQUxjUmRObWJ6TnZ5Q1J4c3VIL2lmcUs0?= =?utf-8?B?YkFud3cxK3ludmdaR1B6UzZ3WlNkSzBCaXlnbW5oU3kvMmo0eFpIVEhEZkF5?= =?utf-8?B?ME5CdnZLRkxEM1lRNmVFQnphT2NZR0daZjJyS3pCdHpYQmxWSnRzVmF2bWtt?= =?utf-8?B?SklpM3RyYnMyS0trTElhMjJKd25wMmpMMkNFK3pjdDR2bHRNZXVvbndHaTdn?= =?utf-8?B?VWkxdlAxYnpQYmVEWm01UkVya3VTTzRGaXk0UFVEZDZkTUlvaXVCUWQwS043?= =?utf-8?B?QUd6bnZqUjdjNkZaZ2ZEcGtTelA1TnNwZnNxc2FMUGxPTUJkUTRxakI5dGw2?= =?utf-8?B?ZDd6Q1pac3dCNGgxTmY2eXBzUDZSbzRqQ0x5Y29JaTl1eERvU2lxVVRMK3RT?= =?utf-8?B?TmJvbkRBRWVEM0FmVENWOWI3dWllNkcrTTdkbmlQMzRiN01rWDhoTmJOQjNi?= =?utf-8?B?SkFTalRSbEQrNFpIQ2ZyajdLTkttUFNqOVlYTmdiYkRTYlZVK0NKRkZlV3gz?= =?utf-8?B?OXQzYWJ2bXpQU0dOcGNDL0pqSGxXUktZYURNa3poUC8rKzAxUUNwcmJkWXNw?= =?utf-8?B?VldlUDBISEFJSG04Wk90WE52aktaM3VBSWVveGNPRzkyT21ZaUpoNzRxN0hE?= =?utf-8?B?cEU4dVFaQk5GdFNSYmdkbnFZdFcwUE5oc2xkbFJIejdxdHFVejVkcTVkbldC?= =?utf-8?B?d0pTWGg0Wm5BL3VhNWY3M2Q3WkVTdGZoTUgxeGhrQTFxZGdvV0xMbTEzREk2?= =?utf-8?B?K0tyVDNxUG1zWk9ZN0NUcnphNWRqcm9NWnQ1Qk9EOFdZVDZrWFErazdGS1k3?= =?utf-8?B?YXhBR2g2N1V0bVlzN1c3RGRFVnJHZDhrWENGSE1xVDB0NHlIelBIWnRrYWs2?= =?utf-8?B?ZW5JWnNoMXFZd0Rxa0ZvTDdpUHJkYnA3c2RVTHdpYVhwdVlWY0MvSjUrWkRl?= =?utf-8?B?TnhxUHBOSFdOVEhBaTAwRW9jcnI0SHJxWmZ3cHk3c29EUEMvYUFxY0o2VHdW?= =?utf-8?B?blJUVWlIeDBjRGp3bmo0S2NXejFGNkpnajJxcFZXemhzbEFndmVJbGYwa0Ny?= =?utf-8?B?K2kxK3dNenpKbUJmczlsYS9NcVhNRVRlQkNqdW5ETnB1WDVPcWV0Nno4aHJj?= =?utf-8?B?VmF0OTJFN2xlU2gzWktHR1BzS2E4TC9UNjA0NEJwNStjbXF2OXV4bTd4TXc2?= =?utf-8?B?bjFlV0Y4Tmt4cWdWZUFSRFU3d3dNaXZ0ZG45YmFFQkY3Z3RTWHkwZDBCZFZ5?= =?utf-8?Q?0CcMO6ahxiDQl2+rL/bvq5Fe5Ks1bc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(7416014)(366016)(1800799024)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bmlLYTdTMmUvbzRUK3BsTS9zK0sxQXZlKytJdTZFdnIrNHYveDJOMEwwblpJ?= =?utf-8?B?Q1A4bjdDRUUzcVpabHBqM2V0MEhIYTdiMklkR3paSzVKVXQxR2NQYS9aL1pk?= =?utf-8?B?RllLY1FxdFBIMStFRDJtelRyaFdEUENUS3VnQ2JtdGdmbnhxMzl0MldTUUdW?= =?utf-8?B?R2JxQnIyeWFmc2VvbjV0T012aXB4ZlFaSllXekNRdW1oSXdjdFVNNCtxbU1k?= =?utf-8?B?VlRlV0k1UXhHcVJweTUwRFVoZnRmRm9IYUI1ckVmdHlVMVR2aEhoTUhBUCtq?= =?utf-8?B?YWtsYWVKVlgrbXczb0JRNGcxVktyOCtnV3krNGpQYTF5VGRqTENNdHRXRjlu?= =?utf-8?B?RGxKL2dJRko4SVhiejV6emhRQ1dhOFRPWGZPcWVUYU1KRlBEZ1JYRTJqR29z?= =?utf-8?B?Y1N2NzRnVlp6dnZBcE1UcU9Mc0N5ZjRNOEhxNjZwanVQYVdPeWI5TnF3WlIy?= =?utf-8?B?UitXWjBWbkxYWlZUdlcwUDhSSUZKb2Jja1dkd1NGNERQdlgrMVFFZzgxVFdI?= =?utf-8?B?NUc5US9tdVNmNmROUnRUL3VXZ3hiNmpYdHA1d3JuTC83RGJicmFlL0RpOHl3?= =?utf-8?B?U2piN3pvNUVYUzFhQzQrSlV0b0lOSlpXRjF3cDhkZS9ISS9lNkJ3eFV1aVlh?= =?utf-8?B?WHRvTlJyVTQwV05raHJlOURXamlpSytyeHJkUkdIbDV3MVJ6eHpYWm9CbVdB?= =?utf-8?B?N2lac2tuY2VvTDVtajJ6YW51NXZVVTNlZmNCYTFZdkdLbG5GQXVLY1Z0UFQ4?= =?utf-8?B?ejJSQmwwVElOZWk0Z0JJNVcvSVFHMEJFVmpzTml2U25DUWNMSGhaYmh3TkxX?= =?utf-8?B?bTdmR0ZtY2FHdFpzcm0xbHE0dWdxdWxMMEJKcGJ3a0FpQ0lvT0x1R1FkdmdZ?= =?utf-8?B?c3k4WExGWUd3cWtZS2IxMVdrTXAxaUd2cFdxRDM5SkRibVFtcitKZVVMRE55?= =?utf-8?B?Mis5bER2UzR3NngzSXI5WHIwdDlMV3VFTis4cUo0Vk82L3lwS3NvcGFobXU4?= =?utf-8?B?STFMQ0N0L2E0ekZCNG9JM0pQMjB4MmQzQUhSdkRxOHExWGlFeE04QmtKUmw5?= =?utf-8?B?dFZuZmpic3ZYcWR4cEFTYjlIb2NwTTBKSmQ2MEs2ZW1CbmlaNWUzNmtiR2Jt?= =?utf-8?B?bmQ3Y3cybjdMWi9yMk9CeHJzOTBCeUN2aFAvZGo4a25XSEhiZG9wQzFrQkFU?= =?utf-8?B?WkE1RVpXZnV0Sy84ZjQ0YWp2YnFZTGhlVDdkWmttd2FjOEt0L0d0OG41ZnZi?= =?utf-8?B?QkgyNFFLeFJnWllXM0VXZExkOWhtZXoxbFNQQUFMUFBGQ3FlWXRyMUNTTytl?= =?utf-8?B?ZDFiNFZyb2NvS0IyVHZvcU56YzhrNTNaRlNZTWJkbUhIZnNmNmZJRUQyS3o1?= =?utf-8?B?U3BTdXpKMmR2WFJTM2NQL0VuenFmMWVjblpIbldDWEhDeG1Vczhoanc3UUgr?= =?utf-8?B?OFBzRUpBZkU4YVYrZVphVmprbTFqWThndXEvSHRlc3U0NnlYZjhadU92MHpi?= =?utf-8?B?amJVcHJTakNxSGZMOENib0dMcWtldFVsbm5VUURSbTluT2ZsQTI2MGgzTG4y?= =?utf-8?B?K3h6SHlFUVJwSWQ1VGpUTDBlbHFzMC84RVBHY0QyTXBmenBSVHRMaUZOdGY1?= =?utf-8?B?SlNCSkRycmJ0VHl6b0dTOU9ZQ2xQTVBWbFcxQnNPSlFWbEExR2liZFB3ZXc1?= =?utf-8?B?eFlzaWdhQUdFRkdUMDBSN1RsOVo2bXBnZ2MyL1M3VDR6cGNlRCtqMjU3emZl?= =?utf-8?B?YmtUMlJNWVVDb3U0bzRQbjlwU0J4azlhYkh2eC9BZllDbE1kR2U3dHhBblYx?= =?utf-8?B?VVBtbGtLV0kzNEZiTUR3MW1QWUhLdlhzdjl2TlZBYjYzVWxBZ2NXaVhiS3Uy?= =?utf-8?B?MU5qZFhQYitLSzdncXRCbW11SDg5VkpMM2RreVl2VUVxNEk1aXF1TVpnMmhQ?= =?utf-8?B?UXN1ek1zOCs3bkZXSGY2OWhtb1dzUXFjSlR0MzI2T2FLVld3eEVOdUorbVFk?= =?utf-8?B?MU5aVnJ5VUd4SlV5SDdEKzFOWHRSRUZleStlK21MSUFBUkFoeFdXcEpUS3ZY?= =?utf-8?B?NVd6UFhPSTdld25pMHdXUWdFOVh5M1NOazJINUlrOUlBOSt2cndxdmsrbmdZ?= =?utf-8?Q?omHSmCUxq4xwQlzSZiSycveVc?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e407f390-70ff-48c9-d673-08ddceba03d2 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2025 16:07:28.1398 (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: VS6NVmIfPktmEnGlFFF/TTZl4r+L5FuspGT37kubg4051Kaio+7rFELavb8fr4j/LKBCEfsLp7T8nZt4m43hzQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10551 Add camera parallel interface (CPI) node. Signed-off-by: Frank Li --- changes in v4 - none changes in v3 - replace csi with cpi. changes in v2 - update compatible string to match binding's change --- arch/arm64/boot/dts/freescale/imx8-ss-img.dtsi | 13 +++++++++++ arch/arm64/boot/dts/freescale/imx8qxp-ss-img.dtsi | 27 +++++++++++++++++++= ++++ 2 files changed, 40 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/imx8-ss-img.dtsi b/arch/arm64/bo= ot/dts/freescale/imx8-ss-img.dtsi index 2cf0f7208350a416d77b11140279d2f66f41498f..e321b0d62cce13ef999085fce7a= ff9ea2fd7fc21 100644 --- a/arch/arm64/boot/dts/freescale/imx8-ss-img.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-ss-img.dtsi @@ -224,6 +224,19 @@ irqsteer_parallel: irqsteer@58260000 { status =3D "disabled"; }; =20 + parallel_cpi: cpi@58261000 { + compatible =3D "fsl,imx8qxp-pcif"; + reg =3D <0x58261000 0x1000>; + clocks =3D <&pi0_pxl_lpcg IMX_LPCG_CLK_0>, + <&pi0_ipg_lpcg IMX_LPCG_CLK_4>; + clock-names =3D "pixel", "ipg"; + assigned-clocks =3D <&clk IMX_SC_R_PI_0 IMX_SC_PM_CLK_PER>; + assigned-clock-parents =3D <&clk IMX_SC_R_PI_0_PLL IMX_SC_PM_CLK_PLL>; + assigned-clock-rates =3D <160000000>; + power-domains =3D <&pd IMX_SC_R_PI_0>; + status =3D "disabled"; + }; + pi0_ipg_lpcg: clock-controller@58263004 { compatible =3D "fsl,imx8qxp-lpcg"; reg =3D <0x58263004 0x4>; diff --git a/arch/arm64/boot/dts/freescale/imx8qxp-ss-img.dtsi b/arch/arm64= /boot/dts/freescale/imx8qxp-ss-img.dtsi index 232cf25dadfcd1bfbed724de075a734f5b46b58f..5aae15540d6cb1b1b60fd09bf17= 7488900c97c72 100644 --- a/arch/arm64/boot/dts/freescale/imx8qxp-ss-img.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8qxp-ss-img.dtsi @@ -62,6 +62,14 @@ isi_in_2: endpoint { remote-endpoint =3D <&mipi_csi0_out>; }; }; + + port@4 { + reg =3D <4>; + + isi_in_4: endpoint { + remote-endpoint =3D <¶llel_cpi_out>; + }; + }; }; }; =20 @@ -95,3 +103,22 @@ &jpegenc { &mipi_csi_1 { status =3D "disabled"; }; + +¶llel_cpi { + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + }; + + port@1 { + reg =3D <1>; + + parallel_cpi_out: endpoint { + remote-endpoint =3D <&isi_in_4>; + }; + }; + }; +}; --=20 2.34.1 From nobody Sun Oct 5 20:11:54 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011052.outbound.protection.outlook.com [52.101.65.52]) (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 7705329826A; Tue, 29 Jul 2025 16:07:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805259; cv=fail; b=Ng+f83/2Ovb47cghcULK76ZSyRmogk2pCy7aAN+e0zF5v+Y87od0mJiGHFuW0b/gonjaytRu7PwlMM7L8VZL6JfIgH8B+r4ALzCQ4Fs5yVfm12fr+gf3/jfqw+8cpWcl43T0QX0vl6Qt+wOrQsfPre/R4c3gYQqoEnd3VZX5xRg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753805259; c=relaxed/simple; bh=bgE0978G0xC0wjQ0ppqK/X9I7iUJ76ZVZ1rLWXx+RSw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=GgSPNTzZnHZ6jhJT/Yhp+esyghyOu+WwQDNen/YnV/xu3+pLxs/4NmclyvgE//b8nSwILlgxZe8h+yGNu8Zu9GrVt8ESoPuCQvswrwPibUqfFgb46aaw7vrszYxSAGyWnUqJnLNUb1ikJ16jXnoFHVw53qyGGrqCohKYd2g4hpI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=buqrmKv0; arc=fail smtp.client-ip=52.101.65.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="buqrmKv0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=K9PuQSlMwrTnQUReTFBshP48hzZ0weNkut7ElT5lhAAXcRN2f6Vxqpw/xQlvenIQ3XvJeuKoo01Qr/yDZq8ET40R17olkqguCp3GrSRY+WeGKnNFLMF6UgpQWC5CiANHzUO6HdKeEJnG/SwdbZZVpGtgYm1JYkWv24Gv/KmMkMEVjIjeNWxyDqvRlzQrI1qXTtqE4UPExZ5W64Q51gkFF7RpfPZPOx0V+Hcz0S+wMS8hFSZ/xNUmo8124oyg/xvto3Mks7hzT2MMpzGgw6dNUW0N9Ybca0iTgdlcqjqSdIXeoEJ/ohrXsMTtydCKSFndDI2PwaIFmg9DX+SC6TSK2Q== 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=0Nu0y/yh6DSsBfG1nLuOxpH9YSVXT9hnwhzsRiT2C9o=; b=IZe592IlA8Hzzi5mieVF1WZIkZdalAkfKatUeaodx2+uGcPFLssWWKNBM+cdQ5zYe8rug7YPqddA7gNgNdX8Z6n/O2gNysHbxB6Q1jvHxOvKPdbzrfG8KQVF7HkKuZlmRobhtW9T2ujsbPFiQPgJQtTR5/xL6CaAbXTjC1qyar+JpbsSe2wbPx5B5iUWpZjpetsHqn4zveoI7RLiWugzoiNT6XEmS6dNH+RLDK1xY8i3dFFQfk/AsUd8RtHurEX9HYs3p5Oi7Nc0Jz/Qnc9RDiHSgexy+lcJkBiSJVJEs5wQtMi/RgIHL+q8IC2COe/hfex/6JyixWE0nBOZWOMQKw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0Nu0y/yh6DSsBfG1nLuOxpH9YSVXT9hnwhzsRiT2C9o=; b=buqrmKv0wqOtiGVgTAyZXnOZ0MatT011KWi0TnV+bS+t/s5z7TA6e2+21R89eAcl+on65hmqJV8LyYurRP8CYNzKD65yppnZ7tSMtV+9DNAQ7p/W0rzESBlW7asGfkiQYz+9QTpoaZPSNMw+lLC7pymqgcUFIVjuRJNfNubttWl2GyAz5/Q486FfgjJIcds38aG5TaU10t3z4xGekWLUu2HZr2tPW3wR5Y4/z4gdNJe417/VTWNoDkPtAhrf8KG48f4iIn+1NKA3zdM2e2ac28E0B79km1goRpf93uMRi3rBCDD+fenE8WmeBuYTUUU2/+Qmm7xltJ4At1nEXFscUw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by DU4PR04MB10551.eurprd04.prod.outlook.com (2603:10a6:10:588::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.11; Tue, 29 Jul 2025 16:07:32 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.8964.025; Tue, 29 Jul 2025 16:07:32 +0000 From: Frank Li Date: Tue, 29 Jul 2025 12:06:26 -0400 Subject: [PATCH v4 5/5] arm64: dts: imx8qxp-mek: add parallel ov5640 camera support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250729-imx8qxp_pcam-v4-5-4dfca4ed2f87@nxp.com> References: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> In-Reply-To: <20250729-imx8qxp_pcam-v4-0-4dfca4ed2f87@nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1753805222; l=3877; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=bgE0978G0xC0wjQ0ppqK/X9I7iUJ76ZVZ1rLWXx+RSw=; b=uJ46QeYi+28LjxwWo3/1r+yfMdtoAQ68klTAf+jx/Ho8IQUzkmGsNJlDxKHtM5hCOsLl4prAy keETZcM6XkLBFjliJi5UHwFf27Yxh5JhzK77Siyjo5m5ZGnsmiUqM6m X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BY3PR05CA0028.namprd05.prod.outlook.com (2603:10b6:a03:254::33) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU4PR04MB10551:EE_ X-MS-Office365-Filtering-Correlation-Id: c897cc0d-6296-4ea2-92ed-08ddceba0692 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|19092799006|52116014|376014|7416014|366016|1800799024|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dTlWZWJWbWQ0VnQ5Q3RZYk1kZUorSCtTSXdhcXVJTFZibWdrYk5WWU4yRHJp?= =?utf-8?B?SDgxTmg5SUVlVjVhaFhFUHJLQnNNS01KUHQxSllGaXpodlVDRDhxTXJOcGdw?= =?utf-8?B?UFpqQ0I3WVBGNzlZN1RmY0swejB2bTNhT3BqaDZHOE50YnI2OG1qVkl0U1Fr?= =?utf-8?B?cWVSVUFoWThOdW40L1V1ckFoRGhpTTJ1eFl3ODlTUkR0Z0FSNE5Tek54d2ha?= =?utf-8?B?Ykh4MGVVd08yVWFoNGljdFZ3RVRGTjduTlY4L0NVY2g4L1g3RTk4OHlVTWRm?= =?utf-8?B?RFZZU1haZFF1Q09sREprTXg2MGdMTGErTDJPTm1sYU5DVkt5Rll3TE13ajI2?= =?utf-8?B?bnlzZy93aHlZQUhZcFNzNmlnZS9LU1l1d0Z0OW5YNHhTWVhyVFlmK0ZyaGlN?= =?utf-8?B?QW94b3Zmblc3OC80TmNYN2FsSVY5eXlaMlFBVUR4NzVOcU50MGUrNk9CZFQ3?= =?utf-8?B?ZHc3S2JjQzdKdURaRCtsVlJpNEhOa3VRbXcxdmpGQ1F6Q1NmcnFkVncxRWxB?= =?utf-8?B?VUhNcTVkd0d3dUFQTWttdDlqZVFteDB4Zks2QzFRM0NZUWNGZzlBVFp2dmtl?= =?utf-8?B?eHZRZzFqVXRqOWFXVlBEY2FET0pwYXZCbEsrVlNjUnJCUTdXZW5EUUxSN1V3?= =?utf-8?B?WE5TdE9YTndvUFMydUE0aHJ0QzdrOEh2RG1QZnRCdkRkb1hwY0luSy9lV0xM?= =?utf-8?B?a0FEcHZ0WTE4N1ljYWlKdFNIZGIrbmI0VTNBS1hOYVFKK2ZTa2xjdXh2YmlI?= =?utf-8?B?MXNNV3A5dDFua2pOaGtEeWF5MXhvTWhGU0VlT0MxMmthb2xsWVUvVGtFVDBQ?= =?utf-8?B?em1QMEl6cE5jZWlVNUJ5TFg2WW9BemRKMUFoV01jYTR5RXJ6eTVCWGlFZVJT?= =?utf-8?B?a2R0c1FNTVI3Mnh4RTVGNTVoNlV0ZlZRV0hHVElWWWlkSU1kSk5PcWZnMUs1?= =?utf-8?B?alBMemc0d3AzTmxRWGNSOWh3bzg4WGZmN0tWUGJHRndxTzVlTGRlTmxtZTlT?= =?utf-8?B?akR2UlRXWWY5Mm9BSFIyYkNrK3l6RmhYTlRlZE0zYlNnSkM1NEdSUTJORC9q?= =?utf-8?B?cVpRbXNnOVAxRE5HOFhIRWxJUUc3dlplQkZlK2FHaVVtQ3NYTjFVdXQ5UzVJ?= =?utf-8?B?WHF2WjRDM0Q1MkFmUE1lOTJMS3pDQnJxWEtBOGV0dm5NazFEcWhnaE9oNVNI?= =?utf-8?B?VSt2TEpWM2UrNWpDWi9yT2FRL08rUlRXc2V6ZEd6S1hsS2lhdXcxNkdBeFZk?= =?utf-8?B?WnhZZTBTcnBVY1QyNmJnTG9EbUlKMHNXaTkzMnhXVTdpcDRlMXpNMnViVW1m?= =?utf-8?B?aVFzemxMSkRvd2VpYzR1VTRxYTBPeTNxYkU4Ti9LRUp1S0hQWnNxYVVwZEpv?= =?utf-8?B?UERocWZScUdONU4vajlHeGlBOStUZDZnQlVzdVB3TFplUjBMdFg2UEN5SVpo?= =?utf-8?B?bVZ5RzQvb0l0aktnOEFYVCtIY1dSajB1Y25qc2RTRlk1VDdlUkk2MUI2MVRi?= =?utf-8?B?MElQaW1OTWVTRzkySFFaa0FnSis4dzFseFJ2cUR4YUgxZGFpOFBBU0NrMGY2?= =?utf-8?B?MXFpSC9RdXgyZVBQSDhxRjNXT0UyVCtxV3RYdWozMmVGbGFDWk5qeDE4OGtD?= =?utf-8?B?UHpVWFJ3eFp3ajY1WlRhdlFseGUvcmtvMDdNOTlYU3F1aDN5VUI1bTMwT09v?= =?utf-8?B?V2JUOTUvbDU0ZkdrWjR0UjZCNWJnQjAwZU8wb3lETWE2V2phUzRQVXpUbkRO?= =?utf-8?B?eC9WMy9IRHAwOElGemJhWlNDeFNVK0U5L3ZEM0V1QUZ4WTBXMzFnTkJNbXNG?= =?utf-8?B?SHN0M1B6TTBtNmJ4cktxcEhkOTNRRkhOTXNPckEwOFY1bnpSMCsrN3A5dm9k?= =?utf-8?B?Q2lEMU5TZDlUZHJhWWcyMUVKU0JVMUxHTzErUXRkaUh5NEphZWtjcmtJdDlj?= =?utf-8?B?c0tXcHVDZHkzOUNCMjh3M2s4YlRxMkdtWjRKOGtwdHczamF3LzN2bHFDQitt?= =?utf-8?Q?r3zXs6BX4+VaeOSJYdRX4yar+cmi0s=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(7416014)(366016)(1800799024)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TUNhbWlrRzZrN3JnU2NtbUtyemIrdkErZi9ZKzBQc2ZLOWluWllxTkFqWE90?= =?utf-8?B?SkFqdStzc01wMVBTS3dFZUxKaHBEaXQyN09pVTFNSEp6STlWZ3pTU2lVNHJY?= =?utf-8?B?bWVhOElBL3cyRnY3bFNFWEl5VDMyL2YyeE0vNkRwcXZQbTlQQmRBN1NOM3VQ?= =?utf-8?B?US93ZSs1NHlCMFZ1QTdPdHRoelYwaDY4dHJiUk9QeUpJNkQ0WEI4Y2VuRUdu?= =?utf-8?B?Ly83RjZOS1ZDT3ZReG1TaFNXVlpaZDUyVkVaNmQweXR6bXlWZ3k1cEtmbEdK?= =?utf-8?B?ZGVhNUV5cU8xZ0xOdThwNXViNWpDOHhLRitJNUo1T3lpb0V4QjJNOW4vbnBr?= =?utf-8?B?a1I2TGg4dU55U0Y3NUNzSk5WcVZEWmtRVWF3STZoUDhHOWN3SVZjRjRvSFBL?= =?utf-8?B?NC95aU9VSUREVDVUb2VuRzJtMnZ2Skx1MlpyRS9XanJrZjZtWkxkRUNMVzJU?= =?utf-8?B?MkJXZlJnUnl5a3I0S2dtbVFWYWUrNXYzcWFLVFowaEYzZS85WXA2TTk0aURy?= =?utf-8?B?VGJYYTRTRWxMZUlVWm5jYU1XT1czS2FZSnJlMm1rOGE3eTJQaW9lUUExNjVZ?= =?utf-8?B?V0Q3UmkraCtsc05MNmV3QlE1Z0d1ZmJiQzMrb3NXendHcktxUURDcCtIV0wv?= =?utf-8?B?OW9makc4bjhZQXBuR1J2SVQzWTV6QlV4cVZIVGszeERqVnhjRThRN0JDNkgx?= =?utf-8?B?eUNYV3lTemdjS0FQbmtibHFWRlo2RXRyRytRbEZVcEh2b0d4OHRZNS9Ib2Iv?= =?utf-8?B?dkNqSFZ4VVp3R3h3dGNwUitPWXR1c1VPV2lUT2NjZE5XWnpleUVHVFViQ2JY?= =?utf-8?B?cHF5UmE2NjB1MjJ0VzdlbWllUVBPNmlMcTFzRnRZcnEvRkJ0VmZJaWJOaTl2?= =?utf-8?B?T3pnZHlYY3pNNm9UNnRBaE9JeFdpVGc0RTZ4Um05RnEwVjA5TUtnNlpRY2cr?= =?utf-8?B?VVZQckxPWFZvVmR6K2xRUjVDckhIUWhKNFB4TXU5VitmM0ZVMjc1ZTh6NWNy?= =?utf-8?B?Tko0NDRVbHpTcEhZVksvdWpNcjVrMDJoTEVOZlRMb2JTVGlaVXF1TlZrNlBE?= =?utf-8?B?SHcvVmFRVWdnaWtpV1dwQWdaYWlhYlJFajdpUjlXei9ndUJQUnM3U1RETFox?= =?utf-8?B?YUxiaGxNdXpqZFM0WlFWaEN4VUptVDJ0TG9VVUxuZGxITXZWQWM3OXZOdGc5?= =?utf-8?B?NEp5WFRPRVFIZVdJTEhqblg2RjRzVEFIWnpGWXdObUN1a3U4QXhtcVNKLzZJ?= =?utf-8?B?Vmt3eUx4TlhzMlVnaHl5ZDE5Vm1HRzlDMjZrbTJXSE81VGhoU2h3bHdyaGJT?= =?utf-8?B?eU5UWUM1MkRnTHYyTEdITzV2RW9Ga29UTHBMdDJrUVRVQTBqcFd5RnRlNFZo?= =?utf-8?B?K3o1QkVIOEUrWUY5TTB5Z2hjUEtnVGM2czJvYldGMmUyZmJIZmJRQ2M1RUtM?= =?utf-8?B?ZHYvU2l1bURDTTdGZDFWRWNnb1pnWmdmQU85aXp0L1MwdlVsNmxoVGJYTU1z?= =?utf-8?B?NkJOWnY0Z2hINk0yR2h3cDljc2Z3SEV6MkM0ZHhwbmtVYzFDQ3M2a2NPV1Jt?= =?utf-8?B?QmpvUk5tYkZsL2pFY1BrUGU4R0hIRndUbHNrMkVkdVE1NGw1SjZRaE5SY0JV?= =?utf-8?B?TmZqMStSeUU1cXQraXJKUFJPdmFCbTRHdnZnZGtPL2Q5NVAwWjlnNjN5V2py?= =?utf-8?B?K0R0Q3FlM1lMdkFlQS9pelJPc2pDNlpTTVpBTEZIZERzVnJvOU9MTG41YmJs?= =?utf-8?B?WTM5RjJkTUFyTmdYVlFlUGdKbS94d1ZRVjZHQXdoaDk3NFZLSTlXWThxdGhY?= =?utf-8?B?K1JaeGcwY1lKOXNxYytMb3ovWEM3YkJwaHNLb0lnTUpQMi9CWXdwSDZObFR4?= =?utf-8?B?SEhnR1BmeDJJbEd5MnZGK1g4N0MzWXdHMDNhUEcwY010VDRoRDBxZHc1ZTkr?= =?utf-8?B?R3R6ODl3OXZRZk92ZGd5a1VjWUR4RWZWUkpjQXF6aWE0ZzhVMXZWME1ZWmZ0?= =?utf-8?B?bUhIbXJBMlYreUpUdStqYzAxQVluaUpmZVFlcS81ZlJ5Wm5jRko1ZENBSDFh?= =?utf-8?B?ZlpNRmhxS1U2eTZTV3pta0ZWbkh4SndIb3RFRXN4Y1djYVRHcVV6Rjg1S2pi?= =?utf-8?Q?yEVbp8Sr05d4uXuJzqWCkfTy2?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c897cc0d-6296-4ea2-92ed-08ddceba0692 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2025 16:07:32.7494 (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: JZ3Z0G2hLP9ciIvAU64G8vHk69AF07sHf5gN8nJp2oTnTzqNYJuS1dRS+j1KpAy+olgjnzqDno9+bDeIqyj4Iw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB10551 Add parallel ov5640 nodes in imx8qxp-mek and create overlay file to enable it because it can work at two mode: MIPI CSI and parallel mode. Signed-off-by: Frank Li --- changes in v4 - add hsync-active =3D <1> changes in v3 - replace csi with cpi. - use imx8qxp-mek-ov5640-cpi.dtso since csi use imx8qxp-mek-ov5640-csi.dtso change in v2 - move ov5640 part to overlay file - rename to imx8qxp-mek-ov5640-parallel.dtso - remove data-lanes --- arch/arm64/boot/dts/freescale/Makefile | 3 + .../boot/dts/freescale/imx8qxp-mek-ov5640-cpi.dtso | 83 ++++++++++++++++++= ++++ 2 files changed, 86 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/f= reescale/Makefile index 23535ed47631ca8f9db65bec5c07b6a7a7e36525..b85bb9ac8e8ec3548a54797a758= 3d55955b62f74 100644 --- a/arch/arm64/boot/dts/freescale/Makefile +++ b/arch/arm64/boot/dts/freescale/Makefile @@ -330,6 +330,9 @@ dtb-$(CONFIG_ARCH_MXC) +=3D imx8qxp-mek-pcie-ep.dtb imx8qxp-mek-ov5640-csi-dtbs :=3D imx8qxp-mek.dtb imx8qxp-mek-ov5640-csi.dt= bo dtb-${CONFIG_ARCH_MXC} +=3D imx8qxp-mek-ov5640-csi.dtb =20 +imx8qxp-mek-ov5640-cpi-dtbs :=3D imx8qxp-mek.dtb imx8qxp-mek-ov5640-cpi.dt= bo +dtb-${CONFIG_ARCH_MXC} +=3D imx8qxp-mek-ov5640-cpi.dtb + dtb-$(CONFIG_ARCH_MXC) +=3D imx8qxp-tqma8xqp-mba8xx.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx8qxp-tqma8xqps-mb-smarc-2.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx8ulp-evk.dtb diff --git a/arch/arm64/boot/dts/freescale/imx8qxp-mek-ov5640-cpi.dtso b/ar= ch/arm64/boot/dts/freescale/imx8qxp-mek-ov5640-cpi.dtso new file mode 100644 index 0000000000000000000000000000000000000000..9fbdd798f17d610847819b8c6fb= 92694e42361a5 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx8qxp-mek-ov5640-cpi.dtso @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright 2025 NXP + */ + +/dts-v1/; +/plugin/; + +#include +#include +#include +#include + +&cm40_i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + ov5640_pi: camera@3c { + compatible =3D "ovti,ov5640"; + reg =3D <0x3c>; + clocks =3D <&pi0_misc_lpcg IMX_LPCG_CLK_0>; + clock-names =3D "xclk"; + assigned-clocks =3D <&pi0_misc_lpcg IMX_LPCG_CLK_0>; + assigned-clock-rates =3D <24000000>; + AVDD-supply =3D <®_2v8>; + DOVDD-supply =3D <®_1v8>; + DVDD-supply =3D <®_1v5>; + pinctrl-0 =3D <&pinctrl_parallel_cpi>; + pinctrl-names =3D "default"; + powerdown-gpios =3D <&lsio_gpio3 2 GPIO_ACTIVE_HIGH>; + reset-gpios =3D <&lsio_gpio3 3 GPIO_ACTIVE_LOW>; + + port { + ov5640_pi_ep: endpoint { + bus-type =3D ; + bus-width =3D <8>; + hsync-active =3D <1>; + pclk-sample =3D <1>; + remote-endpoint =3D <¶llel_cpi_in>; + vsync-active =3D <0>; + }; + }; + }; +}; + +&iomuxc { + pinctrl_parallel_cpi: parallelcpigrp { + fsl,pins =3D < + IMX8QXP_CSI_D00_CI_PI_D02 0xc0000041 + IMX8QXP_CSI_D01_CI_PI_D03 0xc0000041 + IMX8QXP_CSI_D02_CI_PI_D04 0xc0000041 + IMX8QXP_CSI_D03_CI_PI_D05 0xc0000041 + IMX8QXP_CSI_D04_CI_PI_D06 0xc0000041 + IMX8QXP_CSI_D05_CI_PI_D07 0xc0000041 + IMX8QXP_CSI_D06_CI_PI_D08 0xc0000041 + IMX8QXP_CSI_D07_CI_PI_D09 0xc0000041 + + IMX8QXP_CSI_MCLK_CI_PI_MCLK 0xc0000041 + IMX8QXP_CSI_PCLK_CI_PI_PCLK 0xc0000041 + IMX8QXP_CSI_HSYNC_CI_PI_HSYNC 0xc0000041 + IMX8QXP_CSI_VSYNC_CI_PI_VSYNC 0xc0000041 + IMX8QXP_CSI_EN_LSIO_GPIO3_IO02 0xc0000041 + IMX8QXP_CSI_RESET_LSIO_GPIO3_IO03 0xc0000041 + >; + }; +}; + +&isi { + status =3D "okay"; +}; + +¶llel_cpi { + status =3D "okay"; + + ports { + port@0 { + parallel_cpi_in: endpoint { + hsync-active =3D <1>; + remote-endpoint =3D <&ov5640_pi_ep>; + }; + }; + }; +}; --=20 2.34.1