From patchwork Tue Apr 8 21:53:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 14043776 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5F1F8C36010 for ; Tue, 8 Apr 2025 22:14:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=UKc/xl1ev/Xgr5+VylYYaGYM3luxXIPPdyAYxRjwX10=; b=rhATsaPeISRQs+9zbs1NE7TP3U fvLenOnE43vEyxjivqOBFb9SPLSyghcLPwGRX3f6UxYgEdNY+G/Gj9rWnVq32KRJ7CmoLgovxW7ZF nk0ZY73e1gtSAEkK2suZs8yqMujz9puCvAMGOpLaZRxnFbwEHDBxoSLI0tOq700I7Z7ZDcIxPC4Vl 1/ELCWj1zTGS0oHv2Srwqxiq5RhSHVxjy+nmw9h1y5bbvWcTZB9+KFzq5YrgsZvyEoSkunLgWdOyB hULe5l+uwtZvEz4E8rjZtvezMiG5JnKfst9Kon7ioaK3B5B9EHtFp1WeG3gdc5BWATlGTjCHOntUN ppXWtntQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2HCZ-00000005Xau-0ylp; Tue, 08 Apr 2025 22:13:51 +0000 Received: from mail-vi1eur02on20606.outbound.protection.outlook.com ([2a01:111:f403:2607::606] helo=EUR02-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2Gu0-00000005UdW-1j31 for linux-arm-kernel@lists.infradead.org; Tue, 08 Apr 2025 21:54:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UlLsVwY7BvrWM/6K3lKNUHG6XV6LCjkoYD0MDRd5z4pkWOdD44WvEI2Xvkc+2vaACNdulFFySaO2A+LNJ01jnk7PkV1XqwEk1wP8AjUbplrMPqW5b16E9Sd9RsYZhiprDwu3P6uGuwygbb02S2Vpgu+F/IBvMq8hPay11oPRaadRa+dyLUKGfs5LNX5APoL/b0ADOfzL2fueo013jipa+xjQNgShBaL7M4GM12enZ+keSFhxLAR/Ek9GBMaALwJGHaasCyrfqnPt96P2jdjLAibpcGPl1XmIGACcpO8PQyz7Xo1ufkBwOdQ6rOGSbXYKsreuXqoDSp1DwrMVGk4k7Q== 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=UKc/xl1ev/Xgr5+VylYYaGYM3luxXIPPdyAYxRjwX10=; b=WvHnfhm1/eFymcOe0QDr4hdwB1jXxuwpdSPxr4IL0QntI/HpVhsjj7CsGgSDXhjL+fgdqmJEu4yDUSW+onmQxF2IlM7aMjbPbz0JrO6RTnTz0b9Glio9UKhs++S9k64k9cno9Lt73pq84NDvkZPYsIFlZconQwQz/905sDyTE57f2Q9q65YjQG7VUldZI3RDw7LL5a6Oh+Gs4eQnvMPfajntUcpt3cSBRVHkh2EmIfg0Y0pkED0F8a7s6ip50FKD+bA75urrtQVZVFyU2kvykYnIy/mB9MiYAcC6YaMrj7lH0keEiSrihpfeUX/FLVaXKfJRQYE7/l8ZjriPTiQybQ== 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=UKc/xl1ev/Xgr5+VylYYaGYM3luxXIPPdyAYxRjwX10=; b=Ir253U0HLGcFJCO5esWZKfcik3z/WcdlEk3hJI74UpLCFg9KAQq6HzGZ7VOndDcJLoU6dYnOuulvYOQWopeTUAo+C1Run44OCtGm8wD1zPzZAnMlWvHqZCaRpEdcMUNgcS2C4lc8xQwYe7/jAUjJZYEreLnHN53BkKV/fAnZBupPrhNtc1OCtDIY23ToUOrYb+rEnD7O7gInmmaSwbzXECHyZND73COrLRtkAd8f6+F0KWRXoauq4xLhPV/JrMwjVXMnaoL05ChtX/aVSE5FjOVPZag5G97YbyQa1nWcCW1WafzjqJ0+QreOGXsqqB0nB05wz85Ow2i6PU+SaA6OWQ== 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 AM0PR04MB6993.eurprd04.prod.outlook.com (2603:10a6:208:17d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 21:54:36 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.8606.029; Tue, 8 Apr 2025 21:54:35 +0000 From: Frank Li Date: Tue, 08 Apr 2025 17:53:08 -0400 Subject: [PATCH v4 10/13] media: imx8mq-mipi-csi2: Add support for i.MX8QXP Message-Id: <20250408-8qxp_camera-v4-10-ef695f1b47c4@nxp.com> References: <20250408-8qxp_camera-v4-0-ef695f1b47c4@nxp.com> In-Reply-To: <20250408-8qxp_camera-v4-0-ef695f1b47c4@nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Frank Li , Rui Miguel Silva , Martin Kepplinger , Purism Kernel Team Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Robert Chiras , "Guoniu.zhou" X-Mailer: b4 0.13-dev-e586c X-Developer-Signature: v=1; a=ed25519-sha256; t=1744149229; l=6039; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=GtmsxC03RxLq9WteRSAOzGXicyQnYIuxWpAMa2Eu620=; b=xiuaornq99vq6LrHG01zzPwSjlrezxFExFvpuZ1mJToSTgiD0ttd0QB5MwBWVOhcLpYJ1Eset M1+K/Az2sTKDyhp1/2M06CvnDDHLK3FjQV0h9bnK6YbNYomQ5QjuMQn X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0047.namprd02.prod.outlook.com (2603:10b6:510:2da::8) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM0PR04MB6993:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ce136f8-07d4-4763-412e-08dd76e7f3c6 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|7416014|52116014|376014|366016|1800799024|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?nA786cmfs+h1j34Jz9TxlwddZ06tuAh?= =?utf-8?q?2icmltm3pua5OTUvflCuPBm5BXsJf4cv8DUal4RZjI3iToXDMJu9VLez3TsEsINRJ?= =?utf-8?q?Z3iBseW1nZhxITwKACH3XgEzYTQno5mVGv2/75ds4GAIpVN6IrJYydjZLCEERFj52?= =?utf-8?q?AbNhwUkB4w2D7GxL5HAVBCD9AarP7Z7fT5RbOt7aKReBuXknitQ1RJgH88zueVgdD?= =?utf-8?q?uQBdnO5FyrrGjXT4wS14vidaN0afWx6480k7btTufHdRgRH2q1KwJ+3tObOp5US8W?= =?utf-8?q?d4Db6dHeRt3s1xVSOhZXwIIzSz2GVo5eKIr5fTEXKsegZDneENwU+MGRl2WNA3g5W?= =?utf-8?q?DO4bvaLhUn4D8P6rgjAP3flEEWy7iqQyZzg8umtLDhhP6Kw4OHqLgjOnND7MGIbkv?= =?utf-8?q?LPhmdfZZ8gsa/oZCaOR87KDVy1Zh8oq6I4X9fDTW6jUy12VEfe8e1P++rD62gTxGn?= =?utf-8?q?Oh/6mPj8QZZ5wOGZ2vGb9RONGk15FOvAE2ceQzVCVBr1TymcfCkq8JLBRR++BgT4N?= =?utf-8?q?gphrXXSVYmVHTt3fBlQhNHIjoZRu1NMYIkVIqvsfNDAe/fbBPcKqgLOaQ7KPAz738?= =?utf-8?q?47ix4FQza8iEngBfBTgNzS5nm3pfAm5QVwN9WRNr1IZZhmCfd+r6mNx891Tq7H5vm?= =?utf-8?q?Wb+vMuh7BRfct7o1YBZctZrWp4ren6oTOcwzgw3FNdFeLO60ZML9xQ1FcVTTrdPZJ?= =?utf-8?q?muBSY862f8uLz69S+/yZaZAZJOadvyaxZneboiPt7AjGQw8KoMD1+k/q/LYrj4nKS?= =?utf-8?q?YVNlrYrs00Bhf+B6bl/x/o9EoQEL/lkCsrf1fZhl86MBHUc0sYZKo6tpL12oO067C?= =?utf-8?q?6Beu5xVhcUpv/xiYHt+rlGfZUzImGdqGZ36LKdju1l3YkYCAQ5a9rEyPaD2kzGRba?= =?utf-8?q?7uKUIPq3zv18tO0O+n5Y/YU16OwPw/aiT7RDHhxXWmARVTZqlJ8FPHg+COGsRT6Jb?= =?utf-8?q?SYMvOTmgWHYr2LFXQ/28FHjO5dNmstKmYteEz6yOJIm8haAdl2P3RJ0GpGlMXQNql?= =?utf-8?q?YExfsQv4+Lzsso+OdziRKbMwRxz5yUPoQdeF7ZBSSQwhKJdZJwegmf33RPLEscyqy?= =?utf-8?q?DNCjspzFOHNr92ZlWbzKcd5jWPcg7jkZd/CAbupxssLye2gpQpWemgBy9fDbQzMeU?= =?utf-8?q?4+HuDjTvqE89UKvTEE5JYffDIW12c7e5PV47oEvJNuJ9pMu4HcnfImWpTcFCIX/ae?= =?utf-8?q?aPRnpMgZqiiCCJoX9Dqqk5MJU04XWbztI7OTONtHjW2ivWFAE1IM3NMBCLzJH84n/?= =?utf-8?q?nT6yCghJR5w//SvFt+PxBaLzX56B7T0Y7F+whEvUp96yq/PMhqxt6x9FBPFKdGg3L?= =?utf-8?q?xQoTAh2hq35H3slYhXGqIjLbLoMxMr2HMH4lqOC4eTHh4sFis3UXBfc9ppLTSKXes?= =?utf-8?q?r49HipSsHTY/IQU/SOUux1FmPuNvTP56A=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)(7416014)(52116014)(376014)(366016)(1800799024)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?hhwjF/gP7SOFjQ17umxd5w5t0mXF?= =?utf-8?q?1SauUUQ9/FP5KYWM+MaXkzhumbPZkfESWEeel/73gLWJrobM0EInaoj71Q8B18+Ub?= =?utf-8?q?02LEf1xri+I6H39J3Nqs95jNjnC2R5Xdip1EamC4kvkdvDdbcetqaBjzk85GyuSt9?= =?utf-8?q?GhxqfZFZRu4zcDX/7lLJo1V30qizeHgx/aAyhT7F6EuFGgqpKupv6ChFFSsgXENdl?= =?utf-8?q?EMqPAyvOEGArDeAkc8UjaN6WbfRk8wtia5A9qeaoBt1btHSg/3i7fZTOWDLZibbCQ?= =?utf-8?q?pgbHr6mhald3DuyxJhOU4y9gHdQBzBtPIgjvjWoLx+Sb3TyEe6ALBq5ozPHbWOa2U?= =?utf-8?q?kD2HxLdV9CaxZeDuGMuSf4r0t6ikCKXswRmYf9ktkSIOznX8WCUziN7FPa/Eysw45?= =?utf-8?q?Z3shHxefwi0eI+UxHO10SOtrzEs0cTOyrlRBYE/ZGC7umtznr++wQ/SX5Gu7q2B0h?= =?utf-8?q?m3OWaNOwZ+GWgYrjfRiQbX2HogXU5KilhcDyXZkOA2DSPv1/jbGdVFideol1l3/cO?= =?utf-8?q?v5WK6IYnwMQOj1gcABdW4ADCvx7yqXwtZDlZW+z1YojD2Zr+1uJCS+/13z/FG1DYs?= =?utf-8?q?3IMBhh04sL9O8o+cizsC6vU1VfMsGMUZMfwFyaG+lSkj00iMOB2ZbngCV+M4OqGNb?= =?utf-8?q?Vxpbo3fHxFRbv2w37xazIiKMyfm0M6f6o5+M9F+my+1xijg5mqP2mk/QfetmFqxxs?= =?utf-8?q?TUbd9p84TncOQkF0KoFE5Ta8JG8HTkDPEqH1Rg/VdXpwEvbiO6DXAC8K+U9Z5NnxR?= =?utf-8?q?HGSI5oIRaQ942+hRX7Na3cJLXrpOoqshh1OPKeJqbBJsHUNtH9MsBOHAk1/3TGM1L?= =?utf-8?q?APnGbbRmMqPJb7/4BXaD1uUCy1GPHAlOUhd6wo2IDYm0IQIPYNAHMMCyYBlz1MYbW?= =?utf-8?q?rl3MevsvG5+ymHgwuVBPVKgkCl2I1yUUvPi8aL5/LWTPXPbARfMj4e1bG9MRyrXTg?= =?utf-8?q?cgL8d2bCqU65XiNxzCUS9oo7KZ0AVLbOUX76gWR+Uz8gZjzpNA4VCsDLjvklreoLY?= =?utf-8?q?x8tvKczvSz+Y8bXUi07iR/Tf7tX112E6M9R2n9ivsVLBV64nuad6c+S/5/6PP7sKx?= =?utf-8?q?buPbHQPLjf+25Jp85FuiBYd0XEsEENQ5/SS1lkNJOhLyH1EzjeOUyD5clTWjGWJsx?= =?utf-8?q?fvFAnCJsaTSXwV60d1dBZ2xESzAEQi3bVXW48a/v0l4tZQeBR5ek4Bg677InL50ww?= =?utf-8?q?51FUNcUlsLSQJhkf5cKce+6haidHRyDSLF0dMI7s6vqv1HD10WbGWNZg2FcIi7YDg?= =?utf-8?q?cUZf/X74y2VG2+LgTmo0+q2m2WeYtQX+ZChyFFL1n98+rDQpPrAm4J3oQfqpyiqCw?= =?utf-8?q?A4+7oxTr4z0Qv6CkKHSziRIDLJds71mO9wwhwxy1wVPnWNLHuFmXRTM7xfH4ynjqk?= =?utf-8?q?58Jg/v1YMoEu3DjpT9OFwDcgPDA3S819nXfLCUTJrz4mgW8VqQRYWtXMApgtqPsK2?= =?utf-8?q?s81FxfywrpQ1LE+YfwGG+fhNlj/xzmqnmSOw6gn8FYQ9z6zc4ESIaOZyYm0SAMrxH?= =?utf-8?q?hc4szbjXni45?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ce136f8-07d4-4763-412e-08dd76e7f3c6 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 21:54:35.7661 (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: dKkwCQXKDBKRf0U0FbL/TfZqtO3ulHwxcFTck+0qFGuWN0PTBVxhYFHh8qavKc6IYoBi7RSwH8rm1WvxGwobuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6993 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250408_145440_624007_7683D7C2 X-CRM114-Status: GOOD ( 16.93 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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. Signed-off-by: Frank Li --- change from v3 to v4 - remove reset_delay - sort register field defination - fix error messag in dev_err_probe - fix comments - use true for 1 - regmap_clear_bits(state->phy_gpr, CSI2SS_CTRL_CLK_RESET, CSI2SS_CTRL_CLK_RESET_EN); in imx8qxp_gpr_disable() - use regmap_write to clean register at imx8qxp_gpr_enable() - remove reduntant CSI2SS_PLM_CTRL_POLARITY - rename register DATA_TYPE to DATA_TYPE_DISABLE_BF 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 | 111 ++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c index 59ec7107b4508..c6eb6dd0d9e5a 100644 --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c @@ -5,6 +5,7 @@ * Copyright (C) 2021 Purism SPC */ +#include #include #include #include @@ -88,6 +89,7 @@ static const char * const imx8mq_mipi_csi_clk_id[CSI2_NUM_CLKS] = { struct imx8mq_plat_data { int (*enable)(struct csi_state *state, u32 hs_settle); void (*disable)(struct csi_state *state); + bool use_reg_csr; }; /* @@ -167,6 +169,95 @@ static const struct imx8mq_plat_data imx8mq_data = { .enable = imx8mq_gpr_enable, }; +/* ----------------------------------------------------------------------------- + * i.MX8QXP + */ + +#define CSI2SS_PL_CLK_INTERVAL_US 100 +#define CSI2SS_PL_CLK_TIMEOUT_US 100000 + +#define CSI2SS_PLM_CTRL 0x0 +#define CSI2SS_PLM_CTRL_ENABLE_PL BIT(0) +#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_HIGH BIT(12) +#define CSI2SS_PLM_CTRL_PL_CLK_RUN BIT(31) + +#define CSI2SS_PHY_CTRL 0x4 +#define CSI2SS_PHY_CTRL_RX_ENABLE BIT(0) +#define CSI2SS_PHY_CTRL_AUTO_PD_EN BIT(1) +#define CSI2SS_PHY_CTRL_DDRCLK_EN BIT(2) +#define CSI2SS_PHY_CTRL_CONT_CLK_MODE BIT(3) +#define CSI2SS_PHY_CTRL_RX_HS_SETTLE_MASK GENMASK(9, 4) +#define CSI2SS_PHY_CTRL_RTERM_SEL BIT(21) +#define CSI2SS_PHY_CTRL_PD BIT(22) + +#define CSI2SS_DATA_TYPE_DISABLE_BF 0x38 +#define CSI2SS_DATA_TYPE_DISABLE_BF_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_DISABLE_BF, CSI2SS_DATA_TYPE_DISABLE_BF_MASK); + + regmap_write(state->phy_gpr, CSI2SS_PLM_CTRL, 0x0); + regmap_write(state->phy_gpr, CSI2SS_PHY_CTRL, 0x0); + + regmap_write(state->phy_gpr, CSI2SS_PHY_CTRL, + FIELD_PREP(CSI2SS_PHY_CTRL_RX_HS_SETTLE_MASK, hs_settle) | + 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_HIGH); + + /* 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); + + regmap_clear_bits(state->phy_gpr, CSI2SS_CTRL_CLK_RESET, CSI2SS_CTRL_CLK_RESET_EN); +}; + +static const struct imx8mq_plat_data imx8qxp_data = { + .enable = imx8qxp_gpr_enable, + .disable = imx8qxp_gpr_disable, + .use_reg_csr = true, +}; + static const struct csi2_pix_format imx8mq_mipi_csi_formats[] = { /* RAW (Bayer and greyscale) formats. */ { @@ -865,6 +956,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), "Missing 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), + "Failed to init CSI MMIO regmap\n"); + return 0; + } + ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val, ARRAY_SIZE(out_val)); if (ret) { @@ -984,6 +1094,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);