From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABFE938A726 for ; Wed, 24 Jun 2026 07:06:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782284770; cv=none; b=XppaHFkdf/hRxYqTDFIVjbKraUiDzJZoA1HZDM7ZhAJ/CGU20QbPG9ECqAdUHElKfVChVu6L4pi+raLz2r/Y7VHMVWR2C9dXizUaejj1tqUsh9W0PQh+8wRsdv6c6mSsp5AWRLtqzZ3macP6hK7WH7Sv7X76NyLyp4LivhbzJrk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782284770; c=relaxed/simple; bh=vO37nKWNggFQax7MCOi8c31bmHyC0P5Zcqzdh35oJXQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=IBCxZT91flf6EbnFyNnv6/jrZu0lKtzmaIZKIZxdGctSaEivVrse3d9VpJe/gDxWjiXVCvcmWBhSxG7kN1vFb7XwKttRHJt3CWG7TQLaWd9IPaFEDs84Wez/86r6U2ZSLUQTMUhgzxiDxBjNVaHsI4KEBZSFFVXSfwWlA9b6ufc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YeWUGPIA; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YeWUGPIA" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2c6b67d5fa1so3720535ad.2 for ; Wed, 24 Jun 2026 00:06:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782284769; x=1782889569; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=/E9Hk2LKss7XBEYuxylpcD6Bl9dpKGVhcdDLO/oIkQM=; b=YeWUGPIAGXdIul79lH5dDLHyk6klcT4fqQP3aVPxSvmXDO0hdoU59G8RmHQiBXyb+C FdF0dZAIdj/WIUUn7VRopqk5kypxYUCO2To+re7y2As4kmTxs8r3W5YTDfxm5Pn7RMNb CAg2d2+F4h2SIY1ZzXMDgTfUPZ4l/YYVFx4ijQ8yXlM4gF0GQmPM4BagH38zJpFjbrTn G0sFfvbhSluQ5XdXcNUj1h0aomWUB1TtQyXghCBZK4IAlQTmwsn5ltKMp7i222YtMK9/ QUOTxO0PAlGdoF0ouLMOthNvUj9gD/KrxZ5BLAp/vYvNMkwCMNIStNd9xArVwUtNkJKI StjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782284769; x=1782889569; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/E9Hk2LKss7XBEYuxylpcD6Bl9dpKGVhcdDLO/oIkQM=; b=anFvQ14X04f6c24PDxDn5bZ9PDRbW8yWJTJfq98w64yw1jj+pik2AwK++NU+o7KlWt thwVVtlfbQVLxWFYkP3/HLrKal7abfPL+qgT/WP7u4Oi+CjJeiEywZMJiztyjSwHJBJh 4mcHu7ca5j92cljBz5sXs6gszmPLr7sEH1rophg+mWFhE9+kH984ONH0c1OKCXYhOiJV tlgRsmSLc/4Kz8HKYHR2BiEns4YBptOLhty/74IH7I1fAu1yzfC8B6k8lmzhF274Vcye Lly5W6YTxUu8fYGVbhh2xpM+0UyssIvuP42idlhVkNap8Jnww9UEW4bzDXsKPQalt47m 3zZg== X-Forwarded-Encrypted: i=1; AHgh+RoEk5DmUl2Fh7BgDgo1YFXAPgxSZ01qZaJ6p0b//yzw7mR25Xa9upM8uE2emN5aDuxTHDBxGNFBCSHkeOM=@vger.kernel.org X-Gm-Message-State: AOJu0YwQCcGE5kLpqo5Ky02tmvcnUplHsHM7hImO7PNvbl+CunkfcVn9 zX2Tvjnk/ktfE0zd7t64gwDh8UwnilhUC0pZQbCSHyaNd6vlrnO2TUE= X-Gm-Gg: AfdE7ck9k5/17xmmAbTdJMhkKg+o2yWDBAvpRq060UQPE1wbQ6KiODY7rbGphBUHpYq FSbOPGfGMfNkc0Z1MGTLVrxoSYv0PNzArGECuFbY6OHp7nMfR8pIAOUFQn6D6HiE3EVF3qJaizX jNv2Qw9c0MvkXlT/MdZKsULTpvlBkXH6t6rvR808UItgg0mWTFfTVwtk0Mkz5LvB77RPJq9w4St tgJjZtjOg52mQu60xX13iVxQD8LklHk5/hNKWX0ZvitadL09XSAewk/KGCIAyTZHYxvHxtogQxO /RKV1OEmxeel7y6OAF8Y8PTjLko0iCp+r0K7T7tIbf5Dad15tQ8dVA981L+2Up2EodNq6xYd+74 B395emjHUPIJo5e7UuPETfec36vRrrLHs4HwKdJizDGE831TjsYvScz1EACw4HPuo9DwvA8B+NK 5sE0iwkUYSxXN0FIN6ZFtXn3AhucLZ87b1z+l3BWcFABfAQQ+4BrZbPFXPOr+21nq0czM/AGD+e Co= X-Received: by 2002:a17:903:3bc7:b0:2c4:608:167c with SMTP id d9443c01a7336-2c7c759693bmr65587045ad.6.1782284768917; Wed, 24 Jun 2026 00:06:08 -0700 (PDT) Received: from localhost.localdomain ([14.5.152.27]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c743bfdc97sm151451845ad.65.2026.06.24.00.06.06 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 24 Jun 2026 00:06:08 -0700 (PDT) From: Myeonghun Pak To: Michael Turquette , Stephen Boyd Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Myeonghun Pak , Ijae Kim Subject: [PATCH v2] clk: palmas: Balance external-control clock prepare Date: Wed, 24 Jun 2026 16:05:42 +0900 Message-ID: <20260624070602.10328-1-mhun512@gmail.com> X-Mailer: git-send-email 2.47.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit palmas_clks_init_configure() prepares the clock when an external control pin is configured. The current driver only drops that prepare reference when external control configuration fails. If provider registration fails after that point, or if the driver is later removed, the prepare reference remains held. Use devm_add_action_or_reset() to manage the prepare reference. Use devm_of_clk_add_hw_provider() to manage provider registration. This balances the prepare reference on probe failure and driver removal. Fixes: 942d1d674931 ("clk: Add driver for Palmas clk32kg and clk32kgaudio clocks") Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak --- Changes in v2: - Use devm_of_clk_add_hw_provider() for provider cleanup. - Manage the external-control clk_prepare() with devm_add_action_or_reset(). - Remove the manual provider remove callback. drivers/clk/clk-palmas.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/clk/clk-palmas.c b/drivers/clk/clk-palmas.c index 39049f62db..fdbf8445eb 100644 --- a/drivers/clk/clk-palmas.c +++ b/drivers/clk/clk-palmas.c @@ -194,6 +194,13 @@ static void palmas_clks_get_clk_data(struct platform_device *pdev, cinfo->ext_control_pin = prop; } +static void palmas_clks_unprepare_ext_control(void *data) +{ + struct palmas_clock_info *cinfo = data; + + clk_unprepare(cinfo->hw.clk); +} + static int palmas_clks_init_configure(struct palmas_clock_info *cinfo) { int ret; @@ -214,13 +221,18 @@ static int palmas_clks_init_configure(struct palmas_clock_info *cinfo) return ret; } + ret = devm_add_action_or_reset(cinfo->dev, + palmas_clks_unprepare_ext_control, + cinfo); + if (ret) + return ret; + ret = palmas_ext_control_req_config(cinfo->palmas, cinfo->clk_desc->sleep_reqstr_id, cinfo->ext_control_pin, true); if (ret < 0) { dev_err(cinfo->dev, "Ext config for %s failed, %d\n", cinfo->clk_desc->clk_name, ret); - clk_unprepare(cinfo->hw.clk); return ret; } } @@ -230,7 +242,6 @@ static int palmas_clks_init_configure(struct palmas_clock_info *cinfo) static int palmas_clks_probe(struct platform_device *pdev) { struct palmas *palmas = dev_get_drvdata(pdev->dev.parent); - struct device_node *node = pdev->dev.of_node; const struct palmas_clks_of_match_data *match_data; struct palmas_clock_info *cinfo; int ret; @@ -264,24 +275,19 @@ static int palmas_clks_probe(struct platform_device *pdev) return ret; } - ret = of_clk_add_hw_provider(node, of_clk_hw_simple_get, &cinfo->hw); + ret = devm_of_clk_add_hw_provider(&pdev->dev, of_clk_hw_simple_get, + &cinfo->hw); if (ret < 0) dev_err(&pdev->dev, "Fail to add clock driver, %d\n", ret); return ret; } -static void palmas_clks_remove(struct platform_device *pdev) -{ - of_clk_del_provider(pdev->dev.of_node); -} - static struct platform_driver palmas_clks_driver = { .driver = { .name = "palmas-clk", .of_match_table = palmas_clks_of_match, }, .probe = palmas_clks_probe, - .remove = palmas_clks_remove, }; module_platform_driver(palmas_clks_driver); -- 2.47.1