From patchwork Mon Feb 10 20:59:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 13969040 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11011050.outbound.protection.outlook.com [52.101.65.50]) (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 6B64F250C08 for ; Mon, 10 Feb 2025 21:00:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739221235; cv=fail; b=NljNryOUhO9cnyzitrLNs/2GEGcP1n5F6/B5+d3WQy5aO8DSMyuXAZAzWM5krIg9SOpvbyVJPeggTkZYUNOBgVJ3HQ7KxtBAAMwWFJ21l9q73CW09PIxuOwdGFYxBovipvziVgOERwDHLLRnpEkdKu4/acl1MlL90aTVntLQcYg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739221235; c=relaxed/simple; bh=uTgcHGZix1ytJE8Xu8g9iMI/55rj7h1+bMQRsryN1e4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=O9b6MMGddZtwn8hnutH/O/SAK5VjUosoK134epsld+SRIrsAdsxsIdmF6VihA5/DL1ydOaSVWgionu0JlZUcJHu4YhE04xIgZ9c1C0bA1Xi/6YwkKfotWM78rZllu/K6AcJ8Y57aUz/2nTJkIZw375SiKoU95r8SQLEGpcztk0k= 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=iHYiETtb; arc=fail smtp.client-ip=52.101.65.50 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="iHYiETtb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bPtDnOIlKc6z6jrHxjJ1GDtOQ241jblgebcF+5QRhrULjQZw20KxtWs92wfh648GWVS1OfYcvBqBJxWShNgaDeQXAECjyvx6w+inDG5fkBc8P4h080rTH+3oVAaptDOmKK9ncQ64YkUsTQyZXb9W+MvH4rSIk2mT5Zsskum6OxU3QIoP2Xhtl1PnykL9d0mE7VrjfTf0hJb1zgqIPFVwnw5e6gwOBW/EADXqS+5BMsjuIF9Gvp+SeWCiWp12ErBt1Oq3kMwSsSp4ed9hBPplxAU0UDlO1J2Kx0zpIoJdvxVO8W9d8cAPPsgAcyKcAfZd2jJdp5knGC4xHdkbWUcMiw== 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=MFmOuNmFg/co7IfSvcapwoSxOFkKZHm/FZsnx4OG/Gk=; b=gnsEzEC56PNl+3YBK021ahXGCfbxSofc2DWZhKyDFKzU30butRortNMW3pUjywmRmxl1T/lRvsFdoEjSpBbpoMCWkhchKaI3c2MOvCwAeFIZSSNp2kEQ2NT7puZGU4UqqCY4xqMzAgXu4Egb7JirwHo6cU8pNekA3N1Do8YrtY85q6ZTFzBSsD/W340wDO20KPe4E2U/OIZT+uIBUH9qJpSIdXIStjS4xy9aS+Wv63do+NAMAya5LbPGfypUgW2FAJUmIIzmSQVOmvInB5AhELAj/OZUozBeBxaWNfSu6iWHOz/IlzhT6dFePD4cRQDDdtoNvMM8g9HG7Caeml9HtQ== 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=MFmOuNmFg/co7IfSvcapwoSxOFkKZHm/FZsnx4OG/Gk=; b=iHYiETtb/4Wg2rwp5YNQVlmYuPugJIUFtWF+9lTQ6XYHSRp296eSp8OUjqJ4NnCjj/GDkMQzr8hsVPhqt97rNrJ3QFW6rvRj9BczVeNyhRvniC2O+B6Pn7CIkfTDaKriJaqoP6mgrdRf3Hipv0ym9WdkX0EQK6zv95o511ff3qdU5czIv9M0Mg2S3H6TLLR+FyVdbkSsCcz3GqLHCWTMk3IFLwKUloOyiozprNIyvTqIvXKDykNAWKaW7YX/+gG39Dqw0a9a/ZEH0xncMZssEoBg6WK1zgNCRCcKx84g9dSHGkWrq0DDibzZIKv/4v13wZk+CNYRlQ6gpvpHoZcOjA== 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 PA2PR04MB10238.eurprd04.prod.outlook.com (2603:10a6:102:404::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.18; Mon, 10 Feb 2025 21:00:29 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%6]) with mapi id 15.20.8422.012; Mon, 10 Feb 2025 21:00:29 +0000 From: Frank Li Date: Mon, 10 Feb 2025 15:59:27 -0500 Subject: [PATCH v3 08/12] media: imx8mq-mipi-csi2: Add support for i.MX8QXP Message-Id: <20250210-8qxp_camera-v3-8-324f5105accc@nxp.com> References: <20250210-8qxp_camera-v3-0-324f5105accc@nxp.com> In-Reply-To: <20250210-8qxp_camera-v3-0-324f5105accc@nxp.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dong Aisheng , Philipp Zabel , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Laurent Pinchart , Mauro Carvalho Chehab , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org, Robert Chiras , "Guoniu.zhou" , Frank Li X-Mailer: b4 0.13-dev-e586c X-Developer-Signature: v=1; a=ed25519-sha256; t=1739221181; l=5801; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=uTgcHGZix1ytJE8Xu8g9iMI/55rj7h1+bMQRsryN1e4=; b=rmTil36f57oTzJx98CogdIznKiCEP0fGPXAjtqSusSe3Nx+CWEShXFAFDdx58Ao9dcFUiLtYG X04SqfkGMSdATGmOMQ53/Qk4byzG9LwIeNowPDx3WecA+OmoyxvZaFC X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BY3PR03CA0009.namprd03.prod.outlook.com (2603:10b6:a03:39a::14) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|PA2PR04MB10238:EE_ X-MS-Office365-Filtering-Correlation-Id: 71323f07-913e-436e-83ae-08dd4a15f318 X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|52116014|376014|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?L54uR/wy7Z8W9j9jTVuEIIDba7JikLP?= =?utf-8?q?T31EQBt/6q0KhCRe+4ZYovJQi4WIeMqPhYBiRU7vYJyBdJSZVSxmL3JfrK34rKBEk?= =?utf-8?q?k4GuHj7bZ7ptguT0uJv3R+GWJ2OTgu1nuEL6GPHZQ/PpDli1fKnY1XTb2X/FlSx7r?= =?utf-8?q?dfFURQSHJY4WPg8yBXIM/pJXRhWJgisccp/GLx/1oOaGjQWqvGJUhRnsjkv4D6LZd?= =?utf-8?q?2rRmQqdOezU9f/4j51TnzP7+nNAjo3UCZAigScPHWmVf+/FxIl1LpzPpkDjI6ZX5v?= =?utf-8?q?zSxINFnp8rn1sEr5m8rJReKP5hUABwTDrGPTT4gI5KkZ3YeZPZS79OMObw5wVNKJF?= =?utf-8?q?AN/B7NQ6Ema/Hn/L+UagHG4jkIvz8I1g1WdR4h1rRsWroQLE4f5ySTNkm1GSsarRb?= =?utf-8?q?J3e+FKdjnsR/uYUWFUeqODDAGASw2wbQyWBpY//84mPPqPtDrLiKOaM0gFxL3pmrR?= =?utf-8?q?XNoCr+KpWUuVyPdr6GHJREhA4RKDulVP6qoOECqGvof/BXOsp+o/YZRmay+K+iGv4?= =?utf-8?q?VIjLGumeur53vU+F2x8f8dW9DbQdIVzVP9Wa4IFhQUjd3ZzNKdj8p/9QTnoMsExoO?= =?utf-8?q?bKabrC7YjZTzzp5b2mwF1NsEBtE1tofIPbc9KQRuV0InM3Guri4tbNn5VQcB4rNKB?= =?utf-8?q?mddALdTmFb1buMFOm9MF4dJMPJyOr/Bj9Q94OFExXO7F0S7s7MGm4YWdKdkJZhuRl?= =?utf-8?q?H09Y9RY0CsVjxWbhqFMra4UU1Or3CoH1579PVnm2hQ9C9KhJ9aPHnCemivTO7zQfo?= =?utf-8?q?xF/Xa/7R+NVLE+ca2ipdfj6CGz+AODCO85vcH3HNXC4m8/oVUz8aCxe6bOAMn0afZ?= =?utf-8?q?HI/Rz5tnbB+4G/bgEKWpB+ljYsAknT2PMd/OJq0ntf4dboZ7PVTw0XLZzLzwn8SQa?= =?utf-8?q?tLjUz+muO17dVVsJIAD3sRBcAny0Qut9PBBm4mFKX/4IbfgCGuRevWqpbvB+8X77V?= =?utf-8?q?Flx9EzglNvJNsiyabxUncGeaVYz3FXR7OolAo8QvQ163deU3WRkxcR/8paio7HHuZ?= =?utf-8?q?zmO3wnhIKsYpeNyRNmwF3QabVWxTFtJkryfVHjvyDUD2Gafn0pJMcOVmBKXfztY8h?= =?utf-8?q?B+Z5BeGiKiyfOtXnEUv2bfzUm5SZM6kaiR9HB8hG+1hYHLpMpMuyJEcu4ZjLVq7ml?= =?utf-8?q?+4mJdbwlnMsTJaHzvuYsYh4uXquayOPgU/VV5QGIcJk4+Ao/frLPKm7foqeOOYsas?= =?utf-8?q?JZa80YLtryyaxjuanmZ4Sj16bHxTNvkbj5X53ZfnWSRPspkCZGd0OIFUkzrUpjk0A?= =?utf-8?q?TLcta652EbeiRtQjSiNWgKzgcOb2h16jpJLQCl4RmZDo6aBWWPLX5jriqQwOlxYEv?= =?utf-8?q?OjudI2EOnUP/gHtNrbsKy9McYooSUrHIQN62t8TPX3A7mHYJey9DgRQGWXWXB/bnf?= =?utf-8?q?N/Cjf6IJqTXGu3MeNMB1kspflDfxoJ+yQ=3D=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)(1800799024)(7416014)(52116014)(376014)(366016)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?nfMzC5nQM8guOfVHbZQ8KTMLmXdk?= =?utf-8?q?e16aL60trOUmsz6vFeMoqAThMCPIvS4AFVmOOqE9wvOc9vged36XX0Nl2yLFJO33l?= =?utf-8?q?gGWDdPNdDrsQruCFdTyUmFVeh7QY+OdSqJFeMVRiVCSdf57XLivQU7UpLNchF34+5?= =?utf-8?q?DRSZFT+j1TqperyI9gMLiX8/1ndysMvNdJ5xRHI6DhvcvNNj7kY8gPDnQZc71V99q?= =?utf-8?q?AVeWBxywax9fOV1cnXU5TL7SfJxA9Qob1NF1OfeOAq1wZhD6PF3rhC5rxdd0oJKUb?= =?utf-8?q?36Y+ow83ARhZ1xcl4aibT96awtaG1V1MElEQW7azKCtfKxexFrFwf41b4L/Lezzav?= =?utf-8?q?CttUdg+OA9uqAB5Plv8Cg5XSVW00Tu5Pbl1B2CnNcif/qwtuXlX/aSCbbTMGrDtkK?= =?utf-8?q?C99ABzZgpVVWKaiq80pEIz0XEBl3CCsm94ht1oX/0JsFvwx5V0n1CdayEJqEenr+O?= =?utf-8?q?YDA+h5M5VgUXe5x6Oj/+v6tEIzq2aRcNLwLVmeAcymLYTOAMve+JZ5V9gcg7Tbw09?= =?utf-8?q?ot0fdx2gUcRdBLbcuq56JeEimIqDtItlxlxHxMxZwXIoTFwf9j/Gi90VJdgq87OE0?= =?utf-8?q?IKkVFZRaG2MXtZuTFdI/1VjWlRVBZ2R0Q11KjxSa38J3rGhNwtIwvpGCtrYJeQN5M?= =?utf-8?q?qYNiND2dSBpAvFRfP3DLLQh71OB3KPrj3biaKfR820ODOKniV5hbmb7TocPY7Co1I?= =?utf-8?q?hf57gqvDADBR6YufYNz9Gb4Uw/MOw7HZsDFSCpzg8zI50D42SIj+m54nP6pEKhQ4K?= =?utf-8?q?wyjRaLjHWl2Erpa49xSdsF9imU7hKGG+HBMnANvbQBHykq8uNIQtInvBYD7Glc9Ny?= =?utf-8?q?u5gBO+jGpLkG6mk+3vHE3qmRqVI9chnzB3Oum2LBlbAGGGTxp6TbKmoOs+F65bPR+?= =?utf-8?q?Y8TI5tYKxENRlbFnbzSirQtFcgLWS37bGVncj0c89t4/EIoWTkjiG8eB+eHS7rqzx?= =?utf-8?q?eHE3JjUTcVrcpbp18VzAv4zt2ttX8unBn4l5tbOYcNucCKygp9T10pMXxnz0jw9wo?= =?utf-8?q?g9mxnguosQHKJdmzmU00BKIBrW1FkYLG5MKJGeIiioG5ZFnr/JuGTpBSmLgPd6z7/?= =?utf-8?q?mSHrY208nS76J/e1Y3AzZkyIwfDmM9pXYiX2dnlj5E4fZGxIjim7FRgw5jXCIj56T?= =?utf-8?q?XQmhSBmYhPnupJZkgtMiPimOwa7UB5uNsnjIp8CmoMydHGpTlG/4zl9v8lqqMK6uc?= =?utf-8?q?Ned7SMwQNWlMdjB+yVmPjo/xIyjEBHm2SDKFGLn8ZnKyyEfeZCYowJeYQGYPRtmQA?= =?utf-8?q?l97UyFALvRtTPxUG4yXthCSBvrJOMqst93ZA6QS9k8fFhyy91+JFqX6Lp0xyKtvKH?= =?utf-8?q?DBo/fdQ56SDrPSCgZGDuBOk8aJvUh16MTpmGCHF76A4XPORfooz1twLj5VJsYS3L2?= =?utf-8?q?ugD7YhyCh3UH2rK4k34ApxNXLz+mgLk913bGnsSSVjdd1hIAte1BW2Cue1Ens3fSJ?= =?utf-8?q?6+cVt+RTeqUbrtav7zSiz1D2jdZb4vBwkIcYjwRB9mgZdtiW68o0Gd1g=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 71323f07-913e-436e-83ae-08dd4a15f318 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Feb 2025 21:00:29.0676 (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: oJVswVeExyCpkANa2IshoboOoORV+0z0FbYYRmDb3NTE6oH65z3x+nhCJfSICtXcCzjs7sm2p0ExwPhbNfPrPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR04MB10238 Add support for i.MX8QXP, which has a dedicated control and status register (csr) space. Enable obtaining the second register space and initializing PHY and link settings accordingly. Add reset delay for i.MX8QXP. It needs a delay after toggle reset. Signed-off-by: Frank Li --- change from v2 to v3 - use dedicate csr reg to control phy and link settings. Change from v1 to v2 - change 8QM go 8QXP, 8QM will failback to 8QXP to keep consisense with phy drivers --- drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 119 ++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c index b5eae56d92f49..788dabe5a0870 100644 --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c @@ -89,6 +89,8 @@ struct imx8mq_plat_data { const char *name; int (*enable)(struct csi_state *state, u32 hs_settle); void (*disable)(struct csi_state *state); + bool use_reg_csr: 1; + int reset_delay; }; /* @@ -169,6 +171,101 @@ static const struct imx8mq_plat_data imx8mq_data = { .enable = imx8mq_gpr_enable, }; +/* ----------------------------------------------------------------------------- + * i.MX8QXP + */ + +#define CSI2SS_PL_CLK_INTERVAL_US 10000 +#define CSI2SS_PL_CLK_TIMEOUT_US 100000 + +#define CSI2SS_PLM_CTRL 0x0 +#define CSI2SS_PLM_CTRL_PL_CLK_RUN BIT(31) +#define CSI2SS_PLM_CTRL_VSYNC_OVERRIDE BIT(9) +#define CSI2SS_PLM_CTRL_HSYNC_OVERRIDE BIT(10) +#define CSI2SS_PLM_CTRL_VALID_OVERRIDE BIT(11) +#define CSI2SS_PLM_CTRL_POLARITY_MASK BIT(12) +#define CSI2SS_PLM_CTRL_ENABLE_PL BIT(0) + +#define CSI2SS_PHY_CTRL 0x4 +#define CSI2SS_PHY_CTRL_PD BIT(22) +#define CSI2SS_PHY_CTRL_RTERM_SEL BIT(21) +#define CSI2SS_PLM_CTRL_POLARITY BIT(12) +#define CSI2SS_PHY_CTRL_RX_HS_SETTLE_MASK GENMASK(9, 4) +#define CSI2SS_PHY_CTRL_CONT_CLK_MODE BIT(3) +#define CSI2SS_PHY_CTRL_DDRCLK_EN BIT(2) +#define CSI2SS_PHY_CTRL_AUTO_PD_EN BIT(1) +#define CSI2SS_PHY_CTRL_RX_ENABLE BIT(0) + +#define CSI2SS_DATA_TYPE 0x38 +#define CSI2SS_DATA_TYPE_MASK GENMASK(23, 0) + +#define CSI2SS_CTRL_CLK_RESET 0x44 +#define CSI2SS_CTRL_CLK_RESET_EN BIT(0) + +static int imx8qxp_gpr_enable(struct csi_state *state, u32 hs_settle) +{ + int ret; + u32 val; + + /* clear format */ + regmap_clear_bits(state->phy_gpr, CSI2SS_DATA_TYPE, CSI2SS_DATA_TYPE_MASK); + + /* clear polarity */ + regmap_clear_bits(state->phy_gpr, CSI2SS_PLM_CTRL, + CSI2SS_PLM_CTRL_VSYNC_OVERRIDE | + CSI2SS_PLM_CTRL_HSYNC_OVERRIDE | + CSI2SS_PLM_CTRL_VALID_OVERRIDE | + CSI2SS_PLM_CTRL_POLARITY_MASK); + + regmap_update_bits(state->phy_gpr, CSI2SS_PHY_CTRL, CSI2SS_PHY_CTRL_RX_HS_SETTLE_MASK, + FIELD_PREP(CSI2SS_PHY_CTRL_RX_HS_SETTLE_MASK, hs_settle)); + + regmap_set_bits(state->phy_gpr, CSI2SS_PHY_CTRL, + CSI2SS_PHY_CTRL_RX_ENABLE | CSI2SS_PHY_CTRL_DDRCLK_EN | + CSI2SS_PHY_CTRL_CONT_CLK_MODE | CSI2SS_PHY_CTRL_PD | + CSI2SS_PHY_CTRL_RTERM_SEL | CSI2SS_PHY_CTRL_AUTO_PD_EN); + + ret = regmap_read_poll_timeout(state->phy_gpr, CSI2SS_PLM_CTRL, + val, !(val & CSI2SS_PLM_CTRL_PL_CLK_RUN), + CSI2SS_PL_CLK_INTERVAL_US, + CSI2SS_PL_CLK_TIMEOUT_US); + + if (ret) { + dev_err(state->dev, "Timeout waiting for Pixel-Link clock"); + return ret; + } + + /* Enable Pixel link Master*/ + regmap_set_bits(state->phy_gpr, CSI2SS_PLM_CTRL, + CSI2SS_PLM_CTRL_ENABLE_PL | CSI2SS_PLM_CTRL_VALID_OVERRIDE); + + /* PHY Enable */ + regmap_clear_bits(state->phy_gpr, CSI2SS_PHY_CTRL, + CSI2SS_PHY_CTRL_PD | CSI2SS_PLM_CTRL_POLARITY); + + /* Release Reset */ + regmap_set_bits(state->phy_gpr, CSI2SS_CTRL_CLK_RESET, CSI2SS_CTRL_CLK_RESET_EN); + + return ret; +} + +static void imx8qxp_gpr_disable(struct csi_state *state) +{ + /* Disable Pixel Link */ + regmap_write(state->phy_gpr, CSI2SS_PLM_CTRL, 0x0); + + /* Disable PHY */ + regmap_write(state->phy_gpr, CSI2SS_PHY_CTRL, 0x0); +}; + +static const struct imx8mq_plat_data imx8qxp_data = { + .name = "i.MX8QXP", + .enable = imx8qxp_gpr_enable, + .disable = imx8qxp_gpr_disable, + .use_reg_csr = 1, + .reset_delay = 10000, +}; + static const struct csi2_pix_format imx8mq_mipi_csi_formats[] = { /* RAW (Bayer and greyscale) formats. */ { @@ -273,6 +370,8 @@ static int imx8mq_mipi_csi_sw_reset(struct csi_state *state) return ret; } + fsleep(state->pdata->reset_delay); + return 0; } @@ -860,6 +959,25 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state) return PTR_ERR(state->rst); } + if (state->pdata->use_reg_csr) { + const struct regmap_config regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, + }; + void __iomem *base; + + base = devm_platform_ioremap_resource(to_platform_device(dev), 1); + if (IS_ERR(base)) + return dev_err_probe(dev, IS_ERR(base), "missed csr register\n"); + + state->phy_gpr = devm_regmap_init_mmio(dev, base, ®map_config); + if (IS_ERR(state->phy_gpr)) + return dev_err_probe(dev, PTR_ERR(state->phy_gpr), + "Fail to init mmio regmap\n"); + return 0; + } + ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val, ARRAY_SIZE(out_val)); if (ret) { @@ -979,6 +1097,7 @@ static void imx8mq_mipi_csi_remove(struct platform_device *pdev) static const struct of_device_id imx8mq_mipi_csi_of_match[] = { { .compatible = "fsl,imx8mq-mipi-csi2", .data = &imx8mq_data }, + { .compatible = "fsl,imx8qxp-mipi-csi2", .data = &imx8qxp_data }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, imx8mq_mipi_csi_of_match);