From patchwork Thu Apr 24 07:33:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haibo Chen X-Patchwork-Id: 884278 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2052.outbound.protection.outlook.com [40.107.105.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 6155222256A; Thu, 24 Apr 2025 07:32:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.105.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745479929; cv=fail; b=m4VrX7mkxrQunkkNJ2ewtalBpCy/DCrdMeb/9mpyE6I3jYQMNf5QE1aELxaUD9JfdIsb1NJ/vc50AAlGiwTzISgocoUkXHR/1fuYYtB12BY/g/XfhvteWIN50qQqiC9wI62gapc0fV+91ErP+C7QwPKm7lR088Gl3TAjMFlr/Co= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745479929; c=relaxed/simple; bh=OI4iSGXxyD09ySKPaTnSNkXPT4xN/jGSL4XikQ038Tg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=OEDmLTh5mSlmyh9dQBPsNcu6sjOCZfi1cgD7JB6ddxhM/NbEZkAzFrlMpju92IolQnciRtuR6oBnW0qOfTBQefYzmJyP7rAjEAg6xh6x6qsTbsNcB3xCYY1/5zMC58c0KOTSltKifaE945dQ/u8S831n0KW0H/IJVbLUiRJeztE= 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=jmClFXHt; arc=fail smtp.client-ip=40.107.105.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="jmClFXHt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CNum3iNGKL94Aa3Vr5xbRJJ6vE2lpt+aEG09wMcTKWvgLKV52xjLGbFLl3Pn7oQuicopPipQzqWOYT6ZcCKD1NuTyyi1wnJnjuU5zzuxxHoNxuIG8wTIwVkDwE8LHzUyhFoc3uWtmPnDUfYvrfPlkbtsxyF1a+DOOqjChq8Q+12J1vCbna6sMwCeOw/6hMW9ngVyzGG5Wv4DDSZOxwmQlNbZBfemF3TTQaT+Xu8hRMSsJGkCsPnj8ZKzv8GALnxRd9/KJen7LsbY5xB9hiKTEkBVew3GtZauOh06pDlvzmUStBb9yAOnb4wluD9lPq8KaUdpGgMUBW7Loj6FmZ4x8g== 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=liHQmwLVebmz6tdOh1EehsH6ZtR+3rvjh9GQwIhvxos=; b=IWQu7SA5aT2IboOWiNBW1B46qvoWioL421WCWOTKqBIkqNmaga+28OAampprmEfESwuhTZw0cwXu/76hqBb6dGT3Gp/QuwD9AutzL1B0K1itTuxMwYM3WgekpXUyIIdkzLEBPN2jDrrrtokyX+JduNIcMfwImB4l5lWkCZ0DhVDQFo0NQ4/IjhK7/xC61FBs7q0SafX4dZ5iRAWVHvtedvUk91AYjd2wvgU3+C7oAQAvuncIZlbcombArsPLif0X77/SFSY1fXgpihjg+ulRUBzenVsc3J0aYADEA0xpIoI8CwFfUCkZmsgLjzK05XJAgZvRRR5KdzRCpwCji0Pfiw== 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=liHQmwLVebmz6tdOh1EehsH6ZtR+3rvjh9GQwIhvxos=; b=jmClFXHtIecKuQpktA47xvhpL5jAQtXE4WEZMlKi9dlfsaKz8G3lKC3f2KX4Yh5nFs0l4AHWEoQ12U/nD3/H+rD8ayo2ar83GRczTP5gbWgPqO1+uwSGB+laj6n2Dr8RGIM46u6O3JfHIvRIwv4fKOKo+MbX/cDshbROiTt2vmE6Uf7qJhXd8vB3fJ9If4Eq2YXKS5MYfxWV5GKhO31mBnHogyWzGQoHsaQPV2zDUIEsD7ADfxolqZjHq1MjJG7ALsYZ+OW+vjzk577TCSECxVOBkrG/sTlW/x4eDEAA15SgSFbh4/ZCN5UZBm0jK/g2l2O8Pf34VztLJnZS40emQg== 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 VI2PR04MB10594.eurprd04.prod.outlook.com (2603:10a6:800:26f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.23; Thu, 24 Apr 2025 07:32:04 +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.8655.033; Thu, 24 Apr 2025 07:32:04 +0000 From: Haibo Chen Date: Thu, 24 Apr 2025 15:33:26 +0800 Subject: [PATCH v2 2/5] spi: spi-nxp-fspi: enable runtime pm for fspi Message-Id: <20250424-flexspipatch-v2-2-e9eb643e2286@nxp.com> References: <20250424-flexspipatch-v2-0-e9eb643e2286@nxp.com> In-Reply-To: <20250424-flexspipatch-v2-0-e9eb643e2286@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=1745480038; l=5768; i=haibo.chen@nxp.com; s=20250421; h=from:subject:message-id; bh=OI4iSGXxyD09ySKPaTnSNkXPT4xN/jGSL4XikQ038Tg=; b=BusK+8s7WH2wxjAPfZ66YvTu6soiMc/s9g4inZMg3Dc3FarF/DhUeBZKMVf85El3tsqHyKTic K5nu/SgFP0qAmvc/GPgAOgZ2jTZL30iE+0ABTirD85ON935Kwbhvkjm X-Developer-Key: i=haibo.chen@nxp.com; a=ed25519; pk=HR9LLTuVOg3BUNeAf4/FNOIkMaZvuwVJdNrGpvKDKaI= X-ClientProxiedBy: SI1PR02CA0055.apcprd02.prod.outlook.com (2603:1096:4:1f5::16) 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_|VI2PR04MB10594:EE_ X-MS-Office365-Filtering-Correlation-Id: 7b86aafd-4598-4501-1f45-08dd83021ba8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?N5QRvqbo5q2CbNa8JkKHk3J2lbCuR2X?= =?utf-8?q?YVGrK6mJA3ffU8X5DUmjIi1KMHArlaLSJtbMkwpkogrkzclEMEvVf7wKR3mq7XwtU?= =?utf-8?q?xJvPjPwCCL1Mf9Vwvv1/tnu3Zz+yYUqQxEbageKTd0kBgVjEb9dwyqmg5wFdGNuTn?= =?utf-8?q?oE+IimhflXsUNHRQc6cntPiIJv6WHW+qCsqoTw9CESck0h2UvX+s1eLgvFDpz+Xn0?= =?utf-8?q?oELmzjsUsm2AhoKxim0eHFgfv2xU5c3rcTdtpjp6iDxLiEjdNvWf625GUQhfeuwbo?= =?utf-8?q?2UXaBA5GmH4Cz70Q7PTikI92KTrLVQjrTThQczHcpuubjQfdl1ngsdaCL8QoGurXd?= =?utf-8?q?yM0GdpNDO+ZZdlBnCUZhlfv/P+RzvMje4pbp+r+uKdR8dgxnOlCtf96SC9/AeZq7C?= =?utf-8?q?zVnwKfiIPN3QJoH2Ht4IEGBKmDzbQ3aIKW779cptO6IBDjiQaw1a7ebqP0l0K/Dma?= =?utf-8?q?ySrHdZE0VyFXMSITjM8Rhk4mC8dQ7dNuiLmz2Ki48KhFf6DUZjMsPVjQfnyjPu50J?= =?utf-8?q?giemmjsGDcuBOmbCQqNn58EAA5fAs9+iDjtnh5u7M2B2ehqK0i6tibWxauV9FRQNP?= =?utf-8?q?+l5oLHtAUEdI/eIsSZ8B6orHS/PN2PqIN8187d8fARgnbwgPKghAiaoFEVM2EMPvr?= =?utf-8?q?BETzpI7rwHaUGSPMjOXrAIQFWaqaKapufkgnLe4eePVLcqfuwethayXl4N/bBqt7p?= =?utf-8?q?M3+1CX48/pl8j5c+xK8+kr65ckvgPEUCvBHUBjWDUd6qLR3ZiQAaXAl1FgRdovtb6?= =?utf-8?q?vaQ/s0Ne7awxqyNHBjNfNNNDVpUsE5/xgOVMd2s5+RZaPc3+1Sqdwucqu6tvqPt0r?= =?utf-8?q?S41xL00YMLETBRl6vPPfRXIW7k9i3fQe3fdBN13gPcHOVuP3pKy2Ox4QLgvoukQCD?= =?utf-8?q?YLZZ9+rWcCbhKQmRB4s5UNBtZwbLZS5yM9o+u9T0eTOUMiex9raWh+kFFnWXxZnDo?= =?utf-8?q?h5bCPSop8a1rxVCgPkrsbQxxmSgLZbJMrzXnKHHeiBe/SAH/wIvz5/EcRu0/GP1j4?= =?utf-8?q?NWrFUsFfFb7AptpLGQ8jTD1CnC0wQ1j4zsP2iPFWvQerUS18laS/+sEFOHL1LoA3G?= =?utf-8?q?1rO/fJpuIINfyTbcDniEnREwUISRzkkpaJtO1Urp/9Kr+pnO7xhIkAKSvjfl+BpYd?= =?utf-8?q?YlbzmFWHIoq6zE/dW4qZS5zn+nn38MKlrmLxj8e1d8BGpQjzfRVzQADHH+fFwj5dA?= =?utf-8?q?wQG3BXulnimN+f5QDUPSJBQVnBBRBHGNQdx82R19/H85QvqF1cTojE85E0kDB5TiL?= =?utf-8?q?OPp19QYyJFKn4JwmQgxz/EdFk+tiUKNmnfxLPo9Of4xEPHxAFNKaATx5SIGqZ52+n?= =?utf-8?q?ulT8JzZGvnxeDXwKqfInA+o8KVI8+3Nen9xpV7np4N9IzIsg08ctReJEnrWa+9Dz1?= =?utf-8?q?3dn0pGRvdGIeqU3euUYT+mWhDDarNntuA=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)(52116014)(376014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?OZQpi4HSNBxhEsdDpl+jYQO/mHCf?= =?utf-8?q?qaUvtiJGajvLRdVVTs2KMdLfoLWMHAVighLg5vwan4J3vI5y1al9AKA5tji1z4gch?= =?utf-8?q?9HNd2fTyP939rGTrl4VY3eIcqvXWPOgRJTr+4C8FBktboerkdy2+iluv5BcVYcJYe?= =?utf-8?q?gRmyvYlspIS3mfV9KT2HQMTq1QjgAcL65Utz3KQfVAkoMPpslzMW5xiA50GyURRYk?= =?utf-8?q?AqvwaQ+/F7trkt1Od4ql6MlnQgJzOt8a3PktqQUvx7N/QP3n3qN0gIdtYIn4dNEJv?= =?utf-8?q?hpI/zPI8av4x4fxW1pEWvBnLYRnZdcXj9KIeVzyke2EHENd7s2inQzzkAmjjFzTYk?= =?utf-8?q?shINmEdAdYBkaOhaG2RstOdUo8HfYFEQo3ehQqyYEKlrowmdHKm7cnxuTvHcZnV7U?= =?utf-8?q?nCmSCaW1uTYgug6vidDC+JrowdYrjitNkzGH3mUmvgwTOiSJfM13drnfNkzbsrPAi?= =?utf-8?q?KDMDV0K61hcuEY9PQtfhBR1w+zogFVayBOd/SySvfV5M9Hu6jkFeQVDx4/LRjAhlN?= =?utf-8?q?lTw7ROzdIHm6+0q/UL/MKQydTF/6psk1ZfValNBdHC6b6chu+YhtdVsDAebzzVBKY?= =?utf-8?q?82iuHoJgxz/BprowutaKdjKdpb6hUCMtgsiE1QsT5KO0eSMcDS8VnzFXh4Pu3zg2w?= =?utf-8?q?Nkw8jaB3+wn6RT6kA4hi2o4rB7Z/4AxdAKjixHamEAt+tef6zovykVZO3fa1BXuSV?= =?utf-8?q?BcdL1hFtqVikzwKEeb20o5r+X+AFUziWsCcY6f3ZcM2+UhtvGMl/aPt4+eJfDHIPy?= =?utf-8?q?J0pderJoNvtplPgIGsmCBQOD7AAmJK5Frby6S5imheKeTPQAacw9wp2oFvXV7ixZX?= =?utf-8?q?BjlDzjOryMZzFI7+W2QClSDnrCMYt7/Ejao4auEY5VPEgrQufxdoG4PR44rSyz6nS?= =?utf-8?q?tCPprrA3W39xxJqdPUCZvG+L8bcYfr9eSEbB+otNV4appqSYvwxIpjjJF9ImSCm+J?= =?utf-8?q?kXK7AgM2taX0M+cbzbX+ZNHR4qYMuYnyC9DILNJFFDuvFJMWoIz/4u43DBsSp17C7?= =?utf-8?q?AX2p/IeDP96WJfcPqDlTZU3tyJvG2DN+aOWiZUhO5OAFJ5F20k9qMvQRkdgNl+rAI?= =?utf-8?q?9jldqmjPAgS+NarveKuBxdHU/YE+V45DIlnQHsGEa2ZQQ78RAsBZBFsJmphJXjqhA?= =?utf-8?q?yYpARZ0I4/KMN52ydjOd3Y4ByLhsQ9LFwukkjGtpXUf0kKBEisre4L8VKks+t7tN2?= =?utf-8?q?D0Vws3pxp5PMCh8SXcb7PsXXw6B2IDgIC0IxvTy7hHDab8CSLQh0F/4NBAUhFKAkT?= =?utf-8?q?s5fdPjEYizeuHnmxF2P2dS+Mp/TYTb6U6mi91FfwDbo/1eRYooPiKNPaTzYZgE2iJ?= =?utf-8?q?uub80prYzozB3CUjJ5k21/lxLxR26BR254I+N8KOtpr6//MmJM3dh2TcYQk+dD0I/?= =?utf-8?q?hhjE9/duG+/gSEJNaJvf8REHhS3JEyiprY3Z29pKNLn7fbsIvcgzAoj5cXSnnUERk?= =?utf-8?q?x7AGSCEKV7XdbjcPt0Og/kx+I+4XVeGEFfY2QJtzZlOWmKTv160+7o9gQ1GiTf9Pz?= =?utf-8?q?oXInw66RK9Zy?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b86aafd-4598-4501-1f45-08dd83021ba8 X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9496.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2025 07:32:04.3679 (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: qYWBmGpeK8mJcRi78BRaB3tNUxw9uA/569AHca7uHpus5/bS+B2k169dAjzdvFcoTJ9tS6dPdSN7uJglUsCncQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB10594 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 | 95 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 16 deletions(-) diff --git a/drivers/spi/spi-nxp-fspi.c b/drivers/spi/spi-nxp-fspi.c index 00da184be88a026bf562c9808e18e2335a0959e9..438a9c103c5969bcae06b4e02d98397ffdcaa345 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,28 +1272,73 @@ 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) +#ifdef CONFIG_PM +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; } +#endif /* CONFIG_PM */ + +#ifdef CONFIG_PM_SLEEP +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); +} +#endif /* CONFIG_PM_SLEEP */ + +static const struct dev_pm_ops nxp_fspi_pm_ops = { + SET_RUNTIME_PM_OPS(nxp_fspi_runtime_suspend, nxp_fspi_runtime_resume, NULL) + SET_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, }, @@ -1291,11 +1359,6 @@ 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",