From nobody Sat Feb 7 10:07:55 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013031.outbound.protection.outlook.com [40.93.201.31]) (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 D038D33F37D for ; Thu, 5 Feb 2026 08:52:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.31 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770281573; cv=fail; b=PmL7losaiklFj+iKCK7b1WL0syZMt048s3nzTdVwRv49W2UDEpstRAxnDMDLnU9fTE+kVKvcoCILLTnBQgV7r/8aaqWy1H0cjePcwGcvC0z0ecTEa0AtfsGj9dfCKOgZqQ3ymHswFl0BnNjQU13anrfujsI3FF4gbcVGTEazbAI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770281573; c=relaxed/simple; bh=4tZ6IFPVBY+X8hPGf7l0GEUAHD+9jwXv4mJjjCVcATg=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=mFDB4UTW4O7Lm2LeAldUw6JNnFp37PoHE/4sVeHMTBUbscZKi95PB7HXyBuwoDK3ofq84wPwOs3AvcikSydWrmD+X4XKWOBcCehRHgoJvdBDcWrMhIZgBD6NXqNoS8QOL550MV324qlXBYAi//CIOHEjU6K6XgnlBoTzL0rjMls= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=uIOqu6cE; arc=fail smtp.client-ip=40.93.201.31 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="uIOqu6cE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qKAGhTofHXc9+8H7/GgGq7P7Z6Vjv52Pr+WcdfXc2ic2ypI9xEy/GkYQA8S1OpyrbZRo7++okDy5gW/U1rk9AAI5B6a8xplw4AfY9yh256vANLBJhN8J+kDX6fE7UKPGnq+Fd2K17Z4AJdLzLEedngmoacyRNcQTNtH5ph4ImjwdP/U8KGQgUXJj+scSlRUVWjGm2CceUx2TiHfAO5W/5mXl2To4ILrjNi7yuvlAMTGNP+bhVjUMWintAzVxoqVFUZOGFAWSWq92k8FGDNkEcyZNxgZgsz6paRTDediXBXnQKlw/6i67uwPgQ9KDM3BuDRqpoVi8H9ThwvJxYxVZSg== 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=NLpsjcB8HrL445mSkRYFIqL3rPIp1M5/rUHGA1duaHU=; b=GyoFbZ0PKQNHaaAOAXUBMOGXyWQeDIsjsr68jdT6VdFgsc1XQOfEBW3en9HUGSPJikbGXn/w7ilOpUQkT03PceJzGlnIZIUZty08s4pTrE7VE1reA3+vb4LZmnF8AdZ45yo38NS4WxhogIcW549n1Ux2qSNBLkZa//9NUQqHgsw/cUx70xesYTs2PfAYXOBTqNDCYCxEoGDxv9421w9obDwEJL6+M+GhTzL8IOqkm4Fx+ZrUAt30o9FG/kSSmaeCJd3qZyqaWR8rtB5mfXn4Cr/uIKlofEGHbbRaQBQ4D6ywLBsE1wLNTcJGGd2J1gpXy7LltR1y40AQw9taQfQUSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 198.47.21.195) smtp.rcpttodomain=ideasonboard.com smtp.mailfrom=ti.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=ti.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NLpsjcB8HrL445mSkRYFIqL3rPIp1M5/rUHGA1duaHU=; b=uIOqu6cERWactK0zR5asG01iFk2XXNvOC+vqX3JJpWnza8rNYlRFWbtm+x8LcvcokM28iB7EjkzYpFIELsrbFz5Sffwf/mFgwpAfJGpgMn42f9kXtL/tFFHfq/t/hG6mYdRRyZRwhPUl94U5UJuUgvW/meKJbfafUyGkPyX6SHM= Received: from BN1PR12CA0017.namprd12.prod.outlook.com (2603:10b6:408:e1::22) by PH7PR10MB6225.namprd10.prod.outlook.com (2603:10b6:510:1f2::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.14; Thu, 5 Feb 2026 08:52:50 +0000 Received: from BN2PEPF000044AC.namprd04.prod.outlook.com (2603:10b6:408:e1:cafe::25) by BN1PR12CA0017.outlook.office365.com (2603:10b6:408:e1::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.14 via Frontend Transport; Thu, 5 Feb 2026 08:52:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 198.47.21.195) smtp.mailfrom=ti.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ti.com; Received-SPF: Pass (protection.outlook.com: domain of ti.com designates 198.47.21.195 as permitted sender) receiver=protection.outlook.com; client-ip=198.47.21.195; helo=flwvzet201.ext.ti.com; pr=C Received: from flwvzet201.ext.ti.com (198.47.21.195) by BN2PEPF000044AC.mail.protection.outlook.com (10.167.243.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Thu, 5 Feb 2026 08:52:47 +0000 Received: from DFLE204.ent.ti.com (10.64.6.62) by flwvzet201.ext.ti.com (10.248.192.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 5 Feb 2026 02:52:41 -0600 Received: from DFLE211.ent.ti.com (10.64.6.69) by DFLE204.ent.ti.com (10.64.6.62) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 5 Feb 2026 02:52:41 -0600 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DFLE211.ent.ti.com (10.64.6.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 5 Feb 2026 02:52:41 -0600 Received: from uda0543015.dhcp.ti.com (uda0543015.dhcp.ti.com [10.24.69.9]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 6158qZ9f3129808; Thu, 5 Feb 2026 02:52:36 -0600 From: Abhash Kumar Jha To: , , , , , , , , , CC: , , , , , , , Subject: [PATCH v2] drm/bridge: cdns-mhdp8546: Add suspend resume support to the bridge driver Date: Thu, 5 Feb 2026 14:22:33 +0530 Message-ID: <20260205085233.81678-1-a-kumar2@ti.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF000044AC:EE_|PH7PR10MB6225:EE_ X-MS-Office365-Filtering-Correlation-Id: c90bea44-61c2-4ade-b77c-08de6493efd6 X-LD-Processed: e5b49634-450b-4709-8abb-1e2b19b982b7,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|82310400026|7416014|376014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sdJCw9VC8lK+uCQ5yEmkVOBnEJcpOIWFObfaStM4eFhQE+6PwPiZZxqcxYLK?= =?us-ascii?Q?TwbajfS85t17a9TL8SnCDAUWbwTJc2BJAgvrPy7UlAAZbo+qV43nDp5+SF8v?= =?us-ascii?Q?N1WL+rOQWvQI8HVNmuB5RqSlxslmNDT2kz8Urz3wOPNhyhKNJp7TeNoXNgb8?= =?us-ascii?Q?uvW/kkJa9CcxLLi3uD/xPiCAKDInILlqebhRKVvkzIirKZmPRQBXNaC99cFt?= =?us-ascii?Q?HdEsjvgEKBg7fnISKNhzLfw8GiKDRm2TL6aZZKvQPWMxTZlrVaSnazRPiehK?= =?us-ascii?Q?6kvTI9ReRM+My/s8nFchugjY0Zr9aBcQ/RRnB9r7H2WykZoDHFjc8EZg5dH5?= =?us-ascii?Q?OQuBthKsetZf8PS8Vqb0smW9sthqNfc0TnW24thihgPo8y008vlp3TrSAOks?= =?us-ascii?Q?87K7Mxy7aLh3RJSStZK+dP/240MHUtM8V6GJ8fza24XmfGWPxj6xg8rBHkf0?= =?us-ascii?Q?dDaFKZAbDB+SxJ8/o+hxRNiOtMtaO8s3MSOgp001HnJnWu3RTqjePkQwm2TF?= =?us-ascii?Q?CPSuPHUp+SnTucImr6RpBhflBwEig3qWtoci4n1zA56TrFZOoq8IbKoKW1Nj?= =?us-ascii?Q?rIpJI9Nh6YbjNkayV7qkhaB7qb/2cIFVa+RbY4F/dZv9hRKZPIeZAYFqPOm4?= =?us-ascii?Q?uu9bA9QgKiA5yaFkvOzoF671dCsVk9NOf4SFuksw7QWuaRAyBBoWWh99JE6N?= =?us-ascii?Q?XgE+Kroh6v+qNiWKJUTkeueE6F5idLfjNzKPoIlf10VvGyPDus6H3ap4qlWo?= =?us-ascii?Q?R6zJIwuO/qoZJNzKdbtLxedzX0RAKp5490JkBpU3onN6RQislWEK2dPQqi1w?= =?us-ascii?Q?9jSh4lMeQCO51GBIaujfLEwqv0XBG5op2hD8cG+iz9BRF5eNK3r19rSPouqQ?= =?us-ascii?Q?/3Z8+dVZ3dIIYaM5ic1tQn5Zfhca65oxVOdlvgx4hjLo2JtznCUHLKJ8O+05?= =?us-ascii?Q?IGEqEzy7se9v7ZnmfPsnRDqUjieRqc2RW4t2lChFWUfqXyYb8C5lS5TM8Xh2?= =?us-ascii?Q?pVrvfws7ss/PJy9ReDw+e5zxkD0gQchTKSkV1JGnPFuKVdX+qE3zaejNaONK?= =?us-ascii?Q?oIwVBA7TRdD2lOBZvBh+AXw5mGIK6S1aA88WnHqV8sdQ5kKZKL1Bhc4ENOL9?= =?us-ascii?Q?QJAGRzPv+4N9Ia/9rjAPaskCmgPfgsdYeNllASDGv1SVU6ftWslK+j0ZQR+P?= =?us-ascii?Q?jvOiKiVKNyWp4v1U5yvG4Djm2ebIL53wMvEIhUkKZDW91dzRvNJEj91wJ8EA?= =?us-ascii?Q?JCycs5v/FWpV8lI4OEK9E2nWJKyOGEq5KC7IDccv3ZpZcApAKpQi1qGQX2/D?= =?us-ascii?Q?iBb5GsjYkMYmzEyZdNn8RjLtfHUgsuNNQYGboBuS9/bHPv6TVAw8EP6a+vY/?= =?us-ascii?Q?p12e9mR3atB++7Yw5vHvZaSs7WUBEJVbbsd1vSI3ZG1x2RNK+MAEb1OnUJVA?= =?us-ascii?Q?KvdAhwq4PZMN+5wukIQuWeZNFIrJAe5r394dOmLBaAg1nwPfANkSSmwwDzYG?= =?us-ascii?Q?J+uh6xnK4BwDIFuftxxX/MAomXYy2U1YbA727NA8OmciP8FCB6VEj9ooyzPW?= =?us-ascii?Q?/Egtq9s0MATinCWuVtS59e4blOLBRC5lloceOFNEWWV4BTTPasgmoRhzf/Ln?= =?us-ascii?Q?6d5io3z8Gxy3lCIEC05VAUpGEBN+VxSCR51Pb/5qMLv4k6dYpKg6BBGOGlv5?= =?us-ascii?Q?mjO7/gtVLELmAx0ImY7uCm4npJk=3D?= X-Forefront-Antispam-Report: CIP:198.47.21.195;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:flwvzet201.ext.ti.com;PTR:ErrorRetry;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(82310400026)(7416014)(376014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LLwssKJJb5MsgmgzAtjw8n7Massq7WiMaOHGotNjAy905utDGmK6sfFF5zScpl0xmVdqT5/6yPM+QsOtvvjPf5U/TMUTOpGGVVOhmzhiwF/NvhRitPq6Zr7fpiLZHzILlL0TB3ZGIRLr6dZWrQLwn6CQy/PBOalSKKBmrUwzZhIBMTUk7N3dOfcB0QNF5YvTmFiPsHRfYJSrHnBL91iVEs7ySFvaQQwFLERLR0llRAd+WLWv81Nd2Zzq1NSCgFqGnJh5Q8kgC5p2+pVidx583SvSdDCjL+s5+aoaOMd6S5lgxRFDZVGBpGUnMSFAbiIR6hWDX9y6FcCRfI+1xckpvZ/CrsmO8/iyQL4HhutY6D8CaL8plqF+2/LrrlH38dpTIV4PeUTg74uItEDyoWGKQpv6E+8Iu/YWge893afVnCkjZxH+o3CmsQ0YDJwW6lKI X-OriginatorOrg: ti.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2026 08:52:47.8861 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c90bea44-61c2-4ade-b77c-08de6493efd6 X-MS-Exchange-CrossTenant-Id: e5b49634-450b-4709-8abb-1e2b19b982b7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=e5b49634-450b-4709-8abb-1e2b19b982b7;Ip=[198.47.21.195];Helo=[flwvzet201.ext.ti.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF000044AC.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6225 Content-Type: text/plain; charset="utf-8" Add system suspend and resume hooks to the cdns-mhdp8546 bridge driver. While resuming we either load the firmware or activate it. Firmware is loaded only when resuming from a successful suspend-resume cycle. If resuming due to an aborted suspend, loading the firmware is not possible because the uCPU's IMEM is only accessible after a reset and the bridge has not gone through a reset in this case. Hence, Activate the firmware that is already loaded. Use GENPD_NOTIFY_OFF genpd_notifier to get the power domain status of the bridge and accordingly load the firmware. Additionally, introduce phy_power_off/on to control the power to the phy. Signed-off-by: Abhash Kumar Jha --- Changes in v2: - Fixed defined but not used [-Wunused-function] warning for suspend and re= sume calls. - Link to v1: https://lore.kernel.org/all/20260129112016.2448037-1-a-kumar2= @ti.com/ .../drm/bridge/cadence/cdns-mhdp8546-core.c | 136 +++++++++++++++++- .../drm/bridge/cadence/cdns-mhdp8546-core.h | 4 + 2 files changed, 139 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/= gpu/drm/bridge/cadence/cdns-mhdp8546-core.c index 38726ae1bf150..818eef1a57ffb 100644 --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include =20 @@ -2383,6 +2384,120 @@ static void cdns_mhdp_hpd_work(struct work_struct *= work) } } =20 +static int __maybe_unused cdns_mhdp_resume(struct device *dev) +{ + struct cdns_mhdp_device *mhdp =3D dev_get_drvdata(dev); + unsigned long rate; + int ret; + + ret =3D clk_prepare_enable(mhdp->clk); + if (ret) + return ret; + + rate =3D clk_get_rate(mhdp->clk); + writel(rate % 1000000, mhdp->regs + CDNS_SW_CLK_L); + writel(rate / 1000000, mhdp->regs + CDNS_SW_CLK_H); + writel(~0, mhdp->regs + CDNS_APB_INT_MASK); + + ret =3D phy_init(mhdp->phy); + if (ret) { + dev_err(mhdp->dev, "Failed to initialize PHY: %d\n", ret); + goto disable_clk; + } + ret =3D phy_power_on(mhdp->phy); + if (ret < 0) { + dev_err(mhdp->dev, "Failed to power on PHY: %d\n", ret); + goto error; + } + + if (mhdp->powered_off) { + ret =3D cdns_mhdp_load_firmware(mhdp); + if (ret) + goto phy_off; + + ret =3D wait_event_timeout(mhdp->fw_load_wq, + mhdp->hw_state =3D=3D MHDP_HW_READY, + msecs_to_jiffies(1000)); + if (ret =3D=3D 0) { + dev_err(mhdp->dev, "%s: Timeout waiting for fw loading\n", + __func__); + ret =3D -ETIMEDOUT; + goto phy_off; + } + } else { + ret =3D cdns_mhdp_set_firmware_active(mhdp, true); + if (ret) { + dev_err(mhdp->dev, "Failed to activate firmware (%pe)\n", ERR_PTR(ret)); + goto phy_off; + } + } + + return 0; + +phy_off: + phy_power_off(mhdp->phy); +error: + phy_exit(mhdp->phy); +disable_clk: + clk_disable_unprepare(mhdp->clk); + + return ret; +} + +static int __maybe_unused cdns_mhdp_suspend(struct device *dev) +{ + struct cdns_mhdp_device *mhdp =3D dev_get_drvdata(dev); + unsigned long timeout =3D msecs_to_jiffies(100); + int ret =3D 0; + + cancel_work_sync(&mhdp->hpd_work); + ret =3D wait_event_timeout(mhdp->fw_load_wq, + mhdp->hw_state =3D=3D MHDP_HW_READY, + timeout); + + spin_lock(&mhdp->start_lock); + if (mhdp->hw_state !=3D MHDP_HW_READY) { + spin_unlock(&mhdp->start_lock); + return -EINVAL; + } + mhdp->hw_state =3D MHDP_HW_STOPPED; + spin_unlock(&mhdp->start_lock); + + if (ret =3D=3D 0) { + dev_err(mhdp->dev, "%s: Timeout waiting for fw loading\n", __func__); + ret =3D -ETIMEDOUT; + goto error; + } else { + ret =3D cdns_mhdp_set_firmware_active(mhdp, false); + if (ret) { + dev_err(mhdp->dev, "Failed to stop firmware (%pe)\n", ERR_PTR(ret)); + goto error; + } + } + + phy_power_off(mhdp->phy); + phy_exit(mhdp->phy); + clk_disable_unprepare(mhdp->clk); + +error: + return ret; +} + +static int mhdp_pd_notifier_cb(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct cdns_mhdp_device *mhdp =3D container_of(nb, struct cdns_mhdp_devic= e, pd_nb); + + if (action =3D=3D GENPD_NOTIFY_OFF) + mhdp->powered_off =3D true; + + return 0; +} + +static const struct dev_pm_ops cdns_mhdp_pm_ops =3D { + SET_SYSTEM_SLEEP_PM_OPS(cdns_mhdp_suspend, cdns_mhdp_resume) +}; + static int cdns_mhdp_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -2494,6 +2609,11 @@ static int cdns_mhdp_probe(struct platform_device *p= dev) dev_err(mhdp->dev, "Failed to initialize PHY: %d\n", ret); goto plat_fini; } + ret =3D phy_power_on(mhdp->phy); + if (ret < 0) { + dev_err(mhdp->dev, "Failed to power on PHY: %d\n", ret); + goto phy_exit; + } =20 /* Initialize the work for modeset in case of link train failure */ INIT_WORK(&mhdp->modeset_retry_work, cdns_mhdp_modeset_retry_fn); @@ -2504,21 +2624,33 @@ static int cdns_mhdp_probe(struct platform_device *= pdev) =20 ret =3D cdns_mhdp_load_firmware(mhdp); if (ret) - goto phy_exit; + goto power_off; =20 if (mhdp->hdcp_supported) cdns_mhdp_hdcp_init(mhdp); =20 drm_bridge_add(&mhdp->bridge); =20 + mhdp->powered_off =3D false; + mhdp->pd_nb.notifier_call =3D mhdp_pd_notifier_cb; + ret =3D dev_pm_genpd_add_notifier(mhdp->dev, &mhdp->pd_nb); + if (ret) { + dev_err_probe(dev, ret, "failed to add power domain notifier\n"); + dev_pm_genpd_remove_notifier(mhdp->dev); + goto power_off; + } + return 0; =20 +power_off: + phy_power_off(mhdp->phy); phy_exit: phy_exit(mhdp->phy); plat_fini: if (mhdp->info && mhdp->info->ops && mhdp->info->ops->exit) mhdp->info->ops->exit(mhdp); runtime_put: + mhdp->powered_off =3D true; pm_runtime_put_sync(dev); pm_runtime_disable(dev); =20 @@ -2550,6 +2682,7 @@ static void cdns_mhdp_remove(struct platform_device *= pdev) ERR_PTR(ret)); } =20 + phy_power_off(mhdp->phy); phy_exit(mhdp->phy); =20 if (mhdp->info && mhdp->info->ops && mhdp->info->ops->exit) @@ -2581,6 +2714,7 @@ static struct platform_driver mhdp_driver =3D { .driver =3D { .name =3D "cdns-mhdp8546", .of_match_table =3D mhdp_ids, + .pm =3D &cdns_mhdp_pm_ops, }, .probe =3D cdns_mhdp_probe, .remove =3D cdns_mhdp_remove, diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h b/drivers/= gpu/drm/bridge/cadence/cdns-mhdp8546-core.h index bad2fc0c73066..b06dd5e44aafd 100644 --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h @@ -412,6 +412,10 @@ struct cdns_mhdp_device { =20 struct cdns_mhdp_hdcp hdcp; bool hdcp_supported; + + /* Power domain status notifier */ + struct notifier_block pd_nb; + bool powered_off; }; =20 #define connector_to_mhdp(x) container_of(x, struct cdns_mhdp_device, conn= ector) --=20 2.34.1