From patchwork Mon Apr 28 10:06:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bough Chen X-Patchwork-Id: 885687 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11012040.outbound.protection.outlook.com [52.101.66.40]) (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 35BAB25F996; Mon, 28 Apr 2025 10:05:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745834713; cv=fail; b=bh7HPiacELGHB0EylWJoeboraeVRXUX6meBNYfXRcQ4lUpxrahBNjR+oYE29hqLW7wF46fFPUQZMiKjULm9mM0BCGvJ5qeeJA18nUx+qSAj5JmmLV3fD0gGJ+Zc7cjq7ta4AcQJSyMIAy3+6azN4kO6rB5Kw9AVy5DuXMPis+wg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745834713; c=relaxed/simple; bh=EHGi95nTlhRjlYTPcmNSAMw5IUnu/bcxt4hNUpvsWzM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Gm4fIi5pvHnb+K9r6jjHOFsLnWHbYe6DRqc4Ar/8BfQhpcV3ZqA8DBciFsjH38oQtinQOPgOkw00RZ2ZQ4oqUb+bXiot5kl9rGE8QSllBPpxWo6ExsCI6ru4ffT3awmEEZad36J6aAJWV8PaUMjXGCf0leKARrG8B41SDXQMPrY= 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=YbWWHP0h; arc=fail smtp.client-ip=52.101.66.40 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="YbWWHP0h" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kiQxbB+o5fEQyXIid6A2kExeK4EfDrOXcxoXVVh+B3Mk6x778FNCpoU1+WZDkggTNMiSb4nSrtGoiGnvjqzhTP2WsdwXfUepZnpQ1zPrMic3T/aE/WtmPCQ7//X+HoRy+nfZ3+h2EufA3HcGKj93z6ZA6zWNly0U60d7kzgKhROdslHic34x6AIn5EWlL5Ej6kjbk6Bx5FVxsuQiprIIlOobuIgczaDqvMBjebw26bup1MdhXkyUV7xijprHRvhg0FKmBzJ1D1MKIjQzEpM1Q11GzHiGaBshjg79ZWDJPZesv2ZX5hqE5O75Gk/1CWUBzO9bSsou7qOEzBffzLbH1w== 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=Xk5U3cUoUE0U+f3XcRp5iwBviiPiPHmZexOFQhIIl6w=; b=Z0IMX2U8Rw+h0SAq81AtDOItMWk5VUg5MfoRJDQkuiiDhYxDfYZ9rH914pJ6DRqby9h0ao6Kb6O4WF9b74noh7aHZlfWGCRwCHBZTHogv+UXAXtzpn0usp6gBctvZe7u71T3ux9iqhoPg/y/G3koPxl2d/Sp0/jQp0OWLXAWWIGBUBbdcxy8FHhVbf/RIuWjDju5+HTsNzDanHtOxcb0sv/PU+xbYaHSptXLEQOmNE/qI2sdEMtLdTPxA1ToJPxGtZMHMROF5AcmSweQzQzpHSfzPEYJ00VlXYSmmMU2CCfoo72/nc+0N45CfOMqOwAGfKN0NQHdAebr1KECmlpSPg== 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=Xk5U3cUoUE0U+f3XcRp5iwBviiPiPHmZexOFQhIIl6w=; b=YbWWHP0hVhEzjjLi5AmlhgEpmUIhFn86WfspP4yX0u2q1yJ4cC+I7sdCj56TPt1GP4Z2pa+D+7mOt43bqmJbOjG8+k89aY0XHgoi5QdajOeHnomPO0tUgrCsVOM08m4A9l9eRE1KL4/MYX1fUwKIG0qIcqRgvkOVzPz4uOX2Xo7aradK7huPtkmhw68zk/sbBUAWuGgFwfZOUCIoHj+b9GQBcBno9bNUy2ZdrnlICu0EquljTYcUY0MmsVerztDAtZevivNUjXtNa77nc2E0P6d38L1xatPiG6e0jEyUwK3DAVg/YNCRBCV+VZPh8TILGUPEQx4L7muH5Dir/uPdgw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DU0PR04MB9496.eurprd04.prod.outlook.com (2603:10a6:10:32d::19) by PAWPR04MB9862.eurprd04.prod.outlook.com (2603:10a6:102:391::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.33; Mon, 28 Apr 2025 10:05:08 +0000 Received: from DU0PR04MB9496.eurprd04.prod.outlook.com ([fe80::4fa3:7420:14ed:5334]) by DU0PR04MB9496.eurprd04.prod.outlook.com ([fe80::4fa3:7420:14ed:5334%5]) with mapi id 15.20.8678.027; Mon, 28 Apr 2025 10:05:08 +0000 From: Haibo Chen Date: Mon, 28 Apr 2025 18:06:44 +0800 Subject: [PATCH v3 2/5] spi: spi-nxp-fspi: enable runtime pm for fspi Message-Id: <20250428-flexspipatch-v3-2-61d5e8f591bc@nxp.com> References: <20250428-flexspipatch-v3-0-61d5e8f591bc@nxp.com> In-Reply-To: <20250428-flexspipatch-v3-0-61d5e8f591bc@nxp.com> To: Haibo Chen , Han Xu , Yogesh Gaur , Mark Brown Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1745834827; l=5964; i=haibo.chen@nxp.com; s=20250421; h=from:subject:message-id; bh=EHGi95nTlhRjlYTPcmNSAMw5IUnu/bcxt4hNUpvsWzM=; b=2pD/NN5i0GmoG7Qt0ascRpOI89qKmY15/OI8CGLemTOLUUcdypNyPH4WcAeM0qN3RSEoRV6cP KvA4P5k/VJxAWDCp3G51djKW0BVpzMsttGTLLlhh+J0q639jaL67clb X-Developer-Key: i=haibo.chen@nxp.com; a=ed25519; pk=HR9LLTuVOg3BUNeAf4/FNOIkMaZvuwVJdNrGpvKDKaI= X-ClientProxiedBy: MA0PR01CA0011.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:80::9) To DU0PR04MB9496.eurprd04.prod.outlook.com (2603:10a6:10:32d::19) Precedence: bulk X-Mailing-List: linux-spi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9496:EE_|PAWPR04MB9862:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ae302d8-5c99-4089-3a1c-08dd863c27ba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|52116014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?mfizrHUe9mjfcBrr2TDFHWOISWHOQRf?= =?utf-8?q?pmxa6PjIcZOvbceT6MZxzaUdcCHbOSQYhma2ZunNzO0V4qFoRo7KOpL/kjmU1vC6S?= =?utf-8?q?WgfgBfT1ymKX9jFLlj77bISdZmxwfp3vYps65k8vFkS3JwUVYrbFUIsTmmdsHMOZe?= =?utf-8?q?msaIHdWQkJ9+WGndALsLS1lI3n8rPJUFOkdSXfowCHhAIf8r+teYGeHleTfuqVYft?= =?utf-8?q?OYXLWe2fwz4u57Tag3nxfBahBbJQ/aU7yqluzdlb9fXaG1jaYlrr4ol8pOp1UuJ2u?= =?utf-8?q?6hqo2g3sUjlGqub9xzdh/Iy/G25fOpwQXxygjcHgJMBcITl37ZQPqokLpvdETySpd?= =?utf-8?q?ajIZILfnUY7PrtJmhVj9ekJrf1lzmWbx0UGi4mtJgZb48zrF+GIVFjsxE2Bj+KcJL?= =?utf-8?q?ntot+UR35cJ//Y2GT3AWwaMNWkgtrXK3T7Z/zXZToqHwD/UzwXQa81zz2qcRj1Qc0?= =?utf-8?q?N+gCrcCo5azMPxIjUPvGeANqlsb1N2gZ6wLTxtGrlCWHyMcpvEJg6dDm/9Arx3tcY?= =?utf-8?q?mfAYnWufYUsBOlbKmzd/kKOmC1o5CJsxU1w7s9qpwUXMAhL4YrlUly+zBmYMjKRqh?= =?utf-8?q?T5G1uGNWj3kwOgg2MYC9sLCOgwlre4GZVUj51+bkvqssC6bFAwmdHtk1OVHEDR8bb?= =?utf-8?q?n5Y2+R7WyyR0nqb34RRBmuMrwAp5OH28o3CV8AcFkRg54rwmUNh9IxkWO4EGwUI8g?= =?utf-8?q?ztry/SJyhc4IwJw6oV5ofqqVp8APFfhoxqqo8I2dVz4q5nc3qqvCKZSASz+i70Y0y?= =?utf-8?q?8O4/qls8Q6Pc2jUuBSUCEwrMuBLNWTgEofe6IF9n44PM1GRiK+dmHvcyZMpfeuKVn?= =?utf-8?q?cRGVh+YaEneKa9uzqayS3Za+UyLpiTHrzJNsgqg+jkwpMoZta+0YbNGcEZmcVU8/9?= =?utf-8?q?rARzMnxFdhIShCT1MemhqltDbGrLtVYcvq1qPorC1lidEv85689LGQ+K2Z/3yHyHL?= =?utf-8?q?niI2TwJU5mR6jXe0H0HlcsVRJeUZWaDKHcpHkarr8LLYPE9r90FcxGxUGdqJXtv31?= =?utf-8?q?ZZL39ynLfCDLGsyJhA0Ho6mVZThjvsr4LXgldLjb6x4MU6/ViNFgv+uLyGIQuArcq?= =?utf-8?q?FD1cs54t5ZCLp4Ev/P6Ma+OKWwV6tKfFZjelMHWe5WHCjg87BuV1ZbuxhzXiNTq2y?= =?utf-8?q?FfJwtc9H7kzqUHI5fGH5oCs7I2p/i1CNuL96AzOSbCXzV/yLlv6iw5KcfehM6cymI?= =?utf-8?q?GdgPIcaHBDI95HV9XMzrqccYnO7AMjIPxfleLjFWCbSp75yWt/O5cRP4uGyjUeeqt?= =?utf-8?q?GFatOAYLuKaYpFIzymAiz/uWa8GR6v13G/kmmxi0umM99gYPb//C9bVf9STMynjjd?= =?utf-8?q?PSflZtu4EBZaP3Bm1rLURCBdemiGrFj85ivIpHNnAtCvwyG/uMT3wXwdSq1ZeRdzm?= =?utf-8?q?46HuTQs6Nr8YXEjPEuYsImwtM9qx8eRuw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR04MB9496.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(52116014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?l5G0NVbl7GCY0nZAVWXfG8dlbYBd?= =?utf-8?q?aXugO9jmdex2ZeDDa3Y5C4PGrc0dOZ/AQZTIZcuBm+u+tjKd+amQhaWGbPg0J1xST?= =?utf-8?q?6FGUMCcCv2MLQ20SdKvrhgONl59XJBYKKmzt/M9Forc3ahru1a5AcxaT3znXdqqX5?= =?utf-8?q?rWGv4UPm+ITZI2hq2ZOXDhhxjkHG3cjtxeon+FsWBeJlAnl5oMofv9hAiyDUZ2j2s?= =?utf-8?q?42F4r1AcDAExUVr+Mh2DVM4rhM4MKUuBUlm3xhJPrHt/QI6x56vHdOYW+Vwdn93vA?= =?utf-8?q?Anjj8eUs6Vlyw1ejTmSPLi1+LO3prcOanbpoe5y7gOx+pjV1voYRP4Os5ytAOZK+1?= =?utf-8?q?JDvZCrv7Deh9n+TlBmDIlziP9oIZg2Txc6p9nUkswjz7NMzeOZ1qGGTBgLzvTUHgY?= =?utf-8?q?GCPcsoqKQYFUSwVdynsKJE74sp70EiA7mG45lGPOuQS528uO3FZkfpjLOkJfjNXpq?= =?utf-8?q?QPv8qFKPJM1arbLCjPYsDfgxOhjKFdHKPeu7JoHqZgZeudvuLNLlMNUkCRU3kkF0x?= =?utf-8?q?LBOmXdzLclwZvv590qb+xoyymqUPgsdQy6JcFHXNrpLqW0TiduU9WF0aqDZ71UF9r?= =?utf-8?q?IGuqGVeuezT3PP2Kkh171vYFpxtsFrdf3U1EApyn4if4Uyb0oesMXfaT6+7alEADK?= =?utf-8?q?GtXct5WLKYyQI+BROerAtXb9lYERFZ3PADkcfyGOWTuEqsNJLWwqA4bVqXAxD4Qu0?= =?utf-8?q?0FN/FyImaUxxl3zGZfgkjZZ1IKF90bVOat/+yWmtgG+m/JoMqOmWmGPkz46fGiwxH?= =?utf-8?q?UHLN2R7IstiQVNT9BW7uwzbBYfHM3p9mWuZy1K392w1i0BV+lDbCRn3NrOpK1kNlK?= =?utf-8?q?GjMRYqRBX062Clzo3ovJ8HRTgoIviZbJRi1nbNOSo/FdS8/FlQ7+O4XhwyoKXF4bg?= =?utf-8?q?E1dCDtt/YEiVUgSGTbRYCCauGjXZ8qz6RKjEcOMaC/QugHo6BqaCFxznRu5dWGaob?= =?utf-8?q?kxpfP7ylE6RYM/yHKBeI9vzYL71wY2VUDJJSVureNEN/Jz3YM/MZpJDqD3RDVurUL?= =?utf-8?q?x29uoDzi/LjelVYzWj1V+ygIuf5LMrY/kq0Jenm7NbHDhMcXAJNx/89X24ORvTct2?= =?utf-8?q?Cg16eqpNnYNUXIvIaloD6Ra/fiMQVnh9kutFRcqn9PJpaqdWTLFV3DO7wDYXKK4eP?= =?utf-8?q?0xKzhf48Ck7YIqWoZZmMWofP2lqyFZUtfZbnPZVuWanP2PQiT5TyThNWD2X0keBf6?= =?utf-8?q?cdYteQ1xnpHTYzUBUkccfR1qevFGqYKoWv0w0RRuWZE1DghYvo0JO7s2oCgc8UsH1?= =?utf-8?q?NIZ1d1kxm39M4Ze0hC6UNqHfiyEZTj739syWdf9RIueVBBGTEO0ohN6mmaTRzLCT1?= =?utf-8?q?5CcF22rD5lul1Nr8JNJ/Mkf7UEFtept7zlauJhjigYB3UaVQkRy6JWPCx32T5X/9n?= =?utf-8?q?K9LxfKwTWRi3R27Bn8vD/oHBj9UVR4rlkK55Am6HJFjosApkyFjh4e4oc6NqjTR5I?= =?utf-8?q?MX95BdnW7A+Ckcjsn7kNZEleUCsnYzC/xlvPOWn9N7yQBZjAUzze++QHGCypXI8Lm?= =?utf-8?q?V7mvpmQXR2Oh?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ae302d8-5c99-4089-3a1c-08dd863c27ba X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9496.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2025 10:05:08.1671 (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: ojwgNYDPm9on6awbVM59bTvd8xO70MVrFr4hCFUXMsax+DxdKh6KXQt4jfZYR8Z24h7ProB/nqetEz2h+pG9Dw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR04MB9862 Enable the runtime PM in fspi driver. Also for system PM, On some board like i.MX8ULP-EVK board, after system suspend, IOMUX module will lost power, so all the pinctrl setting will lost when system resume back, need driver to save/restore the pinctrl setting. Signed-off-by: Han Xu Signed-off-by: Haibo Chen --- drivers/spi/spi-nxp-fspi.c | 93 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 17 deletions(-) diff --git a/drivers/spi/spi-nxp-fspi.c b/drivers/spi/spi-nxp-fspi.c index 00da184be88a026bf562c9808e18e2335a0959e9..f7c3330a19009223cbffae8673d264246418e561 100644 --- a/drivers/spi/spi-nxp-fspi.c +++ b/drivers/spi/spi-nxp-fspi.c @@ -48,6 +48,8 @@ #include #include #include +#include +#include #include #include #include @@ -57,6 +59,9 @@ #include #include +/* runtime pm timeout */ +#define FSPI_RPM_TIMEOUT 50 /* 50ms */ + /* Registers used by the driver */ #define FSPI_MCR0 0x00 #define FSPI_MCR0_AHB_TIMEOUT(x) ((x) << 24) @@ -394,6 +399,8 @@ struct nxp_fspi { struct mutex lock; struct pm_qos_request pm_qos_req; int selected; +#define FSPI_NEED_INIT (1 << 0) + int flags; }; static inline int needs_ip_only(struct nxp_fspi *f) @@ -927,6 +934,13 @@ static int nxp_fspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) mutex_lock(&f->lock); + err = pm_runtime_get_sync(f->dev); + if (err < 0) { + mutex_unlock(&f->lock); + dev_err(f->dev, "Failed to enable clock %d\n", __LINE__); + return err; + } + /* Wait for controller being ready. */ err = fspi_readl_poll_tout(f, f->iobase + FSPI_STS0, FSPI_STS0_ARB_IDLE, 1, POLL_TOUT, true); @@ -955,8 +969,10 @@ static int nxp_fspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) /* Invalidate the data in the AHB buffer. */ nxp_fspi_invalid(f); - mutex_unlock(&f->lock); + pm_runtime_mark_last_busy(f->dev); + pm_runtime_put_autosuspend(f->dev); + mutex_unlock(&f->lock); return err; } @@ -1216,9 +1232,14 @@ static int nxp_fspi_probe(struct platform_device *pdev) if (irq < 0) return dev_err_probe(dev, irq, "Failed to get irq source"); - ret = nxp_fspi_clk_prep_enable(f); - if (ret) - return dev_err_probe(dev, ret, "Can't enable the clock\n"); + pm_runtime_enable(dev); + pm_runtime_set_autosuspend_delay(dev, FSPI_RPM_TIMEOUT); + pm_runtime_use_autosuspend(dev); + + /* enable clock */ + ret = pm_runtime_get_sync(f->dev); + if (ret < 0) + return dev_err_probe(dev, ret, "Failed to enable clock"); /* Clear potential interrupts */ reg = fspi_readl(f, f->iobase + FSPI_INTR); @@ -1227,12 +1248,14 @@ static int nxp_fspi_probe(struct platform_device *pdev) nxp_fspi_default_setup(f); + ret = pm_runtime_put_sync(dev); + if (ret < 0) + return dev_err_probe(dev, ret, "Failed to disable clock"); + ret = devm_request_irq(dev, irq, nxp_fspi_irq_handler, 0, pdev->name, f); - if (ret) { - nxp_fspi_clk_disable_unprep(f); + if (ret) return dev_err_probe(dev, ret, "Failed to request irq\n"); - } devm_mutex_init(dev, &f->lock); @@ -1249,29 +1272,70 @@ static void nxp_fspi_remove(struct platform_device *pdev) { struct nxp_fspi *f = platform_get_drvdata(pdev); + /* enable clock first since there is reigster access */ + pm_runtime_get_sync(f->dev); + /* disable the hardware */ fspi_writel(f, FSPI_MCR0_MDIS, f->iobase + FSPI_MCR0); + pm_runtime_disable(f->dev); + pm_runtime_put_noidle(f->dev); nxp_fspi_clk_disable_unprep(f); if (f->ahb_addr) iounmap(f->ahb_addr); } -static int nxp_fspi_suspend(struct device *dev) +static int nxp_fspi_runtime_suspend(struct device *dev) { + struct nxp_fspi *f = dev_get_drvdata(dev); + + nxp_fspi_clk_disable_unprep(f); + return 0; } -static int nxp_fspi_resume(struct device *dev) +static int nxp_fspi_runtime_resume(struct device *dev) { struct nxp_fspi *f = dev_get_drvdata(dev); + int ret; - nxp_fspi_default_setup(f); + ret = nxp_fspi_clk_prep_enable(f); + if (ret) + return ret; - return 0; + if (f->flags & FSPI_NEED_INIT) { + nxp_fspi_default_setup(f); + ret = pinctrl_pm_select_default_state(dev); + if (ret) + dev_err(dev, "select flexspi default pinctrl failed!\n"); + f->flags &= ~FSPI_NEED_INIT; + } + + return ret; } +static int nxp_fspi_suspend(struct device *dev) +{ + struct nxp_fspi *f = dev_get_drvdata(dev); + int ret; + + ret = pinctrl_pm_select_sleep_state(dev); + if (ret) { + dev_err(dev, "select flexspi sleep pinctrl failed!\n"); + return ret; + } + + f->flags |= FSPI_NEED_INIT; + + return pm_runtime_force_suspend(dev); +} + +static const struct dev_pm_ops nxp_fspi_pm_ops = { + RUNTIME_PM_OPS(nxp_fspi_runtime_suspend, nxp_fspi_runtime_resume, NULL) + SYSTEM_SLEEP_PM_OPS(nxp_fspi_suspend, pm_runtime_force_resume) +}; + static const struct of_device_id nxp_fspi_dt_ids[] = { { .compatible = "nxp,lx2160a-fspi", .data = (void *)&lx2160a_data, }, { .compatible = "nxp,imx8mm-fspi", .data = (void *)&imx8mm_data, }, @@ -1291,17 +1355,12 @@ static const struct acpi_device_id nxp_fspi_acpi_ids[] = { MODULE_DEVICE_TABLE(acpi, nxp_fspi_acpi_ids); #endif -static const struct dev_pm_ops nxp_fspi_pm_ops = { - .suspend = nxp_fspi_suspend, - .resume = nxp_fspi_resume, -}; - static struct platform_driver nxp_fspi_driver = { .driver = { .name = "nxp-fspi", .of_match_table = nxp_fspi_dt_ids, .acpi_match_table = ACPI_PTR(nxp_fspi_acpi_ids), - .pm = &nxp_fspi_pm_ops, + .pm = pm_ptr(&nxp_fspi_pm_ops), }, .probe = nxp_fspi_probe, .remove = nxp_fspi_remove,